gpt4 book ai didi

r - 自动公式构建

转载 作者:行者123 更新时间:2023-12-04 17:01:13 24 4
gpt4 key购买 nike

在最近的家庭作业中,我们被要求运行 27 个线性模型,每次添加一个额外的变量(目标是绘制 R2 的变化与调整后的 R2 的变化)。我发现很难通过算法创建这样的公式。我最终使用的代码如下所示(请注意,数据框中的第一列是因变量,其余都是预期的自变量。

 make.formula <- function(howfar) {
formula <- c()
for (i in 1:howfar) {
if (i == 1) {
formula <- paste(formula, names(d)[i], '~')}
else if (i == howfar) {
formula <- paste(formula, names(d)[i], '')
}
else {
formula <- paste(formula, names(d)[i], '+')}
}
return(formula)
}

formulas <- lapply(seq(2, length(d)), make.formula)
formulas <- lapply(formulas, as.formula)
fits <- lapply(formulas, lm, data = d)

这有效,但似乎远非理想,我的印象是我在 R 中使用 for 循环所做的任何事情可能都没有以最好的方式完成。有没有更简单的方法来为给定的数据框通过算法构建公式?

最佳答案

reformulate() ,一个用于从字符向量创建公式的漂亮函数,可能会派上用场。下面是它的作用的一个例子:

reformulate(response="Y", termlabels=c("X1", "X2", "X3"))
# Y ~ X1 + X2 + X3

以下是您在实践中如何使用它。 (请注意,我在这里创建了 lm() 调用内部的公式。因为 formula 对象带有有关创建它们的环境的信息,所以我会有点犹豫在 lm() 调用之外创建它们您实际上想要在其中使用它们。):
evars <- names(mtcars)[2:5]
ii <- lapply(1:4, seq_len)

lapply(ii,
function(X) {
coef(lm(reformulate(response="mpg", termlabels=evars[X]), data=mtcars))
})
# [[1]]
# (Intercept) cyl
# 37.88458 -2.87579
#
# [[2]]
# (Intercept) cyl disp
# 34.66099474 -1.58727681 -0.02058363
#
# [[3]]
# (Intercept) cyl disp hp
# 34.18491917 -1.22741994 -0.01883809 -0.01467933
#
# [[4]]
# (Intercept) cyl disp hp drat
# 23.98524441 -0.81402201 -0.01389625 -0.02317068 2.15404553

关于r - 自动公式构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com