資料有缺失,是一件令人不愉快的事情。然而,無論是回顧性研究還是前瞻性的研究,都可能難以避免資料缺失。那麼,當你拿到了乙份資料,發現其中有個別或一些缺失,你會如何處理呢?目前,可供選擇的做法大概有以下兩種:1.若缺失較少,且樣本量較大,這時選擇刪除缺失的觀測行,也是無傷根本的;2.若樣本量不大,缺失比例也不是很小(比如5%-10%的缺失),或者無論樣本量有多大,你就是不想刪除這5%-10%的缺失,那麼可以根據資料情況選擇均值/中位數填補、k-mean填補、回歸分析填補、決策樹填補、隨機森林填補和多重插補。上述缺失值補充的方法種的多重插補 (multivariate imputation by chained equations, mice)相比其他方法要更加新穎和可靠,想必大家也都聽說過。關於mice的原理,不是本文的重點,這裡不多做說明;本文的重點是在多重插補後的資料集上進行廣義線性模型、廣義相加模型、廣義估計方程等廣義模型的分析。
在正式進行**演示之前,先簡單介紹一下多重插補及後續分析的主要步驟和本次實踐所用的示例資料。如圖1(參考文獻原圖)所示,第一步:在原資料集的基礎上進行多次填補,形成多個填補後的資料集;第二步:在每個填補後的資料集上均進行一次分析;第三步:將所有的分析結果進行合併,從而得到乙個最終的結果。本次所用資料的情況見表1,是研究h病患者再入院的影響因素,readmission為因變數。
下面開始以**配合注釋的方式,對整個過程進行展示。
####---------- 資料準備階段 ----------####
#### 載入資料
datsep = ",")
view(dat)
#### 將分類變數定義為factor
catvars
dat[catvars]
檢視原資料集各變數的缺失情況,以缺失比例和缺失模式圖進行展示。從圖2可知comorbidity、cd4和age的缺失比例分別為1.319%、1.237%和0.495%。
#### 檢視缺失值
library(vim)
aggr(dat,plot = t, sortvars=t, only.miss=t)
為減小模擬誤差,我們選擇生成50個填補後的資料集(m=50),當然你也可以選擇更多;根據缺失變數的型別,選擇不同的插補方法(defaultmethod):定量變數為「pmm」,二分類變數為「logreg」,多分類變數為「polyreg」;為保持每次復現時填補的資料集一致,特設定了種子數(seed=316)。
#### 缺失值處理
## 多重插補
library(mice)
dat_mice
dat_mice
# 檢視補充的資料
dat_mice$imp$cd4
完成資料缺失值的填補不是資料分析的結束,而是分析的開始,下面開始在插補後的50個資料集上進行回歸分析。首先是使用with函式,一次性完成50個資料集的分析,接著再利用pool函式進行結果合併。在這裡要特別說明一下,之前有朋友來問,可不可以用其中的乙個資料集來作分析。我的回答是,多重插補的亮點之一就是生成多個資料集→利用with函式在每個資料集上均進行分析→用pool函式合併分析結果,如果選擇其中乙個就和多重插補的初衷相悖了。
######---------- 資料分析階段----------######
###### 廣義線性模型 ######
#### 在填補的多個資料集上進行glm
fit_glm
#### 合併結果
glm_pool
#### 輸出結果
summary(glm_pool)
###### 廣義相加模型 ######
library(mgcv)
### 在填補的多個資料集上進行gam
fit_gam
#### 合併結果
gam_pool
#### 輸出結果
summary(gam_pool)
###### 廣義估計方程 ######
#### 載入geepack
library(geepack)
#### 在填補的多個資料集上進行gee
fit_gee
#### 合併結果
gee_pool
#### 輸出結果
summary(gee_pool)
最後,寫乙個自定義函式,用於計算or值及其95%置信區間,並輸出β、s.e和p值。
#### 建立自定義函式
pooltable
table
orlci
ucis.e
plibrary(reshape)
library(tidyr)
table
table
table$k1
table
table
return(table)
## 使用自定義函式
pooltable(gee_pool)
r語言插補法 R語言用多重插補法估算相對風險
在這裡,我將用r中的乙個小模擬示例進行說明。首先,我們使用x1和x2雙變數法線和y模擬大型資料集,其中y遵循給定x1和x2的邏輯模型。首先,我們模擬乙個非常大的完整資料集 simulate完整資料 expit function x n 100000 x mvrnorm n,mu c 0,0 sigm...
r語言插補法 R語言 缺失值處理之多重插補
筆者寄語 缺失值是資料清洗過程中非常重要的問題 其他方法可見 r語言 異常值檢驗 離群點分析 異常值處理 筆者在進行mice包的多重插補過程中遇到相當多的問題。大致的步驟簡介如下 缺失資料集 mcmc估計插補成幾個資料集 每個資料集進行插補建模 glm lm模型 將這些模型整合到一起 pool 評價...
基於R語言實現Lasso回歸分析
主要步驟 將資料存成csv格式,逗號分隔 在r中,讀取資料,然後將資料轉成矩陣形式 載入lars包,先安裝 呼叫lars函式 確定cp值最小的步數 確定篩選出的變數,並計算回歸係數 具體 如下 需要注意的地方 1 資料讀取的方法,這裡用的file.choose 這樣做的好處是,會彈出視窗讓你選擇你要...