从具有 1 个预测变量的回归 1 模型中提取系数

Extracting coefficients from a regression 1 model with 1 predictor

我目前有以下回归模型:

> print(summary(step1))

Call:
lm(formula = model1, data = newdat1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.53654 -0.02423 -0.02423 -0.02423  1.71962 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.3962     0.0532   7.446 2.76e-12 ***
i2            0.6281     0.0339  18.528  < 2e-16 ***

我只想将以下内容作为数据框返回:

            Estimate Std. Error t value Pr(>|t|)
i2            0.6281     0.0339  18.528  < 2e-16

我目前有以下代码:

> results1<-as.data.frame(summary(step1)$coefficients[-1,drop=FALSE])

产生:

> results1
  summary(step1)$coefficients[-1, drop = FALSE]
1                                  6.280769e-01
2                                  5.320108e-02
3                                  3.389873e-02
4                                  7.446350e+00
5                                  1.852804e+01
6                                  2.764836e-12
7                                  2.339089e-45

这不是我想要的;但是,当有超过 1 个预测变量时它确实有效。

如果你能给出一个可重现的例子就好了。我想你正在寻找

cc <- coef(summary(step1))[2,,drop=FALSE]
as.data.frame(cc)

使用 coef(summary(.)) 之类的访问器比 summary(.)$coefficients 更漂亮也更健壮(不能保证 summary() 的内部结构会保持不变——尽管不可否认R 的这一基本部分不太可能很快发生变化,尤其是因为许多用户可能 已经 使用了像 $coefficients).

这样的结构

按名称索引行,即

coef(summary(step1))["i2",,drop=FALSE]

可能会更好。

summary(step1)$coefficients 是一个矩阵。当您使用 [-1, drop=FALSE] 取出第一个元素时,它会转换为向量,这就是为什么您得到 7 个数字而不是您想要的行的原因。

> set.seed(123)
> x <- rnorm(100)
> y <- -1 + 0.2*x + rnorm(100)
> step1 <- lm(y ~ x)
> class(summary(step1)$coefficients)
[1] "matrix"
> class(summary(step1)$coefficients[-1, drop=FALSE])
[1] "numeric"

解决方案是使用 [ 更改子集,以便您指定要保留所有列(请参阅?`[`):

> summary(step1)$coefficients[-1, , drop=FALSE]
   Estimate Std. Error  t value  Pr(>|t|)
 x 0.1475284  0.1068786 1.380336 0.1706238