QQプロットの均一分布から観測された期待値と期待されるp値を計算する


9

インフレの度合い(つまり、観測されたデータポイントが予想にどの程度適合するか)を定量化しようとしています。1つの方法は、QQプロットを見ることです。しかし、インフレの数値指標を計算したいと思います。つまり、観測された値が理論上の均一分布にどれだけよく適合するかを意味します。

ここに画像の説明を入力してください

データの例:

# random uniform distribution 
pvalue <- runif(100, min=0, max=1)
# with inflation expected i.e. not uniform distribution  
pvalue1 <- rnorm(100, mean = 0.5, sd=0.1)

1
質問の内容を理解できるように、この質問に「インフレ」または「炎症」[ sic ]の定量的な定義を含めるか、これが正確に何を測定するのかをより正確に説明してください。おそらく、経験的一変量分布が事前に指定された理論的分布からどの程度逸脱しているかを定量化しようとしているのでしょうか。
whuber

はい、私は、事前に指定された一変量分布からどれだけの経験的分布が逸脱しているかを測定したいと思います。QQから定性的な判断はできますが、定量的な判断はできません。
rdorlearn 2014

回答:


13

分布からの逸脱をテストする方法はいくつかあります(あなたの場合は均一):

(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分布の適合を最適化します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.