====== ANCOVA (Analysis of Covariance) 1 ======
{{:anorexia.csv}}
anorexia=read.csv("anorexia.csv")
anorexia
anorexia$Diff = anorexia$Postwt-anorexia$Prewt
anorexia
$ Diff = Treat + Error $ \\
$ Diff = Prewt + Treat + Error $ \\
$ Postwt = Prewt + Treat + Error $ \\
levels(anorexia$Treat)
[1] "Cont" "CBT" "FT"
anorexia$Treat=factor(anorexia$Treat, levels = c("Cont", "CBT", "FT"))
model = lm (Postwt ~ Prewt + Treat, data = anorexia)
Anova(model)
Anova Table (Type II tests)
Response: Postwt
Sum Sq Df F value Pr(>F)
Prewt 353.8 1 7.2655 0.0088500 **
Treat 766.3 2 7.8681 0.0008438 ***
Residuals 3311.3 68
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(model)
Call:
lm(formula = Postwt ~ Prewt + Treat, data = anorexia)
Residuals:
Min 1Q Median 3Q Max
-14.1083 -4.2773 -0.5484 5.4838 15.2922
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.6740 13.2167 3.456 0.000950 ***
Prewt 0.4345 0.1612 2.695 0.008850 **
TreatCBT 4.0971 1.8935 2.164 0.033999 *
TreatFT 8.6601 2.1931 3.949 0.000189 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.978 on 68 degrees of freedom
Multiple R-squared: 0.2777, Adjusted R-squared: 0.2458
F-statistic: 8.713 on 3 and 68 DF, p-value: 5.719e-05
library(multcomp)
dunnett = glht(model, linfct=mcp(Treat="Dunnett"))
summary(dunnett)
Simultaneous Tests for General Linear Hypotheses
Multiple Comparisons of Means: Dunnett Contrasts
Fit: lm(formula = Postwt ~ Prewt + Treat, data = anorexia)
Linear Hypotheses:
Estimate Std. Error t value Pr(>|t|)
CBT - Cont == 0 4.097 1.893 2.164 0.062939 .
FT - Cont == 0 8.660 2.193 3.949 0.000373 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)
====== ANCOVA (Analysis of Covariance) 2 ======
__Data__
### --------------------------------------------------------------
### Analysis of covariance, cricket example
### pp. 228–229
### --------------------------------------------------------------
Input = (
"Species Temp Pulse
ex 20.8 67.9
ex 20.8 65.1
ex 24 77.3
ex 24 78.7
ex 24 79.4
ex 24 80.4
ex 26.2 85.8
ex 26.2 86.6
ex 26.2 87.5
ex 26.2 89.1
ex 28.4 98.6
ex 29 100.8
ex 30.4 99.3
ex 30.4 101.7
niv 17.2 44.3
niv 18.3 47.2
niv 18.3 47.6
niv 18.3 49.6
niv 18.9 50.3
niv 18.9 51.8
niv 20.4 60
niv 21 58.5
niv 21 58.9
niv 22.1 60.7
niv 23.5 69.8
niv 24.2 70.9
niv 25.9 76.2
niv 26.5 76.1
niv 26.5 77
niv 26.5 77.7
niv 28.6 84.7
")
Data = read.table(textConnection(Input),header=TRUE)
__Simple Plot__
plot(x = Data$Temp,
y = Data$Pulse,
col = Data$Species,
pch = 16,
xlab = "Temperature",
ylab = "Pulse")
legend('bottomright',
legend = levels(Data$Species),
col = 1:2,
cex = 1,
pch = 16)
__Analysis of covariance__
options(contrasts = c("contr.treatment", "contr.poly"))
### These are the default contrasts in R
model.1 = lm (Pulse ~ Temp + Species + Temp:Species,
data = Data)
library(car)
Anova(model.1, type="II")
Anova Table (Type II tests)
Sum Sq Df F value Pr(>F)
Temp 4376.1 1 1388.839 < 2.2e-16 ***
Species 598.0 1 189.789 9.907e-14 ***
Temp:Species 4.3 1 1.357 0.2542
### Interaction is not significant, so the slope across groups
### is not different.
__Re-analysis__
model.2 = lm (Pulse ~ Temp + Species,
data = Data)
library(car)
Anova(model.2, type="II")
Anova Table (Type II tests)
Sum Sq Df F value Pr(>F)
Temp 4376.1 1 1371.4 < 2.2e-16 ***
Species 598.0 1 187.4 6.272e-14 ***
### The category variable (Species) is significant,
### so the intercepts among groups are different
summary(model.2)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.21091 2.55094 -2.827 0.00858 **
Temp 3.60275 0.09729 37.032 < 2e-16 ***
Speciesniv -10.06529 0.73526 -13.689 6.27e-14 ***
### Note that these estimates are different than in the Handbook,
### but the calculated results will be identical.
### The slope estimate is the same.
### The intercept for species 1 (ex) is (intercept).
### The intercept for species 2 (niv) is (intercept) + Speciesniv.
### This is determined from the contrast coding of the Species
### variable shown below, and the fact that Speciesniv is shown in
### coefficient table above.
contrasts(Data$Species)
niv
ex 0
niv 1
__Simple plot with fitted lines__
I.nought = -7.21091
I1 = I.nought + 0
I2 = I.nought + -10.06529
B = 3.60275
plot(x = Data$Temp,
y = Data$Pulse,
col = Data$Species,
pch = 16,
xlab = "Temperature",
ylab = "Pulse")
legend('bottomright',
legend = levels(Data$Species),
col = 1:2,
cex = 1,
pch = 16)
abline(I1, B,
lty=1, lwd=2, col = 1)
abline(I2, B,
lty=1, lwd=2, col = 2)
__p-value and R-squared of combined model__
summary(model.2)
__Checking assumptions of the model__
hist(residuals(model.2),
col="darkgray")
plot(fitted(model.2),
residuals(model.2)
)
====== Eg. ======
{{tri.csv}}
trt: treatment
pat: patient id
hgba1c: Hemoglobin A1c
trichg: Triglyceride changes
$ trichg = hgba1c + trt + e $