このサンプルの(対数)正規性を仮定できますか?


11

これが私のサンプルのQQプロットです(対数Y軸に注意してください)。:n=1000

ここに画像の説明を入力してください
whuberによって指摘されたように、これは、基になる分布が左に歪んでいる(右裾が短い)ことを示しています。

用いたshapiro.test(対数変換データ)Rで、Iは、検定統計量取得及びp値我々は正式ことを意味する、リジェクトヌル仮説 95%の信頼水準で。5.172 10 - 13 H 0サンプルは正常に分布されていますW=0.97185.1721013H0:the sample is normal distributed

私の質問は次のとおりです。これは、(対数)正規性を前提としたさらなる分析のために実際には十分ですか?特に、CoxとLandによる近似法を使用して、類似したサンプルの平均の信頼区間を計算したいと思います(論文で説明されている:Zou、GY、cindy Yan HuoおよびTaleban、J。(2009)。単純な信頼区間対数正規平均と、環境アプリケーションとの違い。Environmetrics20、172–180):

ci <- function (x) {
        y <- log(x)
        n <- length(y)
        s2 <- var(y)
        m <- mean(y) + s2 / 2
        z <- qnorm(1 - 0.05 / 2) # 95%
        #z <- qnorm(1 - 0.10 / 2) # 90%
        d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))

        return(c(exp(m - d), exp(m + d)))
}

信頼区間は、実際のサンプル平均よりわずかに高いポイントを中心とする傾向があることに気付きました。例えば:

> mean(x)
[1] 82.3076
> y <- log(x)
> exp(mean(y) + var(y) / 2)
[1] 91.22831

これら2つの値は同じである必要があるとます。H0


1
分布は間違いなく右尾にうまく適合しません。
Michael R. Chernick

1
このQQプロットが示すようにデータがあまり持って短い対数正規分布よりも右の尾を:それがされ、左対数正規分布に比べて歪みました。したがって、対数正規ベースの手順を使用することはできません。
whuber

@whuberはい、あなたはそれが右に傾いているのではなく、左に傾いていることについて正しいです。質問を更新する必要がありますか?
Vegard 2012

もちろん、質問の改善に感謝します。
whuber

2
注意:「左スキュー」とは、左尾が長いことではなく、尾が短いことを明示的に示したものです。これは、プロットの右側の点が参照線の下にどのように収まるかによって明らかです。プロットの左側にある点は(比較的)参照線に近いため、この分布を「左裾が長い」と特徴付けるのは正しくありません。ここでは区別が重要です。これは、右尾が左平均よりも推定平均にはるかに大きな影響を与えるはずです(一方、両方の尾が信頼区間に影響を与えるため)。
whuber

回答:


12

これらのデータは、ガンマ分布とは異なり、対数正規分布と比較して短い裾を持っています。

set.seed(17)
par(mfcol=c(1,1))
x <- rgamma(500, 1.9)
qqnorm(log(x), pch=20, cex=.8, asp=1)
abline(mean(log(x)) + .1,1.2*sd(log(x)), col="Gray", lwd=2)

QQPlot

それにもかかわらず、データ強く右方向に歪んでいるため、最大値が平均とその信頼区間の推定に重要な役割を果たすことが期待できます。したがって、対数正規(LN)推定量は、平均と2つの信頼限界を過大評価する傾向があることを予測する必要があります

チェックして、比較のために、通常の推定量を使用しましょう。つまり、サンプル平均とその正規理論の信頼区間です。通常の推定量は、データではなく標本平均の近似正規性のみに依存していることに注意してください。このような大きなデータセットでは、うまく機能することが期待できます。これを行うには、ci関数を少し変更する必要があります。

ci <- function (x, alpha=.05) {
  z <- -qnorm(alpha / 2)
  y <- log(x); n <- length(y); s2 <- var(y)
  m <- mean(y) + s2 / 2
  d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))
  exp(c(mean=m, lcl=m-d, ucl=m+d))
}

正規理論の推定の並列関数を次に示します。

ci.u <- function(x, alpha=.05) {
 mean(x) + sd(x) * c(mean=0, lcl=1, ucl=-1) / sqrt(length(x)) * qnorm(alpha/2)
}

このシミュレートされたデータセットに適用すると、出力は

> ci(x)
   mean     lcl     ucl 
2.03965 1.87712 2.21626 
> ci.u(x)
   mean     lcl     ucl 
1.94301 1.81382 2.07219 

によって生成された正規理論の推定値ci.uは、真の平均値であるに少し近づきますが、1つのデータセットからどの手順がより適切に機能する傾向があるかを判断するのは困難です。調べるために、多くのデータセットをシミュレートしましょう:1.9

trial <- function(n=500, k=1.9) {
  x <- rgamma(n, k)
  cbind(ci(x), ci.u(x))
}
set.seed(17)
sim <- replicate(5000, trial())

出力を真の平均値と比較することに関心があります。ヒストグラムのパネルがその点で明らかになっています。1.9

xmin <- min(sim)
xmax <- max(sim)
h <- function(i, ...) {
  b <- seq(from=floor(xmin*10)/10, to=ceiling(xmax*10)/10, by=0.1)
  hist(sim[i,], freq=TRUE, breaks=b, col="#a0a0FF", xlab="x", xlim=c(xmin, xmax), ...)
  hist(sim[i,sim[i,] >= 1.9], add=TRUE,freq=TRUE, breaks=b, col="#FFa0a0",
                              xlab="x", xlim=c(xmin, xmax), ...)
}
par(mfcol=c(2,3))
h(1, main="LN Estimate of Mean")
h(4, main="Sample Mean")
h(2, main="LN LCL")
h(5, main="LCL")
h(3, main="LN UCL")
h(6, main="UCL")

ヒストグラム

対数正規手順は平均と信頼限界を過大評価する傾向があるのは明らかですが、通常の手順は適切に機能します。信頼区間の手順の範囲を推定できます。

> sapply(c(LNLCL=2, LCL=5, LNUCL=3, UCL=6), function(i) sum(sim[i,] > 1.9)/dim(sim)[2])
 LNLCL    LCL  LNUCL    UCL 
0.2230 0.0234 1.0000 0.9648 

この計算は言う:

  • LNの下限は、真の平均の約22.3%をカバーできません(意図した2.5%ではなく)。

  • 通常の下限では、意図した2.5%に近い、約2.3%の時間の真の平均をカバーできません。

  • LNの上限は、常に真の平均を超えます(意図したとおりに2.5%の時間を下回るのではなく)。これにより、95%の信頼区間ではなく、両面100%-(22.3%+ 0%)= 77.7%の信頼区間になります。

  • 通常の上限では、時間の約100-96.5 = 3.5%で真の平均をカバーできません。これは、意図した2.5%の値より少し大きくなっています。したがって、通常の制限は、95%信頼区間ではなく、両側100%-(2.3%+ 3.5%)= 94.2%信頼区間で構成されます。

対数正規間隔での名目カバレッジの95%から77.7%への減少はひどいものです。通常の間隔での94.2%への減少はまったく悪くなく、(生データの対数ではなく)歪度の影響に起因する可能性があります。

平均のさらなる分析対数正規性を仮定すべきではない結論付けなければなりません

注意してください!一部の手順(予測限界など)は、これらの平均の信頼限界よりも歪度の影響を受けやすいため、歪んだ分布を考慮する必要があります。ただし、lognormalプロシージャがこれらのデータを使用して実際に意図された分析を適切に実行できるとは考えられません。


うわー、この答えは私を吹き飛ばします。どうもありがとうございます!最初の例abline()qqline()(別の行を生成する)の代わりにどうして使うのですか?
Vegard

あなたのtrial()関数は、引数を使用しません。
Vegard 2012


1
良くやった!ブートストラップの場合は、次を変更しtrialますtrial <- function(y) { x <- sample(y, length(y), TRUE); cbind(ci(x), ci.u(x)) }。次に、コマンドを1つだけ発行しsim <- sapply(1:5000, function(i) trial(x))ます。simその後、6行のヒストグラムを探索することもできます。
whuber

1
+1、特に予測区間は平均の信頼区間よりも分布形状に敏感になるという微妙な点が好きです。
gung-モニカの復活
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.