首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定shell中的统计显著性

如何确定shell中的统计显著性
EN

Stack Overflow用户
提问于 2015-08-05 12:45:12
回答 1查看 166关注 0票数 1

我想使用shell脚本来确定我的结果的统计意义。我的输入文件显示了10000个观察值中每个试验中的错误数量。它的一部分如下所示:(使用至少有1个错误的阈值)

代码语言:javascript
运行
复制
ifile.txt
1
2
2
4
1
3
2
3
4
2
3
4
2
6
2

然后,我计算了每个编号错误的概率,计算公式为:

代码语言:javascript
运行
复制
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中的第一列显示错误的数量,第二列显示错误的概率

代码语言:javascript
运行
复制
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输出类似于:

代码语言:javascript
运行
复制
outfile.txt
1 99999  
2 0.400
3 0.200
4 0.200
6 99999

这里,我假设在1%的水平上显示1个错误的概率在统计上不显著,但显示2个错误的概率在统计上显著,依此类推。

EN

回答 1

Stack Overflow用户

发布于 2015-08-06 17:42:06

由于没有统计知识或gnuplot经验,要准确地破译解决方案所需的方法有点困难。这个问题可能描述得不够好,或者我的知识不足以应对它。

无论哪种方式,在查看了所显示的数据和所需输出之间的关系之后,我想出了这个Awk脚本来实现它:

代码语言:javascript
运行
复制
$ 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管道的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31823608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档