如何确定shell

时间:2015-08-05 04:45:12

标签: shell unix awk statistics gnuplot

我想使用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个错误的概率在统计上是显着的,等等。

1 个答案:

答案 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管道的需求。