収束の検出
前の演習で変数のループ処理がうまくできましたね。では、何回繰り返せば十分なのでしょうか?補完された値が新しい繰り返しで変化しなくなったら、処理を止めることができます。
ここでは、コードを拡張して、繰り返しごとに補完済み変数の差分を計算できるようにしましょう。そのために、以下のように定義された平均絶対パーセント変化(Mean Absolute Percentage Change)関数を使います。
mapc <- function(a, b) {
mean(abs(b - a) / a, na.rm = TRUE)
}
mapc() は、b が a からどれだけ変化したかを1つの数値で返します。この関数を使って、繰り返しをまたいで補完済み変数がどれくらい変化するかを確認します。その結果をもとに、必要な繰り返し回数を決めましょう。
ブールマスク missing_air_temp と missing_humidity、およびホットデック法で初期化された tao_imp データはあらかじめ用意されています。
この演習はコースの一部です
R による欠損データの補完処理
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
diff_air_temp <- ___
diff_humidity <- ___
for (i in 1:5) {
# Assign the outcome of the previous iteration (or initialization) to prev_iter
prev_iter <- ___
# Impute air_temp and humidity at originally missing locations
tao_imp$air_temp[missing_air_temp] <- NA
tao_imp <- impute_lm(tao_imp, air_temp ~ year + latitude + sea_surface_temp + humidity)
tao_imp$humidity[missing_humidity] <- NA
tao_imp <- impute_lm(tao_imp, humidity ~ year + latitude + sea_surface_temp + air_temp)
}