r - 在 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
推荐阅读
- android - 请求运行时权限 React Native
- azure - 将 SharePoint 常见问题解答加载到 Azure QnA maker
- facebook - 如何从 Facebook 应用程序中删除自己的开发者身份?
- php - Symfony 4:覆盖容器中的公共服务
- sql - BigQuery - 折叠具有连续日期的行
- android - 如何在 Kotlin 中使用这个库?
- angular - 对 @Input() 数组长度进行延迟检查
- http - 如何保护客户不看到他发送的请求?
- javascript - 是否类似于 Flow 中 TypeScript 的非空断言运算符?
- angular - 折线工具提示角材质