我正在研究每名学生的支出与比萨成绩(标准测试)之间的关系,我知道这种回归不能给我带来塞特里亚式的亲密关系,但这是我练习的重点,我必须解释为什么不起作用。
我使用基本代码在R上运行回归:
lm1=lm(a~b)
但是问题是R报告我32系数,这是我人口总数的数量,而我应该只接受斜率和截距,因为这是简单的回归
这是R给我的输出:
Call:
lm(formula = a ~ b)
Coefficients:
(Intercept) b10167.3 b10467.8 b10766.4 b10863.4 b10960.1 b11.688.4 b11028.1 b11052 b11207.3 b11855.9 b12424.3 b13930.8
522.9936 5.9561 0.3401 -20.6884 -14.8603 -15.0777 -3.5752 -23.0459 -27.1021 -42.2692 -20.4485 -35.3906 -30.7468
b14353.3 b2.997.9 b20450.9 b3714.8 b4996.3 b5291.6 b5851.7 b6190.7 b6663.3 b6725.3 b6747.2 b7074.9 b8189.1
-18.4412 -107.2872 -39.6793 -98.2315 -80.2505 -36.2202 -48.6179 -64.2414 1.3887 -19.0389 -59.9734 -32.0751 -31.5962
b8406.2 b8533.5 b8671.1 b8996.3 b9265.7 b9897.2
-13.4219 -26.0155 -13.9045 -37.9996 -17.0271 -27.2954
您可以看到有32个系数,而我应该只接收两个系数,看来R正在读取总体的每个单位作为变量,但数据集像往常一样在行中设置了变量。我不知道是什么问题。
$ b $视为类别变量。我制作了一个包含5个观察值的小数据,分别是$ a $(数字变量)和$ b $(分类变量)。
当我拟合模型时,您会看到与您相似的输出(5个估计系数)。data = data.frame(a = 1:5, b = as.factor(rnorm(5)))
lm(a~b, data)
Call:
lm(formula = a ~ b, data = data)
Coefficients:
(Intercept) b-0.16380292500502 b0.213340249988902 b0.423891299272316 b0.63738307939327
4 -3 -1 1 -2
要纠正此问题,您需要将转换为数值向量。$ b $
data$b = as.numeric(as.character(data$b))
lm(a~b, data)
Call:
lm(formula = a ~ b, data = data)
Coefficients:
(Intercept) b
2.9580 0.2772
```