全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4021 6
2013-10-09
现在有60个2×2的列联表,每一个列联表都要计算出它的Fisher p值,有木有办法一次性输入数据就能就算出对应的60个fisher p值?提前谢过了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-10-9 13:06:57
# 假设数据框dt中存放了60个表格的数据,此处仅以10个表格为例

dt
    a  b  c  d
1   5  5  5 15
2   4 14  5 10
3  16 18 13 20
4  15  6 10 18
5  11  3 10 16
6   2  7  2  5
7  19 13 17  2
8  14 14 18  4
9  13 16 11 10
10 19 12  7  4

for (i in 1:10) {
  tbdata=matrix(as.integer(dt[i,]),nrow=2,byrow=T)
  print(fisher.test(tbdata)$p.value)
}

[1] 0.2307992
[1] 0.696754
[1] 0.6242509
[1] 0.02086171
[1] 0.02187766
[1] 1
[1] 0.02838429
[1] 0.03646188
[1] 0.7749361
[1] 1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-9 14:30:07
非常感谢啊~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-10 15:54:44
再贪心一哈啊~:使用上面的方法一次性计算出60个Fisher p值后,再有没有简洁的方法一次性将这60个p值进行负对数转换(negative log-transformation)而得出各自的转换值(比如以e为底数)呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-10 16:51:40
# 稍稍修改一下上面的计算程序即可。

pv=numeric();lpv=numeric()            # 初始化结果向量
for (i in 1:10) {
  tbdata=matrix(as.integer(dt[i,]),nrow=2,byrow=T)
  pv[i]=fisher.test(tbdata)$p.value;lpv[i]=-log(pv[i])
}
cbind(pv,lpv)

输出
              pv       lpv
[1,] 0.23079919 1.4662073
[2,] 0.69675397 0.3613229
[3,] 0.62425086 0.4712030
[4,] 0.02086171 3.8698401
[5,] 0.02187766 3.8222892
[6,] 1.00000000 0.0000000
[7,] 0.02838429 3.5619194
[8,] 0.03646188 3.3114879
[9,] 0.77493610 0.2549747
[10,] 1.00000000 0.0000000
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-10-10 19:32:39
那是非常地感谢啊~~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群