This is an analysis of the Cranbroo school data collected before and after the Purpose Navigator program. Load packedges

library(dplyr)
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(psych)
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## 
## The following object is masked from 'package:psych':
## 
##     %+%
library(Rmisc)
## Loading required package: lattice
## Loading required package: plyr
## -------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## -------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## 
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
library(nlme)
## 
## Attaching package: 'nlme'
## 
## The following object is masked from 'package:dplyr':
## 
##     collapse

First read in the dataset that tells us which section each students completed.

setwd("~/Dropbox/Schools Study/Cranbrook Study")
Cranbrook<-read.csv("CranbrookPN.csv")
#View(Cranbrook)
#str(Cranbrook)

See the how many students completed each section

summary(Cranbrook$Last.Complete)
##      0 1.1.12 1.1.13  1.1.7  1.1.9 2.0.10  2.0.2  2.0.5  2.0.6  2.1.1 
##      3      1      1      1      1      1      1      1      1      1 
##  2.1.4    2.2    2.3    2.4  2.5.1    2.6  2.6.1 2.6.10  2.6.4  2.6.8 
##      8      4      5      1     17      2      1      9      1      1 
##  2.6.9  3.0.1    3.1    3.2 4.1.36  4.1.4  4.2.1 5.0.13 5.0.17  5.0.3 
##      1     24     15     19      2      3      1      1      3      3 
##  5.0.4  5.0.5  5.0.6  5.0.7  5.0.9  6.0.1 
##      4      2      1      2      1     20

In order to be able to join the datasets together later we will need first and last names together

Cranbrook$Full.Name <- paste(Cranbrook$First.Name, Cranbrook$Last.Name, sep=' ')

Put names to all uppercase so that we wont have the case cause problems later when joining datasets

Cranbrook$Full.Name<-toupper(Cranbrook$Full.Name)

Remove extra space between first and last name

Cranbrook$Full.Name<-gsub("  "," ", Cranbrook$Full.Name)

remove white space before and fater words

Cranbrook$Full.Name<-str_trim(Cranbrook$Full.Name, side = c("both"))

check for duplicates

Cranbrook$Full.Name[duplicated(Cranbrook$Full.Name)]
## character(0)

Create new dataset “name_complete” that just contains Full Name and the last sction complete

name_complete<-select(Cranbrook, Full.Name, Last.Complete)
#write.csv(name_complete, file = "name_complete.csv",row.names=FALSE)

Summaries of data

#str(name_complete)
summary(name_complete)
##   Full.Name         Last.Complete
##  Length:163         3.0.1  :24   
##  Class :character   6.0.1  :20   
##  Mode  :character   3.2    :19   
##                     2.5.1  :17   
##                     3.1    :15   
##                     2.6.10 : 9   
##                     (Other):59

The dataset has sections in umber such as 1.2.3 and here we change sections to integers

name_complete$Last.Complete<-as.character(name_complete$Last.Complete)
name_complete$Last.Complete[name_complete$Last.Complete=="1.1.12"] <- 1
name_complete$Last.Complete[name_complete$Last.Complete=="1.1.13"] <- 1
name_complete$Last.Complete[name_complete$Last.Complete=="1.1.7"] <- 1
name_complete$Last.Complete[name_complete$Last.Complete=="1.1.9"] <- 1
name_complete$Last.Complete[name_complete$Last.Complete=="2.0.10"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.0.2"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.0.5"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.0.6"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.1.1"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.1.4"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.2"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.3"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.4"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.5.1"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.5.1"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6.1"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6.10"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6.4"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6.8"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="2.6.9"] <- 2
name_complete$Last.Complete[name_complete$Last.Complete=="3.0.1"] <- 3
name_complete$Last.Complete[name_complete$Last.Complete=="3.1"] <- 3
name_complete$Last.Complete[name_complete$Last.Complete=="3.2"] <- 3
name_complete$Last.Complete[name_complete$Last.Complete=="4.1.36"] <- 4
name_complete$Last.Complete[name_complete$Last.Complete=="4.2.36"] <- 4
name_complete$Last.Complete[name_complete$Last.Complete=="4.1.4"] <- 4
name_complete$Last.Complete[name_complete$Last.Complete=="4.2.1"] <- 4
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.13"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.17"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.3"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.4"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="6.0.1"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.5"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.6"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.7"] <- 5
name_complete$Last.Complete[name_complete$Last.Complete=="5.0.9"] <- 5
#View(name_complete)

Read in pre and post data from Cranbrook

cranall<-read.csv("pre_post_Cran.csv")
#View(cranall)

In order to be able to join the datasets together later we will need first and last names together

cranall$Full.Name <- paste(cranall$First.Name, cranall$Last.Name, sep=' ')

Put names to all uppercase so that we wont have the case cause problems later when joining datasets

cranall$Full.Name<-toupper(cranall$Full.Name)

Remove extra space between first and last name

cranall$Full.Name<-gsub("  "," ", cranall$Full.Name)

Remove white space before and after

cranall$Full.Name<-str_trim(cranall$Full.Name, side = c("both"))

Join bith datasets using full_join from dyplyr

cranall1<-full_join(name_complete, cranall, by="Full.Name")

check duplicates

#cranall1$Full.Name[duplicated(cranall1$Full.Name)]

mark thoes who we have no record of having done the intervention as 0 in the section complete “Last.Complete” variable

cranall1$Last.Complete[is.na(cranall1$Last.Complete)] <- 0

Remove the students who did not even start the intervention

cranall1<-filter(cranall1, Last.Complete>1)

View dataset and Last.Complete is not showing up on the second part of the dtatset. Instead it has NS’s

#View(cranall1)
#write CSV
#write.csv(cranall1, file = "cranall1.csv",row.names=FALSE)
summary(name_complete$Last.Complete)
##    Length     Class      Mode 
##       163 character character

Create new dataset with all information but only with MLQ found purpose questions

cranMLQ<-select(cranall1, Last.Complete, wave, ID, MLQ_1, MLQ_4, MLQ_5, MLQ_6, MLQ_9, Full.Name)

reverse code the negative question

items <- c("MLQ_1" ,"MLQ_4", "MLQ_5", "MLQ_6", "MLQ_9")
scaleKey <- c(1, 1, 1,1,-1)

create new veriable meanMLQ and add to dataset

cranMLQ$meanmlq  <- scoreItems(scaleKey, items=cranMLQ[,items], delete=FALSE)$score
#View(cranMLQ)

Remove NAs

cranMLQ<-cranMLQ[complete.cases(cranMLQ),]

As numeric

cranMLQ$wave<-as.numeric(cranMLQ$wave)
cranMLQ$meanmlq<-as.numeric(cranMLQ$meanmlq)

Create datasets for ploting with wave one and wave 2 as two seperate dtatsets

cranMLQT1<-filter(cranMLQ, wave == 1)
cranMLQT2<-filter(cranMLQ, wave == 2)

Plot

plot(cranMLQT1$Last.Complete, cranMLQT1$meanmlq, type="h", ylab= "Meaning in Life",  xlab = "Sections of PN Completed")

plot(cranMLQT2$Last.Complete, cranMLQT2$meanmlq, type="h", ylab= "Meaning in Life",  xlab = "Sections of PN Completed")

Plot using ggplot plots meanMLQ - Completed Sections

CranMLQSET1 <- summarySE(cranMLQT1, measurevar="meanmlq", groupvars="Last.Complete", na.rm = TRUE)
p1<-ggplot(CranMLQSET1, aes(x=Last.Complete, y=meanmlq, colour=Last.Complete)) + 
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se), width=.1) +
  labs(x="Sections Completed", y="Purpose")+
  ylim(c(1,7))+
  geom_point() +
  geom_line() +
  ggtitle("Purpose Time 1")+
  theme(legend.title = element_text(colour="black", size=10, face="bold"))+
  scale_color_discrete(name="Sections\nCompleted")

CranMLQSET2 <- summarySE(cranMLQT2, measurevar="meanmlq", groupvars="Last.Complete", na.rm = TRUE)
p2<-ggplot(CranMLQSET2, aes(x=Last.Complete, y=meanmlq, colour=Last.Complete)) + 
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se), width=.1) +
  labs(x="Sections Completed", y="Purpose")+
  ylim(c(1,7))+
  geom_point() +
  geom_line() +
  ggtitle("Purpose Time 2")+
theme(legend.title = element_text(colour="black", size=10, face="bold"))+
  scale_color_discrete(name="Sections\nCompleted")

CranMLQSET1BG <- CranMLQSET1
CranMLQSET1BG$Last.Complete <- factor(CranMLQSET1BG$Last.Complete)
p3<-ggplot(CranMLQSET1BG, aes(x=Last.Complete, y=meanmlq, fill=Last.Complete)) + 
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se),
                width=.2,                    # Width of the error bars
                position=position_dodge(.9))+
  labs(x="Sections Completed", y="Purpose")+
  theme(legend.position="none") + #removes legand
geom_line() +
  ggtitle("Purpose Time 1")


CranMLQSET2BG <- CranMLQSET2
CranMLQSET2BG$Last.Complete <- factor(CranMLQSET2BG$Last.Complete)
p4<-ggplot(CranMLQSET2BG, aes(x=Last.Complete, y=meanmlq, fill=Last.Complete)) + 
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se),
                width=.2,                    # Width of the error bars
                position=position_dodge(.9)) +
  theme(legend.position="none") + #removes legand
  labs(x="Sections Completed", y="Purpose")+
  geom_line() +
  ggtitle("Purpose Time 2")

multiplot(p1, p3, p2, p4, cols=2)
## geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
## geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
## geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
## geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

Creat table with count, mean, standard deviation, standard error of the mean, and confidence interval (95%) in order to ba able to plot.

CranMLQ <- summarySE(cranMLQ, measurevar="meanmlq", groupvars="wave", na.rm = FALSE)

Plots mean MLQ - Wave

p1<-ggplot(CranMLQ, aes(x=wave, y=meanmlq, colour=wave)) + 
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se), width=.1) +
  geom_point() +
  ylim(c(1,7))+
  geom_line() +
  ggtitle("Meaning in Life Time One to Time Two")

CranMLQSET <- CranMLQ
CranMLQSET$wave <- factor(CranMLQSET$wave)
p3<-ggplot(CranMLQSET, aes(x=wave, y=meanmlq, fill=wave)) + 
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=meanmlq-se, ymax=meanmlq+se),
                width=.2,                    # Width of the error bars
                position=position_dodge(.9))+
  theme(legend.position="none") + #removes legand
  geom_line() +
  ggtitle("Meaning in Life Time One to Time Two")


multiplot(p1, p3, cols=2)
## geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

T-test. First create a dtataset for paired t-test

paired1<-filter(cranMLQ, wave==1)
paired2<-filter(cranMLQ, wave==2)
pairedttest<-full_join(paired1,paired2, by="Full.Name")
#View(pairedttest)

Paired t-test pairs means based pre and post.

t.test(pairedttest$meanmlq.x, pairedttest$meanmlq.y, paired=T)
## 
##  Paired t-test
## 
## data:  pairedttest$meanmlq.x and pairedttest$meanmlq.y
## t = 0.45876, df = 100, p-value = 0.6474
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.1843351  0.2952262
## sample estimates:
## mean of the differences 
##              0.05544554

unpaird t-test based on wave

t.test(cranMLQ$meanmlq ~ cranMLQ$wave, paired=F)
## 
##  Welch Two Sample t-test
## 
## data:  cranMLQ$meanmlq by cranMLQ$wave
## t = 0.9028, df = 231.93, p-value = 0.3676
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.1709484  0.4601129
## sample estimates:
## mean in group 1 mean in group 2 
##        4.525714        4.381132

Boxplot of t-test

boxplot(meanmlq~wave,data=cranMLQ, main="Cranbrook", 
        xlab="Wave", ylab="MLQ")

Mixed linier models MLQ by wave (nearly the same as t-test)

TimesModel <- lme(meanmlq ~ wave, random = ~1 | ID, data = cranMLQ, method = "ML", na.action = "na.omit")
summary(TimesModel)
## Linear mixed-effects model fit by maximum likelihood
##  Data: cranMLQ 
##        AIC      BIC    logLik
##   815.0419 829.0632 -403.5209
## 
## Random effects:
##  Formula: ~1 | ID
##          (Intercept) Residual
## StdDev: 0.0001122728 1.247811
## 
## Fixed effects: meanmlq ~ wave 
##                 Value Std.Error  DF   t-value p-value
## (Intercept)  4.670296 0.2442553 145 19.120557  0.0000
## wave        -0.144582 0.1613139  99 -0.896278  0.3723
##  Correlation: 
##      (Intr)
## wave -0.945
## 
## Standardized Within-Group Residuals:
##         Min          Q1         Med          Q3         Max 
## -2.82552039 -0.58159011  0.05953284  0.65624376  2.09877038 
## 
## Number of Observations: 246
## Number of Groups: 146

Mixed linier model, MLQ based on last completed section

SectionModel <- lme(meanmlq ~ Last.Complete, random = ~1 | ID, data = cranMLQ, method = "ML", na.action = "na.omit")
summary(SectionModel)
## Linear mixed-effects model fit by maximum likelihood
##  Data: cranMLQ 
##        AIC      BIC    logLik
##   815.3146 836.3466 -401.6573
## 
## Random effects:
##  Formula: ~1 | ID
##          (Intercept) Residual
## StdDev: 9.361872e-05 1.238393
## 
## Fixed effects: meanmlq ~ Last.Complete 
##                    Value Std.Error  DF  t-value p-value
## (Intercept)     4.423256 0.1346385 145 32.85284  0.0000
## Last.Complete3 -0.111428 0.1867903  97 -0.59654  0.5522
## Last.Complete4  0.421189 0.4374312  97  0.96287  0.3380
## Last.Complete5  0.283641 0.2121468  97  1.33700  0.1843
##  Correlation: 
##                (Intr) Lst.C3 Lst.C4
## Last.Complete3 -0.721              
## Last.Complete4 -0.308  0.222       
## Last.Complete5 -0.635  0.457  0.195
## 
## Standardized Within-Group Residuals:
##         Min          Q1         Med          Q3         Max 
## -2.99331151 -0.57380412  0.07119875  0.62721938  2.17069352 
## 
## Number of Observations: 246
## Number of Groups: 146

Mixed linier model - MLQ based on last completed section and wave

SectionModel <- lme(meanmlq ~ wave * Last.Complete, random = ~1 | ID, data = cranMLQ, method = "ML", na.action = "na.omit")
summary(SectionModel)
## Linear mixed-effects model fit by maximum likelihood
##  Data: cranMLQ 
##       AIC      BIC    logLik
##   821.671 856.7243 -400.8355
## 
## Random effects:
##  Formula: ~1 | ID
##          (Intercept) Residual
## StdDev: 8.507756e-05 1.234263
## 
## Fixed effects: meanmlq ~ wave * Last.Complete 
##                         Value Std.Error  DF   t-value p-value
## (Intercept)          4.757883 0.4175934 145 11.393580  0.0000
## wave                -0.230224 0.2718033  93 -0.847023  0.3992
## Last.Complete3      -0.468027 0.5747509  93 -0.814312  0.4175
## Last.Complete4       0.852117 1.3519345  93  0.630294  0.5300
## Last.Complete5       0.278238 0.6543934  93  0.425185  0.6717
## wave:Last.Complete3  0.245822 0.3793989  93  0.647924  0.5186
## wave:Last.Complete4 -0.299776 0.8845635  93 -0.338897  0.7355
## wave:Last.Complete5  0.000163 0.4296243  93  0.000380  0.9997
##  Correlation: 
##                     (Intr) wave   Lst.C3 Lst.C4 Lst.C5 w:L.C3 w:L.C4
## wave                -0.946                                          
## Last.Complete3      -0.727  0.687                                   
## Last.Complete4      -0.309  0.292  0.224                            
## Last.Complete5      -0.638  0.604  0.464  0.197                     
## wave:Last.Complete3  0.678 -0.716 -0.945 -0.209 -0.433              
## wave:Last.Complete4  0.291 -0.307 -0.211 -0.946 -0.186  0.220       
## wave:Last.Complete5  0.599 -0.633 -0.435 -0.185 -0.945  0.453  0.194
## 
## Standardized Within-Group Residuals:
##         Min          Q1         Med          Q3         Max 
## -3.08367054 -0.58103750  0.06396316  0.71078497  2.18312090 
## 
## Number of Observations: 246
## Number of Groups: 146