クラスが十分に分離されているときにロジスティック回帰が不安定になるのはなぜですか?よく分離されたクラスとはどういう意味ですか?誰かが例を使って説明できると本当にありがたいです。
クラスが十分に分離されているときにロジスティック回帰が不安定になるのはなぜですか?よく分離されたクラスとはどういう意味ですか?誰かが例を使って説明できると本当にありがたいです。
回答:
分離があると、ロジスティック回帰自体が不安定になることは正しくありません。分離とは、非常に優れた予測子である変数がいくつかあることを意味します。これは、良いことです。または、分離は、観測値が少なすぎる/変数が多すぎることの結果である可能性があります。その場合、解決策はより多くのデータを取得することです。しかし、分離自体は単なる症状であり、それ自体の問題ではありません。
そのため、実際にはさまざまなケースが扱われます。まず、分析の目的は何ですか?分析の最終結果がケースの何らかの分類である場合、分離はまったく問題ありません。これは、非常に優れた分類を提供する非常に優れた変数があることを意味します。しかし、目標がリスク推定である場合、パラメーター推定が必要であり、分離では通常のmle(最大尤度)推定は存在しません。したがって、おそらく推定方法を変更する必要があります。文献にはいくつかの提案がありますが、私はそれに戻ります。
次に、(上記のように)2つの異なる原因が考えられます。全母集団に分離がある場合や、観察されたケースが少ない/変数が多すぎるために分離が発生する場合があります。
分離に分類されるのは、最尤推定手順です。mleパラメーターの推定値(または少なくともそれらの一部)は無限になります。私はこの回答の最初のバージョンで、おそらくブートストラップで簡単に解決できると言いましたが、少なくとも通常のブートストラップ手順では各ブートストラップリサンプルに分離があるため、機能しません。しかし、ロジスティック回帰は依然として有効なモデルですが、他の推定手順が必要です。提案は次のとおりです。
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.5よりも小さいことです。これは、修正モデルからシミュレートしたという事実と関係がある可能性があり、調査が必要です。
@ sean501と@kjetilbhalvorsenから良い回答があります。あなたは例を求めました。以下の図を検討してください。データ生成プロセスがパネルAに示されているプロセスのような状況に遭遇する場合があります。その場合、実際に収集するデータがパネルBのデータのようになる可能性は十分にあります。現在、データを使用して統計モデルを構築するときの考え方は、真のデータ生成プロセスを回復すること、または少なくともかなり近い近似値を見つけることです。したがって、問題は、Bのデータにロジスティック回帰を当てはめると、Aの青い線を近似するモデルが得られるということですか?パネルCを見ると、グレーの線は実際の関数よりもデータに近いことがわかります。そのため、最適な値を求める際に、ロジスティック回帰は青い線ではなくグレーの線を返すことを「優先」します。ただし、これで終わりではありません。パネルDを見る、黒い線は灰色の線よりもデータをよく近似しています。実際、起こり得る可能性があるのは最適です。それがロジスティック回帰モデルが追求している線です。これは、負の無限大の切片と無限大の勾配に対応します。それは、もちろん、あなたが回復したいと思っているという真実とはかけ離れています。完全な分離は、ロジスティック回帰出力に標準装備されている変数のp値の計算に問題を引き起こす可能性もあります(説明は若干異なり、より複雑です)。さらに、ここで適合を他の試み、たとえばメタ分析と組み合わせようとすると、他の発見の正確さが低下します。
「分離」(「分離」ではない)と呼ばれるものは、同じ問題を引き起こす2つの異なる状況をカバーします。しかし、私はあなたと同じように「不安定」の問題とは呼びません。
タイタニック号のすべてのファーストクラスの乗客が残骸を生き延び、セカンドクラスの乗客が誰も生き残らなかった場合は、そうなります。
これはRainey 2016とZorn 2005でよく説明されています。
どちらの場合も、モデルの尤度関数は最尤推定値を見つけることができません。漸近的にアプローチすることでその値の近似値を見つけるだけです。
「不安定性」と呼んでいるのは、完全な分離または準完全な分離の場合、ロジスティックモデルが到達する可能性が有限であることです。ただし、この用語は使用しません。実際、尤度関数は、無限に向かう係数値の割り当てにおいてかなり「安定」(単調)です。
注:私の例は架空のものです。タイタニック号でのサバイバルは、乗客クラスのメンバーシップだけにとどまりませんでした。Hall(1986)を参照してください。