ロジスティック回帰による補完
二値変数を補完する方法として、ロジスティック回帰がよく使われます。残念ながら、impute_lm() のような便利な関数は存在しないため、自分で作成する必要があります。
関数名は impute_logreg() とします。第1引数はデータフレーム df で、欠損値が初期化済みであり、補完対象の列にのみ欠損値が含まれているものとします。第2引数は、ロジスティック回帰モデルに使用する formula(式)です。
この関数は以下の処理を行います。
- 欠損値の位置を記録する。
- モデルを構築する。
- 予測を行う。
- 欠損値を予測値で置き換える。
imp_var を作成している行については気にしないでください。これは、式から補完対象の列名を取り出すための処理です。関数型プログラミングを活用していきましょう。
この演習はコースの一部です
R による欠損データの補完処理
演習の手順
df[imp_var]が欠損しているかどうかを示すブールマスクを作成し、missing_imp_varに代入してください。- 関数の引数として渡される式とデータを使ってロジスティック回帰モデルを当てはめてください。その際、ロジスティック回帰が適用されるよう正しい
familyを設定します(クォーテーションなしで渡すこと)。モデルをlogreg_modelに代入してください。 - モデルを使って応答変数を予測し、
predsに代入してください。適切な予測typeを設定することを忘れずに。 predsとmissing_imp_varを使って、欠損値を補完してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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 <- ___
# Fit logistic regression mode
logreg_model <- ___(___, data = ___, family = ___)
# Predict the response and convert it to 0s and 1s
preds <- predict(___, type = ___)
preds <- ifelse(preds >= 0.5, 1, 0)
# Impute missing values with predictions
df[missing_imp_var, imp_var] <-___[___]
return(df)
}