クラスが十分に分離されているのにロジスティック回帰が不安定になるのはなぜですか?


34

クラスが十分に分離されているときにロジスティック回帰が不安定になるのはなぜですか?よく分離されたクラスとはどういう意味ですか?誰かが例を使って説明できると本当にありがたいです。


4
:私はここに証拠、と、詳細に説明stats.stackexchange.com/questions/224863/...
マシュードゥルーリー

2
:そして、私はまた、問題を説明するためにいくつかのデモだったstats.stackexchange.com/questions/239928/...
ハイタオ・ドゥ

回答:


31

分離があると、ロジスティック回帰自体が不安定になることは正しくありません。分離とは、非常に優れた予測子である変数がいくつかあることを意味します。これは、良いことです。または、分離は、観測値が少なすぎる/変数が多すぎることの結果である可能性があります。その場合、解決策はより多くのデータを取得することです。しかし、分離自体は単なる症状であり、それ自体の問題ではありません。

そのため、実際にはさまざまなケースが扱われます。まず、分析の目的は何ですか?分析の最終結果がケースの何らかの分類である場合、分離はまったく問題ありません。これは、非常に優れた分類を提供する非常に優れた変数があることを意味します。しかし、目標がリスク推定である場合、パラメーター推定が必要であり、分離では通常のmle(最大尤度)推定は存在しません。したがって、おそらく推定方法を変更する必要があります。文献にはいくつかの提案がありますが、私はそれに戻ります。

次に、(上記のように)2つの異なる原因が考えられます。全母集団に分離がある場合や、観察されたケースが少ない/変数が多すぎるために分離が発生する場合があります。

分離に分類されるのは、最尤推定手順です。mleパラメーターの推定値(または少なくともそれらの一部)は無限になります。私はこの回答の最初のバージョンで、おそらくブートストラップで簡単に解決できると言いましたが、少なくとも通常のブートストラップ手順では各ブートストラップリサンプルに分離があるため、機能しません。しかし、ロジスティック回帰は依然として有効なモデルですが、他の推定手順が必要です。提案は次のとおりです。

  1. リッジやなげなわのような正則化は、ブートストラップと組み合わせることができます。
  2. 厳密な条件付きロジスティック回帰
  3. 順列テスト、https://www.ncbi.nlm.nih.gov/pubmed/15515134を参照
  4. Firthsバイアス低減推定手順。ロジスティック回帰モデルが収束しないを参照してください。
  5. 確かに他の...

Rを使用する場合、CRANにパッケージがあります。これは、SafeBinaryRegression分離の問題を診断するのに役立ちます。数学的な最適化手法を使用して、分離または準分離があるかどうかを確認します。以下では、このパッケージと、elrm近似条件付きロジスティック回帰のパッケージを使用したシミュレーション例を示します。

まず、safeBinaryRegressionパッケージの簡単な例。このパッケージは、glm線形計画法を使用して、関数を再定義し、分離のテストでオーバーロードします。分離を検出すると、エラー状態で終了し、mleが存在しないことを宣言します。それ以外の場合は、glmから通常の関数を実行するだけstatsです。例は、そのヘルプページからのものです。

library(safeBinaryRegression)   # Some testing of that package,
                                # based on its examples
# complete separation:
x  <-  c(-2, -1, 1, 2)
y  <-  c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x,  family=binomial,  separation="test")
stats::glm(y~ x, family=binomial)
# Quasicomplete separation:
x  <-  c(-2, 0, 0, 2)
y  <-  c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x,  family=binomial,  separation="test")
stats::glm(y~ x, family=binomial)

実行からの出力:

> # complete separation:
> x  <-  c(-2, -1, 1, 2)
> y  <-  c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) : 
  The following terms are causing separation among the sample points: (Intercept), x
> glm(y ~ x,  family=binomial,  separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") : 
  Separation exists among the sample points.
    This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)

Call:  stats::glm(formula = y ~ x, family = binomial)

Coefficients:
(Intercept)            x  
 -9.031e-08    2.314e+01  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      5.545 
Residual Deviance: 3.567e-10    AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 
> # Quasicomplete separation:
> x  <-  c(-2, 0, 0, 2)
> y  <-  c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) : 
  The following terms are causing separation among the sample points: x
> glm(y ~ x,  family=binomial,  separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") : 
  Separation exists among the sample points.
    This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)

Call:  stats::glm(formula = y ~ x, family = binomial)

Coefficients:
(Intercept)            x  
  5.009e-17    9.783e+00  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      5.545 
Residual Deviance: 2.773    AIC: 6.773

ここで、特定のカットオフを超えるとイベントの確率が正確に1.0になることを除いて、ロジスティックモデルで厳密に近似できるモデルからシミュレートします。バイオアッセイの問題について考えてみてください。ただし、カットオフを超えると、毒は常に殺されます。

pl  <-  function(a, b, x) 1/(1+exp(-a-b*x))
a  <-  0
b  <-  1.5
x_cutoff  <-  uniroot(function(x) pl(0,1.5,x)-0.98,lower=1,upper=3.5)$root
### circa 2.6
pltrue  <-  function(a, b, x) ifelse(x < x_cutoff, pl(a, b, x), 1.0)

x <- -3:3

### Let us simulate many times from this model,  and try to estimate it
### with safeBinaryRegression::glm  That way we can estimate the probability
### of separation from this model

set.seed(31415926)  ### May I have a large container of coffee 
replications  <-  1000
p  <-  pltrue(a, b, x)
err  <-  0
good  <- 0

for (i in 1:replications) {
    y  <- rbinom(length(x), 1, p)
    res  <-  try(glm(y~x, family=binomial), silent=TRUE)
    if (inherits(res,"try-error")) err <-  err+1 else good <- good+1
}
P_separation  <-  err/replications
P_separation

このコードを実行すると、分離の確率は0.759と推定されます。自分でコードを実行してください、それは高速です!

次に、このコードを拡張して、さまざまな推定手順、mle、およびelrmからの近似条件付きロジスティック回帰を試行します。このシミュレーションの実行には、コンピューターで約40分かかります。

library(elrm)  # from CRAN
set.seed(31415926)  ### May I have a large container of coffee
replications  <-  1000
GOOD  <-  numeric(length=replications) ### will be set to one when MLE exists!
COEFS <- matrix(as.numeric(NA), replications, 2)
COEFS.elrm <- matrix(as.numeric(NA), replications, 2) # But we'll only use second col for x
p  <-  pltrue(a, b, x)
err  <-  0
good  <- 0

for (i in 1:replications) {
    y  <- rbinom(length(x), 1, p)
    res  <-  try(glm(y~x, family=binomial), silent=TRUE)
    if (inherits(res,"try-error")) err <-  err+1 else{ good <- good+1
                                                     GOOD[i] <- 1 }
    # Using stats::glm
    mod  <-  stats::glm(y~x, family=binomial)
    COEFS[i, ]  <-  coef(mod)
    # Using elrm:
    DATASET  <-  data.frame(x=x, y=y, n=1)
    mod.elrm  <-  elrm(y/n ~ x,  interest= ~ x -1, r=4, iter=10000, burnIn=1000,
                       dataset=DATASET)
    COEFS.elrm[i, 2 ]  <-  mod.erlm$coeffs       
}
### Now we can compare coefficient estimates of x,
###  when there are separation,  and when not:

non  <-  which(GOOD==1)
cof.mle.non  <-  COEFS[non, 2, drop=TRUE]
cof.mle.sep  <-  COEFS[-non, 2, drop=TRUE]
cof.elrm.non  <-  COEFS.elrm[non, 2, drop=TRUE]
cof.elrm.sep  <-  COEFS.elrm[-non, 2, drop=TRUE]

結果をプロットしたいのですが、その前に、すべての条件付き推定値が等しいことに注意してください!それは本当に奇妙で、説明が必要です...一般的な値は0.9523975です。しかし、少なくとも、真の値を含む信頼区間を使用して、有限の推定値を取得しました(ここには示されていません)。したがって、分離のない場合のmle推定値のヒストグラムのみを表示します。

hist(cof.mle.non, prob=TRUE)

[シミュレートされたパラメーター推定値のヒストグラム[1]

注目すべきは、すべての推定値が真の値1.5よりも小さいことです。これは、修正モデルからシミュレートしたという事実と関係がある可能性があり、調査が必要です。



1
(+1)しかし、最尤法以外の推定手順が必要だと言うのはかなり強力です。無限オッズとオッズ比は、賢明なポイント推定値です。多くの場合、分離によって引き起こされる問題は、適切な間隔の推定値を取得するだけです。
Scortchi -復活モニカ

@kjetilbhalvorsen古いスレッドを復活させることをおologiesびしますが、Pythonで同様のパッケージを知っているかどうか疑問に思っていましたか?
MEEP

申し訳ありませんが、Pythonについては知りません。しかし、Python内からRを実行することは可能です。
kjetil b halvorsen

25

@ sean501と@kjetilbhalvorsenから良い回答があります。あなたは例を求めました。以下の図を検討してください。データ生成プロセスがパネルAに示されているプロセスのような状況に遭遇する場合があります。その場合、実際に収集するデータがパネルBのデータのようになる可能性は十分にあります。現在、データを使用して統計モデルを構築するときの考え方は、真のデータ生成プロセスを回復すること、または少なくともかなり近い近似値を見つけることです。したがって、問題は、Bのデータにロジスティック回帰を当てはめると、Aの青い線を近似するモデルが得られるということですか?パネルCを見ると、グレーの線は実際の関数よりもデータに近いことがわかります。そのため、最適な値を求める際に、ロジスティック回帰は青い線ではなくグレーの線を返すことを「優先」します。ただし、これで終わりではありません。パネルDを見る、黒い線は灰色の線よりもデータをよく近似しています。実際、起こり得る可能性があるのは最適です。それがロジスティック回帰モデルが追求している線です。これは、負の無限大の切片と無限大の勾配に対応します。それは、もちろん、あなたが回復したいと思っているという真実とはかけ離れています。完全な分離は、ロジスティック回帰出力に標準装備されている変数のp値の計算に問題を引き起こす可能性もあります(説明は若干異なり、より複雑です)。さらに、ここで適合を他の試み、たとえばメタ分析と組み合わせようとすると、他の発見の正確さが低下します。

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


1
(+1)これは問題の非常に役立つ説明です。
mkt-モニカの復活

ダイアグラムが示す興味深い側面の1つは、50〜50の確率(12 <x <15の範囲のポイントなど)につながる「xスペース」からサンプルを取得することが理想的であることです。実際、この結果が得られた実際のシナリオでは、おそらくこの中間領域(10 <x <17)からより多くのデータを収集する必要があると思います。
確率は

@probabilityislogic、そうです。関係に関する情報のほとんどは、中間領域のデータにあります。
gung-モニカの復職

10

これは、一方の面にすべての正の点があり、他方の面にすべての負の点があるような超平面があることを意味します。最尤解は、一方がフラット1で他方がフラット0です。これは、係数を無限大にすることでロジスティック関数で「達成」されます。


6

「分離」(「分離」ではない)と呼ばれるものは、同じ問題を引き起こす2つの異なる状況をカバーします。しかし、私はあなたと同じように「不安定」の問題とは呼びません。

イラスト:タイタニック号のサバイバル

  • DV01SV

    SVDV01

  • SVDV

    タイタニック号のすべてのファーストクラスの乗客が残骸を生き延び、セカンドクラスの乗客が誰も生き残らなかった場合は、そうなります。

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

これらのケースでロジスティック回帰が「不安定」なのはなぜですか?

これはRainey 2016Zorn 2005でよく説明されています。

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

どちらの場合も、モデルの尤度関数は最尤推定値を見つけることができません。漸近的にアプローチすることでその値の近似値を見つけるだけです。

「不安定性」呼んでいるのは、完全な分離または準完全な分離の場合、ロジスティックモデルが到達する可能性が有限であることです。ただし、この用語は使用しません。実際、尤度関数は、無限に向かう係数値の割り当てにおいてかなり「安定」(単調)です。


注:私の例は架空のものです。タイタニック号でのサバイバルは、乗客クラスのメンバーシップだけにとどまりませんでした。Hall(1986)を参照してください。

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