使用已知平均值计算标准差

使用已知平均值计算标准差

我有很多两列文件。第一列包含变量数字,而第二列包含这些数字的“真实”值。
IE

file 1
41619.442 41586.441
41474.2539 41586.441
41587.539062 41586.441
41623.996094 41586.441

如何根据第 2 列计算第 1 列的标准差?我尝试修改常见的:

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

要得到

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

但没有好的结果。

答案1

首先,请注意示例中的第 2 列不是样本表示文件中的数据。如果这是正确的平均值真的分布,则标准差为:

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

这里,变量ssq是与真实平均值的偏差的平方和。

上述程序实现了标准差的公式:

在此输入图像描述

其中 mu (μ) 是个真的意思是。

术语

我所说的真的平均值有时被称为人口平均值,意味着如果理论上拥有整个总体,而不仅仅是该总体的某些样本,则可以计算出的平均值。

答案2

对于此类问题,请看一下datamash

datamash -W pstdev 1 < file1

在许多其他功能之间,在 datamash 中,您有一个

  • pstdev 1= 第 1 列的总体标准差
  • sstdev 1= 第 1 列的样本标准差

相关内容