【问题标题】:How to loop regressions and get the original names of the variables?如何循环回归并获取变量的原始名称?
【发布时间】:2020-08-04 15:08:11
【问题描述】:

假设我有以下数据框:

df = structure(list(X1 = c(-1.18944760538218, -1.29854014882472, 0.583311783714593, 
0.650871260739756, -0.000391966126701203, 1.23053193924217, 1.70030189473426, 
-0.576054488536938, 0.0291802126175275, 1.43019460222912, -1.0301194391522, 
0.672348388347025, -0.173407147880241, -1.5368071194984, 0.676906374446062, 
0.245381059292165, 0.192944401742425, -1.22846757821128, 0.761438857461385, 
-1.49010138930763), X2 = c(-1.18944760538218, -1.29854014882472, 
0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X3 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X4 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X5 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X6 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X7 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763), X8 = c(-1.18944760538218, 
-1.29854014882472, 0.583311783714593, 0.650871260739756, -0.000391966126701203, 
1.23053193924217, 1.70030189473426, -0.576054488536938, 0.0291802126175275, 
1.43019460222912, -1.0301194391522, 0.672348388347025, -0.173407147880241, 
-1.5368071194984, 0.676906374446062, 0.245381059292165, 0.192944401742425, 
-1.22846757821128, 0.761438857461385, -1.49010138930763)), class = "data.frame", row.names = c(NA, 
-20L))

              X1            X2            X3            X4            X5
1  -1.1894476054 -1.1894476054 -1.1894476054 -1.1894476054 -1.1894476054
2  -1.2985401488 -1.2985401488 -1.2985401488 -1.2985401488 -1.2985401488
3   0.5833117837  0.5833117837  0.5833117837  0.5833117837  0.5833117837
4   0.6508712607  0.6508712607  0.6508712607  0.6508712607  0.6508712607
5  -0.0003919661 -0.0003919661 -0.0003919661 -0.0003919661 -0.0003919661
6   1.2305319392  1.2305319392  1.2305319392  1.2305319392  1.2305319392
7   1.7003018947  1.7003018947  1.7003018947  1.7003018947  1.7003018947
8  -0.5760544885 -0.5760544885 -0.5760544885 -0.5760544885 -0.5760544885
9   0.0291802126  0.0291802126  0.0291802126  0.0291802126  0.0291802126
10  1.4301946022  1.4301946022  1.4301946022  1.4301946022  1.4301946022
11 -1.0301194392 -1.0301194392 -1.0301194392 -1.0301194392 -1.0301194392
12  0.6723483883  0.6723483883  0.6723483883  0.6723483883  0.6723483883
13 -0.1734071479 -0.1734071479 -0.1734071479 -0.1734071479 -0.1734071479
14 -1.5368071195 -1.5368071195 -1.5368071195 -1.5368071195 -1.5368071195
15  0.6769063744  0.6769063744  0.6769063744  0.6769063744  0.6769063744
16  0.2453810593  0.2453810593  0.2453810593  0.2453810593  0.2453810593
17  0.1929444017  0.1929444017  0.1929444017  0.1929444017  0.1929444017
18 -1.2284675782 -1.2284675782 -1.2284675782 -1.2284675782 -1.2284675782
19  0.7614388575  0.7614388575  0.7614388575  0.7614388575  0.7614388575
20 -1.4901013893 -1.4901013893 -1.4901013893 -1.4901013893 -1.4901013893
              X6            X7            X8
1  -1.1894476054 -1.1894476054 -1.1894476054
2  -1.2985401488 -1.2985401488 -1.2985401488
3   0.5833117837  0.5833117837  0.5833117837
4   0.6508712607  0.6508712607  0.6508712607
5  -0.0003919661 -0.0003919661 -0.0003919661
6   1.2305319392  1.2305319392  1.2305319392
7   1.7003018947  1.7003018947  1.7003018947
8  -0.5760544885 -0.5760544885 -0.5760544885
9   0.0291802126  0.0291802126  0.0291802126
10  1.4301946022  1.4301946022  1.4301946022
11 -1.0301194392 -1.0301194392 -1.0301194392
12  0.6723483883  0.6723483883  0.6723483883
13 -0.1734071479 -0.1734071479 -0.1734071479
14 -1.5368071195 -1.5368071195 -1.5368071195
15  0.6769063744  0.6769063744  0.6769063744
16  0.2453810593  0.2453810593  0.2453810593
17  0.1929444017  0.1929444017  0.1929444017
18 -1.2284675782 -1.2284675782 -1.2284675782
19  0.7614388575  0.7614388575  0.7614388575
20 -1.4901013893 -1.4901013893 -1.4901013893

我想设置一系列回归,比如所有其他回归的第一列,一次一个。为此,我编写了以下循环:

for (i in df[,-c(1)]) {

model <- lm(df$X1 ~ i)
print(summary(model))

}

问题是这个循环的输出(在汇总表中)为每个回归量读取“i”。相反,我想在回归表中保留变量的原始名称。

Call:
lm(formula = df$X1 ~ i) # instead of i, the original name of each variable

Residuals:
       Min         1Q     Median         3Q        Max 
-2.734e-16 -4.960e-17 -4.252e-17  5.340e-18  5.756e-16 

Coefficients:
              Estimate Std. Error    t value Pr(>|t|)    
(Intercept) -3.103e-18  3.693e-17 -8.400e-02    0.934    
i            1.000e+00  3.748e-17  2.668e+16   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.651e-16 on 18 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 7.118e+32 on 1 and 18 DF,  p-value: < 2.2e-16

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

    标签: r dataframe loops for-loop


    【解决方案1】:

    如果您确实需要将其放入输出的调用部分,则需要使用所需的所有符号构建表达式,然后对其进行评估。代码看起来有点混乱,但类似于

    for (i in names(df)[-1]) {
      model <- do.call("lm", list(reformulate(i, "X1"), quote(df)))
      print(summary(model))
    }
    

    【讨论】:

    • 非常感谢!很有帮助。一旦 SE 允许我这样做,我会将其标记为正确答案
    猜你喜欢
    • 2022-09-27
    • 1970-01-01
    • 2017-06-23
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多