我有两个队列,因此我每个队列分别进行线性回归并使用for循环,以便每个队列保存我的系数。我现在想要得到每SNP的汇总估计值,但我有53个SNP,所以不希望不必手动输入所有系数。有没有办法在metafor?
的rma命令中使用for循环到目前为止,我已经认为将两个系数文件合并在一起可能是最容易的。我打电话给这个系数。第一列具有SNP名称,第二列和第六列分别具有来自第1组和第2组的beta,第3列和第7列具有来自两个队列的标准错误。
所以我想制作一个项目 beta ,其中包括我的队列1的beta和队列2的1个SNP。那么与 se 相同的想法。然后,我希望每个SNP都有一个rma(beta,se),这样我就可以将结果导出为excel。
到目前为止,我想过要做以下事情(但它不起作用)
output3 <- data.frame(matrix(nrow=84,ncol=3))
names(output3)=c("Pooled Estimate", "Pooled Std.Error", "P-value")
for(l in 3:84){
beta <-c(output3[l,2], output3[l,6])
se <-c(output3[l,3], output3[l,7])
pool <- rma(beta,se)
}
当我运行rma时,我收到以下错误消息:
[[<-.data.frame
(*tmp*
,l,value = list(b = -0.105507438518734,:替换有70行,数据有84行
如果我将nrow改为70,那么我就不会得到这些信息。从rma输出我想要第二行和第1,2和4列。我认为这在某处出错了。
答案 0 :(得分:1)
我弄清楚了我的错误,我的问题是我忘了告诉R我需要哪些数据线以及需要保存到哪里。
对于有这个问题的其他人,这是我的脚本工作。我首先创建了我想要保存数据的data.frame。
output3 <- data.frame(matrix(nrow=84,ncol=3))
names(output3)=c("Pooled Estimate", "Pooled Std.Error", "P-value")
接下来我做了一个for循环来从每个SNP中提取beta和s.e
for(l in 3:84){
beta <-c(coeffs[l,2], coeffs[l,6])
se <-c(coeffs[l,3], coeffs[l,7])
pool <- rma(beta,se^2)
z3 <- colnames(qcwomenc[1:84])
row.names(output3)<-z3
output3[l,1]<-coef(summary(pool))[1,1]
output3[l,2]<-coef(summary(pool))[1,2]
output3[l,3]<-coef(summary(pool))[1,4]
}
答案 1 :(得分:0)
你说它不起作用,但你没有说明究竟是什么。我认为您缺少的是保存结果的东西。像列表或data.frame。变量pool
在循环的每次迭代时都会更新,因此在循环完成后它将只包含最后一个模型。此外,您的索引与示例data.frame不匹配,因为您指的是不存在的第6列和第7列。但我想它们确实存在于您的实际data.frame中。此外,您的示例data.frame还包含NA
个值。也许尝试这样:
output3 <- data.frame(matrix(runif(84*4), nrow=84,ncol=4))
names(output3)=c("se1", "beta1", "se2", "beta2")
modellist <- list()
for(l in 3:84){
beta <-c(output3[l,2], output3[l,4])
se <-c(output3[l,1], output3[l,3])
pool <- sum(beta, se)
modellist[[l]] <- pool
}
modellist
注意,我使用sum
而不是你的rma(),因为我不知道这个函数,我不知道它来自哪个包。