我有一个基于14个x值(x1到x14)预测y的回归。我想编写一个回归循环,循环的每次迭代都会为回归添加一个预测变量,然后告诉我r平方是什么。这是我的代码:
rsqvals <- rep(NA, 15)
for (i in 1:15){
simtemp2 <- simdata[, 1:i]
modeL <- lm(y ~ ., data=simtemp2)
rsqvals[i] <- summary(modeL)$r.squared
}
其中simdata
是我的数据框,simtemp2
是我想要的列。我怀疑这个问题与我无法输入simdata[, 1:i]
的事实有关,但我不确定为什么不这样做。任何帮助表示赞赏!
答案 0 :(得分:1)
看起来你在第一次迭代时过多地对data.frame进行了子集化。在第一次迭代中,您将获得simtemp2 <- simdata[,1:1]
。此操作的结果是simtemp2
中的向量。即使您将simtemp2
转换回data.frame
,lm()
也不会将其视为参数。尝试从2开始,看看是否有效:
rsqvals <- rep(NA, 15)
interceptonly <- lm(y~1,data=simdata) ### no features, only the intercept
### this isn't statistically meaningful, but I put it here for completeness
rsqvals[1] <- summary(interceptonly)$r.squared
for (i in 2:15){
simtemp2 <- simdata[, 1:i]
modeL <- lm(y ~ ., data=simtemp2)
rsqvals[i] <- summary(modeL)$r.squared
}
print(rsqvals)