Wie simuliere ich Daten, um gemischte Effekte mit R (lme4) zu demonstrieren?
10
Als Gegenstück zu diesem Beitrag habe ich daran gearbeitet, Daten mit kontinuierlichen Variablen zu simulieren und mich für korrelierte Abschnitte und Steigungen zu eignen.
Obwohl es auf der Website und außerhalb der Website großartige Beiträge zu diesem Thema gibt , hatte ich Schwierigkeiten, ein Anfang-zu-Ende-Beispiel mit simulierten Daten zu finden, das einem einfachen, realen Szenario entspricht.
Die Frage ist also, wie man diese Daten simuliert und mit ihnen "testet" lmer. Für viele nichts Neues, aber möglicherweise für viele andere nützlich, die nach gemischten Modellen suchen.
Wenn Sie ein Blog-Artikelformat bevorzugen, ist Hierarchical Linear Models and Lmer ein Artikel, den ich geschrieben habe und der eine Simulation mit zufälligen Steigungen und Abschnitten enthält. Hier ist der Simulationscode, den ich verwendet habe:
rm(list = ls())
set.seed(2345)
N <-30
unit.df <- data.frame(unit = c(1:N), a = rnorm(N))
head(unit.df,3)
unit.df <- within(unit.df,{
E.alpha.given.a <-1-0.15* a
E.beta.given.a <-3+0.3* a})
head(unit.df,3)
library(mvtnorm)
q =0.2
r =0.9
s =0.5
cov.matrix <- matrix(c(q^2, r * q * s, r * q * s, s^2), nrow =2,
byrow =TRUE)
random.effects <- rmvnorm(N, mean = c(0,0), sigma = cov.matrix)
unit.df$alpha <- unit.df$E.alpha.given.a + random.effects[,1]
unit.df$beta <- unit.df$E.beta.given.a + random.effects[,2]
head(unit.df,3)
J <-30
M = J * N #Total number of observations
x.grid = seq(-4,4, by =8/J)[0:30]
within.unit.df <- data.frame(unit = sort(rep(c(1:N), J)), j = rep(c(1:J),
N), x =rep(x.grid, N))
flat.df = merge(unit.df, within.unit.df)
flat.df <- within(flat.df, y <- alpha + x * beta +0.75* rnorm(n = M))
simple.df <- flat.df[, c("unit","a","x","y")]
head(simple.df,3)
library(lme4)
my.lmer <- lmer(y ~ x +(1+ x | unit), data = simple.df)
cat("AIC =", AIC(my.lmer))
my.lmer <- lmer(y ~ x + a + x * a +(1+ x | unit), data = simple.df)
summary(my.lmer)
Ben, danke für deine Antwort! Ich bin gerade sehr beschäftigt, aber ich werde es mir genau ansehen, sobald ich eine Chance bekomme. + auf Kredit :-)
Antoni Parellada
1
Die Daten sind vollständig fiktiv und der Code, mit dem ich sie generiert habe, finden Sie hier .
Die Idee ist, dass wir Messungen an glucose concentrationseiner Gruppe von 30athletesam Ende von 15racesin Bezug auf die Konzentration des Make-up amino acid A( AAA) in diesen Athleten Blut durchführen würden.
Das Modell ist: lmer(glucose ~ AAA + (1 + AAA | athletes)
Es gibt eine feste Effektsteigung (Konzentration von Glucose ~ Aminosäure A); Die Steigungen variieren jedoch auch zwischen verschiedenen Athleten mit einem mean = 0und sd = 0.5, während die Abschnitte für die verschiedenen Athleten zufällige Effekte 0mit verteilen sd = 0.2. Ferner besteht eine Korrelation zwischen Abschnitten und Steigungen von 0,8 innerhalb desselben Athleten.
Diese zufälligen Effekte werden zu einem intercept = 1für feste Effekte ausgewählten hinzugefügt , und slope = 2.
Die Werte der Glukosekonzentration wurden berechnet als alpha + AAA * beta + 0.75 * rnorm(observations), dh der Achsenabschnitt für jeden Athleten (dh 1 + random effects changes in the intercept) die Aminosäurekonzentration, die Steigung für jeden Athleten (dh ) ( ), die wir für a eingerichtet haben .+AAA∗+ ϵ2 + random effect changes in slopes for each athlete+noiseϵsd = 0.75
Unrealistische Glukosespiegel, aber immer noch ...
Die Zusammenfassung gibt Folgendes zurück:
Random effects:
Groups Name Variance Std.Dev. Corr
athletes (Intercept)0.0060450.07775
AAA 0.2044710.452181.00
Residual 0.5456510.73868
Number of obs:450, groups: athletes,30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)(Intercept)1.311460.35845401.900003.6590.000287***
AAA 1.937850.0828629.0000023.386<2e-16***---
Signif. codes:0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Die Zufallseffektkorrelation ist 1statt 0.8. Die sd = 2für die zufällige Variation in Abschnitten wird interpretiert als 0.07775. Die Standardabweichung 0.5für zufällige Änderungen der Steigungen unter Athleten wird berechnet als 0.45218. Das mit einer Standardabweichung eingestellte Rauschen 0.75wurde als zurückgegeben 0.73868.
Das Abfangen fester Effekte sollte sein 1, und wir haben 1.31146. Für die Steigung sollte es sein 2, und die Schätzung war 1.93785.
Das simulierte Modell parallel zum Beispiel hier ein konkretes, reales Szenario zu geben und die Beseitigung des Variable (die im Fall ich simulieren würde einfach eine einzelne, zufällig für jeden Athleten Beobachtung) , das war wird sowohl als eigenständiger Regressor als auch zur Erzeugung zufälliger Abschnitte und Steigungen als Zwischenschritt verwendet. N ( 0 , 1 )aN(0,1)
Die Daten sind vollständig fiktiv und der Code, mit dem ich sie generiert habe, finden Sie hier .
Die Idee ist, dass wir Messungen an
glucose concentrations
einer Gruppe von30
athletes
am Ende von15
races
in Bezug auf die Konzentration des Make-upamino acid A
(AAA
) in diesen Athleten Blut durchführen würden.Das Modell ist:
lmer(glucose ~ AAA + (1 + AAA | athletes)
Es gibt eine feste Effektsteigung (Konzentration von Glucose ~ Aminosäure A); Die Steigungen variieren jedoch auch zwischen verschiedenen Athleten mit einem
mean = 0
undsd = 0.5
, während die Abschnitte für die verschiedenen Athleten zufällige Effekte0
mit verteilensd = 0.2
. Ferner besteht eine Korrelation zwischen Abschnitten und Steigungen von 0,8 innerhalb desselben Athleten.Diese zufälligen Effekte werden zu einem
intercept = 1
für feste Effekte ausgewählten hinzugefügt , undslope = 2
.Die Werte der Glukosekonzentration wurden berechnet als+ ∗ + ϵ+ ϵ
alpha + AAA * beta + 0.75 * rnorm(observations)
, dh der Achsenabschnitt für jeden Athleten (dh1 + random effects changes in the intercept
) die Aminosäurekonzentration, die Steigung für jeden Athleten (dh ) ( ), die wir für a eingerichtet haben .AAA
2 + random effect changes in slopes for each athlete
noise
sd = 0.75
Die Daten sehen also so aus:
Unrealistische Glukosespiegel, aber immer noch ...
Die Zusammenfassung gibt Folgendes zurück:
Die Zufallseffektkorrelation ist
1
statt0.8
. Diesd = 2
für die zufällige Variation in Abschnitten wird interpretiert als0.07775
. Die Standardabweichung0.5
für zufällige Änderungen der Steigungen unter Athleten wird berechnet als0.45218
. Das mit einer Standardabweichung eingestellte Rauschen0.75
wurde als zurückgegeben0.73868
.Das Abfangen fester Effekte sollte sein
1
, und wir haben1.31146
. Für die Steigung sollte es sein2
, und die Schätzung war1.93785
.Ziemlich nah!
quelle