Es gibt verschiedene Möglichkeiten, wie wir Abweichungen von jeder Verteilung testen können (in Ihrem Fall einheitlich):
(1) Nichtparametrische Tests:
Sie können Kolmogorov-Smirnov- Tests verwenden, um zu sehen, wie die Verteilung der beobachteten Werte den Erwartungen entspricht.
R hat eine ks.test
Funktion, die einen Kolmogorov-Smirnov-Test durchführen kann.
pvalue <- runif(100, min=0, max=1)
ks.test(pvalue, "punif", 0, 1)
One-sample Kolmogorov-Smirnov test
data: pvalue
D = 0.0647, p-value = 0.7974
alternative hypothesis: two-sided
pvalue1 <- rnorm (100, 0.5, 0.1)
ks.test(pvalue1, "punif", 0, 1)
One-sample Kolmogorov-Smirnov test
data: pvalue1
D = 0.2861, p-value = 1.548e-07
alternative hypothesis: two-sided
(2) Chi-Quadrat-Anpassungstest
In diesem Fall kategorisieren wir die Daten. Wir notieren die beobachteten und erwarteten Häufigkeiten in jeder Zelle oder Kategorie. Für den kontinuierlichen Fall können die Daten durch Erstellen künstlicher Intervalle (Bins) kategorisiert werden.
# example 1
pvalue <- runif(100, min=0, max=1)
tb.pvalue <- table (cut(pvalue,breaks= seq(0,1,0.1)))
chisq.test(tb.pvalue, p=rep(0.1, 10))
Chi-squared test for given probabilities
data: tb.pvalue
X-squared = 6.4, df = 9, p-value = 0.6993
# example 2
pvalue1 <- rnorm (100, 0.5, 0.1)
tb.pvalue1 <- table (cut(pvalue1,breaks= seq(0,1,0.1)))
chisq.test(tb.pvalue1, p=rep(0.1, 10))
Chi-squared test for given probabilities
data: tb.pvalue1
X-squared = 162, df = 9, p-value < 2.2e-16
(3) Lambda
Wenn Sie eine genomweite Assoziationsstudie (GWAS) durchführen, möchten Sie möglicherweise den genomischen Inflationsfaktor berechnen , der auch als Lambda (λ) bezeichnet wird ( siehe auch ). Diese Statistik ist in der statistischen Genetik beliebt. Per Definition ist λ definiert als der Median der resultierenden Chi-Quadrat-Teststatistik geteilt durch den erwarteten Median der Chi-Quadrat-Verteilung. Der Median einer Chi-Quadrat-Verteilung mit einem Freiheitsgrad beträgt 0,4549364. Ein λ-Wert kann aus Z-Scores, Chi-Quadrat-Statistiken oder P-Werten berechnet werden, abhängig von der Ausgabe, die Sie aus der Assoziationsanalyse erhalten. Manchmal wird der Anteil des p-Werts vom oberen Schwanz verworfen.
Für p-Werte können Sie dies tun durch:
set.seed(1234)
pvalue <- runif(1000, min=0, max=1)
chisq <- qchisq(1-pvalue,1)
# For z-scores as association, just square them
# chisq <- data$z^2
#For chi-squared values, keep as is
#chisq <- data$chisq
lambda = median(chisq)/qchisq(0.5,1)
lambda
[1] 0.9532617
set.seed(1121)
pvalue1 <- rnorm (1000, 0.4, 0.1)
chisq1 <- qchisq(1-pvalue1,1)
lambda1 = median(chisq1)/qchisq(0.5,1)
lambda1
[1] 1.567119
Wenn die Analyseergebnisse Ihrer Daten der normalen Chi-Quadrat-Verteilung folgen (keine Inflation), beträgt der erwartete λ-Wert 1. Wenn der λ-Wert größer als 1 ist, kann dies ein Hinweis auf eine systematische Verzerrung sein, die in Ihrer Analyse korrigiert werden muss .
Lambda kann auch mithilfe der Regressionsanalyse geschätzt werden.
set.seed(1234)
pvalue <- runif(1000, min=0, max=1)
data <- qchisq(pvalue, 1, lower.tail = FALSE)
data <- sort(data)
ppoi <- ppoints(data) #Generates the sequence of probability points
ppoi <- sort(qchisq(ppoi, df = 1, lower.tail = FALSE))
out <- list()
s <- summary(lm(data ~ 0 + ppoi))$coeff
out$estimate <- s[1, 1] # lambda
out$se <- s[1, 2]
# median method
out$estimate <- median(data, na.rm = TRUE)/qchisq(0.5, 1)
Eine andere Methode zur Berechnung des Lambda ist die Verwendung von 'KS' (Optimierung der Anpassung der Chi2.1df-Verteilung mithilfe des Kolmogorov-Smirnov-Tests).