初始化遺漏值與在變數間反覆迭代
如同你剛看到的,執行 impute_lm() 可能不會填補所有遺漏值。為了確保全部補齊,你應先用簡單的方法初始化遺漏值,例如你在前一章學到的 hot-deck 插補,它會把最後一次觀測到的值往後遞推。
此外,單次插補通常不夠。它是以基礎的初始化值為依據,可能產生偏誤。較合適的做法是對各個變數逐一迭代,只在原本遺漏的位置進行插補。
在本練習中,你會先用 hot-deck 插補初始化遺漏值,接著針對 tao 資料裡的 air_temp 與 humidity 進行 5 次迴圈,以線性迴歸來插補它們。開始吧!
本練習屬於課程
在 R 中以插補處理遺漏值
練習說明
- 使用
hotdeck()插補來初始化遺漏值。 - 建立
humidity原本遺漏位置的布林遮罩,並指定給missing_humidity。 - 在 for 迴圈內,利用你建立的布林遮罩,將
tao_imp中對應位置的humidity設為NA(僅在其原本遺漏的地方)。 - 在 for 迴圈內,使用線性迴歸為
tao_imp的humidity進行插補,並以year、latitude、sea_surface_temp與air_temp作為預測變數,將結果重新指定回tao_imp。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Initialize missing values with hot-deck
tao_imp <- ___(tao)
# Create boolean masks for where air_temp and humidity are missing
missing_air_temp <- tao_imp$air_temp_imp
missing_humidity <- ___
for (i in 1:5) {
# Set air_temp to NA in places where it was originally missing and re-impute it
tao_imp$air_temp[missing_air_temp] <- NA
tao_imp <- impute_lm(tao_imp, air_temp ~ year + latitude + sea_surface_temp + humidity)
# Set humidity to NA in places where it was originally missing and re-impute it
tao_imp$humidity[___] <- ___
tao_imp <- ___(___, ___ ~ year + latitude + sea_surface_temp + ___)
}