带有for循环的多元回归[r]

时间:2015-03-20 10:53:53

标签: r for-loop regression lm

您好我想在不同的条件下进行几次回归。我已经成功地做到了这一点但是当我得到所有系数的列表时,每当我使用多个级别因子时,级别的名称都会丢失。但是,如果我只使用一个因子名称,那么。

我想要的是在两个条件下计算所有参数,显然得到名称。我想通过循环来做到这一点,因为我的数据比这复杂得多。

library(bear)

 model<-function(A,mu) {
   A+mu*time
 }

mod  <- ln_rel.cc ~A+mu*time
rep<- c("r1","r2","r3","r4","r5")
Medium<-c("A","B")
time<-c(seq(from=0, to=39,by=1))
ln_rel.cc<-model(A=1,mu=0.4)
MedTest<-cbind(rep,Medium,time,ln_rel.cc )
MedTest<-data.frame(MedTest)
MedTest$time<-as.numeric(MedTest$time)
MedTest$ln_rel.cc<-as.numeric(MedTest$ln_rel.cc)
head(MedTest)
values<-NULL
##one factor regression
for(M in levels(MedTest$Medium)){


    values[M]<-list((summary(lm(ln_rel.cc ~time, MedTest[ MedTest$Medium==M ,]
    ))$coef))



}
values
values<-NULL
##Two factors regression

for(M in levels(MedTest$Medium)){

  for (R in levels(MedTest$rep)){

    values[M[R]]<-list((summary(lm(ln_rel.cc ~time, MedTest[MedTest$rep==R & MedTest$Medium==M ,]
                                     ))$coef))


  }
}
values

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我找到了回答这个问题的方法!!

生成一些空载体

values<-NULL
mutation<-NULL
Inoc.size<-NULL
rep<-NULL

创建一个包含三个级别和三个独立向量的for循环,其中存储每个循环使用的变量

library(grofit)
for(M in levels(Datos$mutation)){

  for (I in levels(Datos$Inoc.size)){
    for(R in levels(Datos$rep)){
    x <- Datos%>%
      select(ln_rel.cc,Inoc.size, mutation, rep, time )%>%
      filter(mutation==M&
             Inoc.size==I&
             rep==R)


    values[M[I]] <-list(summary(gcFitModel(time=x$time, data=x$ln_rel.cc )))  
    for (i in length(values)){
      mutation[i]<-c(M)
      Inoc.size[i]<-c(I)
      rep[i]<-c(R)

    }
    }
}
}

加入数据创建逻辑数据框

##data frame
parameters<-NULL
parameters<-do.call(rbind, lapply(values, function(X) X[] ))
parameters$mutation<-mutation
parameters$Inoc.size<-Inoc.size
parameters$rep<-rep
parameters<-parameters%>%
  select(mutation,Inoc.size,rep, mu.model, lambda.model,A.model,
         stdmu.model,stdlambda.model,stdA.model)
parameters<-rename(parameters,
                   c("mu.model"="mu", "lambda.model"="l", "A.model"="A",
                     "stdlambda.model"="sigma.l"))