我想使用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值<1的错误。 0.005并且如果错误具有p值> 0.005然后我们会拒绝它。
我无法想到在shell中执行此操作的任何方法。任何人都可以帮助/建议我吗?
欲望输出类似于:
outfile.txt
1 99999
2 0.400
3 0.200
4 0.200
6 99999
在这里,我假设在1%的水平上显示1个错误的概率在统计上并不显着,但显示2个错误的概率在统计上是显着的,等等。
答案 0 :(得分:0)
由于没有统计学教育或gnuplot经验,因此要完全解读所需的解决方案方法有点困难。这个问题可能没有得到很好的描述,或者我的知识装备不足。
无论哪种方式,在查看所呈现的数据与所需输出之间的关系之后,我想出了这个Awk脚本来实现它:
Int
这假定$ 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
(10000(观察次数) - 1(错误))是指所需输出中第1行和第5行中的第二个字段,而不是9999
。
此外,如果使用GNU Awk,使用sort function 99999
可以消除对sort
管道的需求。