从具有1个预测变量

时间:2015-07-08 13:31:20

标签: r regression

我目前有以下回归模型:

> 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个预测变量时,它确实有效。

2 个答案:

答案 0 :(得分:4)

如果你给出了一个可重复的例子,那就太好了。我认为你正在寻找

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

使用coef(summary(.))而不是summary(.)$coefficients等访问器更漂亮,更健壮(无法保证summary()的内部结构保持不变 - 尽管如此&# 39; R的这个基本部分很可能不会很快改变,特别是因为很多用户可能已经使用了$coefficients这样的结构。

按名称索引行,即

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

可能会更好。

答案 1 :(得分:2)

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