1 Unabhängige Stichproben, Datensatz “IQ_Priming_between”

1.1 Daten einlesen:

(Dateipfad anpassen!)

Trick: Wenn das Markdown und der Datensatz im selben Ordner gespeichert sind und dieser Ordner als “working directory” gesetzt ist, funktioniert der im nächsten Chunk sichtbare verkürzte Befehl.

Working directory setzen: Ganz oben auf Session -> Choose Directory -> (den Ordner auswählen, in dem alles gespeichert ist)

Was ist ein working directory? Der Ordner, auf den R in dieser Sitzung nun standardmäßig zugreifen wird, wenn Dinge eingelesen oder importiert werden.

Neben Klicken geht das auch über code:

#working directory setzen (Dateipfad anpassen!)
#setwd("C:/Users/engelmann6/Dropbox/SoSe20/02_Einfuehrung_01")

#aktuelles wirking directory anzeigen:
getwd()
## [1] "C:/Users/simon/Dropbox/Uni/Psych/Lehre/Quanti2/SoSe21/02_Einfuehrung_01"
IQ_Priming <-  read.csv2("02_IQ_Priming_between.csv")

1.2 Den R-Commander installieren (wenn nicht mit Remotedesktop gearbeitet wird) und laden (immer):

#Raute entfernen, um den folgenden Befehl ausführbar zu machen (oder in der Console ausführen):
#install.packages("Rcmdr")

#bei der ersten Installation könnte zusätzlich folgendes Paket benötigt werden (es enthält zusätzliche Funktionen für den R Commander). Wenn der Commander später geladen wird (library-Befehl), müsste es automatisch mit geladen werden.Auch hier Raute entfernen, um den Befehl ausführbar zu machen, oder in der Console ausführen:
#install.packages("RcmdrMisc")

library(Rcmdr)
Commander() #Befehl, um den R-Commander wieder zu öffnen, wenn man ihn geschlossen hat. 

1.3 Deskriptive Statistik:

(für Menüführung im R-Commander siehe Video oder PDF, hier kommen jetzt nur Code und Ergebnisse)

numSummary(IQ_Priming[,"AV.IQ", drop=FALSE], 
  groups=IQ_Priming$UV.Priming, statistics=c("mean", "sd", 
  "se(mean)", "quantiles", "cv"), quantiles=c(0,.25,.5,.75,1))
##                 mean       sd se(mean)        cv   0%    25%    50%    75%
## Bloed        92.3400 15.08394 2.753938 0.1633522 49.6 83.275  95.15 102.60
## Intelligent 103.6433 15.21213 2.777341 0.1467738 71.2 94.725 103.30 113.65
##              100% AV.IQ:n
## Bloed       121.0      30
## Intelligent 144.3      30

1.3.1 Einfacher Plot über Mittelwerte:

with(IQ_Priming, plotMeans(AV.IQ, UV.Priming, 
  error.bars="conf.int", level=0.95, xlab="Priming-Gruppe", 
  ylab="IQ", main="Priming von IQ", connect=FALSE))

#Wir können die Skalierung der Achsen ändern, indem wir manuell ein weiteres Argument hinzufügen (ylim am Ende des Befehls):

with(IQ_Priming, plotMeans(AV.IQ, UV.Priming, 
  error.bars="conf.int", level=0.95, xlab="Priming-Gruppe", 
  ylab="IQ", main="Priming von IQ", connect=FALSE, ylim = c(85,115)))

#Der im Commander erzeugte Code kann also auch manuell angepasst werden.

1.4 Ein erster T-Test:

#ungerichtet
t.test(AV.IQ~UV.Priming, alternative='two.sided', 
  conf.level=.95, var.equal=TRUE, data=IQ_Priming)
## 
##  Two Sample t-test
## 
## data:  AV.IQ by UV.Priming
## t = -2.89, df = 58, p-value = 0.005412
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -19.132531  -3.474136
## sample estimates:
##       mean in group Bloed mean in group Intelligent 
##                   92.3400                  103.6433
#gerichtet, Variante 1 (Option "Differenz < 0" im Commander)
t.test(AV.IQ~UV.Priming, alternative='less', conf.level=.95, 
  var.equal=TRUE, data=IQ_Priming)
## 
##  Two Sample t-test
## 
## data:  AV.IQ by UV.Priming
## t = -2.89, df = 58, p-value = 0.002706
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##       -Inf -4.765489
## sample estimates:
##       mean in group Bloed mean in group Intelligent 
##                   92.3400                  103.6433
#gerichtet, Variante 2 (Option "Differenz > 0" im Commander")
t.test(AV.IQ~UV.Priming, alternative='greater', conf.level=.95, 
  var.equal=TRUE, data=IQ_Priming)
## 
##  Two Sample t-test
## 
## data:  AV.IQ by UV.Priming
## t = -2.89, df = 58, p-value = 0.9973
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  -17.84118       Inf
## sample estimates:
##       mean in group Bloed mean in group Intelligent 
##                   92.3400                  103.6433

Effektgröße

Die Effektgröße wurde vom Commander nicht mit ausgegeben. Wir können sie aber nachträglich berechnen, beispielsweise mit dem Paket “effsize” und der dort enthaltenen Funktion “cohen.d”:

#install.packages("effsize")
library(effsize)

cohen.d(IQ_Priming$AV.IQ,IQ_Priming$UV.Priming,paired=FALSE)
## 
## Cohen's d
## 
## d estimate: -0.7461848 (medium)
## 95 percent confidence interval:
##      lower      upper 
## -1.2807094 -0.2116603
#Aufbau der Funktion (vereinfacht beschrieben:
#cohen.d(AV-spalte, UV-Spalte, paired= TRUE/FALSE)
#über das $-Zeichen nimmt man auf eine Spalte eines Datensatzes Bezug
#das "paired"-Argument gibt an, ob es sich um unabhängige oder abhängige Stichproben handelt 

2 Abhängige Stichproben, Datensatz “IQ_Urlaub_within”

2.1 Daten einlesen (Pfad anpassen!):

IQ_Urlaub_within <- read.csv("02_IQ_Urlaub_within.csv", sep=";")

Im R-Commander “Datenmatrix” auf diesen neuen Datensatz ändern!

2.2 eskriptive Statistiken:

numSummary(IQ_Urlaub_within[,c("IQ._vor_Urlaub", "IQ_nach_Urlaub"), 
  drop=FALSE], statistics=c("mean", "sd", "se(mean)", "quantiles"), 
  quantiles=c(0,.25,.5,.75,1))
##                 mean        sd se(mean) 0%   25%   50%    75% 100%  n
## IQ._vor_Urlaub 103.0 12.057334 2.201358 81 95.00 103.5 113.00  123 30
## IQ_nach_Urlaub  96.3  9.931316 1.813202 83 87.25  96.0 101.75  121 30

2.3 Daten umformatieren:

Unsere Daten sind derzeit im sogenannten wide format (eine Zeile = alle Daten einer Person). Um für die abhängigen Stichproben eine Grafik wie oben erstellen zu können, müssen sie allerdings im sogenannten long format vorliegen (eine Zeile = eine Messung - bei wiederholter Messung einer Person hat jede Person also mehrere Zeilen).

Das geht mit dem Paket reshape2, das hierfür ggf. installiert und dann geladen werden muss.

Dieser Schritt muss manuell (außerhalb des Commanders) gemacht werden!

Hier eine gute Website, die “reshape” erklärt: https://www.statmethods.net/management/reshape.html

#install.packages("reshape2")
library(reshape2)

#Wir erstellen ein neues Objekt, das den alten Datensatz im neuen format enthält (wir könnten den alten Datensatz auch überschreiben, aber so können wir weiterhin auf beide Formate zugreifen)

IQ_Urlaub_long <- melt(IQ_Urlaub_within, id=("TN.Nr")) 

#id = Variablen, die nicht "geschmolzen" werden sollen. Wenn es mehrere sind, müssen sie mit dem combine-Befehl verbunden werden, Beispiel: id=c("erste_Variable","zweite_Variable")

#Wenn das "Schmelzen"" funktioniert hat, können wir unseren neuen Datensatz betrachten und vielleicht nachträglich noch die Namen der neuen Spalten ändern. Dazu führen wir den obigen Befehl nocheinmal aus und ergänzen ihn um zwei weitere Argumente:

IQ_Urlaub_long <- melt(IQ_Urlaub_within, id=("TN.Nr"),variable.name = "Zeitpunkt", value.name = "IQ") 

2.4 Grafik erstellen mit dem neuen Datensatz im long format (dazu diesen im Commander als aktuelle Datenmatrix auswählen):

with(IQ_Urlaub_long, plotMeans(IQ, Zeitpunkt, error.bars="conf.int", level=0.95, 
  xlab="Zeitpunkt", ylab="IQ", main="IQ vor und nach Urlaub", connect=TRUE))

2.5 T-test für abhängige Stichproben:

Hierzu brauchen wir im Commander wieder den “alten” Datensatz im wide format

#ungerichtet
with(IQ_Urlaub_within, (t.test(IQ._vor_Urlaub, IQ_nach_Urlaub, alternative='two.sided', 
  conf.level=.95, paired=TRUE)))
## 
##  Paired t-test
## 
## data:  IQ._vor_Urlaub and IQ_nach_Urlaub
## t = 2.4107, df = 29, p-value = 0.02249
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   1.015703 12.384297
## sample estimates:
## mean of the differences 
##                     6.7
#gerichtet, Variante 1 (Differenz < 0)
with(IQ_Urlaub_within, (t.test(IQ._vor_Urlaub, IQ_nach_Urlaub, alternative='less', 
  conf.level=.95, paired=TRUE)))
## 
##  Paired t-test
## 
## data:  IQ._vor_Urlaub and IQ_nach_Urlaub
## t = 2.4107, df = 29, p-value = 0.9888
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##      -Inf 11.42238
## sample estimates:
## mean of the differences 
##                     6.7
#gerichtet, Variante 2 (Differenz > 0)
with(IQ_Urlaub_within, (t.test(IQ._vor_Urlaub, IQ_nach_Urlaub, alternative='greater', 
  conf.level=.95, paired=TRUE)))
## 
##  Paired t-test
## 
## data:  IQ._vor_Urlaub and IQ_nach_Urlaub
## t = 2.4107, df = 29, p-value = 0.01124
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  1.977624      Inf
## sample estimates:
## mean of the differences 
##                     6.7

2.6 Effektgröße

Die Effektgröße wurde vom Commander nicht mit ausgegeben. Wir können sie auch hier nachträglich berechnen. Wenn das Paket weiter oben schon installiert und geladen wurde, muss das an dieser Stelle nicht mehr passieren.

Es bietet sich an, hier wieder mit dem Datensatz im long format zu operieren.

#install.packages("effsize")
library(effsize)

cohen.d(IQ_Urlaub_long$IQ, IQ_Urlaub_long$Zeitpunkt, paired=TRUE)
## 
## Cohen's d
## 
## d estimate: 0.6062733 (medium)
## 95 percent confidence interval:
##      lower      upper 
## 0.05854233 1.15400435
#Aufbau der Funktion (vereinfacht beschrieben:
#cohen.d(AV-spalte, UV-Spalte, paired= TRUE/FALSE)
#über das $-Zeichen nimmt man auf eine Spalte eines Datensatzes Bezug
#das "paired"-Argument gibt an, ob es sich um unabhängige oder abhängige Stichproben handelt