分布からの逸脱をテストする方法はいくつかあります(あなたの場合は均一):
(1)ノンパラメトリック検定:
コルモゴロフ-スミルノフ検定を使用して、期待値に一致する観測値の分布を確認できます。
Rはks.test
コルモゴロフ・スミルノフ検定を実行できる機能を持っています。
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)カイ二乗適合度検定
この場合、データを分類します。各セルまたはカテゴリの観測頻度と期待頻度に注目します。継続的なケースでは、データは人工的な間隔(ビン)を作成することによって分類される場合があります。
# 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)ラムダ
ゲノムワイドアソシエーションスタディ(GWAS)を実行している場合は、ラムダ(λ)としても知られるゲノムインフレ係数を計算することもできます(も参照)。この統計は統計遺伝学コミュニティで人気があります。定義により、λは、結果のカイ2乗検定統計の中央値を、カイ2乗分布の予想中央値で割ったものとして定義されます。1自由度のカイ2乗分布の中央値は0.4549364です。アソシエーション分析の出力に応じて、λ値はzスコア、カイ2乗統計、またはp値から計算できます。上部テールからのp値の割合が破棄されることがあります。
p値の場合、次の方法でこれを行うことができます。
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
分析結果がデータが正規カイ2乗分布(インフレなし)に従う場合、予想されるλ値は1です。λ値が1より大きい場合、これは分析で修正する必要のある系統的バイアスの証拠である可能性があります。
ラムダは、回帰分析を使用して推定することもできます。
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)
ラムダを計算する別の方法は、「KS」を使用することです(コルモゴロフ-スミルノフ検定を使用してchi2.1df分布の適合を最適化します)。