====== Repeated measures ANOVA ====== ====== e.g. 1 ====== demo1 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo1.csv") ## Convert variables to factor demo1 <- within(demo1, { group <- factor(group) time <- factor(time) id <- factor(id) }) demo1 par(cex = .6) with(demo1, interaction.plot(time, group, pulse, ylim = c(5, 20), lty= c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "group")) demo1.aov <- aov(pulse ~ group * time + Error(id), data = demo1) summary(demo1.aov) {{:r:pasted:20200604-004212.png}} > > demo1 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo1.csv") > ## Convert variables to factor > demo1 <- within(demo1, { + group <- factor(group) + time <- factor(time) + id <- factor(id) + }) > > demo1 id group pulse time 1 1 1 10 1 2 1 1 10 2 3 1 1 10 3 4 2 1 10 1 5 2 1 10 2 6 2 1 10 3 7 3 1 10 1 8 3 1 10 2 9 3 1 10 3 10 4 1 10 1 11 4 1 10 2 12 4 1 10 3 13 5 2 15 1 14 5 2 15 2 15 5 2 15 3 16 6 2 15 1 17 6 2 15 2 18 6 2 15 3 19 7 2 16 1 20 7 2 15 2 21 7 2 15 3 22 8 2 15 1 23 8 2 15 2 24 8 2 15 3 > par(cex = .6) > > with(demo1, interaction.plot(time, group, pulse, + ylim = c(5, 20), lty= c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "group")) > > demo1.aov <- aov(pulse ~ group * time + Error(id), data = demo1) > summary(demo1.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) group 1 155.04 155.04 3721 1.3e-09 *** Residuals 6 0.25 0.04 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Error: Within Df Sum Sq Mean Sq F value Pr(>F) time 2 0.0833 0.04167 1 0.397 group:time 2 0.0833 0.04167 1 0.397 Residuals 12 0.5000 0.04167 > > ====== e.g. 2 ====== demo2 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo2.csv") ## Convert variables to factor demo2 <- within(demo2, { group <- factor(group) time <- factor(time) id <- factor(id) }) demo2 par(cex = .6) with(demo2, interaction.plot(time, group, pulse, ylim = c(10, 40), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "group")) demo2.aov <- aov(pulse ~ group * time + Error(id), data = demo2) summary(demo2.aov) {{:r:pasted:20200604-004924.png}} > > demo2 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo2.csv") > ## Convert variables to factor > demo2 <- within(demo2, { + group <- factor(group) + time <- factor(time) + id <- factor(id) + }) > > demo2 id group pulse time 1 1 1 14 1 2 1 1 19 2 3 1 1 29 3 4 2 1 15 1 5 2 1 25 2 6 2 1 26 3 7 3 1 16 1 8 3 1 16 2 9 3 1 31 3 10 4 1 12 1 11 4 1 24 2 12 4 1 32 3 13 5 2 10 1 14 5 2 21 2 15 5 2 24 3 16 6 2 17 1 17 6 2 26 2 18 6 2 35 3 19 7 2 19 1 20 7 2 22 2 21 7 2 32 3 22 8 2 15 1 23 8 2 23 2 24 8 2 34 3 > > par(cex = .6) > > with(demo2, interaction.plot(time, group, pulse, + ylim = c(10, 40), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "group")) > > demo2.aov <- aov(pulse ~ group * time + Error(id), data = demo2) > summary(demo2.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) group 1 15.04 15.04 0.836 0.396 Residuals 6 107.92 17.99 Error: Within Df Sum Sq Mean Sq F value Pr(>F) time 2 978.2 489.1 53.684 1.03e-06 *** group:time 2 1.1 0.5 0.059 0.943 Residuals 12 109.3 9.1 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > ====== e.g. 3 ====== demo3 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo3.csv") ## Convert variables to factor demo3 <- within(demo3, { group <- factor(group) time <- factor(time) id <- factor(id) }) demo3 par(cex = .6) with(demo3, interaction.plot(time, group, pulse, ylim = c(10, 60), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "group")) demo3.aov <- aov(pulse ~ group * time + Error(id), data = demo3) summary(demo3.aov) {{:r:pasted:20200604-005114.png}} > demo3 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo3.csv") > ## Convert variables to factor > demo3 <- within(demo3, { + group <- factor(group) + time <- factor(time) + id <- factor(id) + }) > > demo3 id group pulse time 1 1 1 35 1 2 1 1 25 2 3 1 1 16 3 4 2 1 32 1 5 2 1 23 2 6 2 1 12 3 7 3 1 36 1 8 3 1 22 2 9 3 1 14 3 10 4 1 34 1 11 4 1 21 2 12 4 1 13 3 13 5 2 57 1 14 5 2 43 2 15 5 2 22 3 16 6 2 54 1 17 6 2 46 2 18 6 2 26 3 19 7 2 55 1 20 7 2 46 2 21 7 2 23 3 22 8 2 60 1 23 8 2 47 2 24 8 2 25 3 > > par(cex = .6) > > with(demo3, interaction.plot(time, group, pulse, + ylim = c(10, 60), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "group")) > > demo3.aov <- aov(pulse ~ group * time + Error(id), data = demo3) > summary(demo3.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) group 1 2035.0 2035.0 343.1 1.6e-06 *** Residuals 6 35.6 5.9 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Error: Within Df Sum Sq Mean Sq F value Pr(>F) time 2 2830.3 1415.2 553.8 1.52e-12 *** group:time 2 200.3 100.2 39.2 5.47e-06 *** Residuals 12 30.7 2.6 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > ====== e.g. 4 ====== demo4 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo4.csv") ## Convert variables to factor demo4 <- within(demo4, { group <- factor(group) time <- factor(time) id <- factor(id) }) demo4 par(cex = .6) with(demo4, interaction.plot(time, group, pulse, ylim = c(10, 60), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "group")) demo4.aov <- aov(pulse ~ group * time + Error(id), data = demo4) summary(demo4.aov) {{:r:pasted:20200604-005331.png}} > > demo4 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo4.csv") > ## Convert variables to factor > demo4 <- within(demo4, { + group <- factor(group) + time <- factor(time) + id <- factor(id) + }) > > demo4 id group pulse time 1 1 1 35 1 2 1 1 25 2 3 1 1 12 3 4 2 1 34 1 5 2 1 22 2 6 2 1 13 3 7 3 1 36 1 8 3 1 21 2 9 3 1 18 3 10 4 1 35 1 11 4 1 23 2 12 4 1 15 3 13 5 2 31 1 14 5 2 43 2 15 5 2 57 3 16 6 2 35 1 17 6 2 46 2 18 6 2 58 3 19 7 2 37 1 20 7 2 48 2 21 7 2 51 3 22 8 2 32 1 23 8 2 45 2 24 8 2 53 3 > > par(cex = .6) > > with(demo4, interaction.plot(time, group, pulse, + ylim = c(10, 60), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "group")) > > demo4.aov <- aov(pulse ~ group * time + Error(id), data = demo4) > summary(demo4.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) group 1 2542.0 2542 629 2.65e-07 *** Residuals 6 24.3 4 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Error: Within Df Sum Sq Mean Sq F value Pr(>F) time 2 1 0.5 0.079 0.925 group:time 2 1736 868.2 137.079 5.44e-09 *** Residuals 12 76 6.3 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > ====== exer1 ====== exer1 <- read.csv("https://stats.idre.ucla.edu/stat/data/exer.csv") str(exer1) exer1 <- within(exer1, { diet <- factor(diet) exertype <- factor(exertype) time <- factor(time) id <- factor(id) }) ## 이제 pulse만 제외하고 모두 factor로 변환된 데이터 str(exer1) with(exer1, interaction.plot(time, diet, pulse, ylim = c(80, 120), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "diet")) with(exer1, interaction.plot(time, exertype, pulse, ylim = c(80, 120), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "time", trace.label = "exertype")) with(exer1, interaction.plot(exertype, diet, pulse, ylim = c(80, 120), lty = c(1, 12), lwd = 3, ylab = "mean of pulse", xlab = "exertype", trace.label = "diet")) exer1a.aov <- aov(pulse ~ exertype * time + Error(id/time), data = exer1) summary(exer1a.aov) exer1b.aov <- aov(pulse ~ diet * time + Error(id/time), data = exer1) summary(exer1b.aov) exer1c.aov <- aov(pulse ~ diet * exertype, data = exer1) summary(exer1c.aov) > exer1 <- read.csv("https://stats.idre.ucla.edu/stat/data/exer.csv") > str(exer1) 'data.frame': 90 obs. of 5 variables: $ id : int 1 1 1 2 2 2 3 3 3 4 ... $ diet : int 1 1 1 1 1 1 1 1 1 1 ... $ exertype: int 1 1 1 1 1 1 1 1 1 1 ... $ pulse : int 85 85 88 90 92 93 97 97 94 80 ... $ time : int 1 2 3 1 2 3 1 2 3 1 ... > exer1 <- within(exer1, { + diet <- factor(diet) + exertype <- factor(exertype) + time <- factor(time) + id <- factor(id) + }) ## 이제 pulse만 제외하고 모두 factor로 변환된 데이터 > > str(exer1) 'data.frame': 90 obs. of 5 variables: $ id : Factor w/ 30 levels "1","2","3","4",..: 1 1 1 2 2 2 3 3 3 4 ... $ diet : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ... $ exertype: Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ... $ pulse : int 85 85 88 90 92 93 97 97 94 80 ... $ time : Factor w/ 3 levels "1","2","3": 1 2 3 1 2 3 1 2 3 1 ... > with(exer1, interaction.plot(time, diet, pulse, + ylim = c(80, 120), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "diet")) > with(exer1, interaction.plot(time, exertype, pulse, + ylim = c(80, 120), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "time", trace.label = "exertype")) > > with(exer1, interaction.plot(exertype, diet, pulse, + ylim = c(80, 120), lty = c(1, 12), lwd = 3, + ylab = "mean of pulse", xlab = "exertype", trace.label = "diet")) > > > exer1a.aov <- aov(pulse ~ exertype * time + Error(id/time), data = exer1) > summary(exer1a.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) exertype 2 8326 4163 27 3.62e-07 *** Residuals 27 4163 154 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Error: id:time Df Sum Sq Mean Sq F value Pr(>F) time 2 2067 1033.3 23.54 4.45e-08 *** exertype:time 4 2723 680.8 15.51 1.65e-08 *** Residuals 54 2370 43.9 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > exer1b.aov <- aov(pulse ~ diet * time + Error(id/time), data = exer1) > summary(exer1b.aov) Error: id Df Sum Sq Mean Sq F value Pr(>F) diet 1 1262 1262 3.147 0.0869 . Residuals 28 11227 401 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Error: id:time Df Sum Sq Mean Sq F value Pr(>F) time 2 2067 1033.3 11.808 5.26e-05 *** diet:time 2 193 96.4 1.102 0.339 Residuals 56 4901 87.5 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > > exer1c.aov <- aov(pulse ~ diet * exertype, data = exer1) > summary(exer1c.aov) Df Sum Sq Mean Sq F value Pr(>F) diet 1 1262 1262 11.465 0.00108 ** exertype 2 8326 4163 37.824 1.94e-12 *** diet:exertype 2 816 408 3.706 0.02868 * Residuals 84 9245 110 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 > {{.:pasted:20260427-045018.png}} {{.:pasted:20260427-045026.png}} {{.:pasted:20260427-045032.png}} > exer1 id diet exertype pulse time 1 1 1 1 85 1 2 1 1 1 85 2 3 1 1 1 88 3 4 2 1 1 90 1 5 2 1 1 92 2 6 2 1 1 93 3 7 3 1 1 97 1 8 3 1 1 97 2 9 3 1 1 94 3 10 4 1 1 80 1 11 4 1 1 82 2 12 4 1 1 83 3 13 5 1 1 91 1 14 5 1 1 92 2 15 5 1 1 91 3 16 6 2 1 83 1 17 6 2 1 83 2 18 6 2 1 84 3 19 7 2 1 87 1 20 7 2 1 88 2 21 7 2 1 90 3 22 8 2 1 92 1 23 8 2 1 94 2 24 8 2 1 95 3 25 9 2 1 97 1 26 9 2 1 99 2 27 9 2 1 96 3 28 10 2 1 100 1 29 10 2 1 97 2 30 10 2 1 100 3 31 11 1 2 86 1 32 11 1 2 86 2 33 11 1 2 84 3 34 12 1 2 93 1 35 12 1 2 103 2 36 12 1 2 104 3 37 13 1 2 90 1 38 13 1 2 92 2 39 13 1 2 93 3 40 14 1 2 95 1 41 14 1 2 96 2 42 14 1 2 100 3 43 15 1 2 89 1 44 15 1 2 96 2 45 15 1 2 95 3 46 16 2 2 84 1 47 16 2 2 86 2 48 16 2 2 89 3 49 17 2 2 103 1 50 17 2 2 109 2 51 17 2 2 90 3 52 18 2 2 92 1 53 18 2 2 96 2 54 18 2 2 101 3 55 19 2 2 97 1 56 19 2 2 98 2 57 19 2 2 100 3 58 20 2 2 102 1 59 20 2 2 104 2 60 20 2 2 103 3 61 21 1 3 93 1 62 21 1 3 98 2 63 21 1 3 110 3 64 22 1 3 98 1 65 22 1 3 104 2 66 22 1 3 112 3 67 23 1 3 98 1 68 23 1 3 105 2 69 23 1 3 99 3 70 24 1 3 87 1 71 24 1 3 132 2 72 24 1 3 120 3 73 25 1 3 94 1 74 25 1 3 110 2 75 25 1 3 116 3 76 26 2 3 95 1 77 26 2 3 126 2 78 26 2 3 143 3 79 27 2 3 100 1 80 27 2 3 126 2 81 27 2 3 140 3 82 28 2 3 103 1 83 28 2 3 124 2 84 28 2 3 140 3 85 29 2 3 94 1 86 29 2 3 135 2 87 29 2 3 130 3 88 30 2 3 99 1 89 30 2 3 111 2 90 30 2 3 150 3 >