Dans cette expérience, quatre régimes différents ont été essayés sur des animaux. Ensuite, les chercheurs ont mesuré leurs effets sur le temps de coagulation sanguine.
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)
J'essaie d'ajuster un modèle linéaire pour le régime coag ~ en utilisant la fonction lm dans R Les résultats doivent ressembler à ce qui suit:
> 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
Jusqu'à présent, mon code ne ressemble pas aux résultats:
## 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
3 Réponses :
Cette présentation est une propriété de summary (modelSummary)
(classe summary.lm
), et non de modelSummary
(classe 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
"régime"
est une variable de caractère et est traitée comme un facteur. Vous pouvez donc omettre le codage factice et faire simplement:
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
Même si "diet"
était une variable numérique et que vous voulez que R la traite plutôt comme une catégorie catégorique qu'une variable continue, aucun codage factice n'est nécessaire, il suffit de l'ajouter comme + facteur (régime)
dans la formule.
Comme vous le voyez, aussi 1 + est redondant car
lm
calcule le (Intercept)
par défaut. Pour omettre l'interception, vous pouvez faire 0 +
(ou - 1
).
Vous pouvez également envisager de coder régime
de cette manière
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