@DikranMarsupial ist natürlich genau richtig, aber mir ist der Gedanke gekommen, dass es schön sein könnte, seinen Standpunkt zu veranschaulichen , zumal diese Besorgnis offenbar häufig auftaucht. Insbesondere sollten die Residuen eines Regressionsmodells normalverteilt sein, damit die p-Werte korrekt sind. Doch selbst wenn die Residuen normal verteilt sind, das garantiert nicht , dass wird (nicht , dass es darauf ankommt , ...); es hängt von der Verteilung von X ab . Y.X
Nehmen wir ein einfaches Beispiel (das ich erfasse). Angenommen, wir testen ein Medikament auf isolierte systolische Hypertonie (dh der obere Blutdruck ist zu hoch). Nehmen wir weiter an, dass der systolische Bp in unserer Patientenpopulation normal verteilt ist, mit einem Mittelwert von 160 & SD von 3, und dass für jede mg des Arzneimittels, die Patienten täglich einnehmen, der systolische Bp um 1 mmHg sinkt. Mit anderen Worten, der wahre Wert von ist 160 und & bgr; 1 -1 ist , und die wahre Datenerzeugungsfunktion ist:
B P s y s = 160 - 1 × tägliche Medikamentendosis + εβ0β1
In unserer fiktiven Studie werden 300 Patienten nach dem Zufallsprinzip 0 mg (ein Placebo), 20 mg oder 40 mg dieses neuen Arzneimittels pro Tag zugeteilt. (Beachten Sie, dass X nicht normal verteilt ist.) Nach einer angemessenen Zeitspanne, in der das Medikament wirksam wird, sehen unsere Daten möglicherweise folgendermaßen aus:
B Ps ys= 160 - 1 × tägliche Medikamentendosis + & epsi ;.wo ε ∼ N( 0 , 9 )
X
(Ich habe die Dosierungen gezittert, damit sich die Punkte nicht so sehr überlappen, dass sie schwer zu unterscheiden sind.) Schauen wir uns nun die Verteilungen von (dh die marginale / ursprüngliche Verteilung) und die Residuen an: Y.
Y.Y.
Y.Xp < 0,05β1
set.seed(123456789) # this make the simulation repeatable
b0 = 160; b1 = -1; b1_null = 0 # these are the true beta values
x = rep(c(0, 20, 40), each=100) # the (non-normal) drug dosages patients get
estimated.b1s = vector(length=10000) # these will store the simulation's results
estimated.b1ns = vector(length=10000)
null.p.values = vector(length=10000)
for(i in 1:10000){
residuals = rnorm(300, mean=0, sd=3)
y.works = b0 + b1*x + residuals
y.null = b0 + b1_null*x + residuals # everything is identical except b1
model.works = lm(y.works~x)
model.null = lm(y.null~x)
estimated.b1s[i] = coef(model.works)[2]
estimated.b1ns[i] = coef(model.null)[2]
null.p.values[i] = summary(model.null)$coefficients[2,4]
}
mean(estimated.b1s) # the sampling distributions are centered on the true values
[1] -1.000084
mean(estimated.b1ns)
[1] -8.43504e-05
mean(null.p.values<.05) # when the null is true, p<.05 5% of the time
[1] 0.0532
Diese Ergebnisse zeigen, dass alles gut funktioniert.
X Y.X