Übung 3 - Dispersionsmasse

HS 2025

Author

Gidon Frischkorn

Logische Operatoren und Vergleiche in R

In dieser Übung werden Sie weiter mit Variablen, Vektoren und Datensätzen in R arbeiten. Vor allem werden wir neben der Vertiefung der Dispersionsmasse, die in der Vorlesung behandelt wurden, mit relationalen und logischen Operatoren arbeiten und sehen wie diese Operatoren genutzt werden können um bestimmte Werte einer Variable auszuwählen.

Um sich mit relationalen und logischen Operatoren und dem Indizieren von Werten auseinander zu setzen schauen Sie bitte die folgenden Videos:

  1. Ein Video zu Relationalen Operatoren
  2. Ein Video zu Logischen Operatoren
  3. Ein Video zur Indzierung von Vekoren

Übungen

In den folgenden Übungen werden Sie wie in der letzten Übung auch mit einem simulierten Datensatz von fiktiven Daten eines Erstsemester-Jahrgangs von Psychologie-Studierenden arbeiten. Sie können Sich den Datensatz auf ihren eigenen PC herunterladen: semester_data2.csv

Alternativ können Sie hier auf der Website direkt R Code mit Hilfe der webr Erweiterung ausführen um die Aufgaben zu lösen. Der Datensatz enthält wiederum die gleichen Variablen, wie die Beispiele in der Vorlesung und der letzten Übung: geschlecht, nationalität, wohnort, alter und wissen_statistik, die Werte sind jedoch anders. Unten sehen sie die ersten Zeilen des simulierten Datensatzes.

head(semester_data2)
  geschlecht nationalität    wohnort alter wissen_statistik grösse
1   weiblich      Schweiz     Luzern  21.9                3    158
2   weiblich   Frankreich       Bern  24.0                2    159
3   weiblich      Schweiz        Zug  21.2                3    168
4   weiblich   Frankreich    Zuerich  27.0                2    178
5   weiblich       andere St. Gallen  17.7                4    164
6   weiblich      Schweiz       Bern  22.0                3    166

Wie in der Übung 2 finden Sie hier über den Übungsaufgaben die webr Konsole, die Ihnen das schreiben und durchführen von R Code direkt auf der Website ermöglicht. Wenn viele Studierenden die Übungen parallel machen, dann kann es sein, dass webr sehr langsam wird.

Bitte löschen Sie die ersten Zeilen, die den Datensatz lokal verfügbar machen nicht. Wenn Sie die Zeilen doch aus versehen Löschen sollten dann können Sie auf der rechten Seite der Konsole das Symbol mit den im Kreis drehenden Pfeilen drücken, um die Konsole zurück zu setzen.

Um den Code den Sie geschrieben haben auszuführen drücken Sie entweder Run Code, damit der gesamte Code ausgeführt würde. Alternativ können Sie auch einzelne Zeilen ausführen, indem sie CRTL+Enter (Windows) oder CMD+Enter (Mac) drücken.

Nutzen Sie eine Suchmaschine, wenn Sie nicht wissen welche Funktionen Ihnen ein bestimmtes Ergebnis liefern. Ausserdem können Sie in R immer die Hilfe einer Funktion aufrufen, indem sie vor den Namen der Funktion ein Fragezeichen schreiben, z. Bsp ?median oder die Hilfe-Funktion help() mit dem jeweiligen Funktionsbefehl ausführen: help(median).

Wie viele der Studierenden, die ihr Statistik Wissen hoch einschätzen (wissen_statistik >= 4) sind Männer und wie viele Frauen?

Um diese Frage zu beantworten müssen wir zwei unterschiedliche logische Indexvariablen erstellen und zählen wie häufig diese den Wert TRUE haben.

Es bietet sich an diesen Vergleich in mehreren Schritten durchzuführen:

  1. Erstellen eine Variablen die kodiert welche Personen ihr Statistik Wissen hoch einschätzen: index_stats <- semester_data2$wissen_statistik >= 4
  2. Erstellen einer Variablen die kodiert ob jemand weiblich ist: index_weiblich <- semester_data2$geschlecht == "weiblich"
  3. Für die Anzahl Frauen die ihr Statistik Wissen hoch einschätzen können wir nun aufsummieren für wie viele beide Index Variablen den Wert TRUE haben: sum(index_stats & index_weiblich)
  4. Für die Anzahl Männer können wir einfach die negation des index_weiblich nutzen, weil diese Variable nur zwei Kategorien hat: sum(index_stats & !index_weiblich)

Was ist der Interquartilsabstand \(IQR\) der Variable grösse für Frauen \(w\) und Männer \(m\)?

Um den Interquartilabstand der Grösse der weiblichen und männlichen Studierenden zu bekommen erstellen sie als erstes eine logische Index-Variable die kodiert welche Studierenden weiblich sind: index_weiblich <- semester_data2$geschlecht == "weiblich"

Mit Hilfe dieser Index-Variable können Sie dann den Interquartilabstand nur für die Grösse der weiblich Studierenden berechnen: IQR(semester_data2$grösse[index_weiblich]).

Um den Interquartilabstand der männlichen Studierenden zu erlangen können Sie einfach die negation von index_weiblich nutzen, da es nur zwei Merkmalsausprägungen gibt: IQR(semester_data2$grösse[!index_weiblich])

Alternative hätten Sie wie in Übung 2 die aggregate Funktion nutzen können und den Interquartilabstand gruppiert für alle Geschlechter zu berechnen: aggregate(semester_data2$grösse, list(semester_data2$geschlecht), FUN = IQR)

Was ist der Streubereich der Variable alter für die Studierenden mit der nationalität == "Deutsch"?

Um den Altersrange der deutschen Studierenden zu bekommen erstellen sie als erstes eine logische Index-Variable die kodiert welche Studierenden Deutsch sind: index_deutsch <- semester_data2$natioanlität == "Deutsch"

Mit Hilfe dieser Index-Variable können Sie dann den Range nur für die Alterswerte der deutschen Studierenden berechnen: range(semester_data2$alter[index_deutsch])

Alternative hätten Sie wie in Übung 2 die aggregate Funktion nutzen können und den Range gruppiert für alle Nationalitäten berechnen können: aggregate(semester_data2$alter, list(semester_data2$nationalität), FUN = range)

Was ist der relative Informationsgehalt der Variable nationalität im Datensatz semetester_data2?

Als erstes sollten sie zur Berechnung des relativen Informationsgehalts, die relativen Häufigkeiten der Variable nationalität berechne: rel_häufigkeit <- table(semester_data2$nationalität)/nrow(semester_data2)

Dann können Sie den relativen Informationsgehalt \(H\) mit Hilfe der dazugehörigen formel berechnen. Diese enthält zum einen die Normalisierung für die Anzahl an Kategorien normalisierung <- -1/log(length(rel_häufigkeit)) und zum Anderen die Summe der relativen Häufigkeiten multipliziert mit dem logarithmus der relativen Häufigkeiten: sum_rel_info <- sum(rel_häufigkeit * log(rel_häufigkeit).

Wenn sie diese beiden Werte miteinander multiplizieren erhalten sie den relativen Informationsgehalt: rel_info = normalisierung * sum_rel_info

Für die Lösung müssen Sie diesen Wert dann noch auf zwei Stellen runden: round(rel_info,2)

Wie viele der Studierenden, sind Franzosen oder Italiener und weiblich?

Für komplexer logische Vergleiche bietet es sich an den Vergleich in mehrer einzelschritte zu zerlegen. Für diese Aufgabe empfiehlt es sich erst zu Testen welche Personen aus Frankreich oder Italien sind: index_nation <- semester_data2$nationalität == "Frankreich" | semester_data2$nationalität == "Italien" und dann zu Testen welche Personen weiblich sind: index_weiblich <- semester_data2$geschlecht == "weiblich"

Mit Hilfe dieser beiden Index-Variablen können sie dann testen auf welche Personen beide Kriterien zutreffen und diese Aufsummieren: sum(index_nation & index_weiblich)