Der Data Creator erzeugt parametrische BeispieldatensΓ€tze fΓΌr Lehr- und Simulationszwecke. Du legst das Design fest (Between- und/oder Within-Faktoren, Likelihood, Clusterstruktur) und gibst direkt die theoretischen Mittelwerte ein β der Code ΓΌbernimmt die Datenerzeugung.
Ergebnis: CSV-Export (Wide & Long), vollstΓ€ndiger R-Code (mit faux::sim_design, glmmTMB, Power-Simulation), und eine interaktive Vorschau.
Der Data Creator ist kein Analysewerkzeug β er hilft beim Studiendesign, Poweranalyse und Prior Predictive Checking.
Between-Subject-Faktor: Jede Versuchsperson gehΓΆrt zu genau einer Gruppe (z.B. Kontroll- vs. Experimentalgruppe). Varianz entsteht zwischen Personen.
Within-Subject-Faktor: Dieselbe Person wird mehrfach gemessen (z.B. Zeitpunkte t1, t2, t3). Messwiederholung erzeugt Korrelation zwischen den Levels. Der Data Creator unterstΓΌtzt aktuell einen Within-Faktor.
Die Kombination aus beiden heiΓt Mixed Design (= Split-Plot). In brms: bf(Y ~ gruppe * time + (1 | id))
Levelnames: Kommagetrennt eingeben, z.B. A, B, C. Leerzeichen werden automatisch in Unterstriche umgewandelt.
Alle Mittelwerte werden auf der Modellskala Ξ· (linearer PrΓ€diktor) eingegeben:
Der β Rohskala-Button erlaubt die Eingabe auf der Antwortskala E[Y] β intern wird alles auf Ξ· umgerechnet.
Der Scale Converter (unter der Likelihood-Auswahl) zeigt die Umrechnung Ξ· β E[Y] interaktiv fΓΌr beliebige Werte.
Das Mittelwert-Grid zeigt alle Design-Zellen. FΓΌr ein 2Γ3-Design (2 Between-Levels Γ 3 Within-Levels) entstehen 6 Zellen.
Die SD-Zeile legt die Residual-Streuung pro Zelle fest β auf der Modellskala (Ο fΓΌr GauΓ, wird bei anderen Likelihoods intern verwendet).
FΓΌr Nicht-GauΓ-Likelihoods steuert Ο nicht direkt die Varianz der Zielverteilung, sondern die Varianz der Normalapproximation auf Ξ·-Ebene, aus der dann die Zielverteilung transformiert wird.
Wenn ein Within-Faktor aktiv ist, entstehen korrelierte Messwiederholungen. Die Korrelationsmatrix (Tab 2) bestimmt, wie stark die Zeitpunkte miteinander zusammenhΓ€ngen.
Der rote Rahmen bei Custom zeigt an, dass die Matrix nicht positiv-definit ist und keine gΓΌltige Kovarianzmatrix ergibt.
Bei Nicht-GauΓ-Likelihoods: Die Korrelationsstruktur wirkt als GauΓ-Approximation auf Ξ·-Ebene β das ist bei moderaten Korrelationen vertretbar.
Der Cluster-Toggle fΓΌgt eine Gruppenstruktur hinzu (z.B. SchΓΌler in Klassen). Jede Klasse bekommt einen zufΓ€lligen Intercept uββ±Ό ~ N(0, ΟβΒ²).
Οβ (Random-Intercept-SD): Wie stark unterscheiden sich Klassen im Mittelniveau? GrΓΆΓerer Οβ = mehr HeterogenitΓ€t zwischen Clustern.
Οβ (Random-Slope-SD): Wenn Οβ > 0, bekommt jede Klasse auch einen zufΓ€lligen Slope fΓΌr den gewΓ€hlten PrΓ€diktor. Formel: (1 + Methode | Klasse)
Οββ (Intercept-Slope-Korrelation): Korrelation zwischen uβ und uβ. Positiv bedeutet: Klassen mit hohem Basisniveau zeigen auch stΓ€rkere Effekte. Wird ΓΌber Cholesky-Zerlegung erzeugt.
Slope auf: WΓ€hle, welcher PrΓ€diktor den Random Slope bekommt β Between- oder Within-Faktor mΓΆglich. Das bestimmt die brms-Formel.
ICC: Intraclass Correlation = ΟβΒ²/(ΟβΒ²+ΟΒ²). Typische Werte: Schulen ~0.10β0.20, Familien ~0.15β0.45.
Kovariablen sind kontinuierliche PrΓ€diktoren, die zusΓ€tzlich zu Between/Within-Faktoren generiert werden (max. 2). Sie erscheinen als Spalten im CSV und in der Formelvorschau.
ΞΌ / Ο: Globaler Mittelwert und Standardabweichung der Kovariable.
ΞΌ je Gruppe: Wenn Between-Faktoren vorhanden sind, kann der Mittelwert pro Gruppe variieren β das erzeugt eine Konfundierung zwischen Kovariable und Faktor (typischer Anwendungsfall fΓΌr G-Computation).
Ο mit cov1: Wenn 2 Kovariablen definiert sind, kΓΆnnen sie ΓΌber eine Cholesky-Zerlegung korreliert generiert werden. Im R-Code wird MASS::mvrnorm() verwendet.
pivot_longer() automatisch repliziert wird.cleanR() sanitiert (Leerzeichen β Unterstriche, Sonderzeichen entfernt).Die Formelvorschau (Tab 1) zeigt lme4- und brms-kompatible Formeln. Bei mehreren Faktoren wird automatisch das volle Interaktionsmodell (A * B * W) vorgeschlagen β das robusteste Modell bei Messwiederholung.
A * B expandiert zu A + B + A:B (Haupteffekte + Interaktion). A * B * W ergibt alle 2-Wege und die 3-Wege-Interaktion.
Der Random-Effect-Term (1 | Klasse) erscheint automatisch wenn Cluster aktiv. Mit Random Slope: (1 + Zeit | Klasse).
Rohdaten / Mittelwerte: Zeigt Einzelpunkte (subsampelt), Boxplots (Between) oder Mittelwertslinien (Within) + Spaghetti-Linien pro Cluster.
Effektplot: Zeigt Median (50. Pct.) + Band von 16. bis 84. Pct. (~Β±1 SD bei Normalverteilung). Klarer, aber ohne Rohdaten.
Gruppen-Selektor: Bei mehreren Between-Faktoren kannst du auswΓ€hlen, welcher Faktor die Farben/Linien bestimmt. "Alle Kombinationen" zeigt alle Zellen gleichzeitig.
X-Achse-Selektor (Between-only, β₯2 Between-Faktoren): Welcher Faktor geht auf die X-Achse? Der Gruppen-Selektor bestimmt dann die Farb-Gruppierung.
Der generierte R-Code ist vollstΓ€ndig reproduzierbar und nutzt:
faux::sim_design() (DeBruine & Barr 2021) fΓΌr Within-Designs β erzeugt korrelierte Normalverteilungen mit der angegebenen Kovarianzstrukturbase R (rnorm, rbinom, β¦) fΓΌr einfache Between-/No-Factor-DesignsMASS::mvrnorm() fΓΌr korrelierte Random-Effects (Οβ, Οβ) und korrelierte KovariablenNicht-GauΓ-Likelihoods: sim_design() erzeugt immer normalverteilte Ξ·-Werte. Diese werden danach via mutate(across(...)) in die Zielverteilung transformiert (z.B. rbinom(n(), 1, plogis(eta)) fΓΌr Bernoulli). Das ist eine GauΓ-Approximation auf Ξ·-Ebene β fΓΌr moderate Korrelationen und nicht zu extreme Verteilungsparameter gut geeignet.
Wide β Long: Within-Designs erzeugen dat_wide (eine Spalte pro Zeitpunkt). pivot_longer() macht daraus dat_long β das Format, das brms/lme4 erwartet. Kovariablen (between-subjects) werden dabei automatisch repliziert.
empirical = TRUE: Wenn exakte Stichprobenkennwerte statt Zufallsziehung gewΓΌnscht werden β nΓΌtzlich wenn JS-Visualisierung und R-Code ΓΌbereinstimmen sollen.
Pakete (Installation):
install.packages("faux")install.packages("glmmTMB")install.packages("MASS") # meist vorinstalliertinstall.packages("future.apply") # fΓΌr Power-ParallelisierungAm Ende jedes generierten R-Codes befindet sich ein vollstΓ€ndiger, auskommentierter Power-Simulations-Block. Die #-Zeichen entfernen und der Block ist direkt in R ausfΓΌhrbar.
Aufbau des Blocks:
library(glmmTMB) + library(car) β Pakete fΓΌr GLMMs und Omnibus-TestsN_sim <- 500 β Simulationswiederholungen (500β1000 fΓΌr stabile SchΓ€tzung)sim_data_one(seed) β erzeugt einen Datensatz mit deinen Parametern; bei Within-Design mit (1|id)fit_and_test(seed) β fittet Vollmodell, gibt benannten logischen Vektor zurΓΌck (ein Wert pro Term)sapply() β Matrix (Zeilen = Terme, Spalten = Sims); rowMeans() = Power pro TermZwei Testvarianten im Block:
car::Anova(type="II") β Wald-Omnibus-Tests fΓΌr alle Terme in einem Modell-Fit. Schnell, ein Fit pro Sim. Gibt Power pro Term aus. Wenn Interaktionen vorhanden sind und Haupteffekte konditional interpretiert werden sollen: options(contrasts = c("contr.sum", "contr.poly")) + type="III" (Kommentar im Code).anova() β Likelihood-Ratio-Tests durch Modellvergleich. Statistisch genauer (v.a. bei kleinen N und non-Gaussian), aber ~3β6Γ langsamer. EnthΓ€lt:
Y ~ 1 + RE)Within-Design und ID-Variable: Bei Within-Faktoren enthΓ€lt die Power-Formel immer (1 | id), damit die wiederholten Messungen korrekt modelliert werden. Das id stammt aus faux::sim_design() und ΓΌberlebt den pivot_longer()-Schritt.
glmmTMB-Familien β Unterschied zu brms/lme4:
t_family() β nicht gaussian()!lognormal() β nicht gaussian(link="log")!Gamma(link = "log")beta_family(link = "logit")nbinom2(link = "log") (NB2-Parametrisierung)Parallelisierung: library(future.apply); plan(multisession) β future_sapply() statt sapply(). Speedup ~3β6Γ je nach Rechner.
Interpretation: Power von 80 % = in 80 von 100 Replikationen des Experiments wΓ€re der Effekt bei deinen gewΓ€hlten Parametern signifikant nachweisbar.
Warum stimmen JS-Simulation und R-Code nicht exakt ΓΌberein?
JS nutzt mulberry32 als PRNG, R den Mersenne Twister. Gleicher Seed β Γ€hnliche, aber nicht identische Zufallszahlen. FΓΌr exakte Γbereinstimmung: empirical = TRUE in faux::sim_design() β dann entsprechen die Stichprobenkennwerte exakt den eingestellten Werten.
Warum erscheinen Faktornamen im R-Code anders als eingegeben?
Namen mit Leerzeichen oder Sonderzeichen (z.B. "Reaktions Zeit (ms)") werden automatisch bereinigt: Leerzeichen/Bindestriche β Unterstriche, ΓΌbrige Sonderzeichen werden entfernt. Im CSV-Header und in der Formelvorschau werden ebenfalls die bereinigten Namen verwendet.
Kovariablen in Within-Designs (Wide β Long):
Kovariablen sind between-subjects und erscheinen daher im Wide-Format als eine Spalte. Nach pivot_longer() wird die Kovariable automatisch fΓΌr jede Messung repliziert β das ist das korrekte Long-Format fΓΌr brms/lme4.
Nicht-GauΓ-Likelihoods und Korrelationsmatrix:
faux::sim_design() erzeugt intern immer normalverteilte Ξ·-Werte (linearer PrΓ€diktor). Die Korrelationsstruktur (Tab 2) wirkt auf dieser Ξ·-Ebene. Nach der Transformation in die Zielverteilung (z.B. Poisson, Beta) ist die Pearson-Korrelation zwischen den Within-Levels niedriger als Ο. Bei starker Nicht-NormalitΓ€t (z.B. Bernoulli mit extremen ps) kann der Unterschied erheblich sein.
Gamma-Parametrisierung:
Im Data Creator wird Gamma(ΞΌ, Ο) mit Log-Link verwendet: ΞΌ = exp(Ξ·), Shape = Ο, Rate = Ο/ΞΌ. Das entspricht brms' Gamma(link="log")-Parametrisierung. Die Varianz ist ΞΌΒ²/Ο β je grΓΆΓer Ο, desto kleiner die relative VariabilitΓ€t.
Beta-Parametrisierung:
Beta(ΞΌ, Ο) mit ΞΌ = logitβ»ΒΉ(Ξ·), Ξ± = ΞΌΒ·Ο, Ξ² = (1-ΞΌ)Β·Ο. Ο ist der PrΓ€zisionsparameter: grΓΆΓeres Ο = schmalere Verteilung um ΞΌ. Typischer Wertebereich fΓΌr Ο in Likert-Daten: 5β20.
ICC berechnen:
ICC = ΟβΒ² / (ΟβΒ² + ΟΒ²). FΓΌr GauΓ-Design: Οβ = 0.5, Ο = 1 β ICC β 0.20. Typische Richtwerte: Schulen ~0.10β0.20, Familien ~0.20β0.40, Messungen an Personen ~0.50β0.70.