---
title: "t-Test für abhängige Stichproben"
runtime: shiny
output:
html_notebook:
code_folding: hide
number_sections: true
toc: true
toc_depth: 3
toc_float: true
---
Dieser Abschnitt steht ganz oben im RMarkdown-Dokument. Er definiert das Layout, die Laufzeitumgebung (shiny
) und Darstellungsoptionen:
code_folding: hide
: R-Code kann eingeklappt werden.number_sections: true
: Abschnittsnummern werden angezeigt.toc: true
: Ein Inhaltsverzeichnis wird eingeblendet.toc_float: true
: Das Inhaltsverzeichnis bleibt beim Scrollen sichtbar.## Beschreibung
Solche Markdown-Abschnitte dienen der Strukturierung und enthalten erklärenden Text. Je mehr Rauten (#
), desto tiefer die Ebene.
```{r, echo=FALSE}
# R-Code
```
Code-Chunks führen R-Befehle aus. Mit echo=FALSE
wird der Quellcode im HTML-Dokument unterdrückt – nur die Ausgabe erscheint.
In diesem Abschnitt wird der Datensatz twins
um eine neue Variable erweitert, die die Differenz der IQ-Werte pro Zwilling misst.
zwischen <- twins$IQbio - twins$IQfoster
twins <- cbind(twins, "Differenz" = zwischen)
zwischen: Berechnet die Differenz zweier IQ-Spalten.
cbind: Fügt die Differenzspalte an den Dataframe twins
an.
In diesem Abschnitt wird eine Shiny-Benutzeroberfläche erstellt, die über Reiter (Tabs) organisiert ist. Die Funktion tabsetPanel()
enthält mehrere tabPanel()
-Elemente, die unterschiedliche Inhalte anzeigen.
tabPanel("Abhängige Variable")
: zeigt die abhängige Variable (z. B. die Differenzwerte der IQs). AV
ist eine vordefinierte UI-Komponente oder ein Objekt, das innerhalb des Tabs dargestellt wird.tabPanel("Unabhängige Variable")
: zeigt die unabhängige Variable (z. B. Gruppenzugehörigkeit oder Messzeitpunkt). Auch hier ist UV
ein UI-Ausgabeobjekt.tabPanel("Histogram")
:
sliderInput()
erzeugt einen Schieberegler. Damit kann der Benutzer die Anzahl der Klassen (Bins) im Histogramm interaktiv einstellen. Die gewählte Anzahl wird in input$number_bins_selbst
gespeichert.renderPlot()
ist eine reaktive Funktion in Shiny, die ein Plot-Objekt generiert und in der UI anzeigt. Sie wird erneut ausgeführt, wenn sich input$number_bins_selbst
ändert.renderPlot()
wird ein ggplot2-Histogramm erstellt. Der Plot basiert auf der numerischen Variable Differenz
, die vorher im Datensatz twins
definiert wurde.geom_histogram(...)
erzeugt das Histogramm. Der Parameter bins = input$number_bins_selbst
macht es dynamisch.histogramm_antwort
ist ein zusätzliches UI-Element, das vermutlich eine textliche Auswertung oder Beschreibung anzeigt.tabPanel("QQPlot")
:
renderPlot()
erzeugt einen QQ-Plot mit der Funktion qqPlot()
aus dem car
-Paket. Dieser prüft die Normalverteilung der Differenzwerte grafisch.qqplot_antwort
ist eine textliche Erklärung oder Diagnose, die sich auf die grafische Ausgabe bezieht.Diese UI-Komponenten bilden die Grundlage zur grafischen Überprüfung der Voraussetzungen für den t-Test: Skalenniveau, Verteilung, Symmetrie und Visualisierung.
Hier wird die grafische Oberfläche in Tabs organisiert. Diese helfen bei der Überprüfung, ob die Voraussetzungen für einen t-Test erfüllt sind.
AV
und UV
: zeigen die abhängige bzw. unabhängige Variable.Histogram
: stellt die Differenz als Histogramm dar, dessen Detailgrad durch den Slider einstellbar ist.QQPlot
: prüft grafisch die Normalverteilung der Differenzwerte.tabsetPanel(
tabPanel("Abhängige Variable", br(), AV),
tabPanel("Unabhängige Variable", br(), UV),
tabPanel("Histogram", br(),
sliderInput("number_bins_selbst", "Number of Histogramm bins:", value = 6, min = 1, max = 12),
renderPlot({
twins %>%
ggplot(aes(as.numeric(Differenz))) +
geom_histogram(bins = input$number_bins_selbst, color = "#e9ecef", alpha = 0.7) +
theme_grey() +
labs(x = "XX", y = "Anzahl")
}),
histogramm_antwort
),
tabPanel("QQPlot", br(),
renderPlot({
qqPlot(twins$Differenz, main = "QQPlot für die Var. Differenz")
}),
qqplot_antwort
))
Erstellt eine Reiter-basierte UI mit Histogramm und QQPlot.
Diese Blöcke liefern sowohl numerische als auch grafische Zusammenfassungen der IQ-Werte. Ziel ist es, Lage- und Streuungsmaße sowie Zusammenhänge zu erkennen.
renderPrint({
g <- describe(twins)
print(g)
})
describe:
Berechnet Mittelwert, SD, Min, Max usw. für alle Variablen.
renderPlot({
scatterplot(IQbio ~ IQfoster, data = twins,
main = "Streudiagramm für die beiden IQ-Werte",
ylab = "biologische Eltern", xlab = "Adoptiveltern", col = "green")
})
scatterplot:
Zeichnet ein Streudiagramm zur visuellen Prüfung der Korrelation.
renderPrint({
test <- cor.test(twins$IQbio, twins$IQfoster)
print(test)
})
cor.test:
Statistischer Test zur Berechnung des Pearson-Korrelationskoeffizienten.
Hier erfolgt die Durchführung des t-Tests für abhängige Stichproben mit t.test()
. Die Ausgabe enthält den t-Wert, p-Wert, Mittelwertsdifferenz und Konfidenzintervall.
renderPrint({
test1 <- t.test(twins$IQbio, twins$IQfoster,
alternative = "two.sided",
paired = TRUE,
conf.level = .95)
print(test1)
})
t.test:
Führt einen gepaarten t-Test durch mit 95% Konfidenzintervall.
Zusätzlich zur Signifikanz liefert dieser Abschnitt Maße für die praktische Bedeutung des Effekts.
renderUI({
withMathJax(helpText('$$r=\sqrt{\frac{t^2}{t^2+df}}$$'))
})
Mathematische Darstellung für Effektstärke r mit MathJax.
renderPrint({
eff <- sqrt((test1$statistic^2) / (test1$statistic^2 + test1$parameter))
sprintf("Die Effektstärke liegt bei %.2f", eff)
})
Berechnet r aus t-Wert und Freiheitsgraden (df).
renderUI({
withMathJax(helpText('$$Hedges$$'))
})
renderPrint({
diff <- mean(twins$Differenz)
sed <- sd(twins$Differenz)
g <- diff / sed
g <- as.numeric(g)
sprintf("Effektstärke: %.4f", g)
})
Berechnet Hedges’ g als Mittelwert der Differenz geteilt durch deren Standardabweichung.
Am Ende des Dokuments wird der statistische Befund zusammengefasst und die Nullhypothese kommentiert. Es wird keine signifikante Differenz gefunden – daher bleibt die Nullhypothese bestehen.
Das finale Ergebnis lautet:
t(26) = -0.12438, p = .902, n = 27
Interpretation: Der p-Wert liegt deutlich über .05, daher kein signifikanter Unterschied.
Schlussfolgerung (technisch): Die Nullhypothese (kein Unterschied) wird nicht verworfen. Die beobachtete Differenz könnte durch Zufall entstanden sein.