私は、単純な確率が私の問題で機能するかどうか、またはロジスティック回帰などのより洗練された方法を使用(および学習)する方が良いかどうかを判断しようとしています。
この問題の応答変数はバイナリ応答(0、1)です。私はすべてカテゴリカルで順序付けされていない多数の予測変数を持っています。私は、予測変数のどの組み合わせが1の割合が最も高いかを判断しようとしています。ロジスティック回帰は必要ですか?カテゴリカル予測子の各組み合わせについて、サンプルセットの比率を計算するだけの利点は何ですか?
私は、単純な確率が私の問題で機能するかどうか、またはロジスティック回帰などのより洗練された方法を使用(および学習)する方が良いかどうかを判断しようとしています。
この問題の応答変数はバイナリ応答(0、1)です。私はすべてカテゴリカルで順序付けされていない多数の予測変数を持っています。私は、予測変数のどの組み合わせが1の割合が最も高いかを判断しようとしています。ロジスティック回帰は必要ですか?カテゴリカル予測子の各組み合わせについて、サンプルセットの比率を計算するだけの利点は何ですか?
回答:
ロジスティック回帰は、数値の不正確さまで、表形式のパーセンテージとまったく同じ近似を与えます。 したがって、独立変数が因子オブジェクトfactor1
などであり、従属結果(0および1)がx
である場合、次のような式で効果を得ることができます。
aggregate(x, list(factor1, <etc>), FUN=mean)
これと比較して
glm(x ~ factor1 * <etc>, family=binomial(link="logit"))
例として、ランダムデータを生成してみましょう。
set.seed(17)
n <- 1000
x <- sample(c(0,1), n, replace=TRUE)
factor1 <- as.factor(floor(2*runif(n)))
factor2 <- as.factor(floor(3*runif(n)))
factor3 <- as.factor(floor(4*runif(n)))
要約は、
aggregate.results <- aggregate(x, list(factor1, factor2, factor3), FUN=mean)
aggregate.results
その出力には
Group.1 Group.2 Group.3 x
1 0 0 0 0.5128205
2 1 0 0 0.4210526
3 0 1 0 0.5454545
4 1 1 0 0.6071429
5 0 2 0 0.4736842
6 1 2 0 0.5000000
...
24 1 2 3 0.5227273
将来の参考のために、出力の行6のレベル(1,2,0)の因子の推定値は0.5です。
ロジスティック回帰は、この方法で係数を放棄します。
model <- glm(x ~ factor1 * factor2 * factor3, family=binomial(link="logit"))
b <- model$coefficients
それらを使用するには、ロジスティック関数が必要です。
logistic <- function(x) 1 / (1 + exp(-x))
たとえば、レベル(1,2,0)の因子の推定値を取得するには、次を計算します。
logistic (b["(Intercept)"] + b["factor11"] + b["factor22"] + b["factor11:factor22"])
(すべての相互作用をモデルに含める方法と、関連するすべての係数を適用して正しい推定値を取得する必要があることに注意してください。)出力は
(Intercept)
0.5
の結果に同意するaggregate
。(出力の「(切片)」の見出しは入力の痕跡であり、この計算では事実上無意味です。)
同じ情報がさらに別の形式での出力に表示されますtable
。たとえば、(長い)出力
table(x, factor1, factor2, factor3)
このパネルが含まれています:
, , factor2 = 2, factor3 = 0
factor1
x 0 1
0 20 21
1 18 21
列factor1
ことを3つのレベルでの要素(1,2,0)やショーへ= 1に相当するの値に等しい我々が読み出したものと一致する、と。1x
aggregate
glm
最後に、データセットで最高の比率をもたらす要因の組み合わせは、次の出力から簡単に取得できますaggregate
。
> aggregate.results[which.max(aggregate.results$x),]
Group.1 Group.2 Group.3 x
4 1 1 0 0.6071429
以下のために迅速なバイナリ各カテゴリ内の応答および/または複数のカテゴリを条件との割合を一瞥、グラフィカルなプロットは、サービスのものとすることができます。特に、多くのカテゴリカル独立変数で条件付けされた比率を同時に視覚化するには、モザイクプロットをお勧めします。
以下は、ブログの投稿、「エリアベースのプロットの理解:統計グラフィックスおよびその他のブログからのモザイクプロット」の例です。この例では、タイタニック号の生存者の割合を乗客のクラスに応じて青色で視覚化しています。各サブグループ内の乗客の総数を確認しながら、生存者の割合を同時に評価することもできます(特に、特定のサブグループの数がまばらで、ランダムな変動が予想される場合に役立つ情報です)。
(ソース:theusrus.de)
その後、複数のカテゴリ別独立変数を条件として、後続のモザイクプロットを作成できます。簡単な視覚的要約での同じブログ投稿の次の例は、ファーストクラスとセカンドクラスのすべての子供の乗客が生き残ったのに対し、サードクラスの子供はほとんど満足できなかったことを示しています。また、クラス間の女性生存者の割合は第1クラスから第2クラスから第3クラスにかなり減少した(そして、乗組員の場合も比較的高かったが)ここでも、バーの幅が狭いため、女性の乗組員は多くないことに注意してください)。
(ソース:theusrus.de)
表示される情報の量は驚くべきことです。これは4つの次元(クラス、成人/子供、性別、生存者の割合)の比率です。
予測や一般的な因果関係の説明に興味がある場合は、より正式なモデリングに移行することに同意します。グラフィカルプロットは、データの性質に関しては非常に迅速な視覚的な手がかりになる可能性があり、単に回帰モデルを推定する場合(特に、異なるカテゴリ変数間の相互作用を検討する場合)に見逃されがちな他の洞察を提供できます。
Nb
表していますか?私はいつも数字でもよく言っています!
必要に応じて、再帰的パーティショニングが結果変数を予測するための解釈しやすい方法を提供することに気付くかもしれません。以下のためにRのこれらのメソッドの概要、クイック-Rの参照ツリーベースモデルのページを。ctree()
剪定について心配する必要がなく、デフォルトでかなりのグラフィックスを生成するので、私は一般にRの `パーティパッケージでの実装を支持します。
これは、前の回答で提案された特徴選択アルゴリズムのカテゴリに分類され、一般に、ロジスティック回帰と同じくらい良い予測を提供します。
あなたは特徴選択アルゴリズムを見るべきです。あなたのケース(バイナリ分類、カテゴリ変数)に適したものは、「最小冗長性最大関連性」(mRMR)メソッドです。http://penglab.janelia.org/proj/mRMR/からオンラインですぐに試すことができます。
response,predictor1,predictor2,predictor3 <line break here> 1,5,4,3 <line break here> 0,5,3,-1 <line break here> 1,1,2,3
私は、クレジットスコアリングの分野で働いています。ここでは、奇妙なケースとして提示されているのが標準です。
ロジスティック回帰を使用し、カテゴリー変数と連続変数の両方を証拠の重み(WOE)に変換します。これらは、回帰の予測子として使用されます。多くの時間は、カテゴリー変数をグループ化し、連続変数を離散化(ビニング/分類)することに費やされます。
証拠の重みは単純な計算です。これは、クラスのオッズの対数から、母集団のオッズの対数を差し引いたものです
。WOE= ln(Good(Class)/ Bad(Class))-ln(Good(ALL)/ Bad(ALL))これは、ロジスティック回帰を使用して構築されたほぼすべてのクレジットスコアリングモデルの標準的な変換方法。同じ数値を区分的アプローチで使用できます。
それのすばらしいところは、各WOEに割り当てられている係数が意味を成しているかどうかを常に知っていることです。負の係数はデータ内のパターンに反しており、通常は多重共線性から生じます。1.0を超える係数は、過剰補償を示します。ほとんどの係数は、0と1の間のどこかで出てきます。