-
Notifications
You must be signed in to change notification settings - Fork 1
R Intro Solutions
Christian Treffenstädt edited this page Jul 24, 2014
·
9 revisions
alter[3]
## [1] 24
geschlecht[7:10]
## [1] "female" "male" "male" "male"
iq_fluid[alter < median(alter)]
## [1] 107 90 105 96 116
iq_kristallin[geschlecht == "male"]
## [1] 104 106 91 124 106
A5: Erstelle einen neuen Vektor, der für jede Versuchsperson den Mittelwert der beiden IQ-Skalen darstellt
# Lösung 1:
mean_iq <- (iq_fluid + iq_kristallin)/2 # Sollte man nur machen, wenn es keine fehlenden Werte gibt
# Lösung 2:
mean_iq <- rowMeans(cbind(iq_fluid, iq_kristallin)) # Kompliziert, funktioniert aber mit fehlenden Werten
A6: Erstelle einen neuen Vektor, der die z-standardisierten Gesamt-IQ-Werte für jede Versuchsperson enthält
a) Standardisiere die Werte anhand der Vorgabewerte im Testmanual (m=100, sd=15)
zstandard_iq_manual <- (mean_iq - 100)/15
b) Standardisiere die Werte anhand der Stichprobenwerte.
zstandard_iq_empirical <- (mean_iq - mean(mean_iq))/sd(mean_iq)
round(mean(zstandard_iq_empirical), 4) # Gerundet auf 4 Nachkommastellen
## [1] 0
sd(zstandard_iq_empirical)
## [1] 1
sum(test_vektor <- zstandard_iq_manual > zstandard_iq_empirical)
## [1] 9
data_frame <- data.frame(Vp = vp_nummer, Alter = alter, Geschlecht = geschlecht,
IQ_Mean = mean_iq)
A10: Ergänze das Frame aus A9 um die beiden Vektoren mit den unterschiedlich z-standardisierten Gesamt-IQ-Werten
data_frame <- cbind(data_frame, zstandard_iq_manual, zstandard_iq_empirical) # Dieses Mal gibt cbind() keine Matrix zurück!
data_frame[3, 4]
## [1] 112
data_frame[, 2]
## [1] 20 34 24 28 28 22 20 20 34 20
data_frame2 <- data_frame[1:2, ]
data_frame3 <- data_frame[data_frame[, 3] == "female", ]
A15: Rekodiere die vierte Variable des obigen Datenframes nach folgendem Muster: 1=-2, 2=-1, 3=0, 4=1, 5=2
data_frame$item_4_recode <- NA # Wir initialisieren eine sechste Variable
data_frame$item_4_recode[data_frame$item4 == 1] <- -2
data_frame$item_4_recode[data_frame$item4 == 2] <- -1
data_frame$item_4_recode[data_frame$item4 == 3] <- 0
data_frame$item_4_recode[data_frame$item4 == 4] <- 1
data_frame$item_4_recode[data_frame$item4 == 5] <- 2
A16: Erweitere das Datenframe um den Geschlechtsvektor, den wir zuvor verwendet haben. Rekodiere den Vektor nach folgendem Muster: 'male'=0, 'female'=1
data_frame$geschlecht <- geschlecht # Wir fügen den Altervektor ein
data_frame$geschlecht_recode <- NA
data_frame$geschlecht_recode[data_frame$geschlecht == "male"] <- 0
data_frame$geschlecht_recode[data_frame$geschlecht == "female"] <- 1
A17: Erstelle im Datenframe eine neue Variable, die die Summe der beiden rekodierten Items sowie der beiden nicht rekodierten Items enthält
data_frame$varSum <- data_frame[, 1] + data_frame[, 3] + data_frame[, 5] + data_frame[,
6]
data <- read.csv2("http://e-scientifics.de/content/datasets/Big5_GEMI_R.csv")
library(car) # Laden des notwendigen Pakets für die Funktion recode()
# Die Holzhammer-Methode:
data$neo_ffi_1_rec <- recode(data$neo_ffi_1, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_3_rec <- recode(data$neo_ffi_3, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_8_rec <- recode(data$neo_ffi_8, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_9_rec <- recode(data$neo_ffi_9, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_12_rec <- recode(data$neo_ffi_12, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_14_rec <- recode(data$neo_ffi_14, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_15_rec <- recode(data$neo_ffi_15, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_16_rec <- recode(data$neo_ffi_16, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_18_rec <- recode(data$neo_ffi_18, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_23_rec <- recode(data$neo_ffi_23, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_24_rec <- recode(data$neo_ffi_24, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_27_rec <- recode(data$neo_ffi_27, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_29_rec <- recode(data$neo_ffi_29, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_30_rec <- recode(data$neo_ffi_30, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_31_rec <- recode(data$neo_ffi_31, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_33_rec <- recode(data$neo_ffi_33, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_38_rec <- recode(data$neo_ffi_38, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_39_rec <- recode(data$neo_ffi_39, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_42_rec <- recode(data$neo_ffi_42, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_44_rec <- recode(data$neo_ffi_44, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_45_rec <- recode(data$neo_ffi_45, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_46_rec <- recode(data$neo_ffi_46, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_48_rec <- recode(data$neo_ffi_48, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_54_rec <- recode(data$neo_ffi_54, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_55_rec <- recode(data$neo_ffi_55, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_57_rec <- recode(data$neo_ffi_57, "2=-2; 1=-1; 0=0; -1=1; -2=2")
data$neo_ffi_59_rec <- recode(data$neo_ffi_59, "2=-2; 1=-1; 0=0; -1=1; -2=2")
# Eine schönere Alternative, die nur funktioniert wenn die Daten in
# Matrixform vorliegen:
data <- as.matrix(data)
column_nrs = c(1, 3, 8, 9, 12, 14, 15, 16, 18, 23, 24, 27, 29, 30, 31, 33, 38,
39, 42, 44, 45, 46, 48, 54, 55, 57, 59) + 2 # Gibt uns die Positionen der zu rekodierenden Variablen
recodes <- recode(data[, column_nrs], "2=-2; 1=-1; 0=0; -1=1; -2=2")
# Allerdings haben wir dann die ursprünglichen Variablennamen, was wenig
# sinnvoll ist
names(recodes) <- c(1, 3, 8, 9, 12, 14, 15, 16, 18, 23, 24, 27, 29, 30, 31,
33, 38, 39, 42, 44, 45, 46, 48, 54, 55, 57, 59) # Ein schneller Fix, der die rekodierten Variablen zwar umbenennt, aber lediglich mit einer Nummer versieht
names(recodes) <- paste(names(recodes), "_rec", sep = "") # So würde man das Problem später elegant lösen
data <- cbind(data, recodes) # Wir hängen die rekodierten Variablen einfach an unser Datenframe an
# Alternativ kann man natürlich auch in dieselben Variablen rekodieren
# anstatt in andere und hat das Variablennamenproblem dann nicht
# Rekodierung mehrerer Variablen in einem Datenframe mit der Funktion
# lapply():
column_nrs = c(1, 3, 8, 9, 12, 14, 15, 16, 18, 23, 24, 27, 29, 30, 31, 33, 38,
39, 42, 44, 45, 46, 48, 54, 55, 57, 59) + 2 # Gibt uns die Positionen der zu rekodierenden Variablen
recodes <- lapply(data[, column_nrs], recode, recodes = "2=-2; 1=-1; 0=0; -1=1; -2=2")
recodes <- as.data.frame(recodes) # Aus der von lapply zurückgegebenen Liste machen wir wieder ein Datenframe
# Beim zusammenfügen beider Datensätze besteht aber wieder das Problem der
# doppelten Variablennamen
names(recodes) <- c(1, 3, 8, 9, 12, 14, 15, 16, 18, 23, 24, 27, 29, 30, 31,
33, 38, 39, 42, 44, 45, 46, 48, 54, 55, 57, 59) # Ein schneller Fix, der die rekodierten Variablen zwar umbenennt, aber lediglich mit einer Nummer versieht
names(recodes) <- paste(names(recodes), "_rec", sep = "") # So würde man das Problem später elegant lösen
data <- cbind(data, recodes)
A19: Berechne die Skalenwerte für die drei verbleibenden Skalen des NEO-FFI. Füge die 5 neuen Variablen zum bestehenden Datensatz hinzu
Skala_O <- rowMeans(data[, seq(from = 5, to = 60, by = 5)])
Skala_V <- rowMeans(data[, seq(from = 6, to = 61, by = 5)])
Skala_G <- rowMeans(data[, seq(from = 7, to = 62, by = 5)])
data <- cbind(data, Skala_N, Skala_E, Skala_O, Skala_V, Skala_G)
A20: Suche im Internet oder der R-Hilfe nach einer Funktion, die dir die Kurtosis einer Verteilung zurückgibt. Berechne die Kurtosis der Variable Skala_N im Datensatz
Wir können die Funktion kurtosi() aus dem Paket psych verwenden:
# install.packages('psych') # Wir können diesen Befehl nutzen, falls das
# Paket psych noch nicht installiert ist
library("psych")
kurtosi(data$Skala_N) # Kurtosis der Verteilung
## [1] 0.2489
# Es gibt natürlich noch viele weitere Pakete, die uns die entsprechenden
# Informationen liefern können
A21: Suche im Internet oder der R-Hilfe nach einer Funktion, die dir die Schiefe einer Verteilung zurückgibt. Berechne die Kurtosis der Variable Skala_N im Datensatz
Wir können die Funktion skew() aus dem Paket psych verwenden:
# install.packages('psych') # Wir können diesen Befehl nutzen, falls das
# Paket psych noch nicht installiert ist
library("psych")
skew(data$Skala_N) # Schiefe der Verteilung
## [1] 0.1742
# Es gibt natürlich noch viele weitere Pakete, die uns die entsprechenden
# Informationen liefern können
mean(data$Skala_E) # Gibt uns den Mittelwert der Skala in unserer Stichprobe zurück
## [1] 0.2115
sd(data$Skala_E) # Standardabweichung
## [1] 0.3044
median(data$Skala_E) # Median
## [1] 0.25
min(data$Skala_E) # Kleinster Wert in der Stichprobe
## [1] -0.75
max(data$Skala_E) # Größter Wert in der Stichprobe
## [1] 0.9167
range(data$Skala_E) # Range der Skalenwerte
## [1] -0.7500 0.9167
kurtosi(data$Skala_E) # Kurtosis der Verteilung
## [1] -0.3862
skew(data$Skala_N) # Schiefe der Verteilung
## [1] 0.1742