Desvio padrão de computação com uma média conhecida

0

Eu tenho muitos arquivos de duas colunas. A coluna 1 contém números variáveis, enquanto a coluna dois contém os "verdadeiros" desses números.
ou seja,

file 1
41619.442 41586.441
41474.2539 41586.441
41587.539062 41586.441
41623.996094 41586.441

Como posso calcular o desvio padrão da coluna 1 com base na coluna 2? Eu tentei modificar o comum:

awk '{delta = $1 - avg; avg += delta / NR; mean2 += delta * ($1 - avg); } END { print sqrt(mean2 / NR); }'

para obter

awk '{a=$2}{delta = $1 - a; a += delta / NR; a*2 += delta * ($1 - a); } END { print sqrt(a*2 / NR); }' 11978.08984 >> test1.txt

mas sem bons resultados.

    
por ixel 08.07.2016 / 20:51

2 respostas

4

Primeiro, observe que a coluna 2 nos exemplos não é a média sample para os dados nos arquivos. Se é a média correta para a distribuição true , o desvio padrão é:

$ awk '{ssq+=($1 - $2)**2} END { print sqrt(ssq / NR); }' file1a
61.4138

Aqui, a variável ssq é a soma dos quadrados dos desvios da média verdadeira.

O programa acima implementa a fórmula para o desvio padrão:

onde mu ( μ ) é a média true .

Terminologia

O que eu estou me referindo como a média true é às vezes chamada de população , significando a média que seria computada se alguém teoricamente tivesse toda a população, não apenas alguma amostra dessa população.

    
por 08.07.2016 / 21:03
1

para esse tipo de problema, dê uma olhada em datamash :

datamash -W pstdev 1 < file1

Entre muitas outras funções, em datamash você tem um

  • pstdev 1 = desvio padrão da população da coluna 1
  • sstdev 1 = desvio padrão da amostra da coluna 1
por 22.01.2017 / 13:27

Tags