【发布时间】:2020-06-03 18:02:12
【问题描述】:
我正在尝试运行 150 个多元回归模型,它们具有相同的因变量(粮食产量)和协变量(年龄),但在每个实例中都有不同的预测变量。我想将每个回归结果的 R 平方值和 P 值存储在一个数据框中,我可以轻松查看数据支持哪些假设。我愿意接受替代的方法——基本上我想知道 150 个潜在预测因子中的哪些与年龄有显着的交互作用,通过看一眼表格,也很高兴知道 150 个预测因子中的哪些对他们的影响很重要自己的。我已经浏览了几十个关于 SO 的答案,但我仍然不确定最好的方法是什么。我明白运行这么多模型会导致 I 型错误膨胀。 Here 是指向我的数据的链接,但如果您愿意,可以随时在 mtcars 或 iris 中提出解决方案。到目前为止,我已经尝试过使用 lapply 和 sapply 并编写函数,使用 for 循环,使用 tidyr,在 for 循环中使用 list,在 for 循环中使用 append。这是使用 lapply 和 sapply 的解决方案,这是有希望的,但输出不是我可以展示的东西来显示哪些预测变量是重要的或不重要的——我仍然必须一个一个地调用每个结果。代码需要永远运行,这就是为什么我将它限制在前四列。所有结果都针对同一个预测变量。
`data$Grain<- as.numeric(as.character(data$Grain))
result <- sapply(names(data)[1 : 4],
function(x) {
lapply(names(data)[1 : 4],
function(y) {
if (x != y) {
model <- lm(as.formula(paste0("Grain", "~", "Age", "*", x)), data)
return(list(x = x,
r.squared = summary(model)$r.squared,
coefficients = summary(model)$coefficients))
}
})
})`
我尝试删除 function(y){} 和 if(x!=y{},但我得到“错误:“}”中的意外'}'。
`result <- sapply(names(data)[1 : 4],
function(x) {
lapply(names(data)[1 : 4],
model <- lm(as.formula(paste0("Grain", "~", "Age", "*", x)), data)
return(list(x = x,
r.squared = summary(model)$r.squared,
coefficients = summary(model)$coefficients))
)
})`
也许一个更有希望的解决方案是使用 lapply 生成回归列表:
reg <- lapply(data[,-c(1:5,8,18)], function(x) summary(lm(data$Grain~ data$Age*x)))
问题在于我一次只能打印所有 150 个摘要——我还没有弄清楚如何在数据框中存储至少 P 值,希望还有 R 平方值。如果 P 值和 R 平方值在不同的数据帧中,则可以。我需要介绍这 150 个预测变量与谷物和年龄的关系,我认为 150 个不同的摘要打印输出的屏幕截图并不理想。感谢您阅读 - 我已尽力检查是否有重复,但如果您认为我错过了某个帖子,请告诉我。
【问题讨论】:
标签: r