1. The statement of the research/ study purpose H0: Motor skills (performance score) of elederly population are equal (Condition1 = Condition2 = Condition3) H1: at least one pair of scores differ from one another

2.The type of analysis conducted, i.e. D’Agostino test, Scatterplot of residuals, Bartlett test. etc.

  1. Descriptive statistics: basic information of the data, i.e. age and gender of the participants.

4.The ANOVA test

  1. Post-hoc analysis

6.Effect size

7.Conclusions

library(readxl)
data3 <- read_excel("Lab3.xlsx")
names(data3)
## [1] "Age"               "Performance_score" "Condition"
str(data3)
## tibble [89 × 3] (S3: tbl_df/tbl/data.frame)
##  $ Age              : num [1:89] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Performance_score: num [1:89] 36 39 35 36 37 35 36 37 35 35 ...
##  $ Condition        : num [1:89] 1 1 1 1 1 1 1 1 1 2 ...
summary(data3)
##       Age    Performance_score   Condition    
##  Min.   :1   Min.   :15.00     Min.   :1.000  
##  1st Qu.:1   1st Qu.:24.00     1st Qu.:1.000  
##  Median :2   Median :27.00     Median :2.000  
##  Mean   :2   Mean   :27.52     Mean   :2.034  
##  3rd Qu.:3   3rd Qu.:32.00     3rd Qu.:3.000  
##  Max.   :3   Max.   :39.00     Max.   :3.000

Assumptions

library(moments)
plot(density(data3$Performance_score), main = "Density Plot")

qqnorm(data3$Performance_score)

agostino.test(data3$Performance_score)
## 
##  D'Agostino skewness test
## 
## data:  data3$Performance_score
## skew = -0.11171, z = -0.45976, p-value = 0.6457
## alternative hypothesis: data have a skewness
shapiro.test(data3$Performance_score)
## 
##  Shapiro-Wilk normality test
## 
## data:  data3$Performance_score
## W = 0.9755, p-value = 0.09018
anscombe.test(data3$Performance_score)
## 
##  Anscombe-Glynn kurtosis test
## 
## data:  data3$Performance_score
## kurt = 2.2365, z = -2.0554, p-value = 0.03984
## alternative hypothesis: kurtosis is not equal to 3

Residual plot (lm - linear model)

performance.lm <- lm(Performance_score ~ Condition, data = data3)
performance.lm
## 
## Call:
## lm(formula = Performance_score ~ Condition, data = data3)
## 
## Coefficients:
## (Intercept)    Condition  
##      36.686       -4.509
performance.res <- resid(performance.lm) #OR performance.res <- residuals(performance.lm)
performance.res
##          1          2          3          4          5          6          7 
##  3.8225868  6.8225868  2.8225868  3.8225868  4.8225868  2.8225868  3.8225868 
##          8          9         10         11         12         13         14 
##  4.8225868  2.8225868  7.3311713  6.3311713  3.3311713  4.3311713  5.3311713 
##         15         16         17         18         19         20         21 
##  5.3311713  6.3311713  7.3311713  6.3311713  4.3311713  6.8397558  6.8397558 
##         22         23         24         25         26         27         28 
##  4.8397558  4.8397558  5.8397558  5.8397558  2.8397558  3.8397558  3.8397558 
##         29         30         31         32         33         34         35 
##  4.8397558  1.8225868  0.8225868  2.8225868 -0.1774132  4.8225868  0.8225868 
##         36         37         38         39         40         41         42 
##  1.8225868 -0.1774132 -1.1774132 -0.1774132  2.3311713  0.3311713  0.3311713 
##         43         44         45         46         47         48         49 
## -0.6688287 -0.6688287 -1.6688287 -1.6688287  0.3311713  1.3311713 -1.6688287 
##         50         51         52         53         54         55         56 
##  1.8397558 -0.1602442 -0.1602442  0.8397558  1.8397558  0.8397558 -0.1602442 
##         57         58         59         60         61         62         63 
## -2.1602442 -1.1602442  0.8397558  0.8397558 -5.1774132 -4.1774132 -5.1774132 
##         64         65         66         67         68         69         70 
## -6.1774132 -7.1774132 -6.1774132 -7.1774132 -5.1774132 -4.1774132 -4.6688287 
##         71         72         73         74         75         76         77 
## -5.6688287 -3.6688287 -5.6688287 -3.6688287 -2.6688287 -3.6688287 -4.6688287 
##         78         79         80         81         82         83         84 
## -6.6688287 -7.6688287 -4.1602442 -6.1602442 -6.1602442 -5.1602442 -4.1602442 
##         85         86         87         88         89 
## -7.1602442 -6.1602442 -5.1602442 -4.1602442 -8.1602442
plot(data3$Performance_score, performance.res, ylab = "Residual", xlab = "Condition", main = "Independence of Observation")
abline(0, 0)

bartlett.test(data3$Performance_score, data3$Condition)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  data3$Performance_score and data3$Condition
## Bartlett's K-squared = 0.14381, df = 2, p-value = 0.9306

Variance are equal. p-value = 0.9306 failed to reject the null hypothesis

Checking variance among groups

tapply(data3$Performance_score, data3$Condition, var)
##        1        2        3 
## 18.36508 20.94713 20.72903

Ratio of largest variance to smallest variance 20.95/18.37 = 1.1 - is way less than 3 (signifies that there is no issue with failing to reject null hypothesis)

After checking all the assumptions fulfill our criteria, now I will perform ANOVA with Blocking Design

IV - 3 conditions (predictor) categorical DV - performance score (outcome) continuous

Testing Additivity of Interactions - To check there is no interaction between predictor/IV - conditions and block - age (Interaction variable - factor(Condition)*factor(Age))

Performing the linear model:

model1 <- aov(Performance_score ~ factor(Condition)*factor(Age), data = data3) 
model1
## Call:
##    aov(formula = Performance_score ~ factor(Condition) * factor(Age), 
##     data = data3)
## 
## Terms:
##                 factor(Condition) factor(Age) factor(Condition):factor(Age)
## Sum of Squares          1199.0299   1549.6499                       22.6398
## Deg. of Freedom                 2           2                             4
##                 Residuals
## Sum of Squares   152.9051
## Deg. of Freedom        80
## 
## Residual standard error: 1.382502
## Estimated effects may be unbalanced
summary(model1)
##                               Df Sum Sq Mean Sq F value Pr(>F)    
## factor(Condition)              2 1199.0   599.5 313.667 <2e-16 ***
## factor(Age)                    2 1549.6   774.8 405.389 <2e-16 ***
## factor(Condition):factor(Age)  4   22.6     5.7   2.961 0.0246 *  
## Residuals                     80  152.9     1.9                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interaction effect

factor(Condition):factor(Age) is not sifnificant (p-value < 0.05)

model2 <- aov(Performance_score ~ factor(Condition), data = data3)
model2
## Call:
##    aov(formula = Performance_score ~ factor(Condition), data = data3)
## 
## Terms:
##                 factor(Condition) Residuals
## Sum of Squares           1199.030  1725.195
## Deg. of Freedom                 2        86
## 
## Residual standard error: 4.478884
## Estimated effects may be unbalanced
summary(model2)
##                   Df Sum Sq Mean Sq F value  Pr(>F)    
## factor(Condition)  2   1199   599.5   29.89 1.4e-10 ***
## Residuals         86   1725    20.1                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Effect of condition is significant

Other Models for comparison

model3 <- aov(Performance_score ~ factor(Age), data = data3)
model3
## Call:
##    aov(formula = Performance_score ~ factor(Age), data = data3)
## 
## Terms:
##                 factor(Age) Residuals
## Sum of Squares     1549.733  1374.492
## Deg. of Freedom           2        86
## 
## Residual standard error: 3.997807
## Estimated effects may be unbalanced
summary(model3)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## factor(Age)  2   1550   774.9   48.48 7.97e-15 ***
## Residuals   86   1374    16.0                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model4 <- aov(Performance_score ~ factor(Condition) + factor(Age), data = data3)
model4
## Call:
##    aov(formula = Performance_score ~ factor(Condition) + factor(Age), 
##     data = data3)
## 
## Terms:
##                 factor(Condition) factor(Age) Residuals
## Sum of Squares          1199.0299   1549.6499  175.5449
## Deg. of Freedom                 2           2        84
## 
## Residual standard error: 1.445621
## Estimated effects may be unbalanced
summary(model4)
##                   Df Sum Sq Mean Sq F value Pr(>F)    
## factor(Condition)  2 1199.0   599.5   286.9 <2e-16 ***
## factor(Age)        2 1549.6   774.8   370.8 <2e-16 ***
## Residuals         84  175.5     2.1                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Age can not be considered a block as there is significant Interaction effect.

Analysis of Variance Table

anova(model1, model2)
## Analysis of Variance Table
## 
## Model 1: Performance_score ~ factor(Condition) * factor(Age)
## Model 2: Performance_score ~ factor(Condition)
##   Res.Df     RSS Df Sum of Sq     F    Pr(>F)    
## 1     80  152.91                                 
## 2     86 1725.19 -6   -1572.3 137.1 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

To find out what group differs from the others

library(pgirmess)
## Warning: package 'pgirmess' was built under R version 4.3.2

Pairwise comparisons using t tests - Bonferroni Method

pairwise.t.test(data3$Performance_score, data3$Condition, paired = FALSE, p.adjust.method = "bonferroni")
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  data3$Performance_score and data3$Condition 
## 
##   1      2     
## 2 0.0017 -     
## 3 6e-11  0.0002
## 
## P value adjustment method: bonferroni

Significant difference between condition 1, 2, and 3 noted.

Kurskal-Wallis:

kruskalmc(Performance_score ~ factor(Condition), data = data3)
## Multiple comparison test after Kruskal-Wallis 
## alpha: 0.05 
## Comparisons
##      obs.dif critical.dif stat.signif
## 1-2 19.60357     16.25251        TRUE
## 1-3 39.31970     16.12547        TRUE
## 2-3 19.71613     15.84052        TRUE

Tukey’s Test:

TukeyHSD(model1)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Performance_score ~ factor(Condition) * factor(Age), data = data3)
## 
## $`factor(Condition)`
##          diff       lwr       upr p adj
## 2-1 -4.204762 -5.072310 -3.337214     0
## 3-1 -9.006912 -9.867679 -8.146146     0
## 3-2 -4.802151 -5.647707 -3.956594     0
## 
## $`factor(Age)`
##           diff        lwr       upr p adj
## 2-1  -4.516166  -5.369099 -3.663233     0
## 3-1 -10.310345 -11.177377 -9.443313     0
## 3-2  -5.794179  -6.647112 -4.941246     0
## 
## $`factor(Condition):factor(Age)`
##                diff        lwr         upr     p adj
## 2:1-1:1  -2.9222222  -4.947474  -0.8969700 0.0005097
## 3:1-1:1  -8.0222222 -10.047474  -5.9969700 0.0000000
## 1:2-1:1  -2.9222222  -4.947474  -0.8969700 0.0005097
## 2:2-1:1  -8.7222222 -10.747474  -6.6969700 0.0000000
## 3:2-1:1 -12.7676768 -14.748843 -10.7865103 0.0000000
## 1:3-1:1  -9.6666667 -11.744532  -7.5888017 0.0000000
## 2:3-1:1 -13.4222222 -15.447474 -11.3969700 0.0000000
## 3:3-1:1 -18.7222222 -20.747474 -16.6969700 0.0000000
## 3:1-2:1  -5.1000000  -7.071236  -3.1287642 0.0000000
## 1:2-2:1   0.0000000  -1.971236   1.9712358 1.0000000
## 2:2-2:1  -5.8000000  -7.771236  -3.8287642 0.0000000
## 3:2-2:1  -9.8454545 -11.771369  -7.9195406 0.0000000
## 1:3-2:1  -6.7444444  -8.769697  -4.7191922 0.0000000
## 2:3-2:1 -10.5000000 -12.471236  -8.5287642 0.0000000
## 3:3-2:1 -15.8000000 -17.771236 -13.8287642 0.0000000
## 1:2-3:1   5.1000000   3.128764   7.0712358 0.0000000
## 2:2-3:1  -0.7000000  -2.671236   1.2712358 0.9674422
## 3:2-3:1  -4.7454545  -6.671369  -2.8195406 0.0000000
## 1:3-3:1  -1.6444444  -3.669697   0.3808078 0.2078478
## 2:3-3:1  -5.4000000  -7.371236  -3.4287642 0.0000000
## 3:3-3:1 -10.7000000 -12.671236  -8.7287642 0.0000000
## 2:2-1:2  -5.8000000  -7.771236  -3.8287642 0.0000000
## 3:2-1:2  -9.8454545 -11.771369  -7.9195406 0.0000000
## 1:3-1:2  -6.7444444  -8.769697  -4.7191922 0.0000000
## 2:3-1:2 -10.5000000 -12.471236  -8.5287642 0.0000000
## 3:3-1:2 -15.8000000 -17.771236 -13.8287642 0.0000000
## 3:2-2:2  -4.0454545  -5.971369  -2.1195406 0.0000001
## 1:3-2:2  -0.9444444  -2.969697   1.0808078 0.8583631
## 2:3-2:2  -4.7000000  -6.671236  -2.7287642 0.0000000
## 3:3-2:2 -10.0000000 -11.971236  -8.0287642 0.0000000
## 1:3-3:2   3.1010101   1.119844   5.0821766 0.0001161
## 2:3-3:2  -0.6545455  -2.580459   1.2713685 0.9750171
## 3:3-3:2  -5.9545455  -7.880459  -4.0286315 0.0000000
## 2:3-1:3  -3.7555556  -5.780808  -1.7303033 0.0000028
## 3:3-1:3  -9.0555556 -11.080808  -7.0303033 0.0000000
## 3:3-2:3  -5.3000000  -7.271236  -3.3287642 0.0000000

Relevant stats for each factor level (only relevant output pasted below):

library(pastecs)
## Warning: package 'pastecs' was built under R version 4.3.2
library(compute.es)

by(data3$Performance_score, data3$Condition, stat.desc)
## data3$Condition: 1
##      nbr.val     nbr.null       nbr.na          min          max        range 
##   28.0000000    0.0000000    0.0000000   25.0000000   39.0000000   14.0000000 
##          sum       median         mean      SE.mean CI.mean.0.95          var 
##  898.0000000   33.0000000   32.0714286    0.8098739    1.6617239   18.3650794 
##      std.dev     coef.var 
##    4.2854497    0.1336220 
## ------------------------------------------------------------ 
## data3$Condition: 2
##      nbr.val     nbr.null       nbr.na          min          max        range 
##   30.0000000    0.0000000    0.0000000   20.0000000   35.0000000   15.0000000 
##          sum       median         mean      SE.mean CI.mean.0.95          var 
##  836.0000000   27.5000000   27.8666667    0.8356061    1.7090064   20.9471264 
##      std.dev     coef.var 
##    4.5768031    0.1642393 
## ------------------------------------------------------------ 
## data3$Condition: 3
##      nbr.val     nbr.null       nbr.na          min          max        range 
##   31.0000000    0.0000000    0.0000000   15.0000000   30.0000000   15.0000000 
##          sum       median         mean      SE.mean CI.mean.0.95          var 
##  715.0000000   24.0000000   23.0645161    0.8177276    1.6700226   20.7290323 
##      std.dev     coef.var 
##    4.5529147    0.1973991

n - sample size, M - mean, SD - standard deviation Condition 1 (n = 28, M = 32.07 , SD = 4.3) Condition 2 (n = 30, M = 27.87, SD = 4.6) Condition 3 (n = 31, M = 23.06, SD = 4.6)

Option 1 will compare Condition 1 and 2 ~ Performace_score vs Condition

mes(27.87, 32.07, 4.6, 4.3, 30, 28)
## Mean Differences ES: 
##  
##  d [ 95 %CI] = -0.94 [ -1.48 , -0.4 ] 
##   var(d) = 0.08 
##   p-value(d) = 0 
##   U3(d) = 17.31 % 
##   CLES(d) = 25.26 % 
##   Cliff's Delta = -0.49 
##  
##  g [ 95 %CI] = -0.93 [ -1.46 , -0.39 ] 
##   var(g) = 0.07 
##   p-value(g) = 0 
##   U3(g) = 17.63 % 
##   CLES(g) = 25.55 % 
##  
##  Correlation ES: 
##  
##  r [ 95 %CI] = -0.43 [ -0.62 , -0.2 ] 
##   var(r) = 0.01 
##   p-value(r) = 0 
##  
##  z [ 95 %CI] = -0.46 [ -0.73 , -0.2 ] 
##   var(z) = 0.02 
##   p-value(z) = 0 
##  
##  Odds Ratio ES: 
##  
##  OR [ 95 %CI] = 0.18 [ 0.07 , 0.48 ] 
##   p-value(OR) = 0 
##  
##  Log OR [ 95 %CI] = -1.71 [ -2.69 , -0.72 ] 
##   var(lOR) = 0.25 
##   p-value(Log OR) = 0 
##  
##  Other: 
##  
##  NNT = -6.14 
##  Total N = 58

Option 2 will compare Condition 2 and 3 ~ Performace_score vs Condition

mes(23.06, 27.87, 4.6, 4.6, 31, 30)
## Mean Differences ES: 
##  
##  d [ 95 %CI] = -1.05 [ -1.58 , -0.51 ] 
##   var(d) = 0.07 
##   p-value(d) = 0 
##   U3(d) = 14.79 % 
##   CLES(d) = 22.98 % 
##   Cliff's Delta = -0.54 
##  
##  g [ 95 %CI] = -1.03 [ -1.56 , -0.5 ] 
##   var(g) = 0.07 
##   p-value(g) = 0 
##   U3(g) = 15.1 % 
##   CLES(g) = 23.27 % 
##  
##  Correlation ES: 
##  
##  r [ 95 %CI] = -0.47 [ -0.64 , -0.25 ] 
##   var(r) = 0.01 
##   p-value(r) = 0 
##  
##  z [ 95 %CI] = -0.51 [ -0.77 , -0.25 ] 
##   var(z) = 0.02 
##   p-value(z) = 0 
##  
##  Odds Ratio ES: 
##  
##  OR [ 95 %CI] = 0.15 [ 0.06 , 0.4 ] 
##   p-value(OR) = 0 
##  
##  Log OR [ 95 %CI] = -1.9 [ -2.87 , -0.93 ] 
##   var(lOR) = 0.25 
##   p-value(Log OR) = 0 
##  
##  Other: 
##  
##  NNT = -5.87 
##  Total N = 61

Option 3 will compare Condition 1 and 3 ~ Performace_score vs Condition

mes(23.06, 32.07, 4.6, 4.3, 31, 28)
## Mean Differences ES: 
##  
##  d [ 95 %CI] = -2.02 [ -2.65 , -1.39 ] 
##   var(d) = 0.1 
##   p-value(d) = 0 
##   U3(d) = 2.17 % 
##   CLES(d) = 7.66 % 
##   Cliff's Delta = -0.85 
##  
##  g [ 95 %CI] = -1.99 [ -2.61 , -1.37 ] 
##   var(g) = 0.1 
##   p-value(g) = 0 
##   U3(g) = 2.31 % 
##   CLES(g) = 7.93 % 
##  
##  Correlation ES: 
##  
##  r [ 95 %CI] = -0.72 [ -0.82 , -0.56 ] 
##   var(r) = 0 
##   p-value(r) = 0 
##  
##  z [ 95 %CI] = -0.9 [ -1.16 , -0.64 ] 
##   var(z) = 0.02 
##   p-value(z) = 0 
##  
##  Odds Ratio ES: 
##  
##  OR [ 95 %CI] = 0.03 [ 0.01 , 0.08 ] 
##   p-value(OR) = 0 
##  
##  Log OR [ 95 %CI] = -3.66 [ -4.8 , -2.53 ] 
##   var(lOR) = 0.34 
##   p-value(Log OR) = 0 
##  
##  Other: 
##  
##  NNT = -5.05 
##  Total N = 59

Effect size (more than or equal to) < = 0.1 is small, 0.25 is medium, 0.4 is large (Cohen, 1988)

Summary of ANOVA:

Observations from the study were analyzed by conducting a one-way analysis of variance using R version 3.6.1. First, all assumptions are met and there is no adjustment made. Results suggest that the task conditions (predictor) has a significant effect on performace score (outcome) (F(2, 86) = 29.89, p < .001). [We can not consider age group as blocks because it also has a significant effect on outcomes F(1, 87) = 60.21, p < .001.] Continuing the discussion with specifically which task condition produced the signiificantaly differed measures of the performance score, a Tukey’s hoc test was established. The result suggested that there is a significant difference between task condition 1 and 2, condition 2 and 3, and condition 1 and 3 (All p-value < 0.001) in terms of the performance score. The effect were large, Cohen’ D = 0.95, 1.05, and 2.02.