---
# System prepended metadata

title: 5.3 Estimation of Missing Values
tags: [ML]

---

# 5.3 Estimation of Missing Values

## imputation

經常我們會發現 observations 中，某些特定 variables 的值可能不見了。理想上我們就直接把這些 observations 棄之不用，但是通常我們沒有夠大的 samples 讓我們能這麼做，況且我們也不想浪費那些還有保留著 data 的 entries，因為這些 entries 仍然可以提供我們一些 information。

因此，我們要用的方式就是試著++去估計那些不見的值，然後把這些有空缺的 entries 補上++，這樣的做法就叫做 <font color = "snake">imputation</font>。

舉例來說，在下圖中 feature A 有兩筆 data 不見了，因此右邊我們分別用三種方式來估計這兩筆 data 的值：

![image](https://hackmd.io/_uploads/SJKbdc2O0.png)

### mean imputation

對於一個 numeric variable，<font color = 'snake'>mean imputation</font> 就是去計算 sample 裡其他 available data 的 mean 再填入 missing entries。如果是 discrete variable，我們就填入其他 available data 中最常出現的值。
> 為什麼如果 variable discrete 要把 mean imputation 訂成這樣是因為，假設某個 feature 的 observed value 只有 $0/1$，那我們去取 mean 可能會算出 $0.6$ 之類的數字，但是這個值根本不屬於 sample space。

從上圖例子中的 imputation by mean，我們可以看到空缺的兩個紅色格子，填入的是其他幾筆 data 的 mean：

\begin{equation}
\frac{1+5+1+6+4+3+2}{7} \approx 3.14
\end{equation}


### imputation by regression

#### 一個 variable 有 value missing

另一種 estimate missing entries 的方式叫做 <font color = 'snake'>imputation by regression (regression imputation)</font>，假設我們有多個 variables，其中一個 varaible 當中有 value missing，那我們就試著透過其他 varaibles 的已知 value 來 predict 這個 missing variable 的 value。

做法首先是根據 missing variable 的 type，額外定義一個 regression 或 classification problem，我們以 regression 為例，regression imputation 的過程如下：

![image](https://hackmd.io/_uploads/rywrg62uR.png)

上圖中我們定出 equation：

\begin{equation}
Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \epsilon
\end{equation}

代表著我們假設 varaible $Y$ 可以由 $X_1, X_2$ 的值來被估計，但是這樣的做法是建立在這些 variables ++highly correlated++ 的情況下。

:::warning
如果這些 variables 並非 highly correlated，則這樣的 regression approach (regression imputation) 就等同於 mean imputation。
:::

為什麼呢？

例子與說明如下圖：

![image](https://hackmd.io/_uploads/r1fJU6hdC.png)

#### 多個 variables 有 value missing

前面我們是假設只有一個 variable 具 missing value 的情形，但是如果我們有多個 variables 都有 value missing 呢？

我們的做法是：

1. 首先我們先用 mean imputation 的方式，各自計算有 missing value 的 variables 的 observed data 的 mean，再各自填入空缺。

2. 接著對每個具 missing value 的 variable，用其他的 variables （這些其他的 variables 現在不見的部分也都已經被 mean 補上了）來 predict，然後 update missing values。

$\rightarrow$ 我們對每個 missing variable 重複這個 process。

3. 最後，我們就不斷 iterate 這個過程，一直到 predicted values stabilize。
> 課本並沒有說到底怎麼樣才算已經 "stabilize"，我在參考資料附上的相關文章寫說要 iterate 直到 "approximate convergence"，但看 code 似乎是訂一個 iterate 次數限制。
> 
> 未來如果有用到，有相關內容和例子會再補上。

用講的去描述步驟可能沒那麼清楚，我們用一些符號表示，再稍微說明：

假設我們的 variables with missingness 為 $Y_1,Y_2,...,Y_K$，它們構成一個 matrix $Y$：

\begin{equation}
Y = 
\begin{bmatrix}
Y_1 & Y_2 & ... & Y_K
\end{bmatrix}
\end{equation}

而 fully observed （沒有 value missing）的 variables 令為 $X$。

我們首先用某種方式 impute $Y$ 中的 missing values，這個方式可以用像上面提到的取 observed value 的 mean，或是也有一些其他的方法，像直接從 observed values 中 randomly 選一個。

接著：

- impute $Y_1$ $\Rightarrow$ 利用 $X$ 和 $Y_2,...,Y_K$ 
- inpute $Y_2$ $\Rightarrow$ 利用 $X$ 和 $Y_1,Y_3, ...,Y_K$ 

不斷 impute 直到 impute 完 $Y_K$，接著再進入下個 iteration。

Iterative regression imputation 的好處是，相較於去對所有的 variables 產生一個整體的 full multivariate model，對每個 $Y_i$ 個別定義一個 separate regression model 比較容易理解，也比較能夠在每個步驟去 fit 到適合的 model。

但是缺點是我們需要小心地去確保個別的 separate regression model 彼此之間是 consistent 的。
> 舉例來說，假設我們先用 income 去 impute age，在後面我們如果要去 impute income 時，如果沒有把 age 考慮進去就不合理。

除此之外，這樣的做法所產生的結果，一般來說也不會跟這些 variables 的 joint probabilty model 對應。

---

課本對這個小節的內容也講得不多，最後用數學符號表示的部分出自參考資料的文章，有興趣可以參考。

那我們就簡短的結束在這裡。

# 參考資料
- [Missing data imputation](http://www.stat.columbia.edu/~gelman/arm/missing.pdf), p.539-540
