在R語言代寫中進行缺失值填充:估算缺失值


原文鏈接:http://tecdat.cn/?p=8287

 

介紹

缺失值被認為是預測建模的首要障礙。因此,掌握克服這些問題的方法很重要。

估算缺失值的方法的選擇在很大程度上影響了模型的預測能力。在大多數統計分析方法中,按列表刪除是用於估算缺失值的默認方法。但是,它不那么好,因為它會導致信息丟失。

您是否知道R具有用於遺漏價值估算的可靠軟件包?

 

在本文中,我列出了5個R語言方法。

 

 

鏈式方程進行的多元插補

通過鏈式方程進行的多元插補是R用戶常用的。與單個插補(例如均值)相比,創建多個插補可解決缺失值的不確定性。

MICE假定丟失數據是隨機(MAR)丟失,這意味着,一個值丟失概率上觀測值僅取決於並且可以使用它們來預測。通過為每個變量指定插補模型,可以按變量插補數據。

例如:假設我們有X1,X2….Xk變量。如果X1缺少值,那么它將在其他變量X2到Xk上回歸。然后,將X1中的缺失值替換為獲得的預測值。同樣,如果X2缺少值,則X1,X3至Xk變量將在預測模型中用作自變量。稍后,缺失值將被替換為預測值。

默認情況下,線性回歸用於預測連續缺失值。Logistic回歸用於分類缺失值。一旦完成此循環,就會生成多個數據集。這些數據集僅在估算的缺失值上有所不同。通常,將這些數據集分別構建模型並組合其結果被認為是一個好習慣。

確切地說,此軟件包使用的方法是:

  1. PMM(預測均值匹配)–用於數字變量
  2. logreg(邏輯回歸)–對於二進制變量(具有2個級別)
  3. polyreg(貝葉斯多元回歸)–用於因子變量(> = 2級)
  4. 比例賠率模型(有序,> = 2個級別)

現在讓我們實際了解它。

> path <- "../Data/Tutorial"
> setwd(path)

#load data
> data <- iris

#Get summary
> summary(iris)

#Generate 10% missing values at Random 
> iris.mis <- prodNA(iris, noNA = 0.1)

#Check missing values introduced in the data
> summary(iris.mis)

 

我刪除了分類變量。讓我們在這里關注連續值。要處理分類變量,只需對級別進行編碼並按照以下步驟進行即可。

#刪除類別變量
> iris.mis <- subset(iris.mis, select = -c(Species))
> summary(iris.mis)

 

 md.pattern()的功能它返回數據集中每個變量中存在的缺失值的表格形式。

> md.pattern(iris.mis)

 

讓我們了解一下這張表。有98個觀測值,沒有缺失值。Sepal.Length中有10個觀測值缺失的觀測值。同樣,Sepal.Width等還有13個缺失值。

 我們還可以創建代表缺失值的視覺效果。 

 

> mice_plot <- aggr(iris.mis, col=c('navyblue','yellow'),
                    numbers=TRUE, sortVars=TRUE,
                    labels=names(iris.mis), cex.axis=.7,
                    gap=3, ylab=c("Missing data","Pattern"))

 

讓我們快速了解這一點。數據集中有67%的值,沒有缺失值。在Petal.Length中缺少10%的值,在Petal.Width中缺少8%的值,依此類推。您還可以查看直方圖,該直方圖清楚地描述了變量中缺失值的影響。

現在,讓我們估算缺失的值。

 
> summary(imputed_Data)

Multiply imputed data set
Call:
 Number of multiple imputations: 5
Missing cells per column:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
13            14          16           15 
Imputation methods:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
"pmm"        "pmm"        "pmm"       "pmm" 
VisitSequence:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
1              2            3           4 
PredictorMatrix:
              Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length        0          1            1            1
Sepal.Width         1          0            1            1
Petal.Length        1          1            0            1
Petal.Width         1          1            1            0
Random generator seed value: 500

這是使用的參數的說明:

  1. m – 估算數據集
  2. maxit – 插補缺失值的迭代次數
  3. method –是指插補中使用的方法。我們使用了預測均值匹配。

由於有5個估算數據集,因此可以使用complete()函數選擇任何數據集。

 還可以合並來自這些模型的結果,並使用pool()命令獲得合並的輸出。

請注意,我僅出於演示目的使用了上面的命令。您可以在最后替換變量值並嘗試。

 

多重插補

 

該程序包還執行多個插補(生成插補數據集)以處理缺失值。多重插補有助於減少偏差並提高效率。它可以通過基於引導程序的EMB算法啟用,從而可以更快速,更可靠地插入許多變量,包括橫截面,時間序列數據等。此外,還可以使用多核CPU的並行插入功能來啟用它。

它做出以下假設:

  1. 數據集中的所有變量均具有多元正態分布(MVN)。它使用均值和協方差匯總數據。
  2. 丟失的數據本質上是隨機的(隨機丟失)

 

因此,當數據具有多變量正態分布時,此 最有效。如果沒有,將進行轉換以使數據接近常態。

現在讓我們實際了解它。

您唯一需要注意的是對變量進行分類。

 

#access imputed outputs
> amelia_fit$imputations[[1]]
> amelia_fit$imputations[[2]]
> amelia_fit$imputations[[3]]
> amelia_fit$imputations[[4]]
> amelia_fit$imputations[[5]]

要檢查數據集中的特定列,請使用以下命令

> amelia_fit$imputations[[5]]$Sepal.Length

#export the outputs to csv files
> write.amelia(amelia_fit, file.stem = "imputed_data_set")

 

隨機森林

顧名思義,missForest是一個實現隨機森林算法。它適用於各種變量類型的非參數插補法。那么,什么是非參數方法?

非參數方法不會有關於函數形式明確的假設˚F 。取而代之的是,它嘗試估計f,使其可以與數據點盡可能接近,而似乎並不切實際。

它是如何工作的 ?簡而言之,它為每個變量建立一個隨機森林模型。然后,它使用模型在觀測值的幫助下預測變量中的缺失值。

它產生OOB(袋外)估算誤差估計。而且,它對插補過程提供了高水平的控制。它有選擇分別返回OOB(每個變量),而不是聚集在整個數據矩陣。這有助於更仔細地為每個變量如何准確的模型估算值。

NRMSE是歸一化的均方誤差。它用於表示從估算連續值得出的誤差。PFC(錯誤分類的比例)用於表示從估算類別值得出的錯誤。

#comparing actual data accuracy
> iris.err <- mixError(iris.imp$ximp, iris.mis, iris)
>iris.err

NRMSE      PFC 
0.1535103 0.0625000

這表明類別變量的誤差為6%,連續變量的誤差為15%。這可以通過調整mtryntree參數的值來改善  。mtry是指在每個分割中隨機采樣的變量數。ntree是指在森林中生長的樹木數量。

 

非參數回歸方法

 

 對多個插補中的每個插補使用不同的引導程序重采樣。然后,將 加性模型(非參數回歸方法)擬合到從原始數據中進行替換得到的樣本上,並使用非缺失值(獨立變量)預測缺失值(充當獨立變量)。

然后,它使用預測均值匹配(默認)來插補缺失值。預測均值匹配非常適合連續和分類(二進制和多級),而無需計算殘差和最大似然擬合。

 、

argImpute()自動識別變量類型並對其進行相應處理。

> impute_arg

 

輸出顯示R²值作為預測的缺失值。該值越高,預測的值越好。您還可以使用以下命令檢查估算值

#check imputed variable Sepal.Length
> impute_arg$imputed$Sepal.Length

 

帶有診斷的多重插補

 帶有診斷的多重插補 提供了一些用於處理缺失值的功能。 它也構建了多個插補模型來近似缺失值。並且,使用預測均值匹配方法。

雖然,我已經在上面解釋了預測均值匹配(pmm)  :對於變量中缺失值的每個觀察值,我們都會從可用值中找到最接近的觀察值該變量的預測均值。然后將來自“匹配”的觀察值用作推定值。

 

  1. 它可以對插補模型進行圖形診斷,並可以實現插補過程的收斂。
  2. 它使用貝葉斯版本的回歸模型來處理分離問題。
  3. 插補模型規范類似於R中的回歸輸出
  4. 它會自動檢測數據中的不規則性,例如變量之間的高共線性。
  5. 而且,它在歸算過程中增加了噪聲,以解決加性約束的問題。

 

 

 

 如圖所示,它使用匯總統計信息來定義估算值。

 

尾注

 

在本文中,我說明使用5個方法進行缺失值估算。這種方法可以幫助您在建立預測模型時獲得更高的准確性。

 

 

如果您有任何疑問,請在下面發表評論。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM