示例任意df:
Dates NY CA OH MA
2018-01-01 9073 4564 2342 5645
2018-01-02 2342 4565 3453 5675
2018-01-03 1234 7567 5345 6877
2018-01-04 1231 3545 3453 7686
2018-01-05 4512 4564 3453 6787
..... .... .... .... ....
我正在尝试对包含> 300变量的df进行迭代逐步回归。我为自己设置了一个简单的df(如上图所示)来练习到达那里。
这是我希望实现的目标: 1)逐步回归 2)删除系数> =指定值(选择任何进行测试,比如说.1) 3)重新运行逐步回归 4)重复步骤2或在未满足约束条件时停止(意味着,如果所有系数都在指定值内,则停止循环)
这是我到目前为止的作品:
1)step(lm(NY~. -Dates, df))
2)names(coef(df))[which(coef(df)<=.2)]
因此1完成逐步回归运算,2完成命名小于或等于指定值的系数,比如说0.2。如何组合代码以从步骤1回归中删除这些值,并在没有变量的情况下重新应用逐步回归,并继续此过程直到所有变量都符合指定范围?
谢谢,
答案 0 :(得分:1)
就像在@useR的评论中所说的那样,我不相信你在做什么,但如果你想要一个机制的答案,那么就这样吧。
请注意,不需要step
,简单lm
会产生完全相同的结果。
我将使用内置数据集mtcars
作为示例。
data("mtcars")
response <- "mpg"
fmla <- as.formula(paste(response, ".", sep = "~"))
iter <- 0
fit <- lm(fmla, mtcars)
while(any(abs(coef(fit)) >= 2)){
iter <- iter + 1
nm <- names(coef(fit))[abs(coef(fit)) < 2]
fmla <- if(any(grepl("Inter", nm)))
paste(response, paste(nm, collapse = "+"), sep = "~")
else
paste(response, paste(c("0", nm), collapse = "+"), sep = "~")
fmla <- as.formula(fmla)
fit <- lm(fmla, mtcars)
}
fit
#
#Call:
# lm(formula = fmla, data = mtcars)
#
#Coefficients:
# cyl disp hp qsec carb
#0.4795 -0.0465 0.0314 1.4152 -0.7596
如果您想检查不需要step
,只需将lm
行替换为
fit <- step(lm(fmla, mtcars))