我想使用shell脚本来确定我的结果的统计意义。我的输入文件显示了10000个观察值中每个试验中的错误数量。它的一部分如下所示:(使用至少有1个错误的阈值)
ifile.txt
1
2
2
4
1
3
2
3
4
2
3
4
2
6
2
然后,我计算了每个编号错误的概率,计算公式为:
awk '{ count[$0]++; total++ }
END { for(i in count) printf("%d %.3f\n", i, count[i]/total) }' ifile.txt | sort -n > ofile.txt
其中,ofile.txt中的第一列显示错误的数量,第二列显示错误的概率
ofile.txt
1 0.133
2 0.400
3 0.200
4 0.200
6 0.067
现在我需要确定这个结果的统计意义,例如,突出显示那些在1%水平上不具有统计意义的结果。也就是说,我们将接受那些p值< 0.005的错误,如果错误的p值> 0.005,那么我们将拒绝它。
我想不出在shell中有什么方法可以做到这一点。有人能帮我/给我提点建议吗?
Desire输出类似于:
outfile.txt
1 99999
2 0.400
3 0.200
4 0.200
6 99999
这里,我假设在1%的水平上显示1个错误的概率在统计上不显著,但显示2个错误的概率在统计上显著,依此类推。
发布于 2015-08-06 17:42:06
由于没有统计知识或gnuplot经验,要准确地破译解决方案所需的方法有点困难。这个问题可能描述得不够好,或者我的知识不足以应对它。
无论哪种方式,在查看了所显示的数据和所需输出之间的关系之后,我想出了这个Awk脚本来实现它:
$ cat script.awk
function abs(v) { return v < 0 ? -v : v }
{ a[$0]++ }
END {
obs = 10000
sig = 1
for (i in a) {
r = a[i]/NR
if (abs(r-sig/10) <= sig/20)
print i, obs-sig
else
printf "%d %.3f\n", i, r
}
}
$ awk -f script.awk ifile.txt | sort > outfile.txt
$ cat outfile.txt
1 9999
2 0.400
3 0.200
4 0.200
6 9999
这假设9999
(10000 (观察次数)-1(误差))是作为所需输出中第一行和第五行的第二个字段,而不是99999
。
此外,如果使用GNU Awk,则可以通过使用sort function asorti
来消除对sort
管道的需求。
https://stackoverflow.com/questions/31823608
复制相似问题