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:
studentInfo: Daten zur Interaktion der Studierenden mit der VLE
studentVle: Informationen zu den Studierenden
# 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)
studentInfo <- read.csv("~/Desktop/Datensätze/anonymisedData/studentInfo.csv")
studentVle <- read.csv("~/Desktop/Datensätze/anonymisedData/studentVle.csv")
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
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
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.