Source code: https://github.com/markziemann/survey_stats_mat
A survey based study into student preferences for a polling tool in revision lessons.
Below are the survey questions given to students.
face-to-face
recording
livestream
did not attend
Yes, 1
Yes >1
No
Extremely comfortable
Neutral
Extremely comfortable
Extremely useful
Very useful
Moderately useful
Slightly useful
Not useful at all
Very Satisfied
Satisfied
Somewhat Satisfied
Neutral
Somewhat Dissatisfied
Dissatisfied
Very Dissatisfied
Qualitative answer in text box.
Face-to-face
Recording
Livestream
Did not attend
Yes, 1
Yes >1
No
Extremely comfortable
Neutral
Extremely comfortable
Extremely useful
Very useful
Moderately useful
Slightly useful
Not useful at all
Very Satisfied
Satisfied
Somewhat Satisfied
Neutral
Somewhat Dissatisfied
Dissatisfied
Very Dissatisfied
Qualitative answer in text box.
Class 1 with traditional method
Class 2 with Socrative
Traditional method
Socrative method
x <- read.csv("Revision Class Survey SLE346 T2 2019_September 12, 2019_11.26_for MZ fmt.csv")
head(x)
## StartDate EndDate Status IPAddress Progress
## 1 27/08/2019 9:53 27/08/2019 9:55 IP Address 128.184.189.40 100
## 2 27/08/2019 10:22 27/08/2019 10:24 IP Address 128.184.189.40 100
## 3 27/08/2019 10:24 27/08/2019 10:25 IP Address 128.184.189.40 100
## 4 27/08/2019 10:27 27/08/2019 10:28 IP Address 128.184.189.40 100
## 5 27/08/2019 10:28 27/08/2019 10:29 IP Address 128.184.189.40 100
## 6 27/08/2019 10:29 27/08/2019 10:30 IP Address 128.184.189.40 100
## Duration..in.seconds. Finished RecordedDate ResponseId
## 1 96 TRUE 27/08/2019 9:55 R_10pmhlMdMQkd1RC
## 2 66 TRUE 27/08/2019 10:24 R_3EHk5acI62QdeAa
## 3 82 TRUE 27/08/2019 10:25 R_9Yse4r7oMuWjhMR
## 4 55 TRUE 27/08/2019 10:28 R_3psTOaN2YhV9W2X
## 5 49 TRUE 27/08/2019 10:29 R_3EFrLhU2bjIytEf
## 6 54 TRUE 27/08/2019 10:30 R_1rB1ToP69zj3y3O
## RecipientLastName RecipientFirstName RecipientEmail ExternalReference
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 NA NA NA NA
## 4 NA NA NA NA
## 5 NA NA NA NA
## 6 NA NA NA NA
## LocationLatitude LocationLongitude DistributionChannel UserLanguage
## 1 -38.2097 144.3022 anonymous EN
## 2 -38.2097 144.3022 anonymous EN
## 3 -38.2097 144.3022 anonymous EN
## 4 -38.2097 144.3022 anonymous EN
## 5 -38.2097 144.3022 anonymous EN
## 6 -38.2097 144.3022 anonymous EN
## Q1 Q2
## 1 Attend the class face-to-face? No
## 2 Attend the class face-to-face? No
## 3 Attend the class face-to-face? Yes (more than one question)
## 4 Attend the class face-to-face? No
## 5 Attend the class face-to-face? No
## 6 Watch a livestream of the class? No
## Q3 Q4 Q5
## 1 Neither comfortable nor uncomfortable Extremely useful Very Satisfied
## 2 Moderately comfortable Very useful Satisfied
## 3 Moderately comfortable Very useful Satisfied
## 4 Extremely comfortable Very useful Satisfied
## 5 Moderately comfortable Very useful Somewhat Satisfied
## 6 Very useful Satisfied
## Q6
## 1
## 2
## 3 Might have been good to have a quick topic revision then the questions
## 4
## 5
## 6
## Q7 Q8
## 1 Attend the class face-to-face? Yes (all or almost all of the questions)
## 2 Attend the class face-to-face? Yes (all or almost all of the questions)
## 3 Attend the class face-to-face? Yes (all or almost all of the questions)
## 4 Attend the class face-to-face? Yes (but only a few of the questions)
## 5 Attend the class face-to-face? No
## 6 Attend the class face-to-face? Yes (but only a few of the questions)
## Q9 Q10 Q11 Q12
## 1 Extremely comfortable Extremely useful Very Satisfied
## 2 Extremely comfortable Moderately useful Satisfied
## 3 Extremely comfortable Very useful Satisfied As before
## 4 Moderately comfortable Very useful Satisfied
## 5 Moderately comfortable Very useful Satisfied
## 6 Slightly comfortable Extremely useful Very Satisfied
## Q13 Q14 Q12...Topics
## 1 Class 2 (using Socrative) Socrative Method (Class 2 style)
## 2 Class 1 (traditional method) Socrative Method (Class 2 style)
## 3 Class 2 (using Socrative) Socrative Method (Class 2 style) Unknown
## 4 Class 1 (traditional method) Traditional Method (Class 1 style)
## 5 Class 2 (using Socrative) Socrative Method (Class 2 style)
## 6 Class 2 (using Socrative) Socrative Method (Class 2 style)
## Q12...Parent.Topics Q6...Topics Q6...Parent.Topics
## 1 NA NA
## 2 NA NA
## 3 NA Unknown NA
## 4 NA NA
## 5 NA NA
## 6 NA NA
str(x)
## 'data.frame': 18 obs. of 35 variables:
## $ StartDate : chr "27/08/2019 9:53" "27/08/2019 10:22" "27/08/2019 10:24" "27/08/2019 10:27" ...
## $ EndDate : chr "27/08/2019 9:55" "27/08/2019 10:24" "27/08/2019 10:25" "27/08/2019 10:28" ...
## $ Status : chr "IP Address" "IP Address" "IP Address" "IP Address" ...
## $ IPAddress : chr "128.184.189.40" "128.184.189.40" "128.184.189.40" "128.184.189.40" ...
## $ Progress : int 100 100 100 100 100 100 100 100 100 100 ...
## $ Duration..in.seconds.: int 96 66 82 55 49 54 66 110 49 54 ...
## $ Finished : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
## $ RecordedDate : chr "27/08/2019 9:55" "27/08/2019 10:24" "27/08/2019 10:25" "27/08/2019 10:28" ...
## $ ResponseId : chr "R_10pmhlMdMQkd1RC" "R_3EHk5acI62QdeAa" "R_9Yse4r7oMuWjhMR" "R_3psTOaN2YhV9W2X" ...
## $ RecipientLastName : logi NA NA NA NA NA NA ...
## $ RecipientFirstName : logi NA NA NA NA NA NA ...
## $ RecipientEmail : logi NA NA NA NA NA NA ...
## $ ExternalReference : logi NA NA NA NA NA NA ...
## $ LocationLatitude : num -38.2 -38.2 -38.2 -38.2 -38.2 ...
## $ LocationLongitude : num 144 144 144 144 144 ...
## $ DistributionChannel : chr "anonymous" "anonymous" "anonymous" "anonymous" ...
## $ UserLanguage : chr "EN" "EN" "EN" "EN" ...
## $ Q1 : chr "Attend the class face-to-face?" "Attend the class face-to-face?" "Attend the class face-to-face?" "Attend the class face-to-face?" ...
## $ Q2 : chr "No" "No" "Yes (more than one question)" "No" ...
## $ Q3 : chr "Neither comfortable nor uncomfortable" "Moderately comfortable" "Moderately comfortable" "Extremely comfortable" ...
## $ Q4 : chr "Extremely useful" "Very useful" "Very useful" "Very useful" ...
## $ Q5 : chr "Very Satisfied" "Satisfied" "Satisfied" "Satisfied" ...
## $ Q6 : chr "" "" "Might have been good to have a quick topic revision then the questions" "" ...
## $ Q7 : chr "Attend the class face-to-face?" "Attend the class face-to-face?" "Attend the class face-to-face?" "Attend the class face-to-face?" ...
## $ Q8 : chr "Yes (all or almost all of the questions)" "Yes (all or almost all of the questions)" "Yes (all or almost all of the questions)" "Yes (but only a few of the questions)" ...
## $ Q9 : chr "Extremely comfortable" "Extremely comfortable" "Extremely comfortable" "Moderately comfortable" ...
## $ Q10 : chr "Extremely useful" "Moderately useful" "Very useful" "Very useful" ...
## $ Q11 : chr "Very Satisfied" "Satisfied" "Satisfied" "Satisfied" ...
## $ Q12 : chr "" "" "As before" "" ...
## $ Q13 : chr "Class 2 (using Socrative)" "Class 1 (traditional method)" "Class 2 (using Socrative)" "Class 1 (traditional method)" ...
## $ Q14 : chr "Socrative Method (Class 2 style)" "Socrative Method (Class 2 style)" "Socrative Method (Class 2 style)" "Traditional Method (Class 1 style)" ...
## $ Q12...Topics : chr "" "" "Unknown" "" ...
## $ Q12...Parent.Topics : logi NA NA NA NA NA NA ...
## $ Q6...Topics : chr "" "" "Unknown" "" ...
## $ Q6...Parent.Topics : logi NA NA NA NA NA NA ...
For the comparison, I am mainly interested in the responses comparing Class 1 (verbal answers) with Class 2 (Socrative app).
I am not so worried about breaking the students down into in-person, watched recording or watched livestream; it could be interesting but I don’t think the numbers are anywhere big enough to get any useful data out of it.
So in my original analyses I am mostly interested in the following questions:
The first approach to answer will be to use the three levels of participation and test with a Wilcox test and generate the confidence intervals with a t-test.
# participation for class 1
part <- x$Q2
part <- part[which(part!="")]
part <- gsub('Yes \\(more than one question\\)',"2",part)
part <- gsub("No","0",part)
part1 <- as.numeric(part)
part1
## [1] 0 0 2 0 0 0 0 0 0 0 0 2 0 2 0 0
# participation for class 2
part <- x$Q8
part <- part[which(part!="")]
part <- gsub('Yes \\(but only a few of the questions\\)',"1",part)
part <- gsub('Yes \\(all or almost all of the questions\\)',"2",part)
part <- gsub("No","0",part)
part2 <- as.numeric(part)
part2
## [1] 2 2 2 1 0 1 1 2 2 2 0 2 1 2 1 2
par(mfrow=c(2,1), cex=0.8)
hist(part1)
hist(part2)
wilcox.test(part1,part2)
## Warning in wilcox.test.default(part1, part2): cannot compute exact p-value with
## ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: part1 and part2
## W = 47.5, p-value = 0.001012
## alternative hypothesis: true location shift is not equal to 0
t.test(part1,part2)
##
## Welch Two Sample t-test
##
## data: part1 and part2
## t = -3.9138, df = 29.688, p-value = 0.0004902
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.6171673 -0.5078327
## sample estimates:
## mean of x mean of y
## 0.3750 1.4375
According to the t-test the participation was significantly higher in class 2.
An alternative approach would be to perform binary classify of students as non-participants or participants and then run a Fisher exact test.
part1
## [1] 0 0 2 0 0 0 0 0 0 0 0 2 0 2 0 0
class1_nonparticipants = length(which(part1==0))
class1_participants = length(which(part1!=0))
class2_nonparticipants = length(which(part2==0))
class2_participants = length(which(part2!=0))
row1 <- c(class1_nonparticipants,class1_participants)
row2 <- c(class2_nonparticipants,class2_participants)
y <- rbind(row1,row2)
rownames(y) <- c("class1","class2")
colnames(y) <- c("non participation","participation")
y
## non participation participation
## class1 13 3
## class2 2 14
fisher.test(y)
##
## Fisher's Exact Test for Count Data
##
## data: y
## p-value = 0.0002444
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 3.443008 356.526674
## sample estimates:
## odds ratio
## 25.74352
# participation rate class 1 (%)
p1 = y[1,2]/sum(y[1,])*100
p1
## [1] 18.75
# participation rate class 2 (%)
p2 = y[2,2]/sum(y[2,]) *100
p2
## [1] 87.5
# increase in participation (%)
p2/p1 * 100
## [1] 466.6667
Again the p-value is very small indicating a significantly higher participation rate in the Socrative class.
I have inverted the values to make it a measure of comfort. That means bigger numbers are “good”. This can be used in Wilcox test or t-test on ranks. Scale: 1 (extremely uncomf) to 7 (extremely comf).
# class 1 comfort
x$Q3
## [1] "Neither comfortable nor uncomfortable"
## [2] "Moderately comfortable"
## [3] "Moderately comfortable"
## [4] "Extremely comfortable"
## [5] "Moderately comfortable"
## [6] ""
## [7] "Neither comfortable nor uncomfortable"
## [8] "Moderately comfortable"
## [9] "Moderately comfortable"
## [10] "Extremely comfortable"
## [11] "Slightly uncomfortable"
## [12] "Extremely comfortable"
## [13] "Moderately comfortable"
## [14] "Slightly comfortable"
## [15] "Moderately comfortable"
## [16] "Moderately comfortable"
## [17] "Moderately uncomfortable"
## [18] "Moderately uncomfortable"
comf <- x$Q3
comf <- comf[which(comf!="")]
comf <- comf[which(!is.na(comf))]
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf <- gsub("Extremely uncomfortable","1",comf)
comf1 <- as.numeric(comf)
comf1
## [1] 4 6 6 7 6 4 6 6 7 3 7 6 5 6 6 2 2
mean(comf1)
## [1] 5.235294
# class 2 comfort
x$Q9
## [1] "Extremely comfortable"
## [2] "Extremely comfortable"
## [3] "Extremely comfortable"
## [4] "Moderately comfortable"
## [5] "Moderately comfortable"
## [6] "Slightly comfortable"
## [7] "Moderately comfortable"
## [8] "Extremely comfortable"
## [9] "Extremely comfortable"
## [10] "Extremely comfortable"
## [11] "Extremely comfortable"
## [12] "Neither comfortable nor uncomfortable"
## [13] "Extremely comfortable"
## [14] "Extremely comfortable"
## [15] "Extremely comfortable"
## [16] "Extremely comfortable"
## [17] "Moderately comfortable"
## [18] "Moderately comfortable"
comf <- x$Q9
comf <- comf[which(comf!="")]
comf <- comf[which(!is.na(comf))]
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf <- gsub("Extremely uncomfortable","1",comf)
comf2 <- as.numeric(comf)
comf2
## [1] 7 7 7 6 6 5 6 7 7 7 7 4 7 7 7 7 6 6
mean(comf2)
## [1] 6.444444
par(mfrow=c(2,1), cex=0.8)
hist(comf1)
hist(comf2)
wilcox.test(comf1,comf2)
## Warning in wilcox.test.default(comf1, comf2): cannot compute exact p-value with
## ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: comf1 and comf2
## W = 76, p-value = 0.007259
## alternative hypothesis: true location shift is not equal to 0
t.test(comf1,comf2)
##
## Welch Two Sample t-test
##
## data: comf1 and comf2
## t = -2.7107, df = 23.798, p-value = 0.01226
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -2.1301928 -0.2881078
## sample estimates:
## mean of x mean of y
## 5.235294 6.444444
This result indicates that participants were significantly more comfortable to participate with Socrative as compared to traditional/conventional method.
Same approach as above but the scale goes from 1 (not useful at all) to 5 (extremely useful).
# class 1 utility
x$Q4
## [1] "Extremely useful" "Very useful" "Very useful" "Very useful"
## [5] "Very useful" "Very useful" "Very useful" "Extremely useful"
## [9] "Very useful" "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Very useful" "Extremely useful"
## [17] "Very useful" "Very useful"
us <- x$Q4
us <- us[which(us!="")]
us <- us[which(!is.na(us))]
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us <- gsub("Not at all useful","1",us)
us1 <- as.numeric(us)
us1
## [1] 5 4 4 4 4 4 4 5 4 5 5 5 5 4 4 5 4 4
mean(us1)
## [1] 4.388889
# class 2 utility
x$Q10
## [1] "Extremely useful" "Moderately useful" "Very useful"
## [4] "Very useful" "Very useful" "Extremely useful"
## [7] "Very useful" "Very useful" "Extremely useful"
## [10] "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Extremely useful"
## [16] "Extremely useful" "Extremely useful" "Extremely useful"
us <- x$Q10
us <- us[which(us!="")]
us <- us[which(!is.na(us))]
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us <- gsub("Not at all useful","1",us)
us2 <- as.numeric(us)
us2
## [1] 5 3 4 4 4 5 4 4 5 5 5 5 5 4 5 5 5 5
mean(us2)
## [1] 4.555556
par(mfrow=c(2,1), cex=0.8)
hist(us1, xlim = c(1,5))
hist(us2, xlim = c(1,5))
wilcox.test(us1,us2)
## Warning in wilcox.test.default(us1, us2): cannot compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: us1 and us2
## W = 131.5, p-value = 0.2795
## alternative hypothesis: true location shift is not equal to 0
t.test(us1,us2)
##
## Welch Two Sample t-test
##
## data: us1 and us2
## t = -0.89036, df = 32.666, p-value = 0.3798
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.5476547 0.2143213
## sample estimates:
## mean of x mean of y
## 4.388889 4.555556
Students ranked Socrative classes higher but there was no significant difference.
Satisaction was on a scale of 1 (extremely dissatisfied) to 7 (extremely dissatisfied).
# class 1 satisfaction
x$Q5
## [1] "Very Satisfied" "Satisfied" "Satisfied"
## [4] "Satisfied" "Somewhat Satisfied" "Satisfied"
## [7] "Satisfied" "Satisfied" "Very Satisfied"
## [10] "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied"
## [16] "Satisfied" "Satisfied" "Satisfied"
sat <- x$Q5
sat <- sat[which(sat!="")]
sat <- sat[which(!is.na(sat))]
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Unsatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat <- gsub("Satisfied","6",sat)
sat1 <- as.numeric(sat)
sat1
## [1] 7 6 6 6 5 6 6 6 7 7 7 7 7 6 7 6 6 6
mean(sat1)
## [1] 6.333333
# class 2 satisfaction
x$Q11
## [1] "Very Satisfied" "Satisfied" "Satisfied" "Satisfied"
## [5] "Satisfied" "Very Satisfied" "Satisfied" "Satisfied"
## [9] "Very Satisfied" "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied" "Very Satisfied"
## [17] "Very Satisfied" "Very Satisfied"
sat <- x$Q11
sat <- sat[which(sat!="")]
sat <- sat[which(!is.na(sat))]
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Disatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat <- gsub("Satisfied","6",sat)
sat2 <- as.numeric(sat)
sat2
## [1] 7 6 6 6 6 7 6 6 7 7 7 7 7 6 7 7 7 7
mean(sat2)
## [1] 6.611111
par(mfrow=c(2,1), cex=0.8)
hist(sat1,xlim=c(1,7))
hist(sat2,xlim=c(1,7))
wilcox.test(sat1,sat2)
## Warning in wilcox.test.default(sat1, sat2): cannot compute exact p-value with
## ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: sat1 and sat2
## W = 122.5, p-value = 0.1597
## alternative hypothesis: true location shift is not equal to 0
t.test(sat1,sat2)
##
## Welch Two Sample t-test
##
## data: sat1 and sat2
## t = -1.5157, df = 33.071, p-value = 0.1391
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.65061069 0.09505513
## sample estimates:
## mean of x mean of y
## 6.333333 6.611111
These results indicate average satisfaction was higher in Class 2 however it was not statistically significant.
how comfortable the students were answering the questions and either how useful, or how satisfied, they were with the classes (for either Class 1 or Class 2).
Class 1 comfort
# class 1: comfort = Q3, utility=Q4, satisfaction=Q5
x$Q3
## [1] "Neither comfortable nor uncomfortable"
## [2] "Moderately comfortable"
## [3] "Moderately comfortable"
## [4] "Extremely comfortable"
## [5] "Moderately comfortable"
## [6] ""
## [7] "Neither comfortable nor uncomfortable"
## [8] "Moderately comfortable"
## [9] "Moderately comfortable"
## [10] "Extremely comfortable"
## [11] "Slightly uncomfortable"
## [12] "Extremely comfortable"
## [13] "Moderately comfortable"
## [14] "Slightly comfortable"
## [15] "Moderately comfortable"
## [16] "Moderately comfortable"
## [17] "Moderately uncomfortable"
## [18] "Moderately uncomfortable"
comf <- x$Q3
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf1 <- gsub("Extremely uncomfortable","1",comf)
comf1
## [1] "4" "6" "6" "7" "6" "" "4" "6" "6" "7" "3" "7" "6" "5" "6" "6" "2" "2"
# class 1 utility
x$Q4
## [1] "Extremely useful" "Very useful" "Very useful" "Very useful"
## [5] "Very useful" "Very useful" "Very useful" "Extremely useful"
## [9] "Very useful" "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Very useful" "Extremely useful"
## [17] "Very useful" "Very useful"
us <- x$Q4
us <- us[which(us!="")]
us <- us[which(!is.na(us))]
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us1 <- gsub("Not at all useful","1",us)
us1
## [1] "5" "4" "4" "4" "4" "4" "4" "5" "4" "5" "5" "5" "5" "4" "4" "5" "4" "4"
# class 1 satisfaction
x$Q5
## [1] "Very Satisfied" "Satisfied" "Satisfied"
## [4] "Satisfied" "Somewhat Satisfied" "Satisfied"
## [7] "Satisfied" "Satisfied" "Very Satisfied"
## [10] "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied"
## [16] "Satisfied" "Satisfied" "Satisfied"
sat <- x$Q5
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Dissatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat1 <- gsub("Satisfied","6",sat)
sat1
## [1] "7" "6" "6" "6" "5" "6" "6" "6" "7" "7" "7" "7" "7" "6" "7" "6" "6" "6"
# check with another method because worries about NA values
z <- cbind(comf1,us1,sat1)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z
## comf1 us1 sat1
## [1,] 4 5 7
## [2,] 6 4 6
## [3,] 6 4 6
## [4,] 7 4 6
## [5,] 6 4 5
## [6,] 4 4 6
## [7,] 6 5 6
## [8,] 6 4 7
## [9,] 7 5 7
## [10,] 3 5 7
## [11,] 7 5 7
## [12,] 6 5 7
## [13,] 5 4 6
## [14,] 6 4 7
## [15,] 6 5 6
## [16,] 2 4 6
## [17,] 2 4 6
cor.test(z[,1],z[,2])
##
## Pearson's product-moment correlation
##
## data: z[, 1] and z[, 2]
## t = 0.69533, df = 15, p-value = 0.4975
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3321476 0.6058919
## sample estimates:
## cor
## 0.1767077
cor.test(z[,1],z[,3])
##
## Pearson's product-moment correlation
##
## data: z[, 1] and z[, 3]
## t = 0.38844, df = 15, p-value = 0.7031
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4000381 0.5538726
## sample estimates:
## cor
## 0.09979487
This result shows that there is no significant correlation between comfort and either usefulness or satisfaction in class 1. Now I can do the same for class 2.
# class 2: comfort = Q9, utility=Q10, satisfaction=Q11
# class 1: comfort = Q3, utility=Q4, satisfaction=Q5
x$Q9
## [1] "Extremely comfortable"
## [2] "Extremely comfortable"
## [3] "Extremely comfortable"
## [4] "Moderately comfortable"
## [5] "Moderately comfortable"
## [6] "Slightly comfortable"
## [7] "Moderately comfortable"
## [8] "Extremely comfortable"
## [9] "Extremely comfortable"
## [10] "Extremely comfortable"
## [11] "Extremely comfortable"
## [12] "Neither comfortable nor uncomfortable"
## [13] "Extremely comfortable"
## [14] "Extremely comfortable"
## [15] "Extremely comfortable"
## [16] "Extremely comfortable"
## [17] "Moderately comfortable"
## [18] "Moderately comfortable"
comf <- x$Q9
comf <- gsub("Extremely comfortable","1",comf)
comf <- gsub("Moderately comfortable","2",comf)
comf <- gsub("Slightly comfortable","3",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","5",comf)
comf <- gsub("Moderately uncomfortable","6",comf)
comf2 <- gsub("Extremely uncomfortable","7",comf)
comf2
## [1] "1" "1" "1" "2" "2" "3" "2" "1" "1" "1" "1" "4" "1" "1" "1" "1" "2" "2"
# class 1 utility
x$Q10
## [1] "Extremely useful" "Moderately useful" "Very useful"
## [4] "Very useful" "Very useful" "Extremely useful"
## [7] "Very useful" "Very useful" "Extremely useful"
## [10] "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Extremely useful"
## [16] "Extremely useful" "Extremely useful" "Extremely useful"
us <- x$Q10
us <- us[which(us!="")]
us <- us[which(!is.na(us))]
us <- gsub("Extremely useful","1",us)
us <- gsub("Very useful","2",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","4",us)
us2 <- gsub("Not at all useful","5",us)
us2
## [1] "1" "3" "2" "2" "2" "1" "2" "2" "1" "1" "1" "1" "1" "2" "1" "1" "1" "1"
# class 1 satisfaction
x$Q11
## [1] "Very Satisfied" "Satisfied" "Satisfied" "Satisfied"
## [5] "Satisfied" "Very Satisfied" "Satisfied" "Satisfied"
## [9] "Very Satisfied" "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied" "Very Satisfied"
## [17] "Very Satisfied" "Very Satisfied"
sat <- x$Q11
sat <- gsub("Very Satisfied","1",sat)
sat <- gsub("Somewhat Satisfied","3",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","5",sat)
sat <- gsub("Very Unsatisfied","7",sat)
sat <- gsub("Dissatisfied","6",sat)
sat1 <- gsub("Satisfied","2",sat)
sat2
## [1] 7 6 6 6 6 7 6 6 7 7 7 7 7 6 7 7 7 7
# check with another method because worries about NA values
z <- cbind(comf2,us2,sat2)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z
## comf2 us2 sat2
## [1,] 1 1 7
## [2,] 1 3 6
## [3,] 1 2 6
## [4,] 2 2 6
## [5,] 2 2 6
## [6,] 3 1 7
## [7,] 2 2 6
## [8,] 1 2 6
## [9,] 1 1 7
## [10,] 1 1 7
## [11,] 1 1 7
## [12,] 4 1 7
## [13,] 1 1 7
## [14,] 1 2 6
## [15,] 1 1 7
## [16,] 1 1 7
## [17,] 2 1 7
## [18,] 2 1 7
cor.test(z[,1],z[,2])
##
## Pearson's product-moment correlation
##
## data: z[, 1] and z[, 2]
## t = -0.65374, df = 16, p-value = 0.5226
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.5841744 0.3304602
## sample estimates:
## cor
## -0.1612948
cor.test(z[,1],z[,3])
##
## Pearson's product-moment correlation
##
## data: z[, 1] and z[, 3]
## t = 0.49097, df = 16, p-value = 0.6301
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3658500 0.5570169
## sample estimates:
## cor
## 0.121829
This result shows that there is no significant correlation between comfort and either usefulness or satisfaction in class 2 either.
Not completely sure how to calculate this one. One solution would be to make a ratio of comfort for the two class types and then correlate the ratio with preferred class type. Responses to Q13 and Q14 were nearly identical so I will only analyse Q13 preferred class.
# class 1 comfort
x$Q3
## [1] "Neither comfortable nor uncomfortable"
## [2] "Moderately comfortable"
## [3] "Moderately comfortable"
## [4] "Extremely comfortable"
## [5] "Moderately comfortable"
## [6] ""
## [7] "Neither comfortable nor uncomfortable"
## [8] "Moderately comfortable"
## [9] "Moderately comfortable"
## [10] "Extremely comfortable"
## [11] "Slightly uncomfortable"
## [12] "Extremely comfortable"
## [13] "Moderately comfortable"
## [14] "Slightly comfortable"
## [15] "Moderately comfortable"
## [16] "Moderately comfortable"
## [17] "Moderately uncomfortable"
## [18] "Moderately uncomfortable"
comf <- x$Q3
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf1 <- gsub("Extremely uncomfortable","1",comf)
# class 2 comfort
x$Q9
## [1] "Extremely comfortable"
## [2] "Extremely comfortable"
## [3] "Extremely comfortable"
## [4] "Moderately comfortable"
## [5] "Moderately comfortable"
## [6] "Slightly comfortable"
## [7] "Moderately comfortable"
## [8] "Extremely comfortable"
## [9] "Extremely comfortable"
## [10] "Extremely comfortable"
## [11] "Extremely comfortable"
## [12] "Neither comfortable nor uncomfortable"
## [13] "Extremely comfortable"
## [14] "Extremely comfortable"
## [15] "Extremely comfortable"
## [16] "Extremely comfortable"
## [17] "Moderately comfortable"
## [18] "Moderately comfortable"
comf <- x$Q9
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf2 <- gsub("Extremely uncomfortable","1",comf)
x$Q13
## [1] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [3] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [5] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [7] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [9] "" ""
## [11] "Class 2 (using Socrative)" ""
## [13] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [15] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [17] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
pref <- x$Q13
pref <- gsub("Class 1 \\(traditional method\\)","1",pref)
pref <- gsub("Class 2 \\(using Socrative\\)","2",pref)
pref
## [1] "2" "1" "2" "1" "2" "2" "2" "2" "" "" "2" "" "2" "2" "2" "2" "2" "2"
z <- cbind(comf1,comf2,pref)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
# the ratio here is important because it is a negative scale
z$rat <- z$comf2 - z$comf1
z
## comf1 comf2 pref rat
## 1 4 7 2 3
## 2 6 7 1 1
## 3 6 7 2 1
## 4 7 6 1 -1
## 5 6 6 2 0
## 6 4 6 2 2
## 7 6 7 2 1
## 8 3 7 2 4
## 9 6 7 2 1
## 10 5 7 2 2
## 11 6 7 2 1
## 12 6 7 2 1
## 13 2 6 2 4
## 14 2 6 2 4
cor.test(z$rat,z$pref)
##
## Pearson's product-moment correlation
##
## data: z$rat and z$pref
## t = 1.8516, df = 12, p-value = 0.08883
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.07891235 0.80151183
## sample estimates:
## cor
## 0.4714045
This result suggests there is a weak association between class comfort level and preference but it is not significant.
# class 1 usefulness
x$Q4
## [1] "Extremely useful" "Very useful" "Very useful" "Very useful"
## [5] "Very useful" "Very useful" "Very useful" "Extremely useful"
## [9] "Very useful" "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Very useful" "Extremely useful"
## [17] "Very useful" "Very useful"
us <- x$Q4
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us1 <- gsub("Not at all useful","1",us)
us1
## [1] "5" "4" "4" "4" "4" "4" "4" "5" "4" "5" "5" "5" "5" "4" "4" "5" "4" "4"
# class 2 usefulness
x$Q10
## [1] "Extremely useful" "Moderately useful" "Very useful"
## [4] "Very useful" "Very useful" "Extremely useful"
## [7] "Very useful" "Very useful" "Extremely useful"
## [10] "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Extremely useful"
## [16] "Extremely useful" "Extremely useful" "Extremely useful"
us <- x$Q10
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us2 <- gsub("Not at all useful","1",us)
us2
## [1] "5" "3" "4" "4" "4" "5" "4" "4" "5" "5" "5" "5" "5" "4" "5" "5" "5" "5"
# preference
x$Q13
## [1] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [3] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [5] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [7] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [9] "" ""
## [11] "Class 2 (using Socrative)" ""
## [13] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [15] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [17] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
pref <- x$Q13
pref <- gsub("Class 1 \\(traditional method\\)","1",pref)
pref <- gsub("Class 2 \\(using Socrative\\)","2",pref)
pref
## [1] "2" "1" "2" "1" "2" "2" "2" "2" "" "" "2" "" "2" "2" "2" "2" "2" "2"
z <- cbind(us1,us2,pref)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
# note the direction of the ratio
z$rat <- z$us2 - z$us1
z
## us1 us2 pref rat
## 1 5 5 2 0
## 2 4 3 1 -1
## 3 4 4 2 0
## 4 4 4 1 0
## 5 4 4 2 0
## 6 4 5 2 1
## 7 4 4 2 0
## 8 5 4 2 -1
## 9 5 5 2 0
## 10 5 5 2 0
## 11 4 4 2 0
## 12 4 5 2 1
## 13 5 5 2 0
## 14 4 5 2 1
## 15 4 5 2 1
cor.test(z$rat,z$pref)
##
## Pearson's product-moment correlation
##
## data: z$rat and z$pref
## t = 1.5821, df = 13, p-value = 0.1376
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1390833 0.7580416
## sample estimates:
## cor
## 0.4018072
This result suggests there is a weak negative association between perceived usefullness and preference but it is not significant.
# class 1 satisfaction
x$Q5
## [1] "Very Satisfied" "Satisfied" "Satisfied"
## [4] "Satisfied" "Somewhat Satisfied" "Satisfied"
## [7] "Satisfied" "Satisfied" "Very Satisfied"
## [10] "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied"
## [16] "Satisfied" "Satisfied" "Satisfied"
sat <- x$Q5
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Dissatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat1 <- gsub("Satisfied","6",sat)
sat1
## [1] "7" "6" "6" "6" "5" "6" "6" "6" "7" "7" "7" "7" "7" "6" "7" "6" "6" "6"
# class 2 satisfaction
x$Q11
## [1] "Very Satisfied" "Satisfied" "Satisfied" "Satisfied"
## [5] "Satisfied" "Very Satisfied" "Satisfied" "Satisfied"
## [9] "Very Satisfied" "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied" "Very Satisfied"
## [17] "Very Satisfied" "Very Satisfied"
sat <- x$Q11
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Dissatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat2 <- gsub("Satisfied","6",sat)
sat2
## [1] "7" "6" "6" "6" "6" "7" "6" "6" "7" "7" "7" "7" "7" "6" "7" "7" "7" "7"
# preference
x$Q13
## [1] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [3] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [5] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [7] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [9] "" ""
## [11] "Class 2 (using Socrative)" ""
## [13] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [15] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [17] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
pref <- x$Q13
pref <- gsub("Class 1 \\(traditional method\\)","1",pref)
pref <- gsub("Class 2 \\(using Socrative\\)","2",pref)
pref
## [1] "2" "1" "2" "1" "2" "2" "2" "2" "" "" "2" "" "2" "2" "2" "2" "2" "2"
z <- cbind(sat1,sat2,pref)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
# note the direction of the ratio
z$rat <- z$sat2 - z$sat1
z
## sat1 sat2 pref rat
## 1 7 7 2 0
## 2 6 6 1 0
## 3 6 6 2 0
## 4 6 6 1 0
## 5 5 6 2 1
## 6 6 7 2 1
## 7 6 6 2 0
## 8 6 6 2 0
## 9 7 7 2 0
## 10 7 7 2 0
## 11 6 6 2 0
## 12 7 7 2 0
## 13 6 7 2 1
## 14 6 7 2 1
## 15 6 7 2 1
cor.test(z$rat,z$pref)
##
## Pearson's product-moment correlation
##
## data: z$rat and z$pref
## t = 1.0408, df = 13, p-value = 0.3169
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2738154 0.6913838
## sample estimates:
## cor
## 0.2773501
This result suggests there is a weak association between satisfaction and preference but it is not significant.
# participation for class 1
part <- x$Q2
part <- gsub('Yes \\(more than one question\\)',"2",part)
part1 <- gsub("No","0",part)
part1
## [1] "0" "0" "2" "0" "0" "0" "0" "" "0" "0" "0" "0" "2" "0" "2" "0" "" "0"
# participation for class 2
part <- x$Q8
part <- gsub('Yes \\(but only a few of the questions\\)',"1",part)
part <- gsub('Yes \\(all or almost all of the questions\\)',"2",part)
part2 <- gsub("No","0",part)
part2
## [1] "2" "2" "2" "1" "0" "1" "1" "" "2" "2" "2" "0" "2" "1" "2" "1" "" "2"
# preference
x$Q13
## [1] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [3] "Class 2 (using Socrative)" "Class 1 (traditional method)"
## [5] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [7] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [9] "" ""
## [11] "Class 2 (using Socrative)" ""
## [13] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [15] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
## [17] "Class 2 (using Socrative)" "Class 2 (using Socrative)"
pref <- x$Q13
pref <- gsub("Class 1 \\(traditional method\\)","1",pref)
pref <- gsub("Class 2 \\(using Socrative\\)","2",pref)
pref <- as.numeric(pref)
pref
## [1] 2 1 2 1 2 2 2 2 NA NA 2 NA 2 2 2 2 2 2
z <- cbind(part1,part2,pref)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
# note the direction of the ratio
z$rat <- z$part2 - z$part1
z
## part1 part2 pref rat
## 1 0 2 2 2
## 2 0 2 1 2
## 3 2 2 2 0
## 4 0 1 1 1
## 5 0 0 2 0
## 6 0 1 2 1
## 7 0 1 2 1
## 8 0 2 2 2
## 9 2 2 2 0
## 10 0 1 2 1
## 11 2 2 2 0
## 12 0 1 2 1
## 13 0 2 2 2
cor.test(z$rat,z$pref)
##
## Pearson's product-moment correlation
##
## data: z$rat and z$pref
## t = -0.93664, df = 11, p-value = 0.3691
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.7156049 0.3283803
## sample estimates:
## cor
## -0.2717787
There was no clear association between participation level and the preferred class.
Class 1 - level of comfort (Q3)
Class 1 - participation (Q2)
# participation for class 1
part <- x$Q2
part <- gsub('Yes \\(more than one question\\)',"2",part)
part <- gsub("No","0",part)
part1 <- as.numeric(part)
part1
## [1] 0 0 2 0 0 0 0 NA 0 0 0 0 2 0 2 0 NA 0
# class 1 comfort
x$Q3
## [1] "Neither comfortable nor uncomfortable"
## [2] "Moderately comfortable"
## [3] "Moderately comfortable"
## [4] "Extremely comfortable"
## [5] "Moderately comfortable"
## [6] ""
## [7] "Neither comfortable nor uncomfortable"
## [8] "Moderately comfortable"
## [9] "Moderately comfortable"
## [10] "Extremely comfortable"
## [11] "Slightly uncomfortable"
## [12] "Extremely comfortable"
## [13] "Moderately comfortable"
## [14] "Slightly comfortable"
## [15] "Moderately comfortable"
## [16] "Moderately comfortable"
## [17] "Moderately uncomfortable"
## [18] "Moderately uncomfortable"
comf <- x$Q3
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf <- gsub("Extremely uncomfortable","1",comf)
comf1 <- as.numeric(comf)
comf1
## [1] 4 6 6 7 6 NA 4 6 6 7 3 7 6 5 6 6 2 2
z <- cbind(comf1,part1)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
z
## comf1 part1
## 1 4 0
## 2 6 0
## 3 6 2
## 4 7 0
## 5 6 0
## 6 4 0
## 7 6 0
## 8 7 0
## 9 3 0
## 10 7 0
## 11 6 2
## 12 5 0
## 13 6 2
## 14 6 0
## 15 2 0
cor.test(z$comf1,z$part1)
##
## Pearson's product-moment correlation
##
## data: z$comf1 and z$part1
## t = 0.76169, df = 13, p-value = 0.4598
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3417563 0.6501197
## sample estimates:
## cor
## 0.2066918
There is no correlation, likely because there was too little participation.
Class 2 - level of comfort (Q9)
Class 2 - participation (Q8)
# participation for class 2
part <- x$Q8
part <- gsub('Yes \\(but only a few of the questions\\)',"1",part)
part <- gsub('Yes \\(all or almost all of the questions\\)',"2",part)
part <- gsub("No","0",part)
part2 <- as.numeric(part)
part2
## [1] 2 2 2 1 0 1 1 NA 2 2 2 0 2 1 2 1 NA 2
# class 2 comfort
x$Q9
## [1] "Extremely comfortable"
## [2] "Extremely comfortable"
## [3] "Extremely comfortable"
## [4] "Moderately comfortable"
## [5] "Moderately comfortable"
## [6] "Slightly comfortable"
## [7] "Moderately comfortable"
## [8] "Extremely comfortable"
## [9] "Extremely comfortable"
## [10] "Extremely comfortable"
## [11] "Extremely comfortable"
## [12] "Neither comfortable nor uncomfortable"
## [13] "Extremely comfortable"
## [14] "Extremely comfortable"
## [15] "Extremely comfortable"
## [16] "Extremely comfortable"
## [17] "Moderately comfortable"
## [18] "Moderately comfortable"
comf <- x$Q9
comf <- gsub("Extremely comfortable","7",comf)
comf <- gsub("Moderately comfortable","6",comf)
comf <- gsub("Slightly comfortable","5",comf)
comf <- gsub("Neither comfortable nor uncomfortable","4",comf)
comf <- gsub("Slightly uncomfortable","3",comf)
comf <- gsub("Moderately uncomfortable","2",comf)
comf <- gsub("Extremely uncomfortable","1",comf)
comf2 <- as.numeric(comf)
comf2
## [1] 7 7 7 6 6 5 6 7 7 7 7 4 7 7 7 7 6 6
z <- cbind(comf2,part2)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
z
## comf2 part2
## 1 7 2
## 2 7 2
## 3 7 2
## 4 6 1
## 5 6 0
## 6 5 1
## 7 6 1
## 8 7 2
## 9 7 2
## 10 7 2
## 11 4 0
## 12 7 2
## 13 7 1
## 14 7 2
## 15 7 1
## 16 6 2
cor.test(z$comf2,z$part2)
##
## Pearson's product-moment correlation
##
## data: z$comf2 and z$part2
## t = 3.8015, df = 14, p-value = 0.001945
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3355290 0.8929379
## sample estimates:
## cor
## 0.7126962
There is a strong correlation between comfort level and participation (p=0.002).
Class 1 - usefulness (Q4)
Class 1 - satisfaction (Q5)
# class 1 utility
x$Q4
## [1] "Extremely useful" "Very useful" "Very useful" "Very useful"
## [5] "Very useful" "Very useful" "Very useful" "Extremely useful"
## [9] "Very useful" "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Very useful" "Extremely useful"
## [17] "Very useful" "Very useful"
us <- x$Q4
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us <- gsub("Not at all useful","1",us)
us1 <- as.numeric(us)
us1
## [1] 5 4 4 4 4 4 4 5 4 5 5 5 5 4 4 5 4 4
# class 1 satisfaction
x$Q5
## [1] "Very Satisfied" "Satisfied" "Satisfied"
## [4] "Satisfied" "Somewhat Satisfied" "Satisfied"
## [7] "Satisfied" "Satisfied" "Very Satisfied"
## [10] "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied"
## [16] "Satisfied" "Satisfied" "Satisfied"
sat <- x$Q5
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Unsatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat <- gsub("Satisfied","6",sat)
sat1 <- as.numeric(sat)
sat1
## [1] 7 6 6 6 5 6 6 6 7 7 7 7 7 6 7 6 6 6
z <- cbind(us1,sat1)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
z
## us1 sat1
## 1 5 7
## 2 4 6
## 3 4 6
## 4 4 6
## 5 4 5
## 6 4 6
## 7 4 6
## 8 5 6
## 9 4 7
## 10 5 7
## 11 5 7
## 12 5 7
## 13 5 7
## 14 4 6
## 15 4 7
## 16 5 6
## 17 4 6
## 18 4 6
cor.test(z$us1,z$sat1)
##
## Pearson's product-moment correlation
##
## data: z$us1 and z$sat1
## t = 2.4762, df = 16, p-value = 0.02483
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.07887395 0.79730084
## sample estimates:
## cor
## 0.5263614
There was a positive association between perceived utility and satisfaction (p=0.025).
Class 2 - usefulness (Q10)
Class 2 - satisfaction (Q11)
# class 2 utility
x$Q10
## [1] "Extremely useful" "Moderately useful" "Very useful"
## [4] "Very useful" "Very useful" "Extremely useful"
## [7] "Very useful" "Very useful" "Extremely useful"
## [10] "Extremely useful" "Extremely useful" "Extremely useful"
## [13] "Extremely useful" "Very useful" "Extremely useful"
## [16] "Extremely useful" "Extremely useful" "Extremely useful"
us <- x$Q10
us <- gsub("Extremely useful","5",us)
us <- gsub("Very useful","4",us)
us <- gsub("Moderately useful","3",us)
us <- gsub("Slightly useful","2",us)
us <- gsub("Not at all useful","1",us)
us2 <- as.numeric(us)
us2
## [1] 5 3 4 4 4 5 4 4 5 5 5 5 5 4 5 5 5 5
# class 2 satisfaction
x$Q11
## [1] "Very Satisfied" "Satisfied" "Satisfied" "Satisfied"
## [5] "Satisfied" "Very Satisfied" "Satisfied" "Satisfied"
## [9] "Very Satisfied" "Very Satisfied" "Very Satisfied" "Very Satisfied"
## [13] "Very Satisfied" "Satisfied" "Very Satisfied" "Very Satisfied"
## [17] "Very Satisfied" "Very Satisfied"
sat <- x$Q11
sat <- gsub("Very Satisfied","7",sat)
sat <- gsub("Somewhat Satisfied","5",sat)
sat <- gsub("Neutral","4",sat)
sat <- gsub("Somewhat Dissatisfied","3",sat)
sat <- gsub("Very Unsatisfied","1",sat)
sat <- gsub("Dissatisfied","2",sat)
sat <- gsub("Satisfied","6",sat)
sat2 <- as.numeric(sat)
sat2
## [1] 7 6 6 6 6 7 6 6 7 7 7 7 7 6 7 7 7 7
z <- cbind(us2,sat2)
z <- apply(z,2,as.numeric)
z <- z[!is.na(rowSums(z)),]
z <- as.data.frame(z)
z
## us2 sat2
## 1 5 7
## 2 3 6
## 3 4 6
## 4 4 6
## 5 4 6
## 6 5 7
## 7 4 6
## 8 4 6
## 9 5 7
## 10 5 7
## 11 5 7
## 12 5 7
## 13 5 7
## 14 4 6
## 15 5 7
## 16 5 7
## 17 5 7
## 18 5 7
cor.test(z$us2,z$sat2)
##
## Pearson's product-moment correlation
##
## data: z$us2 and z$sat2
## t = 10.213, df = 16, p-value = 2.048e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8212767 0.9744068
## sample estimates:
## cor
## 0.9311257
There was a strong association between perceived utility and satisfaction (p=2.0e-8).
There was a massive difference in student participation between class types, with the Socrative app resulting in a much higher participation rate. Students were more comfortable using the Socrative app as compared to traditional/conventional methods. Traditional and socrative classes were viewed as useful with only a small difference between them. When students passively attend class they may have a false sense of security because they lack chances to benchmark own performance with formative assessment. Similarly there was no significant difference in satisfaction between class types. There was no significant correlation between comfort with answering questions and perceived utility or satisfaction in either class. Students that participated more in class 2 as compared to class 1 tended to prefer Socrative over traditional methods (p=0.09). There was no correlation between differential utility and preference. There was no correlation between differential satisfaction and preference. While the simple comparisons gave a clear result, the correlation analyses likely require a larger sample size. Correlation analysis between level of comfort and participation shows no assocation in class 1 but strong association in class 2. Perceived utility was correlated with student satisfaction in both class 1 and 2.
sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.4 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so
##
## locale:
## [1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_AU.UTF-8 LC_COLLATE=en_AU.UTF-8
## [5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8
## [7] LC_PAPER=en_AU.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] compiler_4.0.2 magrittr_1.5 tools_4.0.2 htmltools_0.5.0
## [5] yaml_2.2.1 stringi_1.4.6 rmarkdown_2.3 knitr_1.29
## [9] stringr_1.4.0 xfun_0.15 digest_0.6.25 rlang_0.4.6
## [13] evaluate_0.14