条件付き分布からのサンプリング
モデルに対して単純に predict() を呼び出すと、予測変数の値が同じであれば常に同じ結果が返されます。そのため、補完データのばらつきが小さくなってしまいます。元データのばらつきを再現するためには、条件付き分布からサンプリングする方法が有効です。つまり、モデルが0.5以上の確率を出力したときに常に1と予測するのではなく、モデルが返す確率を用いた二項分布からサンプリングして予測値を求めます。
前の演習で作成したコードを引き続き使用します。以下の行は削除されています。
preds <- ifelse(preds >= 0.5, 1, 0)
この部分を、二項分布からのサンプリングに置き換えましょう。コード1行で実現できます。
この演習はコースの一部です
R による欠損データの補完処理
演習の手順
- 二項分布からサンプリングして
predsを上書きしましょう。 - 第1引数に
predsの長さを渡してください。 sizeを1に設定してください。probにはモデルが返す確率を設定してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
impute_logreg <- function(df, formula) {
# Extract name of response variable
imp_var <- as.character(formula[2])
# Save locations where the response is missing
missing_imp_var <- is.na(df[imp_var])
# Fit logistic regression mode
logreg_model <- glm(formula, data = df, family = binomial)
# Predict the response
preds <- predict(logreg_model, type = "response")
# Sample the predictions from binomial distribution
preds <- ___(___, size = ___, prob = ___)
# Impute missing values with predictions
df[missing_imp_var, imp_var] <- preds[missing_imp_var]
return(df)
}