R 如何创建循环以迭代方式从回归方程中删除系数
示例:R 如何创建循环以迭代方式从回归方程中删除系数,r,loops,rstudio,regression,R,Loops,Rstudio,Regression,示例: 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 4
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) 步骤(lm(NY~.-日期,df))
2)
names(coef(df))[这(coef(df)就像@useR的评论中所说的,我不相信你在做什么,但是如果你想要一个关于它的机制的答案,那么就来吧
请注意,您不需要执行步骤
,简单的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
我不太明白你为什么要对系数本身设置一个约束。你不应该为拟合优度标准设置一些截止值吗?如果系数不显著但大于2会发生什么?你还包括它吗?我只是想弄清楚如何做以下事情。与拟合无关,p值,等等。我想要e排除所有小于或大于某个值的系数,并重复逐步函数,直到所有变量都不受此约束。你能提供帮助吗?我理解你想做什么。我只是不相信你这样做是正确的。因为你试图最小化模型的平方残差一些(线性)约束条件下,您可能希望使用quadprog
包而不是逐步OLS来研究二次规划。检查以下答案:我对R比较陌生,我没有机会接近理解该代码。也许您可以提供一些关于您正在尝试做什么以及为什么您认为这样做是一个好主意的上下文s方式?例如,设置coef@useR是否有任何商业原因感谢您的编辑,这是最后一分钟的更改。非常感谢。我曾尝试在我的数据上使用它,但nm显示为空。尝试理解公式以查看原因。我将<和>=数字改为否avail@g3lo查看是否哪个(coef(fit)<2)
解决它。如果没有,在分配给nm
之前,尝试print(names(coef(fit))
和print(which(coef(fit)<2))
以查看发生了什么。fit在分配给nm
之前,表示all(coef(fit)<2)
为TRUE
。如果要查看迭代次数,请运行已编辑的代码。
fit <- step(lm(fmla, mtcars))