1

我有一个看起来像的数据框

> t
          Institution Subject Class       ML1     ML1SD
aPhysics0           A Physics     0 0.8730469 0.3329205
aPhysics1           A Physics     1 0.8471074 0.3598839
aPhysics2           A Physics     2 0.8593750 0.3476343
aPhysics3           A Physics     3 0.8875000 0.3159806
aPhysics4           A Physics     4 0.7962963 0.4027512

我想拟合一个线性函数来ML1反对Class,但是当我打电话时

> lm(ML1 ~ Class, data=t)

我得到:

Call:
lm(formula = ML1 ~ Class, data = t)

Coefficients:
(Intercept)       Class1       Class2       Class3       Class4  
    0.87305     -0.02594     -0.01367      0.01445     -0.07675  

我不太明白,因为它看起来给我的每个值提供了多个梯度值Class,但是有 5 个Class值(0-4)。但我想要的是一个单一的截距和一个单一的梯度值。

此外,当我用它调用lm时,weights = 1/ML1SD^2它不会改变任何值。

我究竟做错了什么?

4

1 回答 1

3

Class被视为一个categorical variableto lm。我想你Class是一个因素。

并且回归的结果是正确的,因为估计对应于 4 个类别。这是因为默认情况下,第一个级别(0在您的情况下为 )被视为参考级别,并且您获得的所有估计都与参考有关。即,mean(Class1) - mean(Class0)等于-0.02594

如果您不想要分类变量Class并且想要将其建模为连续变量,那么您必须通过执行以下操作转换factornumeric(或integer)类型df$Class <- as.numeric(as.character(df$Class)):然后,你得到:

> lm(ML1 ~ Class, data=df)

Call:
lm(formula = ML1 ~ Class, data = df)

Coefficients:
(Intercept)        Class  
    0.87529     -0.01131  

但是你确定Class是一个连续变量吗?

编辑:参数weights确实有效果。它执行加权线性最小二乘回归。您可以在categorical variable执行以下操作时看到summary(.)

summary( ML1 ~ factor(Class), data = df)

但是在您的情况下,分类变量只有一个值。

让我用另一个例子来说明:

set.seed(45)
# meaningless data
df <- data.frame(x=runif(10), y=rep(1:3, c(4,3,3)))

summary(lm(x ~ factor(y), data=df))
# without weights 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)   
# (Intercept)  0.39256    0.09481   4.141  0.00435 **
# factor(y)2  -0.09999    0.14482  -0.690  0.51216   
# factor(y)3  -0.14433    0.14482  -0.997  0.35214   


summary(lm(x ~ factor(y), data=df, weights=1/y))
# with weights
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.39256    0.07148   5.492 0.000914 ***
# factor(y)2  -0.09999    0.13687  -0.731 0.488798    
# factor(y)3  -0.14433    0.15983  -0.903 0.396528    
于 2013-02-27T09:51:01.640 回答