R 拟合线性模型

R 拟合线性模型,r,statistics,curve-fitting,R,Statistics,Curve Fitting,我有一个数据框,看起来像 > 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 aPhysi

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

> 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  
我真的不明白,因为它似乎为
的每个值提供了多个梯度值,但有5个
值(0-4)。但我想要的是一个单截距和一个梯度值

另外,当我使用
weights=1/ML1SD^2
调用
lm
时,它不会更改任何值


我做错了什么?

Class
被视为
lm
的分类变量。我想你的
是一个因素

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

如果您不希望在
类上使用分类变量,并且希望将其建模为连续变量,则必须通过执行以下操作将
因子
转换为
数值
(或
整数
)类型:
df$Class | t |)
#(截距)0.39256 0.07148 5.492 0.000914***
#系数(y)2-0.09999 0.13687-0.731 0.488798
#系数(y)3-0.14433 0.15983-0.903 0.396528

这是您正在建模的完整数据集吗?每个等级只有一个观察值?试试
lm(ML1~as.numeric(as.character(class)),data=t)
,但是你确定
class
是一个比例标度吗?对于你的体重,ML1SD是多少?@alexwhan这些是~200的平均值observations@agstudy它们是平均值的标准偏差
> lm(ML1 ~ Class, data=df)

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

Coefficients:
(Intercept)        Class  
    0.87529     -0.01131  
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