始める無料で始める

条件付き分布からのサンプリング

モデルに対して単純に 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)
}
コードを編集して実行