2016-02-24 3 views
0

У меня есть степень свободы и среднего. Мне нужно было бы рассчитать стандартное отклонение.расчет отклонения

Любая помощь очень ценится.

+0

Первое предложение было бы прояснить ваш вопрос, определить, где ваш поступают данные и как они выглядят. Также я не уверен, насколько хорошо подходит awk для статистики, хотя я очень люблю его для обработки текста. Вы считали ** R **? – tink

+0

Или любой язык программирования, который не предназначен исключительно для текста: Ruby, Perl, Python все входят в стандартную комплектацию большинства дистрибутивов Linux в наши дни. Кроме того, я не очень разбираюсь в статистике, но t-статистика, вероятно, не является «сложной математической задачей», если у вас есть все необходимые ей входы. – Amadan

+0

Что такое доверительный интервал для вашей t-статистики? Не то, чтобы я статистик =} – tink

ответ

0

Все еще не на 100% уверены, что вы пытаетесь сделать, но вот одна попытка (использование диапазона 95% для t-статистики) ... У меня есть только один файл (это 3 элемента вы вставили), и это называется stats1. Я извлекая соответствующее поле из файла (ов) с использованием AWK, и бросить его на R.

awk -F'>' '$1 ~/Overall/{print $2}' stats* | Rscript -e 'qt(0.975, as.numeric (readLines ("stdin"))) ' 
[1] 2.940089 2.776445 12.706205 
0

Используя некоторые обработки текста или инструмент данных пререканий в сочетании со статистическим пакетом, такими как R, безусловно, делает (в частности, вы можете использовать R's t.test(VECTOR, MU)), но awk, безусловно, соответствует задаче и может даже иметь определенные преимущества. Во всяком случае, я добавил сценарий (bash), который ожидает, что его ввод будет иметь одно наблюдение данных в каждой строке и испустит строку, как описано в документации «Справка» сценария.

Здесь для сравнения являются выписка из вывода с помощью t.test() и запустить с помощью сценария (т-тест):

$ R 
> t.test(c(1,2,3), mu=0) 
    One Sample t-test 
t = 3.4641, df = 2, p-value = 0.07418 
alternative hypothesis: true mean is not equal to 0 
95 percent confidence interval: 
-0.4841377 4.4841377 

$ (echo 1; echo 2; echo 3) | t-stat 
3 2 0.666667 3.4641 
#!/bin/bash 
# USE AT YOUR OWN RISK 
# For help: $0 --help 
VERSION=0.1.1 

# Requires: awk 

BN=$(basename "$0") 

function help { 
cat <<EOF 
Syntax: $0 [n1 [FILE]] 

Compute the sample mean, the sample variance, and the t-statistic for 
the array of numbers in column n1 of the input, where n1 defaults to 1, 
and FILE defaults to STDIN. 

The output consists of a single line of four values: 

n mean variance t 

where "n" is the sample size (possibly 0), 
     "mean" is the sample mean, 
     "variance" is the average of the squared deviations from the mean, and 
     "t" is the sample t-statistic, computed as 
      mean * sqrt(n * ss/(n-1)); 

If a statistic cannot be computed, an asterisk (*) is used in its place. 

If the value in the specified field in the input is null or 
non-numeric, it is ignored. 

If a file is specified as "-" then STDIN is read. 

Example: 

$BN <<< $'1\n2\n3' 
3 2 2 3.4641 

EOF 
} 

function die  { echo "$BN: [email protected]" >&2 ; exit 1 ; } 

case "$1" in 
    -h | --help) 
    help 
    exit 
    ;; 
    -v | --verbose) 
    VERBOSE=1 
    shift 
    ;; 
esac 

# Default: 

file=- 

if [ $# = 0 ] ; then 
    f1=1 
elif [ "$1" = - ] ; then 
    f1=1 
else 
    f1="$1" 
    shift 
    check=`expr "$f1" : "\([0-9]*\)"` 
    if [ "$f1" != "$check" ] ; then die a non-numeric field was specified ; fi 
fi 

if [ $# != 0 ] ; then file="$1" ; fi 

awk -v verbose="$VERBOSE" -v f1="$f1" ' 
    BEGIN { a1=0; s1=0; n=0; } 
    NF < f1 { next } 
    $f1 == "" || ($f1+0 != $f1) { next } 
    { n++; a1 += $f1; s1 += $f1*$f1; } 

    END { 
    s="*"; 
    if (n == 0) {print 0, s, s, s; exit } 
    avg = a1/n; 
    var = s1/n - avg*avg; 
    if (var == 0) { print n, avg, var, s; exit} 
    tstat = avg * sqrt((n-1)/var); 
    print n, avg, var, tstat; 
    } ' "$file" 
Смежные вопросы