Übung 6 kleine Ergänzung
Dieser Teil der Übung dient als Ergänzung zu Übung 6. Dort hatten Sie eine Funktion zum Bootstrappen des t-Tests bei abhängigen Stichproben erstellt. Wir wollen jetzt noch 1 Funktion erstellen um dafür eine a priori Poweranalyse durchführen zu können.
Für eine a priori Poweranalyse benötigen wir immer die Effektstärke, das Signifikanzniveau und die gewünschte Teststärke. Die Effektstärke berechnet sich aus \(\frac{\bar x_{d}}{s_d}\), wobei \(\bar x_{d}\) der Mittelwert der Differenzen und \(s_d\) die Standardabweichung der Differenzen ist. Die Übung wird Sie jetzt Schritt für Schritt bis zur Fertigstellung der Funktion führen.
Zunächst erstellen wir die Basis unserer Funktion Apriori, sie soll als Argumente die Effektstaerke, das Signifikanzniveau, die Teststärke und die Richtung unserer Hypothese erhalten. Legen Sie innerhalb der Funktion eine Variable nStichprobe an, welcher Sie den Wert 0 zuweisen und geben Sie nStichprobe anschliessend zurück.
Ihre Funktion sollte jetzt ungefähr so aussehen:
Jetzt überlegen wir uns zunächst wie wir die Stichproben simulieren können (T1 und T2). Wir wissen:
Generieren Sie jetzt T1 und T2 in Ihrer Funktion mit einer Stichprobengrösse von 10 und führen Sie damit tStat_AS_Boot mit 500 Bootstraps aus. Sperichern Sie das Ergebnis in der Variable signifikant.
Ihr Code sollte jetzt ungefähr so aussehen:
Jetzt haben wir das ganze für eine Stichprobe gemacht. Allerdings brauchen wir bei der Poweranalyse durch Simulation viele Stichproben. Es wäre also praktisch, wenn wir Stichprobenerstellung und Signifikanzprüfung in eine eigene Funktion Signifikanz() mit den Argumenten Effektstaerke, Signifikanzniveau, Stichprobenumfang, Bootstraps und Richtung auslagern. Diese Funktion gibt uns dann das Ergebnis von t_Stat_AS_Boot zurück. Damit können wir die FUnktion innerhalb von Apriori mit replicate nutzen, um die nötige Anzahl an Stichproben zu generieren.
Erstellen Sie die Funktion Signifikanz(). Achten Sie darauf innerhalb der Funktion Signifikanz() den Stichprobenumfang nun durch das zugehörige Argument festzulegen, genauso wie die Anzahl an Bootstraps. und ersetzen Sie Ihren Code in der Funktion Apriori durch ein replicate im Umfang von 1000 der Funktion Signifikanz().
Ihr Code sollte jetzt ungefähr so aussehen:
Signifikanz <- function(Effektstaerke, Signifikanzniveau, Stichprobenumfang, Bootstraps, Richtung){
T1 <- rnorm(Stichprobenumfang,0,1)
T2 <- T1 + rnorm(Stichprobenumfang,Effektstaerke,1)
Signifikant <- tStat_AS_Boot(T1, T2, Bootstraps, Richtung, Signifikanzniveau)
return(Signifikant)
}
Apriori <- function (Effektstaerke, Signifikanzniveau, Teststaerke, Richtung){
nStichprobe <- 0
Signifikant <- replicate(1000, Signifikanz(Effektstaerke,Signifikanzniveau,10,500, Richtung))
return(nStichprobe)
}
Wir haben ein Problem. Durch Simulationen können wir immer für ein bestimmtes n die Testärke bestimmen. Das passiert wenn wir sum(Signifikant) durch (in dem Fall) 1000 rechnen.
Wir haben die Teststärke in Abhängigkeit von n. Wir brauchen aber n in Abhängigkeit der Teststärke. Um das zu lösen müssen wir also so lange Stichprobengrössen ausprobieren, bis wir eine Stichprobengrösse finden, deren Teststärke gleich oder minimal grösser als unsere vorgegebene Teststärke ist.
-Fortsetzung nächste Seite-
Wir brauchen eine Schleife! In dieser gehen wir systematisch Stichprobengrössen durch (von klein bis gross), wir eine Stichprobengrösse mit ausreichend Teststärke gefunden haben. Wenn wir allerdings bei sehr kleinen Zahlen anfangen (z.B. \(n=5\)) und die richtige Zahl aber erst bei 400 ist, braucht es natürlich sehr lange. Daher wollen wir zunächst zwei neue Argumente zu unserer Funktion Apriori hinzufügen:
Legen Sie zusätzlich zwei neue Variablen aktTeststaerke und aktStichprobe an (direkt unter nStichprobe) und weisen sie der ersten den Wert 0 und der zweiten den Wert nStart zu.
Weisen Sie aktTestaerke vor der return-Zeile den Wert sum(Signifikant)/1000 zu.
Ihr Code sollte jetzt ungefähr so aussehen:
#An der Funktion Signifikanz ändert sich nichts mehr, daher weggelassen
Apriori <- function (Effektstaerke, Signifikanzniveau, Teststaerke, Richtung, nStart, nSchritt){
nStichprobe <- 0
aktTeststaerke <- 0
aktStichprobe <- nStart
Signifikant <- replicate(1000, Signifikanz(Effektstaerke,Signifikanzniveau, 10, 500, Richtung))
aktTeststaerke <- sum(Signifikant)/1000
return(nStichprobe)
}Jetzt brauchen wir eine Schleife, die…
Nach der Schleife weisen wir nStichprobe den Wert aktStichprobe - nSchritt zu (wir haben einmal zu viel hochgezählt). Setzen Sie dies um und Ihre Funktion ist fertig!
Apriori <- function (Effektstaerke, Signifikanzniveau, Teststaerke, Richtung, nStart, nSchritt){
nStichprobe <- 0
aktTeststaerke <- 0
aktStichprobe <- nStart
while (aktTeststaerke < Teststaerke){
Signifikant <- replicate(1000, Signifikanz(Effektstaerke,Signifikanzniveau, aktStichprobe, 500, Richtung))
print(aktStichprobe) #Ergänzt, damit Sie den Arbeitsfortschritt sehen
aktTeststaerke <- sum(Signifikant)/1000
print(aktTeststaerke) #Ergänzt, damit Sie den Arbeitsfortschritt sehen
aktStichprobe <- aktStichprobe + nSchritt
}
nStichprobe <- aktStichprobe - nSchritt
return(nStichprobe)
}Probieren Sie die folgenden Varianten aus:
Apriori(0.5, .05, .70, "u", 15, 2)
Apriori(0.1, .05, .70, "u", 100, 100)
# Natürlich können Sie nach einer groben Schätzung eine genauere folgenlassen und dabei eventuell auch ihre Bootstraps erhöhen.
# Beachen Sie einfach, für jedes n werden jetzt gerade schon 1000*500 Werte berechnet
#Bei der letzten Durchführung könnten Sie zum Beispiel in einem nächsten Schritt,
#ab 580 starten und in 10er Schritten vorgehen
Apriori(0.1, .05, .70, "u", 580, 10)