使用 for 循环 [r] 的多元回归
Multiple regression with a for loop [r]
您好,我想在不同条件下执行多个回归。我已经成功地做到了这一点,但是当我获得包含所有系数的列表时,每当我使用多个级别因子时,级别的名称都会丢失。但是,如果我只使用一个因素,名称将保留 .
我想要的是在两个条件下计算所有参数并且显然得到名称。我想通过循环来执行此操作,因为我的数据比这复杂得多。
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
感谢帮助
我找到了解决这个问题的方法!!
生成一些空向量
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"))
您好,我想在不同条件下执行多个回归。我已经成功地做到了这一点,但是当我获得包含所有系数的列表时,每当我使用多个级别因子时,级别的名称都会丢失。但是,如果我只使用一个因素,名称将保留 .
我想要的是在两个条件下计算所有参数并且显然得到名称。我想通过循环来执行此操作,因为我的数据比这复杂得多。
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
感谢帮助
我找到了解决这个问题的方法!!
生成一些空向量
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"))