首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多个自动生成的数据执行t.test?

对多个自动生成的数据执行t.test?
EN

Stack Overflow用户
提问于 2016-07-14 12:23:50
回答 1查看 106关注 0票数 0

我有241列和114行的df。列60:241是数值,如果我想根据变量组(T1和T2)进行配对t检验。对于一个单独的变量,我后来用reshape2 package命令和t.test成功地做到了这一点,但是如果我能够找到一个命令来自动完成所有182个变量的操作,这将节省我大量的手工工作。

我试着做一个简单的例子来说明我想要编写的代码:

代码语言:javascript
复制
> df
  PatientID Group Immvar1 Immvar2
1         1    T1       4       5
2         2    T1       7       8
3         2    T2       9      10
4         3    T1       2       3
5         3    T2       4       5
6         4    T1       1       2
7         4    T2       9      10

> df1 <- as.data.frame(acast(df$PatientID ~df$Group, data = df, fill=0, value.var=("Immvar1")))
> df1
  T1 T2
1  4  0
2  7  9
3  2  4
4  1  9
> t.test(df1$T1,df1$T2, paired=TRUE)

我已经构建的自动运行代码如下所示:

代码语言:javascript
复制
df2 <-df[,3:4]
modelList<-list()
for (i in 1:ncol(df2)) {
  matrix <- formula(paste("as.data.frame(acast(PatientID ~ Group , data = df1, fill=0, value.var=(", names(df2[i]),")))"))
  modelList[[i]] <-t.test(matrix$T1, matrix$T2, paired=TRUE)
}

但是,在运行以下命令时,总是会收到错误消息:

匹配错误(x,table,nomatch = 0L):找不到对象'Immvar1‘

也许我必须处理这个完全不同的方法,是模型列表/公式组合不适合这种操作。有人想办法让这件事成功吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 12:38:31

我认为您的公式/粘贴线是问题所在;您应该直接调用cast函数。( dcast将自动将其放入data.frame中。)如果没有一个可重复的例子,我无法测试这个例子,但是下面是一个猜测,它看起来会是什么样子。我还使用lapply负责簿记工作。

代码语言:javascript
复制
results <- lapply(names(df)[3:4], function(n) {
    matrix <- dcast(PatientID ~ Group, data = df, fill=0, value.var=n)
    t.test(matrix$T1, matrix$T2, paired=TRUE)
})

另外,您确定要用零填充缺失的行吗?通常,当某物缺失时,其价值是未知的。

您可能会考虑的其他避免先转换的事情是使用t.test的公式表示法(尽管它需要配对值来对齐,所以缺少值将是一个问题),或者使用双向Anova on Group和PatientID (这是等价的)。

为了收集测试结果,您需要从输出中收集所需的部分。运行str(tmp)unclass(tmp)来查看输出的实际情况。这是一个列表,因此您可以单独使用$收集所需的片段,也可以使用[将它们一起删除。要放入一个矩阵,您需要将它们放在一起,并且由于您想要重新绑定的元素已经在列表中,所以您可以使用rbind来完成这个任务。例如

代码语言:javascript
复制
tmp <- lapply(results, function(x) unlist(x[c("statistic", "parameter", 
                "p.value", "conf.int", "estimate")]))
as.data.frame(do.call(rbind, tmp))

Hadley Wickham的各种包提供了实现这种“拆分-应用-组合”的替代方法;如果我使用这些包,来自reshape2reshape2和来自plyrddply是可以使用的,但是像我们这里所做的那样使用基R并没有什么错。

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

https://stackoverflow.com/questions/38374103

复制
相关文章

相似问题

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