将循环合并到metafor::rma()中

将循环合并到metafor::rma()中,r,loops,bioinformatics,R,Loops,Bioinformatics,我有两个队列,所以我对每个队列分别进行了线性回归,并使用了for循环,这样我的系数就可以保存在每个队列中。我现在想得到一个合并的估计值,但是我有53个SNP,所以我不想手工输入所有的系数。有没有办法在metafor的rma命令中使用for循环 到目前为止,我认为将两个系数文件合并在一起可能是最容易的。我称之为科夫斯。第一列有SNP名称,第二列和第六列分别有来自队列1和队列2的Beta,第3列和第7列有来自两个队列的标准错误 所以我想做一个beta项目,包括我的beta来自队列1和队列2每1个SN

我有两个队列,所以我对每个队列分别进行了线性回归,并使用了for循环,这样我的系数就可以保存在每个队列中。我现在想得到一个合并的估计值,但是我有53个SNP,所以我不想手工输入所有的系数。有没有办法在metafor的rma命令中使用for循环

到目前为止,我认为将两个系数文件合并在一起可能是最容易的。我称之为科夫斯。第一列有SNP名称,第二列和第六列分别有来自队列1和队列2的Beta,第3列和第7列有来自两个队列的标准错误

所以我想做一个beta项目,包括我的beta来自队列1和队列2每1个SNP。那么se也有同样的想法。然后我希望每个SNP有一个rma(beta,se),这样我就可以将结果导出到excel

到目前为止,我想做以下几件事(但不起作用)


output3你说它不工作,但你没有说具体是什么。我认为你缺少的是保存结果的东西。类似于列表或data.frame。变量
pool
在循环的每次迭代中都会更新,因此循环完成后,它将只包含最后一个模型。此外,索引与示例data.frame不匹配,因为您所指的是不存在的第6列和第7列。但我想它们确实存在于你的实际数据框架中。另外,示例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

output3我发现了我的错误,我的问题是我忘了告诉R我需要哪些数据行以及需要保存到哪里

对于其他有这个问题的人,这里是我的脚本,它起作用了。我首先创建了data.frame,希望在其中保存数据

output3 <- data.frame(matrix(nrow=84,ncol=3))
names(output3)=c("Pooled Estimate", "Pooled Std.Error", "P-value")

output3小心:
rma()
函数的第二个参数用于采样方差,而不是标准误差。因此,您应该使用
rma(beta,sei=se)
。或者你可以做
rma(beta,se^2)
。SNP是一种遗传变异,感谢Wolfgang,我没有意识到这一点!谢谢@vanao Veneri,但不幸的是,这不起作用。我更新了我的帖子,更好地描述了这个问题。我想我提取的rma输出不正确。我希望每个SNP的估计值,标准误差和p值(所以列1,2和4)被保存。。。目前我不确定我在保存什么,但它与此无关,所有内容都进入Output3的第三列,您也可以保存
result.list[l]
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(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]
}