Kann mir bitte jemand helfen, die folgende Funktion in R auszufüllen:
#data is a single vector of decimal values
normally.distributed <- function(data) {
if(data is normal)
return(TRUE)
else
return(NO)
}
Normalitätstests machen nicht das, was die meisten denken. Shapiros Test, Anderson Darling und andere, sind Nullhypothesen gegen die Annahme von Normalität. Diese sollten nicht verwendet werden, um zu bestimmen, ob statistische Verfahren der normalen Theorie verwendet werden. Tatsächlich sind sie für den Datenanalysten praktisch wertlos. Unter welchen Bedingungen sind wir daran interessiert, die Nullhypothese, dass die Daten normal verteilt sind, abzulehnen? Ich bin noch nie auf eine Situation gestoßen, in der ein normaler Test das Richtige ist. Wenn die Stichprobengröße klein ist, werden selbst große Abweichungen von der Normalität nicht erkannt, und wenn Ihre Stichprobengröße groß ist, führt selbst eine kleinste Abweichung von der Normalität zu einer abgelehnten Null.
Zum Beispiel:
> set.seed(100)
> x <- rbinom(15,5,.6)
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.8816, p-value = 0.0502
> x <- rlnorm(20,0,.4)
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.9405, p-value = 0.2453
In beiden Fällen (binomische und lognormale Variationen) ist der p-Wert> 0,05, was dazu führt, dass der Nullwert nicht zurückgewiesen wird (dass die Daten normal sind). Müssen wir daraus schließen, dass die Daten normal sind? (Hinweis: Die Antwort ist nein). Versagens ablehnen ist nicht das Gleiche wie Akzeptieren. Dies ist Hypothesentest 101.
Aber was ist mit größeren Stichprobengrößen? Nehmen wir den Fall, wo die Verteilung sehr fast normal ist.
> library(nortest)
> x <- rt(500000,200)
> ad.test(x)
Anderson-Darling normality test
data: x
A = 1.1003, p-value = 0.006975
> qqnorm(x)
Hier verwenden wir eine T-Verteilung mit 200 Freiheitsgraden. Das qq-Diagramm zeigt, dass die Verteilung näher an der Normalität liegt als jede Verteilung, die Sie in der realen Welt wahrscheinlich sehen werden. Der Test lehnt jedoch die Normalität mit einem sehr hohen Maß an Vertrauen ab.
Bedeutet der signifikante Test gegen die Normalität, dass wir in diesem Fall keine normalen theoretischen Statistiken verwenden sollten? (Noch ein Hinweis: Die Antwort ist nein :))
Ich würde auch die SnowsPenultimateNormalityTest
im TeachingDemos
-Paket wärmstens empfehlen. Die Dokumentation der Funktion ist jedoch für Sie weitaus nützlicher als der Test selbst. Lesen Sie es sorgfältig durch, bevor Sie den Test verwenden.
SnowsPenultimateNormalityTest
hat sicherlich seine Vorzüge, aber Sie möchten vielleicht auch qqnorm
betrachten.
X <- rlnorm(100)
qqnorm(X)
qqnorm(rnorm(100))
Verwenden Sie die Funktion shapiro.test
, die den Shapiro-Wilks-Test auf Normalität durchführt. Ich war glücklich damit.
bibliothek (DnE)
x <-rnorm (1000,0,1)
is.norm (x, 10,0.05)
Der Anderson-Darling-Test ist auch nützlich.
library(nortest)
ad.test(data)
wenn Sie einen Test durchführen, haben Sie die Wahrscheinlichkeit, die Nullhypothese abzulehnen, wenn sie wahr ist.
Siehe nächster R-Code:
p=function(n){
x=rnorm(n,0,1)
s=shapiro.test(x)
s$p.value
}
rep1=replicate(1000,p(5))
rep2=replicate(1000,p(100))
plot(density(rep1))
lines(density(rep2),col="blue")
abline(v=0.05,lty=3)
Die Grafik zeigt, dass Sie, wenn Sie eine kleine oder große Stichprobengröße haben, 5% der Fälle die Chance haben, die Nullhypothese zurückzuweisen, wenn sie wahr ist (ein Typ-I-Fehler)
Zusätzlich zu qqplots und dem Shapiro-Wilk-Test können die folgenden Methoden nützlich sein.
Qualitativ:
Quantitativ:
Die qualitativen Methoden können mit folgendem in R erzeugt werden:
library("ggpubr")
library("car")
h <- hist(data, breaks = 10, density = 10, col = "darkgray")
xfit <- seq(min(data), max(data), length = 40)
yfit <- dnorm(xfit, mean = mean(data), sd = sd(data))
yfit <- yfit * diff(h$mids[1:2]) * length(data)
lines(xfit, yfit, col = "black", lwd = 2)
plot(ecdf(data), main="CDF")
lines(ecdf(rnorm(10000)),col="red")
ggdensity(data)
ggqqplot(data)
Ein Wort der Vorsicht - Tests nicht blind durchführen. Wenn Sie über ein solides Verständnis der Statistiken verfügen, können Sie besser verstehen, wann Sie welche Tests verwenden und wie wichtig Annahmen beim Testen von Hypothesen sind.