gpt4 book ai didi

r - 如何从 regsubsets 中获取 LM 对象

转载 作者:行者123 更新时间:2023-12-04 15:35:20 26 4
gpt4 key购买 nike

假设我们想使用收入、年轻人、城市和地区作为回归量来模拟美国各州公立学校支出(教育)。更多信息:?Anscombe模型:教育~(收入+年轻人+城市)*地区

library(car)
library(leaps)

#Loading Data
data(Anscombe)
data(state)
stateinfo <- data.frame(region=state.region,row.names=state.abb)
datamodel <- data.frame(merge(stateinfo,Anscombe,by="row.names"),row.names=1)
head(datamodel)
region education income young urban
AK West 372 4146 439.7 484
AL South 112 2337 362.2 584
AR South 134 2322 351.9 500
AZ West 207 3027 387.5 796
CA West 273 3968 348.4 909
CO West 192 3340 358.1 785

#Saturated Model
MOD1 <- lm(education~(.-region)*region,datamodel)
summary(MOD1)
#anova(MOD1)

#Look for the "best" model
MOD1.subset <- regsubsets(education~(.-region)*region,datamodel,nvmax=15)
plot(MOD1.subset)

具有 3 个变量和 1 个交互作用(教育~收入 + 年轻 + 城市 + 西部地区:年轻)的模型在 BIC 方面似乎是最好的。
coef(MOD1.subset,4)

问题是,如何在不手动编写公式的情况下从该模型中获取 ML 对象?

在发帖之前,我发现包 HH 有一些有趣的函数用于 regsubsets 对象,例如 summaryHHlm.regsubsets .
library(HH)
summaryHH(MOD1.subset)[4,]
lm.regsubsets(MOD1.subset,4)
lm.regsubsets做我想要的,但我认为解析交互有一些问题,任何替代方案?

最佳答案

我认为这是不可能的,至少在没有对系数名称进行大量处理的情况下是不可能的。我完成了大约 95% 的过程,但在交互项上失败了:

coefs <- coef(MOD1s, 4)
nams <- names(coefs)
nams <- nams[!nams %in% "(Intercept)"]
response <- as.character(as.formula(MOD1s$call[[2]])[[2]])
form <- as.formula(paste(response, paste(nams, collapse = " + "), sep = " ~ "))
df <- get(as.character(MOD1s$call[[3]]))
mod <- lm(form, data = df)

> mod <- lm(form, data = df)
Error in eval(expr, envir, enclos) : object 'regionWest' not found

这是有道理的,并且源于用于系数的名称:
> nams
[1] "income" "young" "urban"
[4] "regionWest:young"

通过一些努力,您很可能可以做到:
  • : 分割任何名称在 : ,
  • 对于每一侧,查看是否与数据框中的变量有部分匹配df
  • 如果匹配,则检查未匹配的位是否与 df 中的变量级别匹配如果需要,强制转换为一个因素后,
  • 如果与级别匹配,则将交互的那一侧替换为变量名称,
  • 如果不匹配,查看是否还有其他部分匹配,如果不匹配则失败

  • 等等。 [so] 发布涉及相当多的编程,但是如果您能接受挑战,那么上述内容应该可以为您提供一些起点。

    关于r - 如何从 regsubsets 中获取 LM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13063762/

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