楼主: chris1998
4057 6

[实际应用] 多个列联表一次性计算出Fisher p值 [推广有奖]

  • 5关注
  • 7粉丝

已卖:2542份资源

讲师

44%

还不是VIP/贵宾

-

威望
0
论坛币
124770 个
通用积分
15.2783
学术水平
44 点
热心指数
54 点
信用等级
43 点
经验
2633 点
帖子
524
精华
0
在线时间
456 小时
注册时间
2011-5-29
最后登录
2025-7-28

楼主
chris1998 发表于 2013-10-9 10:49:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在有60个2×2的列联表,每一个列联表都要计算出它的Fisher p值,有木有办法一次性输入数据就能就算出对应的60个fisher p值?提前谢过了!
二维码

扫码加我 拉你入群

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

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

关键词:Fisher Fish 列联表 SHE fis

回帖推荐

lanyajia 发表于5楼  查看完整内容

# 稍稍修改一下上面的计算程序即可。 pv=numeric();lpv=numeric() # 初始化结果向量 for (i in 1:10) { tbdata=matrix(as.integer(dt),nrow=2,byrow=T) pv=fisher.test(tbdata)$p.value;lpv=-log(pv) } 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 ...

lanyajia 发表于2楼  查看完整内容

# 假设数据框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),nrow=2,byrow=T) print(fisher.test(tbdata)$p.value) } [1] 0.2307992 [1] 0.696754 [1] 0.6242509 [1 ...

沙发
lanyajia 发表于 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

藤椅
chris1998 发表于 2013-10-9 14:30:07
非常感谢啊~

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

报纸
lanyajia 发表于 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

地板
chris1998 发表于 2013-10-10 19:32:39
那是非常地感谢啊~~~

7
727389758 发表于 2016-5-11 15:35:31
你好,我想知道如果2*2联表出现三个0的情况时,p value=1,但是这种情况是我认为有差异的情况,要怎么要处理呢?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 11:30