R:如何制作一个MCMCglmm循环

时间:2014-06-29 15:39:02

标签: r loops glm

我想通过从数据中确定系统发育信号来转换我的基因表达数据。我用R包MCMCglmm。 我可以将MCMCglmm应用于表达式列之一:

require(ape)
library("MCMCglmm")
expr1 <- c(5,6,5, 11,12,13, 32,33,36)
expr2 <- c(1100,1212,1333, 32,33,36, 34, 38, 49)
expr3 <- c(32,33,36, 110,120,130, 320,330,360)
animal <- seq.int(9)
popGroup <- c(rep('A', 3),rep('B', 3), rep('C', 3))
data <- as.data.frame(cbind(expr1, expr2, expr3, animal, popGroup))
class(data$expr1)<-'integer'
class(data$expr3)<-'integer'
class(data$expr2)<-'integer'

# tree file content:
# (((1:2.0,(2:1.0,3:1.0):1.0):3.0,((4:1.0,5:1.0):1.0,6:2.0):3.0):3.0,(7:2.0,(8:1.0,9:1.0):1.0):6.0);
tree <- read.tree("tree.nwk")

prior<-list(R=list(V=1, nu=1), G=list(G1=list(V=1, nu=1)))
summary(MCMCglmm(expr1~popGroup-1, random=~animal, pedigree=tree, data=data, family="poisson", prior = prior))

但我有超过20000个这样的专栏。所以,我的想法是遍历所有这些:

for (i in 1:3) {
  M <- ( (colnames(data)[i]~popGroup-1, random=~animal, pedigree=tree, data=data, family="poisson", prior = prior))
  summM <- summary(M)
  statM <- summM$statistics[,1:2]
  print(statM)
}

问题在于在循环中定义响应变量。我尝试了很多方法,但都没有。

1 个答案:

答案 0 :(得分:2)

这是来自MCMCglmm包的作者Jarrod Hadfield的解决方案:

  

不幸的是,MCMCglmm与glm的工作方式略有不同   定义响应变量。你能做的是:

     
    

fixed&lt; -as.formula(paste(colnames(data)[i],“~popGroup-1”,sep =“”))

         

MCMCglmm(固定=固定,......)

  

该脚本现在可以使用。