线性回归系数信息作为数据框或矩阵

3
我正在尝试创建一个脚本来优化线性回归分析,我希望能够操作模型输出,特别是Pr(>|t|)值。不幸的是,我不知道如何将模型输出转换为矩阵或数据表。
以下是一个示例:在下面的代码中,我创建了七列数据,并使用其他六列拟合第七列。当我得到模型的摘要时,很明显有三个参数比其他三个更显著。如果我可以以数字方式访问系数输出,也许我可以创建一个脚本来删除最不重要的参数并重新运行分析……但实际上,我是手动完成这一步骤的。
如何最佳地解决这个问题?
q = matrix( 
c(2,14,-4,1,10,9,41,8,13,2,0,20,3,27,1,10,-1,0,
10,-6,23,6,13,-8,1,15,-7,55,7,14,10,0,20,-3,6,4,20,
-1,5,19,-2,48,10,19,8,8,10,-2,24,8,13,9,8,14,5,7,7,
12,1,0,16,7,27,7,10,-1,1,15,7,31,2,20,-5,10,12,3,57,
0,19,-8,8,11,-4,63,5,11,7,8,10,-7,6,9,10,-7,2,19,8,
51,2,18,3,3,14,4,30), nrow=15, ncol=7, byrow = TRUE)
#
colnames(q) <- c("A","B","C","D","E","F","Z")
#
q <- as.data.frame(q)
#
qmodel <- lm(Z~.,data=q)
#
summary(qmodel)
#

输出:

Call:
lm(formula = Z ~ ., data = q)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.25098 -0.52655 -0.02931  0.62350  1.26649 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.09303    1.51627  -1.380    0.205    
A            0.91161    0.11719   7.779 5.34e-05 ***
B            1.99503    0.09539  20.914 2.87e-08 ***
C           -2.98252    0.04789 -62.283 4.91e-12 ***
D            0.13458    0.10377   1.297    0.231    
E            0.15191    0.09397   1.617    0.145    
F            0.01417    0.04716   0.300    0.772    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.9439 on 8 degrees of freedom
Multiple R-squared:  0.9986,    Adjusted R-squared:  0.9975 
F-statistic: 928.9 on 6 and 8 DF,  p-value: 6.317e-11

现在我想看到的是:

 > coeffs
             Estimate Std. Error t value Pr(>|t|)
 (Intercept) -2.09303    1.51627  -1.380 2.05e-01
 A            0.91161    0.11719   7.779 5.34e-05
 B            1.99503    0.09539  20.914 2.87e-08
 C           -2.98252    0.04789 -62.283 4.91e-12
 D            0.13458    0.10377   1.297 2.31e-01
 E            0.15191    0.09397   1.617 1.45e-01
 F            0.01417    0.04716   0.300 7.72e-01

就目前而言,我的做法是这样的……完全没有自动化处理……
coeffs = matrix(
c(-2.09303,1.51627,-1.38,0.205,0.91161,0.11719,
7.779,0.0000534,1.99503,0.09539,20.914,0.0000000287,
-2.98252,0.04789,-62.283,0.00000000000491,0.13458,
0.10377,1.297,0.231,0.15191,0.09397,1.617,0.145,
0.01417,0.04716,0.3,0.772), nrow=7, ncol=4, byrow = TRUE)
#
rownames(coeffs) <- c("(Intercept)","A","B","C","D","E","F")
colnames(coeffs) <- c("Estimate","Std. Error","t value","Pr(>|t|)")
#
coeffs <- as.data.frame(coeffs)
#
coeffs
2个回答

8
你需要的是总结对象中的coefficients组件。
m <- lm(Z~.,data=q)

summary(m)$coefficients

以下是一些额外的评论:

  • 使用step来进行逐步变量选择,而不是自己编码;
  • 逐步变量选择具有糟糕的统计特性;考虑使用类似于glmnet(在该名称的软件包中)的正则化模型构建。

洪,这太棒了!正是我在寻找的东西...尽管现在我在想我的方法是否有缺陷。我不知道逐步变量选择具有糟糕的统计特性。你能详细解释一下吗?我可能会遇到什么样的错误? - rucker
基本上,逐步回归方法容易过度拟合数据,这意味着它们会将噪声误认为信号。当您拥有小数据集和大量变量时,问题最严重,但即使是大数据集,您仍然需要小心。有关更多信息,请查看CrossValidated,统计/机器学习StackExchange。http://stats.stackexchange.com/questions/tagged/stepwise-regression - Hong Ooi

3
如果我理解正确,您需要总结返回的矩阵。这很简单:
fit <- lm( formula, data=yourData)
coeffs <- summary(fit)$coefficients

在此之后,您可以选择与任何矩阵一样匹配您条件的coeffs记录。例如:

coeffs[coeffs[4,] < 1e-12,]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接