CrossValidatedには、King and Zeng(2001)によるまれなイベントバイアス修正をいつ、どのように適用するかに関するいくつかの質問があります。私は別の何かを探しています。バイアスが存在するという最小限のシミュレーションベースのデモンストレーションです。
特に、王とZenの状態
「...まれなイベントデータでは、確率のバイアスはサンプルサイズが数千単位で実質的に意味があり、予測可能な方向にあります。推定イベント確率は小さすぎます。」
Rのこのようなバイアスをシミュレートする私の試みは次のとおりです。
# FUNCTIONS
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept-only model.
# If p is not constant, assume its smallest value is p[1]:
glm(y ~ p, family = 'binomial')$fitted[1]
}
mean.of.K.estimates = function(p, K){
mean(replicate(K, do.one.sim(p) ))
}
# MONTE CARLO
N = 100
p = rep(0.01, N)
reps = 100
# The following line may take about 30 seconds
sim = replicate(reps, mean.of.K.estimates(p, K=100))
# Z-score:
abs(p[1]-mean(sim))/(sd(sim)/sqrt(reps))
# Distribution of average probability estimates:
hist(sim)
これを実行すると、非常に小さいZスコアが得られる傾向があり、推定値のヒストグラムは真理p = 0.01の中央に非常に近くなります。
私は何が欠けていますか?私のシミュレーションは、真の(そして明らかに非常に小さい)バイアスを示すのに十分な大きさではないのですか?バイアスには、ある種の共変量(切片以上)を含める必要がありますか?
更新1: KingとZengには、論文の式12にのバイアスの大まかな近似が含まれています。注目する分母に、私は劇的に減少すると、シミュレーションを再実行しましたが、それでも推定イベント確率の偏りは明らかではありません。(これはインスピレーションとしてのみ使用しました。上記の質問は推定イベント確率に関するものであり、ではないことに注意してください。)β 0N
N
5
更新2:コメントの提案に従って、回帰に独立変数を含めて、同等の結果を導きました。
p.small = 0.01
p.large = 0.2
p = c(rep(p.small, round(N/2) ), rep(p.large, N- round(N/2) ) )
sim = replicate(reps, mean.of.K.estimates(p, K=100))
説明:私はp
それ自身を独立変数として使用しました。ここp
で、小さな値(0.01)と大きな値(0.2)の繰り返しを持つベクトルです。最終sim
的に、対応する推定確率のみを保存し、バイアスの兆候はありません。
更新3(2016年5月5日): これは結果を顕著に変更しませんが、新しい内部シミュレーション関数は
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
if(sum(y) == 0){ # then the glm MLE = minus infinity to get p = 0
return(0)
}else{
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept only model.
# If p is not constant, assume its smallest value is p[1]:
return(glm(y ~ p, family = 'binomial')$fitted[1])
}
}
説明:yがゼロの場合のMLEは存在しません(ここでの注意事項のコメントのおかげです)。Rは、その「正の収束許容値」が実際に満たされるため、警告をスローできません。もっと自由に言えば、MLEは存在し、対応するマイナス無限大です。したがって、私の機能が更新されます。私が考えることができる他の唯一の首尾一貫したことは、yがまったくゼロであるシミュレーションの実行を破棄することです。