首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有复制的R中执行2样本t检验

在带有复制的R中执行2样本t检验
EN

Stack Overflow用户
提问于 2018-04-17 00:35:59
回答 2查看 1.2K关注 0票数 0

我在R中有一个数据name名称R_alltemp,有6列,2组数据,每个重复3次。我试图对前三个值和最后三个值之间的每一行执行t测试,并使用(),这样它就可以用一行遍历所有行。这是到目前为止使用的代码im。

代码语言:javascript
复制
R_alltemp$p.value<-apply(R_all3,1, function (x) t.test(x(R_alltemp[,1:3]), x(R_alltemp[,4:6]))$p.value)

这是表的快照

代码语言:javascript
复制
    R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975  p.value
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634

它的功能,但p值我只是从眼睛得到它似乎是错误的。例如,在第一行中,第一组的平均值远低于第二组,但我的p值仅为.4。

我觉得我错过了一些很明显的东西,但我和它斗争的时间比我想象的长得多。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-17 00:59:13

你的代码不正确。实际上我不明白为什么它不返回一个错误。特别是这一部分:x(R_alltemp[,1:3])应该是x[1:3]

这应该是您的代码:

代码语言:javascript
复制
R_alltemp$p.value2 <- apply(R_alltemp, 1, function(x) t.test(x[1:3], x[4:6])$p.value)

   R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975   p.value    p.value2
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160 0.010595829
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493 0.044883436
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634 0.002853154

请记住,通过指定1,您将告诉apply获取列。因此,function(x)返回与此等价的内容:x <- c(13.587632, 22.225083, 15.074230, 58.187465, 79, 82.287573),这意味着您希望通过x[1:3]对前三个值进行子集,然后再用最后三个x[4:6],并将t.test应用于它们。

在使用apply之前,一个好主意是手动测试函数,因此如果您确实得到了这样的奇怪结果,您就会知道代码出了问题。

票数 2
EN

Stack Overflow用户

发布于 2018-04-17 00:57:19

因此,第一行的两尾p值应该是:

代码语言:javascript
复制
> g1 <- c(13.587632,  22.225083,  15.074230)
> g2 <- c(58.187465, 79, 82.287573)
> t.test(g1,g2)$p.value
[1] 0.01059583

在所有行中应用该函数(我将新的p-val标记为pval )。

代码语言:javascript
复制
> tt$pval <- apply(tt,1,function(x) t.test(x[1:3],x[4:6])$p.value)
> tt
   R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975   p.value        pval
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160 0.010595829
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493 0.044883436
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634 0.002853154

也许是函数中数据帧名称的双重使用(您不需要)?

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

https://stackoverflow.com/questions/49868117

复制
相关文章

相似问题

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