いつ信頼区間が「意味をなす」が、対応する信頼区間はそうではないのか?


14

多くの場合、95%のカバレッジの信頼区間は、95%の事後密度を含む信頼区間と非常によく似ています。これは、前者が均一であるか、後者の場合にほぼ均一であるときに起こります。したがって、信頼区間を近似するために信頼区間を使用することがよくあります。重要なことは、これから、信頼区間としての信頼区間のひどく間違った誤解は、多くの単純なユースケースにとって実際的重要性がほとんどないか、まったくないということを結論付けることができます。

これが起こらない場合の例はたくさんありますが、それらはすべて、頻繁なアプローチに何か問題があることを証明しようとして、ベイジアン統計の支持者によって厳選されているようです。これらの例では、信頼区間に不可能な値などが含まれており、それらがナンセンスであることを示しています。

これらの例や、ベイジアン対フリークエンティストの哲学的議論に戻りたくありません。

私はちょうど反対の例を探しています。信頼区間と信頼区間が大幅に異なり、信頼手順によって提供される区間が明らかに優れている場合はありますか?

明確にするために:これは、信頼できる区間が通常、対応する信頼区間と一致すると予想される状況、つまり、フラット、均一などの事前分布を使用する状況についてです。誰かが勝手に悪い事前を選択する場合には興味がありません。

編集: 以下の@JaeHyeok Shinの回答に応じて、彼の例が正しい尤度を使用していることに同意しなければなりません。近似ベイズ計算を使用して、以下のRのシータの正しい事後分布を推定しました。

### Methods ###
# Packages
require(HDInterval)

# Define the likelihood
like <- function(k = 1.2, theta = 0, n_print = 1e5){
  x    = NULL
  rule = FALSE
  while(!rule){
    x     = c(x, rnorm(1, theta, 1))
    n     = length(x)
    x_bar = mean(x)

    rule = sqrt(n)*abs(x_bar) > k

    if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
  }
  return(x)
}

# Plot results
plot_res <- function(chain, i){
    par(mfrow = c(2, 1))
    plot(chain[1:i, 1], type = "l", ylab = "Theta", panel.first = grid())
    hist(chain[1:i, 1], breaks = 20, col = "Grey", main = "", xlab = "Theta")
}


### Generate target data ### 
set.seed(0123)
X = like(theta = 0)
m = mean(X)


### Get posterior estimate of theta via ABC ###
tol   = list(m = 1)
nBurn = 1e3
nStep = 1e4


# Initialize MCMC chain
chain           = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = c("theta", "mean")
chain$theta[1]  = rnorm(1, 0, 10)

# Run ABC
for(i in 2:nStep){
  theta = rnorm(1, chain[i - 1, 1], 10)
  prop  = like(theta = theta)

  m_prop = mean(prop)


  if(abs(m_prop - m) < tol$m){
    chain[i,] = c(theta, m_prop)
  }else{
    chain[i, ] = chain[i - 1, ]
  }
  if(i %% 100 == 0){ 
    print(paste0(i, "/", nStep)) 
    plot_res(chain, i)
  }
}

# Remove burn-in
chain = chain[-(1:nBurn), ]

# Results
plot_res(chain, nrow(chain))
as.numeric(hdi(chain[, 1], credMass = 0.95))

これは95%の信頼できる間隔です。

> as.numeric(hdi(chain[, 1], credMass = 0.95))
[1] -1.400304  1.527371

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

編集#2:

@JaeHyeok Shinのコメントの後の更新です。できるだけシンプルにしようとしていますが、スクリプトはもう少し複雑になりました。主な変更:

  1. 現在、平均に0.001の許容値を使用しています(1でした)
  2. 許容誤差を小さくするために、ステップ数を500kに増やしました
  3. 許容差を小さくするために、プロポーザル分布のsdを1に減らしました(10でした)
  4. 比較のためにn = 2kの単純なノルム尤度を追加
  5. サンプルサイズ(n)を要約統計として追加し、許容値を0.5 * n_targetに設定

コードは次のとおりです。

### Methods ###
# Packages
require(HDInterval)

# Define the likelihood
like <- function(k = 1.3, theta = 0, n_print = 1e5, n_max = Inf){
  x    = NULL
  rule = FALSE
  while(!rule){
    x     = c(x, rnorm(1, theta, 1))
    n     = length(x)
    x_bar = mean(x)
    rule  = sqrt(n)*abs(x_bar) > k
    if(!rule){
     rule = ifelse(n > n_max, TRUE, FALSE)
    }

    if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
  }
  return(x)
}


# Define the likelihood 2
like2 <- function(theta = 0, n){
  x = rnorm(n, theta, 1)
  return(x)
}



# Plot results
plot_res <- function(chain, chain2, i, main = ""){
    par(mfrow = c(2, 2))
    plot(chain[1:i, 1],  type = "l", ylab = "Theta", main = "Chain 1", panel.first = grid())
    hist(chain[1:i, 1],  breaks = 20, col = "Grey", main = main, xlab = "Theta")
    plot(chain2[1:i, 1], type = "l", ylab = "Theta", main = "Chain 2", panel.first = grid())
    hist(chain2[1:i, 1], breaks = 20, col = "Grey", main = main, xlab = "Theta")
}


### Generate target data ### 
set.seed(01234)
X    = like(theta = 0, n_print = 1e5, n_max = 1e15)
m    = mean(X)
n    = length(X)
main = c(paste0("target mean = ", round(m, 3)), paste0("target n = ", n))



### Get posterior estimate of theta via ABC ###
tol   = list(m = .001, n = .5*n)
nBurn = 1e3
nStep = 5e5

# Initialize MCMC chain
chain           = chain2 = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = colnames(chain2) = c("theta", "mean")
chain$theta[1]  = chain2$theta[1]  = rnorm(1, 0, 1)

# Run ABC
for(i in 2:nStep){
  # Chain 1
  theta1 = rnorm(1, chain[i - 1, 1], 1)
  prop   = like(theta = theta1, n_max = n*(1 + tol$n))
  m_prop = mean(prop)
  n_prop = length(prop)
  if(abs(m_prop - m) < tol$m &&
     abs(n_prop - n) < tol$n){
    chain[i,] = c(theta1, m_prop)
  }else{
    chain[i, ] = chain[i - 1, ]
  }

  # Chain 2
  theta2  = rnorm(1, chain2[i - 1, 1], 1)
  prop2   = like2(theta = theta2, n = 2000)
  m_prop2 = mean(prop2)
  if(abs(m_prop2 - m) < tol$m){
    chain2[i,] = c(theta2, m_prop2)
  }else{
    chain2[i, ] = chain2[i - 1, ]
  }

  if(i %% 1e3 == 0){ 
    print(paste0(i, "/", nStep)) 
    plot_res(chain, chain2, i, main = main)
  }
}

# Remove burn-in
nBurn  = max(which(is.na(chain$mean) | is.na(chain2$mean)))
chain  = chain[ -(1:nBurn), ]
chain2 = chain2[-(1:nBurn), ]


# Results
plot_res(chain, chain2, nrow(chain), main = main)
hdi1 = as.numeric(hdi(chain[, 1],  credMass = 0.95))
hdi2 = as.numeric(hdi(chain2[, 1], credMass = 0.95))


2*1.96/sqrt(2e3)
diff(hdi1)
diff(hdi2)

結果は、hdi1が私の「可能性」であり、hdi2は単純なrnorm(n、theta、1)です。

> 2*1.96/sqrt(2e3)
[1] 0.08765386
> diff(hdi1)
[1] 1.087125
> diff(hdi2)
[1] 0.07499163

そのため、許容誤差を十分に下げ、さらに多くのMCMCステップを犠牲にして、rnormモデルの予想されるCrI幅を確認できます。

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


複製ではありませんが、stats.stackexchange.com
questions /

6
一般に、実際の値が-3.6であるNormal(0,1)などの非公式な意味で、非常に間違った情報の事前がある場合、大量のデータがない場合の信頼できる間隔は、かなり悪い頻繁な視点から見た。
-jbowman

@jbowmanこれは、特に均一な事前値またはN(0、1e6)のようなものを使用する場合についてです。
リヴィッド

数十年前、本物のベイジアンは、非ベイジアン(または偽の)ベイジアンとして非情報事前確率を使用した統計学者と呼ばれていました。
user158565

@ user158565これはオフトピックですが、均一な事前分布は単なる近似です。p(H_0)= p(H_1)= p(H_2)= ... = p(H_n)の場合、すべての事前分布はベイズの規則から外れ、計算が容易になります。それは理にかなっているときに分母から小さな用語を削除するよりも間違っています。
リヴィッド

回答:


6

順次実験計画では、信頼できる間隔が誤解を招く可能性があります。

(免責事項:私はそれが合理的ではないと主張しているわけではありません-ベイジアンの推論では完全に合理的であり、ベイジアンの観点から誤解を招くものではありません。)

簡単な例として、未知の持つからのランダムサンプルを提供するマシンがあるとします。 iidサンプルを描画する代わりに、固定までサンプルを描画します。つまり、サンプル数は、定義される 停止時間バツNθ1θnnバツ¯n>kkN

N=inf{n1nバツ¯n>k}

反復対数の法則から、任意のに対してがわかります。このタイプの停止ルールは、推論を行うサンプルの数を減らすために、順次テスト/推定で一般的に使用されます。PθN<=1θR

後部可能性の原則を示しルールを停止することによって影響を受けるため、あらゆる合理的な滑らかで前用されていません(例えば、、我々は十分な大きさに設定した場合、、の後部はおよそあり、したがって信頼区間はおよそとして与えられます ただし、の定義から、が大きい 場合、この信頼できる間隔にはが含まれないことがわかりますθπθθN010kθNバツ¯N1/N

Cbayes:=[バツ¯N1.96Nバツ¯N+1.96N]
N0k
0<バツ¯NkNバツ¯N1.96N
ための。したがって、のfrequentistカバレッジのでゼロである および場合に達成されるある 。対照的に、ベイズカバレッジが常にほぼ等しくなるので k0Cbayes
infθPθθCbayes=0
0θ00.95
PθCbayes|バツ1バツN0.95。

持ち帰りのメッセージ:頻繁な保証が必要な場合、ベイジアン保証には常に有効ですが、頻繁な保証には必ずしも有効ではないベイジアン推論ツールの使用に注意する必要があります。

(この例をLarryの素晴らしい講義から学びました。このノートには、頻繁なフレームワークとベイジアンフレームワークの微妙な違いに関する多くの興味深い議論が含まれています。http://www.stat.cmu.edu/~larry/=stat705/Lecture14.pdf

編集 LividのABCでは、許容値が大きすぎるため、一定数の観測値をサンプリングする標準設定であっても、正しいCRは得られません。私はABCに精通していませんが、もしtol値を0.05に変更しただけなら、次のように非常に歪んだCRを持つことができます

> X = like(theta = 0)
> m = mean(X)
> print(m)
[1] 0.02779672

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

> as.numeric(hdi(chain[, 1], credMass = 0.95)) [1] -0.01711265 0.14253673

もちろん、チェーンは十分に安定化されていませんが、チェーンの長さを長くしても、同様のCR-正の部分に歪んだCRを得ることができます。

実際に、私は、平均の差に基づいて拒否ルールが高い確率であるため、この設定ではよく適していないと思う近くにある場合と近いです if。Nバツ¯Nk0<θkkkθ<0


「十分に大きいkを設定すると、θの事後は約N(X_N、1 / N)になります。明らかに、Pr(X |θ)!= Normal(theta、1)のようです。すなわち、それはあなたのシーケンスを生成したプロセスの間違った可能性です。また、タイプミスがあります。元の例では、sqrt(n)* abs(mean(x))> kのときにサンプリングを停止します。
リヴィッド

コメントありがとう。停止規則の下でも、尤度はとして与えられます。したがって、Nはランダムになっていますが、N個の通常の観測値の積と同じです。この例は、現在の停止ルールに対しても有効です。ただし、指摘したのは元の歴史的な例です。この停止ルールについて、頻度とベイジアンがどのように議論してきたかという興味深い歴史があります。たとえば、errorstatistics.com=1Nϕバツθ
2013/04/06 /

質問の私の編集をご覧ください。私はまだあなたの信頼できる間隔が不正確な可能性を使用するので意味をなさないと思います。私のコードのように正しい尤度を使用すると、妥当な間隔が得られます。
リヴィッド

詳細な実験をありがとう。設定では、は小さすぎて不等式を満たすことができません。は1.96より大きくなければならないことに注意してください。近似誤差を補正するには、が安全な選択だと思います。0 < ˉ X N - K / k kk>100<バツ¯Nk/Nバツ¯N1.96/Nkk>10
ジェヒョクシン

また、このABCコンピューティングが標準的なケースで機能するかどうかを再確認できますか?\ code {like}関数を置き換えて、一定数の観測値を描画するようにしました(n = 2000)。その後、CRの理論的な長さは約が、より広いCR(長さは約2)。許容範囲が大きすぎると思います。2×1.96/2000年=0.0876
ジェヒョクシン

4

信頼区間は、規定の事前分布に基づいて事後分布から形成されるため、非常に信じがたいパラメーター値に大きく集中した事前分布を使用することにより、非常に悪い信頼区間を簡単に構築できます。不可能なパラメータ値に完全に集中している事前分布を使用することにより、「意味をなさない」信頼できる間隔を作成できます。


1
または、さらに良いことに、(他の誰かの事前であっても)自分の事前と一致しない事前によって構築された信頼できるものは、あなたに馬鹿げているという良い可能性があります。これは科学では珍しいことではありません。彼らの観察では、専門家は常に強い自信を持っているので、私は研究者に専門家の意見を含めたくないと言ってきました。
クリフAB

1
これは、特に均一、または「フラット」な優先度についてです。
リヴィッド

1
@Livid:質問には、フラットな優先順位について話していることを明確に含める必要があります。それはすべてを完全に変えます。
クリフAB

1
@CliffAB最初の2つの文にありますが、明確にします、ありがとう。
リヴィッド

1

フラット事前値を使用している場合、これは意味のない再パラメーター化でフラット事前値を見つけようとする単純なゲームです。

{01} {1}

これが、多くのベイジアンが平坦な事前分布に反対する理由です。


私の動機をかなり明確に説明しました。信頼区間に不可能な値が含まれているが、信頼区間が正常に動作する例のようなものが必要です。あなたの例が、間違った可能性を選択するなど、無意味なことをすることにかかっている場合、なぜそれが誰かに興味があるのでしょうか?
リヴィッド

1
@Livid:尤度関数は完全に合理的です。フラット前対数オッズではありません。そして、これは、ベイジアンがフラットな事前分布を使用すべきではないと言うために使用する議論の全体です。実際には非常に有益であり、多くの場合、ユーザーが意図したとおりではありません。
クリフAB

1
ここでは、Andrew Gelmanがフラット優先の問題のいくつかを議論しています。
クリフAB

「対数オッズの平準化はそうではありません。」対数変換オッズにフラットな優先順位を付けることは、間違った尤度を使用するように、あなたにとってナンセンスだと思われることを意味しました。申し訳ありませんが、この例には詳しくありません。このモデルは正確に何をすることになっていますか?
リヴィッド

@Livid:それは異常に見えるかもしれませんが、実際にはそうではありません!たとえば、ロジスティック回帰では通常、log-oddsスケールのすべてのパラメーターが考慮されます。すべてのグループにダミー変数があり、回帰パラメータにフラットな事前分布を使用している場合、まさにこの問題に遭遇します。
クリフAB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.