我的数据框看起来像
> 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
时,它不会更改任何值。
我做错了什么?
答案 0 :(得分:3)
Class
被视为categorical variable
至lm
。我认为你的Class
是一个因素。
并且回归的结果是正确的,因为估计值对应于4个类别。这是因为,默认情况下,第一级(在您的情况下为0
)被视为引用级别,您获得的所有估计值都与引用相关。也就是说,mean(Class1) - mean(Class0)
等于-0.02594
。
如果您不希望Class
上的分类变量,并且您想将其建模为连续变量,那么您必须将factor
转换为numeric
(或{{1} })输入: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)