Projektidee

Datenquellen: Open University Learning Analytics dataset - https://analyse.kmi.open.ac.uk/open_dataset - Der Datensatz enthält Daten über Kurse, Studenten und deren Interaktionen mit der VLE - Virtual Learning Enviroment

Forschungsfrage: Besteht ein Zusammenhang zwischen der Anzahl an Klicks und der erreichten Credits?

Die Anzahl der Klicks steht dabei für den Aufwand, den die Studierenden in dem entsprechenden Kurs erbringen.

Hypothese: Je mehr Klicks ein Studierender in einem bestimmten Modul getätigt hat, desto mehr Credits hat er im entsprechenden Modul erreicht.

Für die Analyse werden die folgenden zwei Datensätze benötigt:

Librarys aktivieren

# Librarys laden

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.4     ✓ dplyr   1.0.2
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(apaTables)
library(sjPlot)
## #refugeeswelcome
library(readxl)
library(dataedu)

Datensätze laden

studentInfo <- read.csv("~/Desktop/Datensätze/anonymisedData/studentInfo.csv")

studentVle <- read.csv("~/Desktop/Datensätze/anonymisedData/studentVle.csv")

Daten anzeigen

Mit head() Funktion, um nur die ersten sechs Spalten anzeigen zu lassen, da der Datensatz sehr groß ist.

head(studentInfo)
##   code_module code_presentation id_student gender               region
## 1         AAA             2013J      11391      M  East Anglian Region
## 2         AAA             2013J      28400      F             Scotland
## 3         AAA             2013J      30268      F North Western Region
## 4         AAA             2013J      31604      F    South East Region
## 5         AAA             2013J      32885      F West Midlands Region
## 6         AAA             2013J      38053      M                Wales
##       highest_education imd_band age_band num_of_prev_attempts studied_credits
## 1      HE Qualification  90-100%     55<=                    0             240
## 2      HE Qualification   20-30%    35-55                    0              60
## 3 A Level or Equivalent   30-40%    35-55                    0              60
## 4 A Level or Equivalent   50-60%    35-55                    0              60
## 5    Lower Than A Level   50-60%     0-35                    0              60
## 6 A Level or Equivalent   80-90%    35-55                    0              60
##   disability final_result
## 1          N         Pass
## 2          N         Pass
## 3          Y    Withdrawn
## 4          N         Pass
## 5          N         Pass
## 6          N         Pass
head(studentVle)
##   code_module code_presentation id_student id_site date sum_click
## 1         AAA             2013J      28400  546652  -10         4
## 2         AAA             2013J      28400  546652  -10         1
## 3         AAA             2013J      28400  546652  -10         1
## 4         AAA             2013J      28400  546614  -10        11
## 5         AAA             2013J      28400  546714  -10         1
## 6         AAA             2013J      28400  546652  -10         8

Datensätze bearbeiten

studentVle:

studentVle enthält die Daten zur Interaktion der Studierenden mit der VLE. Insgesamt gibt es sieben verschiedene Module. Die Studierenden können sich in mehrere Module einschreiben. Der Lerninhalt der einzelnenen Module wird auf mehreren Seiten präsentiert. Die Anzahl der Klicks wird jeweils für die entsprechende Seite erfasst und in der Tabelle aufgeführt. D.h. es gibt für jeden Studierenden mehrere Einträge.

Spalten entfernen, die für die Analyse nicht benötgt werden:

studentVle <- studentVle %>%
  select(-id_site,-date,-code_presentation)

head(studentVle)
##   code_module id_student sum_click
## 1         AAA      28400         4
## 2         AAA      28400         1
## 3         AAA      28400         1
## 4         AAA      28400        11
## 5         AAA      28400         1
## 6         AAA      28400         8

Die erreichten Credits, die im Datensatz studentInfo aufgeführt werden, beziehen sich für den jeweiligen Studenten auf ein bestimmtest Modul. Da die Studierenden in mehreren Modulen eingeschrieben sein können, muss zunächst nach den einzelnen Modulen gefiltert werden.

Nach Modulen filtern:

studentVle_AAA <- filter(studentVle, code_module == "AAA")

studentVle_BBB <- filter(studentVle, code_module == "BBB")

studentVle_CCC <- filter(studentVle, code_module == "CCC")

studentVle_DDD <- filter(studentVle, code_module == "DDD")

studentVle_EEE <- filter(studentVle, code_module == "EEE")

studentVle_FFF <- filter(studentVle, code_module == "FFF")

studentVle_GGG <- filter(studentVle, code_module == "GGG")

Nach Studierenden sortieren und die Gesamtanzahl Klicks für jeden Studierenden ermitteln:

studentVle_AAA <- studentVle_AAA %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_BBB <- studentVle_BBB %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE)) 
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_CCC <- studentVle_CCC %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_DDD <- studentVle_DDD %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_EEE <- studentVle_EEE %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_FFF <- studentVle_FFF %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)
studentVle_GGG <- studentVle_GGG %>%
  group_by(code_module, id_student) %>%
  summarise(clicks = sum(sum_click, na.rm = TRUE))
## `summarise()` regrouping output by 'code_module' (override with `.groups` argument)

Die Datensätze enthalten jetzt jeden Studierenden nurnoch einmal für jedes Modul und die zugehörige Gesamtanzahl an Klicks.

studentVle_AAA und studentVle_BBB anzeigen:

head(studentVle_AAA)
## # A tibble: 6 x 3
## # Groups:   code_module [1]
##   code_module id_student clicks
##   <chr>            <int>  <int>
## 1 AAA               6516   2791
## 2 AAA              11391    934
## 3 AAA              24734    499
## 4 AAA              26192   2223
## 5 AAA              28061   1590
## 6 AAA              28400   1435
head(studentVle_BBB)
## # A tibble: 6 x 3
## # Groups:   code_module [1]
##   code_module id_student clicks
##   <chr>            <int>  <int>
## 1 BBB              23629    161
## 2 BBB              23798    590
## 3 BBB              25107   2562
## 4 BBB              25629     16
## 5 BBB              25997     13
## 6 BBB              26315   2451

Datensätze für die einzelnen Module wieder miteinander verbinden:

studentVle_gesamt <- studentVle_AAA %>%
  bind_rows(studentVle_BBB, studentVle_CCC, studentVle_DDD, studentVle_EEE, 
            studentVle_FFF, studentVle_GGG)

studentInfo:

Der Datensatz enthält die Daten zu den einzelnenen Studenten und die jeweiligen Ergebnise für die einzelnen Module. Hier gibt es einmal die Gesamtzahl der Credits und das Endergebnis in Form von “pass”, “fail”, “withdrawn” und “distinction”. Die restlichen Spalten sind für diese Untersuchung uninteressant.

Unnötige Spalten entfernen bzw. benötigte Spalten auswählen:

studentInfo_2 <- studentInfo %>%
  select(code_module, id_student, studied_credits, final_result)

head(studentInfo_2)
##   code_module id_student studied_credits final_result
## 1         AAA      11391             240         Pass
## 2         AAA      28400              60         Pass
## 3         AAA      30268              60    Withdrawn
## 4         AAA      31604              60         Pass
## 5         AAA      32885              60         Pass
## 6         AAA      38053              60         Pass

Datensätze studentInfo_2 und studentVle_gesamt können jetzt miteinander verbunden werden. studentInfo_2 bleibt komplett erhalten und die Spalte “clicks” wird entsprechend dem Modul und der Studenten-ID angefügt. Dabei entstehen Spalten ohne Wert. Dabei handelt es sich nur um Werte von Studenten, die entweder die Prüfung zurückgezogen oder nicht bestanden haben.

dat_info_vle <- 
  left_join(studentInfo_2, studentVle_gesamt,
            by = c("code_module", "id_student"))

head(dat_info_vle)
##   code_module id_student studied_credits final_result clicks
## 1         AAA      11391             240         Pass    934
## 2         AAA      28400              60         Pass   1435
## 3         AAA      30268              60    Withdrawn    281
## 4         AAA      31604              60         Pass   2158
## 5         AAA      32885              60         Pass   1034
## 6         AAA      38053              60         Pass   2445

Analyse

Zusammenhang zwischen der Anzahl der Kicks und der erarbeiteten Credits:

Abhängige Variable: studied_credits

Unabhängige Variable/Einflussvariable: clicks

Streudiagramm:

dat_info_vle %>%
  ggplot(aes(x = clicks, y = studied_credits)) + 
  geom_point(color = dataedu_colors("green")) + 
  theme_dataedu() +
  labs(x = "clicks",
       y = "studied_credits")
## Warning: Removed 3092 rows containing missing values (geom_point).

Auf ersten Blick scheint es keinen Zusammenhang zwischen Anzahl der Klicks und den erreichten Credits zu geben. Sogar eher umgekehrt?

Regressionsgerade hinzufügen:

dat_info_vle %>%
  ggplot(aes(x = clicks, y = studied_credits)) +
  geom_point(color = dataedu_colors("green")) + # same as above
  # this adds a line of best fit
  # method = "lm" tells ggplot2 to fit the line using linear regression
  geom_smooth(method = "lm") +
  theme_dataedu() +
  labs(x = "clicks",
       y = "studied_credits")
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 3092 rows containing non-finite values (stat_smooth).
## Warning: Removed 3092 rows containing missing values (geom_point).

Steigung der Regressionsgeraden = 0 -> Mit steigenden Klicks, steigt nicht die Zahl der erreichten Credits.

m_linear <-
  lm(studied_credits ~ clicks, data = dat_info_vle)

summary(m_linear)
## 
## Call:
## lm(formula = studied_credits ~ clicks, data = dat_info_vle)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -49.80 -18.38 -18.22  21.73 550.76 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 7.818e+01  2.957e-01 264.416   <2e-16 ***
## clicks      9.522e-05  1.311e-04   0.726    0.468    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 39.77 on 29499 degrees of freedom
##   (3092 observations deleted due to missingness)
## Multiple R-squared:  1.788e-05,  Adjusted R-squared:  -1.602e-05 
## F-statistic: 0.5273 on 1 and 29499 DF,  p-value: 0.4677

Da der p-Wert über 0,05 liegt, leistet das Modell keinen Erklärungsbeitrag, d.h. Nullhypothese trifft zu -> Mit höherer Anzahl an Klicks steigt nicht die Zahl der erreichten Credits.