gpt4 book ai didi

r - 从 leaps regsubsets 中获取所有模型

转载 作者:行者123 更新时间:2023-12-04 12:49:27 25 4
gpt4 key购买 nike

我使用 regsubsets 来搜索模型。是否可以自动创建所有lm来自参数选择列表?

library(leaps)
leaps<-regsubsets(y ~ x1 + x2 + x3, data, nbest=1, method="exhaustive")
summary(leaps)$which
(Intercept) x1 x2 x3
1 TRUE FALSE FALSE TRUE
2 TRUE FALSE TRUE TRUE
3 TRUE TRUE TRUE TRUE

现在我会手动做 model_1 <- lm(y ~ x3)等等。如何自动将它们放入列表中?

最佳答案

我不知道你为什么要所有模型的列表。 summarycoef 方法应该能很好地为您服务。但我会先从纯编程的角度回答你的问题,然后再回到这一点。


一个简单的方法是通过reformulate:

reformulate(termlabels, response = NULL, intercept = TRUE)

方法如下:

## you are masking `leaps` and `data` function!!
leaps <- regsubsets(y ~ x1 + x2 + x3, data, nbest = 1, method = "exhaustive")
X <- summary(leaps)$which

xvars <- dimnames(X)[[2]][-1] ## column names (all covariates except intercept)
responsevar <- "y" ## name of response

lst <- vector("list", dim(X)[1]) ## set up an empty model list

## loop through all rows / model specifications
for (i in 1:dim(X)[1]) {
id <- X[i, ]
form <- reformulate(xvars[which(id[-1])], responsevar, id[1])
lst[[i]] <- lm(form, data)
}

不需要*apply 解决方案。 lm 成本很高,所以 for 循环根本没有开销。


一种更快的方法是建立一个包含所有协变量的模型矩阵,并动态选择它的列(使用模型矩阵的 assign 属性;当您有因子变量时尤其如此)。然后通过 .lm.fit 进行模型拟合。但是,除非您是线性模型大师,否则您将难以使用 .lm.fit 的原始输出生成模型摘要/预测,但我认为 summary(leaps) 应该已经返回给您各种有用的统计数据。

leaps:::coef.regsubsets 函数是此 .lm.fit 路径的等价物。简单地做:

coef(leaps, 1:dim(X)[1], TRUE)

您将获得所有模型的系数和方差-协方差矩阵。

关于r - 从 leaps regsubsets 中获取所有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000835/

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