r語言插補法 R語言 缺失值處理之多重插補

2021-10-13 14:36:03 字數 2476 閱讀 1432

筆者寄語:缺失值是資料清洗過程中非常重要的問題(其他方法可見:r語言︱異常值檢驗、離群點分析、異常值處理),筆者在進行mice包的多重插補過程中遇到相當多的問題。

大致的步驟簡介如下:

缺失資料集——mcmc估計插補成幾個資料集——每個資料集進行插補建模(glm、lm模型)——將這些模型整合到一起(pool)——評價插補模型優劣(模型係數的t統計量)——輸出完整資料集(compute)

步驟詳細介紹:

函式mice()首先從乙個包含缺失資料的資料框開始,然後返回乙個包含多個(預設為5個)完整資料集的物件。

每個完整資料集都是通過對原始資料框中的缺失資料進行插補而生成的。 由於插補有隨機的成分,因此每個完整資料集都略有不同。

然後, with()函式可依次對每個完整資料集應用統計模型(如線性模型或廣義線性模型) ,

最後, pool()函式將這些單獨的分析結果集成為一組結果。最終模型的標準誤和p值都將準確地反映出由於缺失值和多重插補而產生的不確定性。

#多重插補法處理缺失,結果轉存

library(lattice) #調入函式包

library(mass)

library(nnet)

library(mice) #前三個包是mice的基礎

imp=mice(inputfile,m=4) #4重插補,即生成4個無缺失資料集

fit=with(imp,lm(sales~date,data=inputfile))#選擇插補模型

pooled=pool(fit)

summary(pooled)

result4=complete(imp,action=3)#選擇第三個插補資料集作為結果

結果解讀:

(1)imp物件中,包含了:每個變數缺失值個數資訊、每個變數插補方式(pmm,**均值法常見)、插補的變數有哪些、**變數矩陣(在矩陣中,行代表插補變數,列代表為插補提供資訊的變數, 1和0分別表示使用和未使用);

同時  利用這個**imp$imp$sales  可以找到,每個插補資料集缺失值位置的資料補齊具體數值是啥。

> imp$imp$sales

1      2      3      4

9  3614.7 3393.1 4060.3 3393.1

15 2332.1 3614.7 3295.5 3614.7

(2)with物件。插補模型可以多樣化,比如lm,glm都是可以直接應用進去,詳情可見《r語言實戰》第十五章;

(3)pool物件。summary之後,會出現lm模型係數,可以如果出現係數不顯著,那麼則需要考慮換插補模型;

(4)complete物件。m個完整插補資料集,同時可以利用此函式輸出。

1、缺失值模式——視覺化(md.pattern())

mice包提供了乙個很好的函式md.pattern(),用它可以對缺失資料的模式有個更好的理解。還有一些視覺化的介面,通過vim、箱型圖、lattice來展示缺失值情況。可見部落格:

2、mice函式詳解

mice函式主要引數有mice(資料集,m=5,meth=」pmm「)

m為預設插補資料集數量,5為預設值;meth為預設插補方式,pmm為預設方式**均值匹配。

還有一些其他methods插補方法,比如貝葉斯線性回歸(norm)、基於bootstrap的線性回歸(norm.boot)、線性回歸**值(norm.predict)、分類回歸樹(cart)、隨機森林(rf)等等。(詳情可help(mice)獲取資訊)

使用這些插補方法對資料有嚴格的要求,比如貝葉斯線性回歸等前三個模型都需要資料符合numeric格式,而pmm、cart、rf任意格式都行。

使用以上模型遇見的問題有:

1、pmm相當於某一指標的平均值作為插補,會出現插補值重複的問題;

2、cart以及rf是挑選某指標中最大分類的那個數字,是指標中的某乙個數字,未按照規律;

3、要使用norm.predict,必須先對資料進行格式轉換,這個過程中會出現一些錯誤,比如以下錯誤警告:

error in solve.default(xtx + diag(pen)) :

imputation method norm.boot is not for factors with three or more levels.

3、with-pool函式的作用

在使用mice包的過程中會出現以下的疑惑:

已經有mice函式補齊了缺失值,可以直接用compete直接調出,為啥還要用with,pool?

mice函式中預設插補5個資料集,那麼哪個資料集最好,值得選出?

筆者認為with-pool的作用是用來選擇資料集的。

with函式中有5個插補資料集的回歸模型~資料集t檢驗~某資料集是否合格;

pool函式把5個回歸模型彙總~資料集f檢驗~整個方法是否合格。

當然,乙個未解決的問題是,小資料集可以每個資料集進行觀察,如果要插補很多,該怎麼辦呢?

其中,批量匯入、寫出資料的方法可見:

每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~

r語言插補法 R語言用多重插補法估算相對風險

在這裡,我將用r中的乙個小模擬示例進行說明。首先,我們使用x1和x2雙變數法線和y模擬大型資料集,其中y遵循給定x1和x2的邏輯模型。首先,我們模擬乙個非常大的完整資料集 simulate完整資料 expit function x n 100000 x mvrnorm n,mu c 0,0 sigm...

R語言處理缺失值

在處理資料過程中,避免不了會產生一些缺失值,如未填寫資料或者編碼錯誤等原因,用na表示缺失值。在r語言中,is.na 函式可以判斷元素是否是缺失值,從而返回邏輯值 true false 所以該函式將會返回和元資料集一樣大小的資料集。在判斷缺失值的過程中,需要注意以下兩點 既然缺失值可能無處不在,那麼...

r語言插補法 R語言實現基於多重插補的廣義模型

資料有缺失,是一件令人不愉快的事情。然而,無論是回顧性研究還是前瞻性的研究,都可能難以避免資料缺失。那麼,當你拿到了乙份資料,發現其中有個別或一些缺失,你會如何處理呢?目前,可供選擇的做法大概有以下兩種 1.若缺失較少,且樣本量較大,這時選擇刪除缺失的觀測行,也是無傷根本的 2.若樣本量不大,缺失比...