Data:

library(readxl)
webinarium <- read_excel("webinarium.xlsx")
str(webinarium)
## tibble [82 × 11] (S3: tbl_df/tbl/data.frame)
##  $ student       : chr [1:82] "Айлана Смагулова" "Алина Аухадиева " "Алина Климентьева" "Алина Морозова" ...
##  $ scores1_max31 : num [1:82] 7 0 9 5 9 3 11 9 12 12 ...
##  $ quizlet       : chr [1:82] "yes" "no" "yes" "yes" ...
##  $ nastavnik     : chr [1:82] "Лина Сергиенко" "Дмитрий Бушин" "Даша Фрасова" "Дарья Курбанова" ...
##  $ scores2_max31 : num [1:82] 29 23 24 13 17 15 25 24 28 24 ...
##  $ perindex      : num [1:82] 22 23 15 8 8 12 14 15 16 12 ...
##  $ testsavg_max31: num [1:82] 21 25 17 16 19.5 22.5 26 14 0 19 ...
##  $ openavg_max25 : num [1:82] 16 13 10 5 8.5 10 11 15 0 10.5 ...
##  $ rank1         : num [1:82] 13 20 11 15 11 17 9 11 8 8 ...
##  $ rank2         : num [1:82] 3 9 8 18 14 16 7 8 4 8 ...
##  $ rankindex     : num [1:82] 10 11 3 -3 -3 1 2 3 4 0 ...

New variable with weights:

webinarium$wtd <- c(0.96,1.72,0.96,0.96,0.96,1.72,1.72,0.96,0.96,0.96,0.96,1.72,1.72,1.72,0.96,0.96,0.96,0.96,0.96,1.72,0.96,0.96,0.96,1.72,0.96,1.72,1.72,0.96,0.96,0.96,1.72,0.96,0.96,0.96,1.72,0.96,1.72,1.72,1.72,0.96,0.96,0.96,0.96,0.96,0.96,0.96,0.96,1.72,0.96,1.72,0.96,1.72,0.96,1.72,1.72,1.72,0.96,1.72,0.96,1.72,1.72,0.96,1.72,0.96,0.96,0.96,0.96,0.96,0.96,1.72,1.72,0.96,1.72,0.96,0.96,1.72,0.96,0.96,0.96,0.96,0.96,0.96)
str(webinarium)
## tibble [82 × 12] (S3: tbl_df/tbl/data.frame)
##  $ student       : chr [1:82] "Айлана Смагулова" "Алина Аухадиева " "Алина Климентьева" "Алина Морозова" ...
##  $ scores1_max31 : num [1:82] 7 0 9 5 9 3 11 9 12 12 ...
##  $ quizlet       : chr [1:82] "yes" "no" "yes" "yes" ...
##  $ nastavnik     : chr [1:82] "Лина Сергиенко" "Дмитрий Бушин" "Даша Фрасова" "Дарья Курбанова" ...
##  $ scores2_max31 : num [1:82] 29 23 24 13 17 15 25 24 28 24 ...
##  $ perindex      : num [1:82] 22 23 15 8 8 12 14 15 16 12 ...
##  $ testsavg_max31: num [1:82] 21 25 17 16 19.5 22.5 26 14 0 19 ...
##  $ openavg_max25 : num [1:82] 16 13 10 5 8.5 10 11 15 0 10.5 ...
##  $ rank1         : num [1:82] 13 20 11 15 11 17 9 11 8 8 ...
##  $ rank2         : num [1:82] 3 9 8 18 14 16 7 8 4 8 ...
##  $ rankindex     : num [1:82] 10 11 3 -3 -3 1 2 3 4 0 ...
##  $ wtd           : num [1:82] 0.96 1.72 0.96 0.96 0.96 1.72 1.72 0.96 0.96 0.96 ...

Means and boxplots

Mean performance index within two groups (weigted)

library(dplyr)

df_summary <- 
  webinarium %>% 
  group_by(quizlet) %>% 
  summarise(weighted_per = weighted.mean(perindex, wtd))

df_summary
## # A tibble: 2 x 2
##   quizlet weighted_per
##   <chr>          <dbl>
## 1 no              15.0
## 2 yes             15.4
library(ggplot2)
ggplot(webinarium, aes(y = perindex, x = quizlet)) + 
  geom_boxplot(fill = c("skyblue", "salmon")) +
  stat_summary(fun.y = mean, geom = "point", shape = 4, size = 4) +
  theme_classic()

Mean test scores within two groups (weighted)

library(dplyr)

df_summary2 <- 
  webinarium %>% 
  group_by(quizlet) %>% 
  summarise(weighted_test = weighted.mean(testsavg_max31, wtd))

df_summary2
## # A tibble: 2 x 2
##   quizlet weighted_test
##   <chr>           <dbl>
## 1 no               20.1
## 2 yes              19.8
ggplot(webinarium, aes(y = testsavg_max31, x = quizlet)) + 
  geom_boxplot(fill = c("skyblue", "salmon")) +
  stat_summary(fun.y = mean, geom = "point", shape = 4, size = 4) +
  theme_classic() 

Mean scores on open questions within two groups (weighted)

library(dplyr)

df_summary3 <- 
  webinarium %>% 
  group_by(quizlet) %>% 
  summarise(weighted_open = weighted.mean(openavg_max25, wtd))

df_summary3
## # A tibble: 2 x 2
##   quizlet weighted_open
##   <chr>           <dbl>
## 1 no               12.4
## 2 yes              13.1
ggplot(webinarium, aes(y = openavg_max25, x = quizlet)) + 
  geom_boxplot(fill = c("skyblue", "salmon")) +
  stat_summary(fun.y = mean, geom = "point", shape = 4, size = 4) +
  theme_classic() 

Mean rank changes questions within two groups (weighted)

library(dplyr)

df_summary4 <- 
  webinarium %>% 
  group_by(quizlet) %>% 
  summarise(weighted_rank = weighted.mean(rankindex, wtd))

df_summary4
## # A tibble: 2 x 2
##   quizlet weighted_rank
##   <chr>           <dbl>
## 1 no               3.62
## 2 yes              4.02
ggplot(webinarium, aes(y = rankindex, x = quizlet)) + 
  geom_boxplot(fill = c("skyblue", "salmon")) +
  stat_summary(fun.y = mean, geom = "point", shape = 4, size = 4) +
  theme_classic() 

Some conclusions on mean values:

Performance index: mean performance index is slightly higher among students who were engaged in gamified learning (15.37736 as opposed to 15.00000 among those who was not exposed to gamificcation techniques)

Test scores: mean test scores are slightly higher in the control group (20.12069 as opposed to 19.77358 in the experimental)

Responces on open questions: mean open questions scores are slightly higher in the experimental group (13.14151 as opposed to 12.44828 in the control one )

Rank change: mean change in rank was slightly higher among studetns in experimental group (4.018868 as opposed to 3.620690 among those in the control group). Meaning that students who were exposed to gamificarion practices improved their knowledge slightly greater than those who were not.

Weighted t-tests

Hypothesis:

H0: There is no significant difference between experimental and control group in performance indicators

H1: There is significant difference between experimental and control group in performance indicators

Difference in mean performance index within two groups:

library(survey)
strat_design <- svydesign(ids=~1, weights=~wtd, data=webinarium, variables=NULL, fpc=NULL)
svyttest(perindex~quizlet,strat_design)
## 
##  Design-based t-test
## 
## data:  perindex ~ quizlet
## t = 0.2722, df = 80, p-value = 0.7862
## alternative hypothesis: true difference in mean is not equal to 0
## 95 percent confidence interval:
##  -2.339798  3.094515
## sample estimates:
## difference in mean 
##          0.3773585

Difference in mean test scores within two groups:

svyttest(testsavg_max31~quizlet,strat_design)
## 
##  Design-based t-test
## 
## data:  testsavg_max31 ~ quizlet
## t = -0.22711, df = 80, p-value = 0.8209
## alternative hypothesis: true difference in mean is not equal to 0
## 95 percent confidence interval:
##  -3.342572  2.648363
## sample estimates:
## difference in mean 
##         -0.3471047

Difference in mean open questions scores within two groups:

svyttest(openavg_max25~quizlet,strat_design)
## 
##  Design-based t-test
## 
## data:  openavg_max25 ~ quizlet
## t = 0.54987, df = 80, p-value = 0.5839
## alternative hypothesis: true difference in mean is not equal to 0
## 95 percent confidence interval:
##  -1.777731  3.164198
## sample estimates:
## difference in mean 
##          0.6932336

Difference in mean rank change within two groups:

svyttest(rankindex~quizlet,strat_design)
## 
##  Design-based t-test
## 
## data:  rankindex ~ quizlet
## t = 0.323, df = 80, p-value = 0.7475
## alternative hypothesis: true difference in mean is not equal to 0
## 95 percent confidence interval:
##  -2.017951  2.814307
## sample estimates:
## difference in mean 
##          0.3981783

Conclusion on t-tests

In all cases p-value is very big, meaning that we have rather high probability to reject the null hypothesis when in fact it is true

Weighted linear regression models

Performance index as predictor:

modelwtd <- lm(perindex~quizlet, weights = webinarium$wtd, data=webinarium)
summary(modelwtd)
## 
## Call:
## lm(formula = perindex ~ quizlet, data = webinarium, weights = webinarium$wtd)
## 
## Weighted Residuals:
##      Min       1Q   Median       3Q      Max 
## -14.4264  -5.2460  -0.3697   3.9345  17.0493 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  15.0000     0.9459  15.857   <2e-16 ***
## quizletyes    0.3774     1.3312   0.283    0.778    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.681 on 80 degrees of freedom
## Multiple R-squared:  0.001003,   Adjusted R-squared:  -0.01148 
## F-statistic: 0.08036 on 1 and 80 DF,  p-value: 0.7775

Mean test score as predictor:

modelwtd2 <- lm(testsavg_max31~quizlet, weights = webinarium$wtd, data=webinarium)
summary(modelwtd2)
## 
## Call:
## lm(formula = testsavg_max31 ~ quizlet, data = webinarium, weights = webinarium$wtd)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -26.388  -3.085   1.692   5.488  10.989 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  20.1207     1.0437  19.278   <2e-16 ***
## quizletyes   -0.3471     1.4688  -0.236    0.814    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.371 on 80 degrees of freedom
## Multiple R-squared:  0.0006976,  Adjusted R-squared:  -0.01179 
## F-statistic: 0.05585 on 1 and 80 DF,  p-value: 0.8138

Mean scores on responces on open questions as predictor:

modelwtd3 <- lm(openavg_max25~quizlet, weights = webinarium$wtd, data=webinarium)
summary(modelwtd3)
## 
## Call:
## lm(formula = openavg_max25 ~ quizlet, data = webinarium, weights = webinarium$wtd)
## 
## Weighted Residuals:
##      Min       1Q   Median       3Q      Max 
## -16.3258  -3.1777   0.3512   4.4941  12.5270 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  12.4483     0.8663  14.370   <2e-16 ***
## quizletyes    0.6932     1.2191   0.569    0.571    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.118 on 80 degrees of freedom
## Multiple R-squared:  0.004026,   Adjusted R-squared:  -0.008424 
## F-statistic: 0.3234 on 1 and 80 DF,  p-value: 0.5712

Change in rank of a student as predictor:

modelwtd4 <- lm(rankindex~quizlet, weights = webinarium$wtd, data=webinarium)
summary(modelwtd4)
## 
## Call:
## lm(formula = rankindex ~ quizlet, data = webinarium, weights = webinarium$wtd)
## 
## Weighted Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.6174  -4.7485  -0.9983   3.1204  16.2353 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   3.6207     0.8405   4.308 4.65e-05 ***
## quizletyes    0.3982     1.1828   0.337    0.737    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.936 on 80 degrees of freedom
## Multiple R-squared:  0.001415,   Adjusted R-squared:  -0.01107 
## F-statistic: 0.1133 on 1 and 80 DF,  p-value: 0.7373

Some conclusions on models

General tendency: in all models coefficients are not statistically significant, meaning that we have rather high probability to reject the null hypothesis when in fact it is true (HO: there is no relationship between variables). The reason for this maybe relatively small sample size.

Performance index: comparing with people who were not exposed to gamification practices, for those who were performance index increases by 0.3774.

Test scores: comparing with people who were not exposed to gamification practices, for those who were test scores decrease by 0.3471.

Responces on open questions: comparing with people who were not exposed to gamification practices, for those who were open questions scores increase by 0.6932.

Rank change: comparing with people who were not exposed to gamification practices, for those who were change in rank increase by 0.3982

Spaghetti plot (strange one)

ggplot(data = webinarium, aes(x = rank1, y = rank2, colour = quizlet)) +
    geom_line()