【发布时间】:2015-11-20 18:59:41
【问题描述】:
例子:
df <- data.frame(A=1:5, B=2:6, C=3:7,D=4:8,E=5:9,F=6:10)
我想创建一个回归循环 lm(y,x) 使用像 y 列 1 和 2 以及像 x 其余列。
我的想法:
lmf <- function (y,x) {
f <- lm(y ~ x, data=df)
cbind(summary(f)$r.squared,summary(f)$coefficients)
}
for(y in 1:3)
{
R<- apply(df[,3:6], 2, lmf(y,x)); R
}
错误:model.frame.default 中的错误(公式 = y ~ x,数据 = df,drop.unused.levels = TRUE): 可变长度不同(为“x”找到)
我给出的这个例子非常小,但我的数据是 y 的 50 列和 x 的 300 列。
我想做的也一样:lm(df$1~df$3, data=df); lm(df$1~df$4, data=df),[...], lm(df$2~df$3, data=df)... 但以自动方式。此外,我想提取结果 $coefficients 和 $r.squared。
【问题讨论】:
-
你真的很遥远。您正确使用了 apply in,没有使用正确的函数参数,也没有正确使用 for 循环迭代器。 开始更简单
-
试试这个
lapply(2:6, function(x) lm(df[ , 1] ~ df[, x], data = df ) ),它只是对子集有点棘手(它是一个嵌套列表),但它可以完成工作。 -
感谢您的回复,代码 lapply(2:6, function(x) lm(df[ , 1] ~ df[, x], data = df ) ) 给我回归函数使用一个固定的 y(在这种情况下是 col df[,1] 和不同的 x。我已经达到了这个目标。我想要更多的东西来增加使用不同 y 的可能性。
标签: r for-loop regression lm