楼主: 大肚子鳄鱼
7387 7

[问答] 批量计算T检验的p值 [推广有奖]

  • 0关注
  • 0粉丝

大专生

41%

还不是VIP/贵宾

-

威望
0
论坛币
19 个
通用积分
3.0044
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
919 点
帖子
33
精华
0
在线时间
17 小时
注册时间
2019-8-29
最后登录
2021-3-21

楼主
大肚子鳄鱼 发表于 2019-9-27 20:45:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
背景:
一个生物的数据
行:各个基因
第一列和第二列:对照组(两个重复)
第三列到第五列:处理组(三个重复)
用来计算各个基因的p值,我写了一个循环,但是算出来的结果p值是完全一致的

定义数据为dat
for (i in 1:nrow(dat)){
  if(sd(dat[i,1:2]) == 0 & sd(dat[i,3:5]) == 0){
    pvals <- "NA"  ##p值为NA
    }
  else{
    t_test = t.test(as.numeric(dat[i,1:2]), as.numeric(dat[i,3:5]))
    pvals <- t_test$p.value
  }
}


但是,单独运行t.test(as.numeric(dat[i,1:2]), as.numeric(dat[i,3:5]))代码,就能计算出不同的p值

我是哪里写错了啊
二维码

扫码加我 拉你入群

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

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

关键词:t检验 vals For PVA 对照组

沙发
大肚子鳄鱼 发表于 2019-9-29 08:11:27
有没有哪位大神知道代码哪里写错了啊

藤椅
dbcoffee 发表于 2019-9-29 21:35:08 来自手机
大肚子鳄鱼 发表于 2019-9-27 20:45
背景:
一个生物的数据
行:各个基因
for (i in 1:nrow(dat)){<br>
  if(sd(dat[i,1:2]) == 0 &amp; sd(dat[i,3:5]) == 0){<br>
    pvals &lt;- \"NA\"  ##p值为NA<br>
    }<br>
  else{<br>
    t_test = t.test(as.numeric(dat[i,1:2]), as.numeric(dat[i,3:5]))<br>
    pvals &lt;- t_test$p.value<br>
    print(pvals)<br>
  }<br>
}<br>
你最后一行的变量在循环中重复赋值,在循环的最后加一个print看看打印出来的结果是否都一样(试试上面的代码)。

板凳
熬夜头会秃 发表于 2019-10-1 04:22:25 来自手机
大肚子鳄鱼 发表于 2019-9-27 20:45
背景:
一个生物的数据
行:各个基因
楼主要不上传一下报错的截图?感觉是判断条件的问题,且应该改成或。还有就是。。。加起来只有五个观测的数据,能用t检验吗?是不是应该改用秩和检验。。(虽然感觉怎么做检验都不对,样本量实在太少了。。

报纸
大肚子鳄鱼 发表于 2019-10-16 16:49:28
dbcoffee 发表于 2019-9-29 21:35
for (i in 1:nrow(dat)){
  if(sd(dat) == 0 &amp; sd(dat) == 0){
    pvals &lt;- \"NA\"  ##p值为NA
感谢大神~~~~~~

地板
大肚子鳄鱼 发表于 2019-10-16 16:50:39
熬夜头会秃 发表于 2019-10-1 04:22
楼主要不上传一下报错的截图?感觉是判断条件的问题,且应该改成或。还有就是。。。加起来只有五个观测的 ...
没有报错,就是算出来的值全都是一样的,尴尬~~~
看来是赋值的问题

7
2018-8-17 发表于 2019-12-30 16:23:19
这么麻烦,使用apply,一行代码搞定
pvalue=apply(dat,1,function(x) t.test(x[1:2],x[3:5],paired = F)$p.value)

8
gongliansy 发表于 2020-8-7 01:09:50
改成如下这样就行了,主要改动思路就是先给pvals赋一个空值,然后最后pvals做成一个不断添加p值的向量,这样就会有每一次的p值显示了
———————————————————分割线————————————————————



pvals <- NULL  ##给pvals赋一个空值
for (i in 1:nrow(dat)){
  if(sd(dat[i,1:2]) == 0 & sd(dat[i,3:5]) == 0){
    pvals <- "NA"  ##p值为NA
    }
  else{
    t_test = t.test(as.numeric(dat[i,1:2]), as.numeric(dat[i,3:5]))
    pvals <-c(pvals, t_test$p.value) ##将每一次循环所得p值往pvals这个向量里填充
  }  
}
pvals ##显示p值的向量

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-29 16:31