不同的拦截意义?

时间:2017-08-31 15:17:15

标签: r lm

鉴于我有三个分类变量(x1,x2,x3),每个变量有两个级别。

x1 <- as.factor(c(rep(1,5), rep(2,5)))
x2 <- sample(x1)
x3 <- sample(x1)
y <- rnorm (10, 3,3)
res1 <- lm ( y~ x1+x2+x3)
summary(res1)

然后lm函数返回以下

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)    3.658      1.869   1.957   0.0981 .
x12            3.071      2.786   1.102   0.3127  
x22            1.275      2.275   0.560   0.5956  
x32           -2.818      2.786  -1.011   0.3510  

所以我的模型看起来像y = b0 + b1 * x1 + b2 * x2 + b3 * x3

另一方面,当我运行此分析时(再次分为两个级别的三个分类变量)

X <- melt(cbind(x1,x2,x3))[,-1]
Y <- rnorm (30, 3,3)
res2 <- lm ( Y~X[,2])
summary(res2)

结果是:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   3.0171     1.7845   1.691    0.102
X[, 2]       -0.2308     1.1286  -0.204    0.839

这是所谓的&#34;效果模型&#34;拦截实际上是整体效果,而X [,2]是变量的影响。

实际上这两个例子是不同的,但我不明白为什么lm函数给出不同格式的模型因此拦截的不同含义

1 个答案:

答案 0 :(得分:1)

产生差异是因为第二个模型使用另一个(错误的)数据类型。

在你的第一个模型中,你有3个预测因子,每个因子有2个等级。数据类型factor告诉R这些是分类变量,因此R假定您对不同级别的不同方法感兴趣。

在你的第二个模型中,你只有一个预测变量X[, 2],它是一个法线向量(双精度),不再是factor。 R不知道这个预测器只有两个级别,并假设它是一个连续变量。因此,你得到一个截距和斜率的模型。

如果您再次明确地将X[, 2]转换为因子,那么一切都会成功:

res3 <- lm ( Y~factor(X[, 2]))
summary(res3)


Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)       3.1515     0.7403   4.257  0.00021 ***
factor(X[, 2])2  -0.5892     1.0469  -0.563  0.57808   

通常这种标准行为是正确的,但无论如何你可以通过使用“对比”来确切知道它应该如何编码你的变量。如果您有兴趣,This article会提供一个很好的概述。