require(pacman)
## Loading required package: pacman
pacman::p_load(tidyverse, lme4, nlme, magrittr)
#theme set
theme_set(theme_bw())
Q2
#data
dta2<-read.csv("claudication.csv", h=T)
str(dta2)
'data.frame': 38 obs. of 8 variables:
$ Treatment: Factor w/ 2 levels "ACT","PBO": 1 1 1 1 1 1 1 1 1 1 ...
$ PID : Factor w/ 38 levels "P101","P102",..: 1 5 9 12 17 22 23 28 29 32 ...
$ Gender : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
$ D0 : int 190 98 155 245 182 140 196 162 195 167 ...
$ D1 : int 212 137 145 228 205 138 185 176 232 187 ...
$ D2 : int 213 185 196 280 218 187 185 192 199 228 ...
$ D3 : int 195 215 189 274 194 195 227 230 185 192 ...
$ D4 : int 248 225 176 260 193 205 180 215 200 210 ...
head(dta2)
Treatment PID Gender D0 D1 D2 D3 D4
1 ACT P101 M 190 212 213 195 248
2 ACT P105 M 98 137 185 215 225
3 ACT P109 M 155 145 196 189 176
4 ACT P112 M 245 228 280 274 260
5 ACT P117 M 182 205 218 194 193
6 ACT P122 M 140 138 187 195 205
dta2L <- gather(dta2,key=Month, value=Distance, D0:D4)
head(dta2L)
Treatment PID Gender Month Distance
1 ACT P101 M D0 190
2 ACT P105 M D0 98
3 ACT P109 M D0 155
4 ACT P112 M D0 245
5 ACT P117 M D0 182
6 ACT P122 M D0 140
str(dta2L)
'data.frame': 190 obs. of 5 variables:
$ Treatment: Factor w/ 2 levels "ACT","PBO": 1 1 1 1 1 1 1 1 1 1 ...
$ PID : Factor w/ 38 levels "P101","P102",..: 1 5 9 12 17 22 23 28 29 32 ...
$ Gender : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
$ Month : chr "D0" "D0" "D0" "D0" ...
$ Distance : int 190 98 155 245 182 140 196 162 195 167 ...
dta2L$Month <- as.factor(dta2L$Month)
dta2L$Month_s<-dta2L$Month
dta2L<-separate(dta2L, col=Month_s, into=c("Prefix", "Time"), sep = 1)
dta2L$Time<-as.numeric(dta2L$Time)
#plot
ggplot(data = dta2L, aes(x = Month, y = Distance, group=Treatment, color=Treatment)) +
facet_grid(.~Gender)+
geom_point(alpha = .3)+
stat_summary( fun.y = mean, geom = "point", size = 2) +
stat_summary( fun.y = mean, geom = "line") +
stat_summary( fun.data = mean_se, geom = "errorbar",
linetype = "solid", width = .5) +
labs(x = "Time(in months)", y = "Distance(in meters)") +
theme(legend.position = c(.15,.85))
#mean & sd
with(dta2,aggregate(cbind(D0,D1,D2,D3,D4)~Gender+Treatment,FUN=mean))
Gender Treatment D0 D1 D2 D3 D4
1 F ACT 180.3750 193.3750 207.8750 196.7500 208.5000
2 M ACT 163.1667 179.5000 195.5833 204.0833 207.6667
3 F PBO 165.5556 170.1111 175.7778 168.1111 171.2222
4 M PBO 178.3333 165.5556 173.3333 193.6667 194.2222
with(dta2,aggregate(cbind(D0,D1,D2,D3,D4)~Gender+Treatment,FUN=sd))
Gender Treatment D0 D1 D2 D3 D4
1 F ACT 42.18306 33.10994 58.21006 41.65762 57.10892
2 M ACT 42.34669 34.51350 40.14623 28.40441 28.04001
3 F PBO 41.52743 39.13261 47.25404 33.43443 45.34252
4 M PBO 45.00556 45.53051 43.68352 55.37824 47.35182
#cor
cor(subset(dta2, Treatment == "ACT" & Gender == "F")[,-(1:3)])
D0 D1 D2 D3 D4
D0 1.0000000 0.8021966 0.8724733 0.8483852 0.8757233
D1 0.8021966 1.0000000 0.8645096 0.7073820 0.9054398
D2 0.8724733 0.8645096 1.0000000 0.8937510 0.9159571
D3 0.8483852 0.7073820 0.8937510 1.0000000 0.9251102
D4 0.8757233 0.9054398 0.9159571 0.9251102 1.0000000
cor(subset(dta2, Treatment == "ACT" & Gender == "M")[,-(1:3)])
D0 D1 D2 D3 D4
D0 1.0000000 0.8624819 0.8052568 0.5928303 0.4068980
D1 0.8624819 1.0000000 0.6464277 0.3498338 0.4496799
D2 0.8052568 0.6464277 1.0000000 0.6704930 0.6323603
D3 0.5928303 0.3498338 0.6704930 1.0000000 0.5941441
D4 0.4068980 0.4496799 0.6323603 0.5941441 1.0000000
cor(subset(dta2, Treatment == "PBO" & Gender == "F")[,-(1:3)])
D0 D1 D2 D3 D4
D0 1.0000000 0.9269134 0.6057892 0.8657560 0.7776916
D1 0.9269134 1.0000000 0.6826171 0.7707920 0.7579993
D2 0.6057892 0.6826171 1.0000000 0.3713199 0.4846551
D3 0.8657560 0.7707920 0.3713199 1.0000000 0.7931043
D4 0.7776916 0.7579993 0.4846551 0.7931043 1.0000000
cor(subset(dta2, Treatment == "PBO" & Gender == "M")[,-(1:3)])
D0 D1 D2 D3 D4
D0 1.0000000 0.9271229 0.8530641 0.8833606 0.9202039
D1 0.9271229 1.0000000 0.7036016 0.7846666 0.9031326
D2 0.8530641 0.7036016 1.0000000 0.8292800 0.8073104
D3 0.8833606 0.7846666 0.8292800 1.0000000 0.9197535
D4 0.9202039 0.9031326 0.8073104 0.9197535 1.0000000
#model
summary(m0<-gls(Distance ~ Time + Gender * Treatment + Time:Treatment,
correlation = corSymm(form = ~1|PID),
weights = varIdent(form = ~1|Month), data=dta2L))
Generalized least squares fit by REML
Model: Distance ~ Time + Gender * Treatment + Time:Treatment
Data: dta2L
AIC BIC logLik
1781.019 1848.533 -869.5095
Correlation Structure: General
Formula: ~1 | PID
Parameter estimate(s):
Correlation:
1 2 3 4
2 0.876
3 0.774 0.721
4 0.777 0.640 0.672
5 0.750 0.730 0.704 0.846
Variance function:
Structure: Different standard deviations per stratum
Formula: ~1 | Month
Parameter estimates:
D0 D1 D2 D3 D4
1.0000000 0.8838348 1.0627783 0.9500921 1.0337160
Coefficients:
Value Std.Error t-value p-value
(Intercept) 177.00300 12.719156 13.916254 0.0000
Time 10.28326 1.679140 6.124126 0.0000
GenderM 0.01961 15.640605 0.001254 0.9990
TreatmentPBO -11.14603 17.575891 -0.634166 0.5268
GenderM:TreatmentPBO 0.20352 22.484786 0.009051 0.9928
Time:TreatmentPBO -7.78950 2.439733 -3.192766 0.0017
Correlation:
(Intr) Time GendrM TrtPBO GM:TPB
Time -0.304
GenderM -0.738 0.000
TreatmentPBO -0.724 0.220 0.534
GenderM:TreatmentPBO 0.513 0.000 -0.696 -0.702
Time:TreatmentPBO 0.210 -0.688 0.000 -0.320 0.000
Standardized residuals:
Min Q1 Med Q3 Max
-1.82526759 -0.58373590 -0.06888869 0.53349861 3.70599149
Residual standard error: 43.29371
Degrees of freedom: 190 total; 184 residual
Q3
#data
dta3<-read.table("http://titan.ccunix.ccu.edu.tw/~psycfs/lmm/Data/adas.txt", header = TRUE, na.strings = ".")
head(dta3)
Treatment PID adas02 adas04 adas06 adas08 adas10 adas12
1 L 1 22 30 NA 33 28 30
2 L 5 34 35 46 37 31 35
3 L 8 40 41 41 46 52 48
4 L 12 24 NA 21 28 30 27
5 L 13 29 26 29 26 NA 36
6 L 15 31 36 41 46 52 57
str(dta3)
'data.frame': 80 obs. of 8 variables:
$ Treatment: Factor w/ 3 levels "H","L","P": 2 2 2 2 2 2 2 2 2 2 ...
$ PID : int 1 5 8 12 13 15 19 21 24 28 ...
$ adas02 : int 22 34 40 24 29 31 22 43 18 25 ...
$ adas04 : int 30 35 41 NA 26 36 27 49 28 24 ...
$ adas06 : int NA 46 41 21 29 41 28 42 29 27 ...
$ adas08 : int 33 37 46 28 26 46 24 48 NA 18 ...
$ adas10 : int 28 31 52 30 NA 52 27 48 25 21 ...
$ adas12 : int 30 35 48 27 36 57 28 46 28 22 ...
dta3$Treatment <- factor(dta3$Treatment, levels = c("P", "L", "H"))
dta3$PID<-as.factor(dta3$PID)
dta3L<-gather(dta3,key=Month, value=adas, adas02:adas12, na.rm = T)
head(dta3L)
Treatment PID Month adas
1 L 1 adas02 22
2 L 5 adas02 34
3 L 8 adas02 40
4 L 12 adas02 24
5 L 13 adas02 29
6 L 15 adas02 31
str(dta3L)
'data.frame': 454 obs. of 4 variables:
$ Treatment: Factor w/ 3 levels "P","L","H": 2 2 2 2 2 2 2 2 2 2 ...
$ PID : Factor w/ 80 levels "1","2","3","4",..: 1 5 8 12 13 15 19 21 24 28 ...
$ Month : chr "adas02" "adas02" "adas02" "adas02" ...
$ adas : int 22 34 40 24 29 31 22 43 18 25 ...
#plot
ggplot(dta3L, aes(x=Month, y=adas, group=Treatment, color=Treatment))+
geom_point(alpha=.3)+
stat_summary( fun.y = mean, geom = "point", size = 2) +
stat_summary( fun.y = mean, geom = "line") +
stat_summary( fun.data = mean_se, geom = "errorbar",
linetype = "solid", width = .5) +
labs(x = "Month", y = "ADAS")
#mean & sd
with(dta3,aggregate(cbind(adas02,adas04,adas06,adas08,adas10,adas12)~Treatment,FUN=mean))
Treatment adas02 adas04 adas06 adas08 adas10 adas12
1 P 29.61905 33.42857 34.85714 36.38095 37.57143 39.04762
2 L 32.82353 35.11765 37.64706 36.41176 38.35294 39.17647
3 H 30.22222 32.44444 33.55556 33.33333 33.72222 34.27778
with(dta3,aggregate(cbind(adas02,adas04,adas06,adas08,adas10,adas12)~Treatment,FUN=sd))
Treatment adas02 adas04 adas06 adas08 adas10 adas12
1 P 6.778467 6.415383 6.428730 6.344101 7.032577 8.800433
2 L 7.510287 8.637725 9.089425 11.090868 11.191186 10.765891
3 H 8.558144 7.326200 8.555853 9.055385 7.442371 7.102655
#model
summary(m0<-lme(adas ~ Treatment,random = ~1|Month, data = dta3L ))
Linear mixed-effects model fit by REML
Data: dta3L
AIC BIC logLik
3279.055 3299.612 -1634.527
Random effects:
Formula: ~1 | Month
(Intercept) Residual
StdDev: 2.258585 8.835074
Fixed effects: adas ~ Treatment
Value Std.Error DF t-value p-value
(Intercept) 36.92824 1.1455550 446 32.23611 0.0000
TreatmentL -1.67993 0.9965295 446 -1.68578 0.0925
TreatmentH -2.61476 1.0137870 446 -2.57920 0.0102
Correlation:
(Intr) TrtmnL
TreatmentL -0.405
TreatmentH -0.398 0.457
Standardized Within-Group Residuals:
Min Q1 Med Q3 Max
-2.0470165 -0.7501237 -0.1456095 0.6286689 3.2113600
Number of Observations: 454
Number of Groups: 6