在 R 中为各种值拟合线性模型



在这个实验中,在动物身上尝试了四种不同的饮食。然后研究人员测量了它们对血液凝固时间的影响。

## Data :
coag diet
1    62    A
2    60    A
3    63    A
4    59    A
5    63    B
6    67    B
7    71    B
8    64    B
9    65    B
10   66    B
11   68    C
12   66    C
13   71    C
14   67    C
15   68    C
16   68    C
17   56    D
18   62    D
19   60    D
20   61    D
21   63    D
22   64    D
23   63    D
24   59    D

我正在尝试通过使用 R 中的函数 lm 来拟合 coag~diet 的线性模型 结果应如下所示:

> modelSummary$coefficients
Estimate Std. Error       t value     Pr(>|t|)
(Intercept)  6.100000e+01   1.183216  5.155441e+01 9.547815e-23
dietB        5.000000e+00   1.527525  3.273268e+00 3.802505e-03
dietC        7.000000e+00   1.527525  4.582576e+00 1.805132e-04
dietD       -1.071287e-14   1.449138 -7.392579e-15 1.000000e+00

到目前为止,我的代码看起来不像结果:

coagulation$x1 <- 1*(coagulation$diet=="B")
coagulation$x2 <- 1*(coagulation$diet=="C")
coagulation$x3 <- 1*(coagulation$diet=="D")
modelSummary <- lm(coag~1+x1+x2+x3, data=coagulation)

"diet"是一个字符变量,被视为一个因子。因此,您可以省略虚拟编码,只需执行以下操作:

summary(lm(coag ~ diet, data=coagulation))$coefficients
#                 Estimate Std. Error      t value     Pr(>|t|)
# (Intercept) 6.100000e+01   1.183216 5.155441e+01 9.547815e-23
# dietB       5.000000e+00   1.527525 3.273268e+00 3.802505e-03
# dietC       7.000000e+00   1.527525 4.582576e+00 1.805132e-04
# dietD       2.991428e-15   1.449138 2.064281e-15 1.000000e+00

即使"diet"是一个数值变量,并且您希望 R 将其视为分类变量而不是连续变量,也不需要虚拟编码,您只需将其作为+ factor(diet)添加到公式中即可。

如您所见,1 +也是多余的,因为默认情况下lm计算(Intercept)。要省略截距,您可以执行0 +(或- 1(。

该表示是summary(modelSummary)(类summary.lm(的属性,而不是modelSummary(类lm(。

summary(modelSummary)$coefficients
#                 Estimate Std. Error      t value     Pr(>|t|)
# (Intercept) 6.100000e+01   1.183216 5.155441e+01 9.547815e-23
# x1          5.000000e+00   1.527525 3.273268e+00 3.802505e-03
# x2          7.000000e+00   1.527525 4.582576e+00 1.805132e-04
# x3          2.991428e-15   1.449138 2.064281e-15 1.000000e+00

您也可以考虑以这种方式编码diet

coagulation$diet <- factor(coagulation$diet)
modelSummary<-lm(coag~diet,coagulation)
summary(modelSummary)
Call:
lm(formula = coag ~ diet, data = coagulation)
Residuals:
Min     1Q Median     3Q    Max 
-5.00  -1.25   0.00   1.25   5.00 
Coefficients:
Estimate Std. Error t value Pr(>|t|)    
(Intercept) 6.100e+01  1.183e+00  51.554  < 2e-16 ***
dietB       5.000e+00  1.528e+00   3.273 0.003803 ** 
dietC       7.000e+00  1.528e+00   4.583 0.000181 ***
dietD       2.991e-15  1.449e+00   0.000 1.000000    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

最新更新