library(learnr) library(fontawesome) library(psych) data(mach, package = 'PsyBSc7')
Für den Verlauf dieses Modul benötigen Sie die Statistiksoftware R und die Benutzeroberfläche R Studio auf ihrem Rechner. Beide können kostenlos heruntergeladen werden.
Downloadlinks:
R für das Windows-Betriebssystem
R-Studio (Herunterscrollen um Version für Windows oder Mac zu wählen)
Hier finden Sie eine ausführliche Anleitung zum Herunterladen und Installieren von R und R-Studio.
R ist eine Open-Source-Software. Dies bedeutet, dass es online eine Vielzahl von Ressourcen gibt, die Sie beim Lernen nutzen können und sollten! Zu einigen Themen wird gezielt auf weiterführende Links zum vertiefenden Verständnis hingewiesen. Grundsätzlich gibt es online eine Vielzahl an kostenlosen Informationsangeboten (z.B. das R-Cookbook, das Buch R for Data Science, oder hier eine Einführung in R für Psychologie-Studierende, sowie teilweise kostenlosen Übungsplattformen (z.B. Datacamp, Codecademy).
Wenn Sie eine Auffrischung der Inhalte des letzten Semesters benötigen oder sich gerne auf die Datenanalyse in R einstimmen möchten, sehen Sie sich gerne unter dem folgenden Link den Inhalt der Einführungssitzung des letzten Semesters an.
Das Video zur ersten Sitzung beinhaltet eine Wiederholung der Grundlagen in R und einfache Anwendungen auf Matrizen und Datensätze. Sie finden das Video unter folgendem Link:
Objekte sind die Elemente, mit denen R arbeiten kann. Das können einzelne Zahlen bis hin zu komplexen Datensätzen sein. Objekte werden in R durch den Zuweisungspfeil (<-
) oder das Gleichzeichen (=
) angelegt.
zahl <- 100 zahl = 100
Funktionen oder Rechenoperationen können entweder auf ausgeschriebene Zahlen oder auf Objekte angewandt werden.
log(100) log(zahl)
Objekte können unter anderem für einfache Rechenoperationen (+
, -
, *
, /
, ^
) sowie für logische Abfragen (==
, !=
, >
, >=
, <
, <=
) genutzt werden. Hier finden Sie weiterführende Informationen und eine Übersicht zu Rechenoperationen und logischen Abfragen.
Funktionen in R haben die Grundstruktur funktionsname(argument1 = ..., argument2 = ..., argument3 = ...)
. Die Argumente, die eine Funktion erwartet, können mit args()
abgefragt werden:
args(round)
Argumente, auf die in der Darstellung = ...
folgt, nutzen diesen Wert als Voreinstellung. Bei round
wird per default auf 0 Nachkommastellen gerundet, wenn dieser Standard nicht explizit überschrieben wird. Verändern Sie den Code, sodass Sie einmal den Standard nutzen, und dann einmal auf 2 Nachkommastellen runden.
round(1.2859, ...)
Argumente können durch die korrekte Reihenfolge oder durch explizite Benennung angesprochen werden. Bearbeiten Sie den untenstehenden Code und testen beide Versionen.
round()
Außerdem können Sie mit ?
oder help()
die Hilfe einer Funktion aufrufen, um sich detaillierte Informationen zu dieser Funktion ausgeben zu lassen.
Mehrere Zahlen werden in R durch c()
zu Vektoren kombiniert:
zahlen <- c(8, 3, 4)
Wird eine Rechenoperation auf einen Vektor angewandt, so wird die Operation elementeweise vorgenommen.
zahlen * 3
Vektoren können unterschiedlicher Art sein:
+--------------------+--------------------+--------------------------------------------------+
| Klasse | Abkürzung | Inhalt |
+====================+====================+==================================================+
| logical
| logi
| TRUE
oder FALSE
|
+--------------------+--------------------+--------------------------------------------------+
| numeric
| num
| Nur Zahlen |
+--------------------+--------------------+--------------------------------------------------+
| character
* | chr
| Irgendeine Kombination aus Zahlen und Buchstaben |
+--------------------+--------------------+--------------------------------------------------+
| factor
| | Faktor mit bestimmter Anzahl an Stufen |
+--------------------+--------------------+--------------------------------------------------+
Für einen vorhandenen Vektor kann die Klasse über die Funktion str()
ermittelt werden.
str(zahlen) class(zahlen) #alternativer Befehl
Ein logischer Vektor entsteht durch eine elementenweise logische Abfrage. Über die Funktion as.character()
können die Elemente eines Vektors in Zeichen umgewandelt werden.
abfrage <- zahlen == 3 #elementenweise logische Abfrage str(abfrage) zeichen <- as.character(zahlen) str(zeichen)
Faktor-Vektoren werden über as.factor()
erzeugt. Sie repräsentieren dann einen Faktor mit einer bestimmten Anzahl an Faktorstufen.
gender <- c(0, 1, 0, 1, 1, 0, 0) gender_factor <- as.factor(gender)
Prüfen Sie nach, welche Struktur der erstellte Vektor gender_factor
hat.
Über die Funktion relevel()
kann die Reihenfolge der Faktorstufen modifiziert werden.
Matrizen sind eine der vier Formen, in der in R mehrere Vektoren in einem gemeinsamen Objekt abgelegt werden können:
+--------------------+--------------------------------------------------------+
| Form | Inhalt |
+====================+========================================================+
| matrix
| Vektoren der gleichen Länge und Art (zwei-dimensional) |
+--------------------+--------------------------------------------------------+
| array
| Vektoren der gleichen Länge und Art (n-dimensional) |
+--------------------+--------------------------------------------------------+
| data.frame
| Vektoren der gleichen Länge |
+--------------------+--------------------------------------------------------+
| list
| Beliebige Objekte |
+--------------------+--------------------------------------------------------+
Sie können mit dem matrix()
-Befehl angelegt werden:
mat <- matrix(c(7, 3, 9, 1, 4, 6), ncol = 2)
Schauen Sie sich die erstellte Matrix an, in dem sie mat
ausführen. Prüfen sie mit dem Befehl str()
, welcher Art die erstellte Matrix ist.
mat <- matrix(c(7, 3, 9, 1, 4, 6), ncol = 2)
Schauen Sie mit dem Befehls args()
, welche Argumente die Funktion matrix
erwartet. Erstellen Sie eine eigene Matrix analog zu oben, und nutzen Sie hierbei die konkrete Benennung der Argumente, die sie verwenden.
Auf die Elemente innerhalb von Matrizen kann man über die sogenannte Indizierung zugreifen, indem man Zeile und Spalte nach der folgenden Form definiert: [Zeile, Spalte]
. Das Element in der dritten Zeile und der ersten Spalte erreichen wir also über:
mat[3, 1]
Die Dimensionen einer Matrix lassen sich bestimmen über:
nrow(mat) ncol(mat) dim(mat) #alternativer Befehl
Um Matrizen bzw. Vektoren spaltenweise zusammenzufügen kann cbind()
genutzt werden (analog, ist rbind()
dafür da, zeilenweise zusammenzufügen).
mat2 <- matrix(c(8, 2, 11, 3, 5, 9), ncol = 2) combined <- cbind(mat, mat2) combined
Von besonderer Bedeutung sind in der Statistik quadratische Matrizen, also Matrizen mit so vielen Zeilen wie Spalten. In der Vorlesung wurden verschiedene Matrixoperationen besprochen. Alle diese Operationen sind auch in R implementiert und über einfache Befehle nutzbar.
Hier ein Überblick über die in der Vorlesung behandelten Matrixoperationen und ihre Umsetzung in R (m
steht dabei immer für eine beliebige Matrix):
+---------------------------+------------------+--------------------------------+
| Operation | Befehl | Anmerkungen |
+===========================+==================+================================+
| Diagonale | diag(m)
| |
+---------------------------+------------------+--------------------------------+
| Spur | sum(diag(m))
|alternativ: tr(), psych-Package |
+---------------------------+------------------+--------------------------------+
| Transposition | t(m)
| |
+---------------------------+------------------+--------------------------------+
| Symmetrie prüfen | isSymmetric(m)
| |
+---------------------------+------------------+--------------------------------+
| Einheitsmatrix | diag(1, i)
| i
: Anzahl der Zeilen/Spalten |
+---------------------------+------------------+--------------------------------+
| Addition | m1 + m2
| |
+---------------------------+------------------+--------------------------------+
| Subtraktion | m1 - m2
| |
+---------------------------+------------------+--------------------------------+
| Multiplikation (Skalar) | m * x
| x
: Skalar |
+---------------------------+------------------+--------------------------------+
| Multiplikation (Matrizen) | m1 %*% m2
| |
+---------------------------+------------------+--------------------------------+
| Inverse | solve(m)
| |
+---------------------------+------------------+--------------------------------+
| Determinante | det(m)
| |
+---------------------------+------------------+--------------------------------+
So genannte Packagee (Pakete) stellen zusätzliche Funktionen zur Verfügung, die in base R nicht verfügbar sind. Aktuell sind in dem offiziellen Repository für R über 15.000 ergänzende Packages verfügbar. Sehen Sie sich hier die vollständige Liste an. Wenn Sie nach einem Package für einen bestimmten Zweck suchen, ist es jedoch leichter, eine konventionelle Suchmaschine zu nutzen.
Einige nützliche Packages für die Anwendung in psychologischer Forschung sind beispielsweise:
+--------------------+----------------------------------------------------------------------------------------+
| Package | Inhalt |
+====================+========================================================================================+
| psych
| Funktionen für psychologische Forschung; vorallem multivariate Analysen und |
| | Testkonstruktion, z.B. Faktorenanalysen, Reliabilitätsanalyse |
+--------------------+----------------------------------------------------------------------------------------+
| car
| Funktionen für Regressionsanalysen |
+--------------------+----------------------------------------------------------------------------------------+
| ggplot2
| Erstellen von Abbildungen (siehe zweite Sitzung) |
+--------------------+----------------------------------------------------------------------------------------+
| dplyr
| Bearbeiten von Datensätzen: Zusammenfassen, Strukturieren, Unterteilen und Neuanordnen |
| | von Datensätzen |
+--------------------+----------------------------------------------------------------------------------------+
Packages müssen vor der ersten Nutzung zunächst einmal heruntergeladen werden:
install.packages("psych")
Danach muss man ein Package aus der library laden. Dies muss nach jedem Neustart von R erneut erfolgen, damit das Package genutzt werden kann.
library(psych)
In der praktischen Nutzung bekommt man es mit Datensätzen in den unterschieldlichsten Dateiformaten zu tun. R kann Daten aus sehr vielen Formaten einlesen (.csv, .sav, .txt, .dat, ...). Teilweise müssen dafür spezielle Packages benutzt werden. Häufig empfiehlt sich die Nutzung von csv-Dateien. Hier finden Sie eine Zusammenfassung dazu.
Wenn Daten bereits im R-eigenen .rda-Format vorliegen, können diese über den Befehl load()
oder über readRDS()
eingelesen werden.
Wenn die Daten lokal auf dem Rechner gespeichert sind, empfiehlt es sich, den betreffenden Ordner als Working Directory zu definieren und auch das Skript dort abzulegen. Die Daten können dann ohne Angabe eines Dateipfades eingelesen werden.
setwd("Ordnerpfad")
load("mach.rda")
Die hier verwendeten Daten stammen aus dem "Open-Source Psychometrics Project", einer Online-Plattform, die eine Sammlung an Daten aus verschiedensten Persönlichkeitstests zur Verfügung stellt. Auf der Seite kann man die Fragebögen selbst ausfüllen, und so zum Datenpool beitragen. Der hier verwendete Datensatz enthält Items aus einem Machiavellismusfragebogen, den Sie bei Interesse hier selbst ausfüllen können.
Einen Überblick über die Daten verschaffen kann man sich beispielsweise mit Funktionen wie names()
, head()
oder summary
oder der Funktionen describe()
aus dem psych-Package.
Um auf einzelne Variablen in einem Datensatz zuzugreifen, kann man das $
-Zeichen nutzen, und dann Funktionen auf die angesprochene Variable anwenden.
mean(mach$TIPI1)
Alternativ kann man analog zu oben auch die Indizierung über eckige Klammern nutzen, um eine oder mehrere Variablen oder Beobachtungen auszuwählen.
mean(mach[,1])
Um eine Anzahl an Beobachtungen auszuwählen, die einen bestimmten Wert in einer Variable haben, kann ebenfalls die Indizierung in eckigen Klammern verwendet werden, und kann ggf. mit dem %in%
-Operator kombiniert werden.
mach[mach$voted == 1, ] #Alle Beobachtungen, die im Item voted den Wert 1 haben mach[mach$religion %in% c(1, 2), ] #Alle Beobachtungen, die im Item religion entweder 1 oder 2 aufweisen mach[,1:10] #Auswahl der ersten 10 Variablen
Ein Markdown ist ein Dokument, welches im R-Editor erstellt wird, und sowohl Textbestandteile als auch R-Code enthalten kann. Dieses Dokument wird in R erstellt und bearbeitet, und kann danach z.B. als Word-, PDF- oder HTML-Datei ausgegeben werden. Ein Markdown besteht aus freien Textbereichen und aus sogenannten R-Chunks (Absätzen mit R-Code). In Textabsätzen können bestimmte Befehle genutzt werden, um die Formatierung des Textes (Überschriften, Fettdruck, etc.) anzupassen.
Hier finden Sie eine sehr ausführliche Anleitung für die Arbeit mit Markdowns.
Hier finden Sie ein sogenanntes Cheatsheet für R-Markdown, das viele wichtige Befehle kurz und knapp zusammenfasst.
Auf den Folien der Vorlesung finden Sie Beispiele zu verschiedenen Matrixoperationen. Nutzen Sie R, um einige von ihnen nachzurechnen! Definieren Sie dafür jeweils die erwähnten Matrizen so wie auf den Vorlesungsfolien zum Thema Matrixalgebra angegeben.
Bestimmen Sie die Spur der Matrix auf der Folie 14.
Prüfen Sie, ob es sich bei der Matrix auf Folie 18 wirklich um eine symmetrische Matrix handelt.
Führen Sie die Multiplikation der Matrizen auf Folie 29 mit R durch.
Der bereitgestellte Datensatz mach
kommt aus einer Onlineerhebung zum Machiavellismus. Bei diesem Konstrukt handelt es sich um eines der drei Persönlichkeitsmerkmale, welche häufig als "Dunkle Triade" bezeichnet werden: Machiavellismus, Narzissmus und Psychopathie. In Anlehnung an Machiavellis "Der Fürst" ist der Kerngedanke bei diesem Konstrukt, dass Personen ein nutzenorientiertes Verständnis sozialer Beziehungen haben. Den Fragebogen können Sie selbst hier ausfüllen.
Laden Sie den Datensatz und verschaffen Sie sich einen Überblick.
Ermitteln Sie mithilfe von Befehlen die Anzahl der Variablen und die Anzahl der Personen im Datensatz.
Wie lauten die Namen der Variablen, die in diesem Datensatz enthalten sind?
Empirisch kann das Konstrukt des Machiavellismus in vier Subdomänen unterteilt werden: negative zwischenmenschliche Taktik (Variable nit
), positive zwischenmenschliche Taktik (Variable pit
), zynische Ansicht der menschlichen Natur (Variable cvhn
) und positive Ansicht der menschlichen Natur (Variable pvhn
).
Untersuchen Sie mithilfe von Histogrammen die Verteilung dieser vier Subdomänen.
Im Datensatz sind vier Subfacetten enthalten (positiv: pit
und pvhn
, negativ: nit
und cvhn
). Es sollte erwartet werden, dass die gleichgerichteten Subdomänen positiv miteinander korrelieren, die entgegengerichteten Subdomänen negativ. Nutzen Sie die corr.test
Funktion aus dem R-Paket psych
, um diese Erwartungen zu prüfen. Dafür müssen Sie ein Subset des Datensatzes erstellen, welches nur die relevanten Variablen enthält. Nutzen Sie wenn nötig die Hilfe für die Funktion corr.test
.
Neben der Skala zum Machiavellismus enthält der Datensatz auch Daten zum weit verbreiteten Ten-Item-Personality-Inventory (TIPI). Bei diesem Fragebogen sollen sich Personen auf eine Skala von 1 bis 7 (1: trifft überhaupt nicht zu, 7: trifft vollkommen zu) anhand von 10 Adjektivpaaren beschreiben. Die folgende Tabelle stellt diese Paare dar und welche der fünf großen Persönlichkeitsdimensionen sie erheben sollen. Die letzte Spalte kennzeichnet, ob die Antworten invertiert werden müssen, bevor sie in die Skalenberechnung eingehen:
+-----+----------------------------------+-----------------------+------------+ | Nr. | Adjektive | Dimension | Invertiert | +=====+==================================+=======================+============+ | 1 | Extraverted, enthusiastic | Extraversion | | +-----+----------------------------------+-----------------------+------------+ | 2 | Critical, quarrelsome | Verträglichkeit | X | +-----+----------------------------------+-----------------------+------------+ | 3 | Dependable, self-disciplined | Gewissenhaftigkeit | | +-----+----------------------------------+-----------------------+------------+ | 4 | Anxious, easily upset | Emotionale Stabilität | X | +-----+----------------------------------+-----------------------+------------+ | 5 | Open to new experiences, complex | Offenheit | | +-----+----------------------------------+-----------------------+------------+ | 6 | Reserved, quiet | Extraversion | X | +-----+----------------------------------+-----------------------+------------+ | 7 | Sympathetic, warm | Verträglichkeit | | +-----+----------------------------------+-----------------------+------------+ | 8 | Disorganized, careless | Gewissenhaftigkeit | X | +-----+----------------------------------+-----------------------+------------+ | 9 | Calm, emotionally stable | Emotionale Stabilität | | +-----+----------------------------------+-----------------------+------------+ | 10 | Conventional, uncreative | Offenheit | X | +-----+----------------------------------+-----------------------+------------+
Erstellen Sie die Skalenwerte der fünf erhobenen Persönlichkeitsdimensionen als Mittelwert aus den beiden jeweiligen Items. Bedenken Sie die Invertierung der Items 2, 4, 6, 8 und 10! Legen Sie diese Skalenwerte als neue Variablen im Datensatz mach
an. Nennen Sie diese fünf Variablen extra
, vertr
, gewis
, emoti
und offen
.
Lassen Sie sich für die neu erstellten Variablen eine deskriptivstatistische Übersicht ausgeben, um zu prüfen, ob die Erstellung der Skalenwerte erfolgreich war.
Die Variable hand
kodiert die Händigkeit einer Person. Dabei bedeutet der Wert 1, dass die dominante Hand einer Person die Rechte ist, 2, dass die dominante Hand die Linke ist und 3, dass die Person keine dominante Hand hat (beidhändig). Wandeln Sie diese numerisch Variable in einen Faktor mit den Ausprägungen "rechts", "links" und "beide" um.
Wie ist die relative Häufigkeitsverteilung der Händigkeit in dieser Stichprobe?
Aus der überproportionalen Prävalenz von Linkshänder*innen unter Politker*innen leiten Sie ab, dass Personen mit einer dominanten linken Hand im Mittel höhere Werte auf der Subdomäne "negative zwischenmenschliche Taktik" (nit
) aufweisen sollten, als Personen mit einer dominanten rechten Hand. Über beidhändige Personen können Sie kein Aussage ableiten.
Erstellen Sie zunächst einen Datensatz, der nur aus links- und rechtshändigen Personen besteht.
Prüfen Sie die Annahme der Homoskedastizität in der Subdomäne "negative zwischenmenschliche Taktik" (nit
) für die beiden Gruppen (Linkshänder vs. Rechtshänder).
Prüfen Sie anhand des geeigneten Test die oben genannte Hypothese.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.