Repeated Measures for MLQ

# Loading the dataset that has been reset into a long version
load("datatest.RData")
# Creating a new variable that is the mean of all positive purpose MLQ
# questions
data.test$MLQP <- apply(data.test[, c("MLQ1", "MLQ4", "MLQ5", "MLQ6")], 1, mean, 
    na.rm = TRUE)

For lme to work GROUP and ID need to be seen as factors

data.test$GROUP <- as.factor(data.test$GROUP)
data.test$ID <- as.factor(data.test$ID)
# Load the psych package
library(psych)

Describe the MLQ variable by the GROUP variable

describeBy(data.test$MLQP, group = data.test$GROUP)
## group: -1
##   vars  n mean   sd median trimmed mad min max range  skew kurtosis   se
## 1    1 62 4.92 1.11   4.88    4.92 1.3 1.5   7   5.5 -0.19     0.07 0.14
## -------------------------------------------------------- 
## group: 1
##   vars  n mean   sd median trimmed  mad min max range  skew kurtosis   se
## 1    1 54 5.19 1.37   5.25    5.29 1.48   2   7     5 -0.42    -0.65 0.19

Create a plot that visualizes MLQ variable by the GROUP variable

library(ggplot2)
## 
## Attaching package: 'ggplot2'
## 
## The following object is masked from 'package:psych':
## 
##     %+%
qplot(GROUP, MLQP, data = data.test, geom = "boxplot")

plot of chunk unnamed-chunk-4


# Load the nlme package
library(nlme)

Compact Model we begin by specifying a baseline model in which the DV, MLQ, is predicted by its overall mean.

baseline <- lme(MLQP ~ 1, random = ~1 | GROUP, data = data.test, method = "ML")

Augmented Model we specify our model of interest, in which MLQ is predicted instead by GROUP, which was repeated within subjects.

MLQModel <- lme(MLQP ~ GROUP, random = ~1 | GROUP, data = data.test, method = "ML")

To assess the significance of our model we compare it to the baseline model. By comparing the models we ask whether GROUP as a predictor is significantly better than the simple mean model (i.e., a better fit). We can do this with the anova() function.

anova(baseline, MLQModel)
##          Model df   AIC   BIC logLik   Test L.Ratio p-value
## baseline     1  3 384.2 392.5 -189.1                       
## MLQModel     2  4 384.8 395.8 -188.4 1 vs 2   1.398  0.2371

The output contains a few indicators of model fit. Generally with AIC (i.e., Akaike information criterion) and BIC (i.e., Bayesian information criterion), the lower the number the better the model, as it implies either a more parsimonious model, a better fit, or both. The likelihood ratio indicates that our MLQPModel is not a better fit for the data than our baseline model (p > 0.05). Therefore, the GROUP had a no impact on the MLQ of the participants.

summary(MLQModel)
## Warning: NaNs produced
## Linear mixed-effects model fit by maximum likelihood
##  Data: data.test 
##     AIC   BIC logLik
##   384.8 395.8 -188.4
## 
## Random effects:
##  Formula: ~1 | GROUP
##         (Intercept) Residual
## StdDev:   3.197e-05    1.228
## 
## Fixed effects: MLQP ~ GROUP 
##             Value Std.Error  DF t-value p-value
## (Intercept) 4.923    0.1573 114  31.297       0
## GROUP1      0.271    0.2306   0   1.176     NaN
##  Correlation: 
##        (Intr)
## GROUP1 -0.682
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -2.78793 -0.75199  0.04524  0.71979  1.69115 
## 
## Number of Observations: 116
## Number of Groups: 2
library(multcomp)
## Loading required package: mvtnorm
## Loading required package: survival
## Loading required package: splines
## Loading required package: TH.data
posthoc <- glht(MLQModel, linfct = mcp(GROUP = "Tukey"))
summary(posthoc)
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: lme.formula(fixed = MLQP ~ GROUP, data = data.test, random = ~1 | 
##     GROUP, method = "ML")
## 
## Linear Hypotheses:
##             Estimate Std. Error z value Pr(>|z|)
## 1 - -1 == 0    0.271      0.229    1.19     0.24
## (Adjusted p values reported -- single-step method)

Wilcox’s Robust ANOVA

library(WRS)
## Loading required package: MASS
## Loading required package: akima
## Loading required package: robustbase
## 
## Attaching package: 'robustbase'
## 
## The following object is masked from 'package:survival':
## 
##     heart
## 
## The following object is masked from 'package:psych':
## 
##     cushny
## 
## 
## Attaching package: 'WRS'
## 
## The following object is masked from 'package:robustbase':
## 
##     hard.rejection
## 
## The following object is masked from 'package:MASS':
## 
##     ltsreg
## 
## The following objects are masked from 'package:psych':
## 
##     omega, skew
## 
## The following object is masked from 'package:stats':
## 
##     ecdf
## 
## The following object is masked from 'package:grDevices':
## 
##     bmp
rmanova(data.test)
## [1] "The number of groups to be compared is"
## [1] 93
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Error: non-numeric argument to binary operator
# These seem not to work
rmmcp(data.test)
## Error: subscript out of bounds
# These seem not to work

Two way repeated measures



p <- ggplot(data.test, aes(GROUP, MLQP))
p + geom_boxplot(aes(fill = wave))
## Error: 'x' and 'units' must have length > 0

Graphing the Two-Way Interaction, although it seems not to do what it is supposed to do (not sure why)!

# Load the nlme package
library(nlme)

I am not sure if I am doing this right

baseline <- lme(MLQP ~ 1, random = ~1 | ID/GROUP/wave, data = data.test, method = "ML")

MLQPModel <- lme(MLQP ~ GROUP, random = ~1 | ID/GROUP/wave, data = data.test, 
    method = "ML")

MLQP2Model <- lme(MLQP ~ GROUP + wave, random = ~1 | ID/GROUP/wave, data = data.test, 
    method = "ML")

fullModel <- lme(MLQP ~ GROUP * wave, random = ~1 | ID/GROUP/wave, data = data.test, 
    method = "ML")

We again the significance of our models by comparing them from the baseline model using the anova() function.


anova(baseline, MLQModel, MLQP2Model, fullModel)
##            Model df   AIC   BIC logLik   Test L.Ratio p-value
## baseline       1  5 370.7 384.4 -180.3                       
## MLQModel       2  4 384.8 395.8 -188.4 1 vs 2   16.15   1e-04
## MLQP2Model     3  7 356.0 375.3 -171.0 2 vs 3   34.83  <.0001
## fullModel      4  8 342.7 364.8 -163.4 3 vs 4   15.28   1e-04
summary(fullModel)
## Warning: NaNs produced
## Linear mixed-effects model fit by maximum likelihood
##  Data: data.test 
##     AIC   BIC logLik
##   342.7 364.8 -163.4
## 
## Random effects:
##  Formula: ~1 | ID
##         (Intercept)
## StdDev:      0.7003
## 
##  Formula: ~1 | GROUP %in% ID
##         (Intercept)
## StdDev:      0.7364
## 
##  Formula: ~1 | wave %in% GROUP %in% ID
##         (Intercept) Residual
## StdDev:       0.521   0.2634
## 
## Fixed effects: MLQP ~ GROUP * wave 
##              Value Std.Error DF t-value p-value
## (Intercept)  4.652    0.2949 67  15.778  0.0000
## GROUP1      -1.130    0.4306  0  -2.623     NaN
## wave         0.139    0.1615 45   0.859  0.3951
## GROUP1:wave  0.995    0.2403 45   4.143  0.0001
##  Correlation: 
##             (Intr) GROUP1 wave  
## GROUP1      -0.684              
## wave        -0.768  0.526       
## GROUP1:wave  0.517 -0.774 -0.670
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -0.80018 -0.21290 -0.02463  0.20221  0.64168 
## 
## Number of Observations: 116
## Number of Groups: 
##                      ID           GROUP %in% ID wave %in% GROUP %in% ID 
##                      68                      69                     116