Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何创建循环以迭代方式从回归方程中删除系数_R_Loops_Rstudio_Regression - Fatal编程技术网

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))