張婷婷,李偉,郝曉艷
(1.南京醫(yī)科大學附屬兒童醫(yī)院 醫(yī)務處病案統(tǒng)計室,江蘇 南京 210009; 2.南京醫(yī)科大學附屬兒童醫(yī)院質(zhì)量管理辦公室,江蘇 南京 210009)
多項選擇題是同一道問題含有兩個及兩個以上的選項,也稱多重應答題。多項選擇題的設置常用于流行病學研究中。常見的多選題數(shù)據(jù)編碼方式有二分法編碼、分類法編碼和原始編碼3種[1]。現(xiàn)有文獻[1]提及當多選題備選項數(shù)目超過9時,轉(zhuǎn)換中使用的語句或軟件會發(fā)生混亂,給分析帶來不便從而限制了研究問卷的設計。目前,基于R軟件對多選題進行描述性分析(包括頻數(shù)分析和列聯(lián)分析)和假設檢驗(常用卡方檢驗)[2]較少,常使用SPSS軟件[3- 4]。R軟件統(tǒng)計編程環(huán)境是開源的,統(tǒng)計分析功能較之SPSS更為強大和靈活,且能使用dplyr、tidyr等軟件包[5- 6]。作者主要以某次健康素養(yǎng)調(diào)查問卷為例,基于R軟件介紹一組多選題原始編碼數(shù)據(jù)轉(zhuǎn)換為二分法編碼。
2018年江蘇省大學一年級學生健康素養(yǎng)調(diào)查問卷共包含53題。其中判斷題9題,單選題26題,多選題17題(不包含情景題中多選題),情景題1題(含單選題3題、多選題1題);每道多選題均設立5個備選項(1、2、3、4、5)。調(diào)查對象所選答案以字符串形式依次錄入Excel文件中。
在多選題原始編碼中,設置多選題為變量var,按調(diào)查對象的選擇順序連續(xù)錄入被選中的編碼,以“,”分開編碼,如1,2,3。將多選題的每個備選項對應轉(zhuǎn)換為新變量var1,var2……varn。在原始編碼變量var中,調(diào)查對象所選答案所對應的新變量值記為“1”,未選中的值記為“0”,即多選題所有備選項均轉(zhuǎn)化成“是”與“否”的二分類問題[7]。
軟件使用與下載:使用R i386 4.0.4 for Windows和R Studio V1.4.1106。使用read.csv()函數(shù)將原始數(shù)據(jù)導入R軟件,建立數(shù)據(jù)對象表。主要運用dplyr等軟件包進行數(shù)據(jù)轉(zhuǎn)換和分析,轉(zhuǎn)換多選題編碼方式的操作語法更為靈活[8]。多項選擇題數(shù)據(jù)經(jīng)轉(zhuǎn)換后,即可對新變量進行統(tǒng)計描述和統(tǒng)計推斷。
在多選題編碼轉(zhuǎn)換前,先檢查數(shù)據(jù)框中缺失值信息,并對其進行恰當?shù)奶幚怼:喴滋幚砣笔е档霓k法通常包括缺失值刪除、缺失值填補[9]。本數(shù)據(jù)共有48個缺失數(shù)據(jù),對其類別及產(chǎn)生原因進行識別和判斷。語句“md.pattern(sy)”識別缺失數(shù)據(jù)的模式。使用aggr(sy, prop=F, number=F)對缺失數(shù)據(jù)進行可視化處理。本案例屬于隨機缺失模式,可以刪除含缺失值樣本所在的行,“na.omit(sy)”即可實現(xiàn)此功能。
本研究以“SY01”題為例進行轉(zhuǎn)換,使得“SY01”題最終轉(zhuǎn)換為二分法編碼數(shù)據(jù)。
第一步,生成一組新變量。將“SY01”列分列生成“v1”“v2”……“v5”列,調(diào)查對象所選選項按順序依次分入各列,例如id為5402的調(diào)查對象的選項為“1,3”,該對象第1個填寫答案為“1”,則“v1”的值記為“1”,第2個填寫的答案為“3”,則“v2”下記為“3”,再無其他選項,“v3~v5”缺失,缺失值記為“NA”,見圖1。對應的語法:
圖1 separate()函數(shù)對變量“SY01”分列后結(jié)果
separate(SY01, paste0(“v”, 1∶5), remove=F)
第二步,實現(xiàn)新變量行列互換。創(chuàng)建一個新變量“V”,將“v1~v5”列變量換至新變量“V”下;另創(chuàng)建新變量“val”,每個id在“v1” ~“v5”的值隨之對應入“val”變量中,將列數(shù)據(jù)回歸到行中。同時刪除第一步 “val”變量中產(chǎn)生的缺失數(shù)據(jù)所在的整條記錄,最終保留每個樣本選擇的答案詳見圖2。R語句為:
圖2 gather()函數(shù)對“v1~v5”列數(shù)據(jù)回歸行數(shù)據(jù)后的結(jié)果
gather(V, val, v1∶v5)
na.exclude()
第三步,對所選答案賦值為“1”。為方便區(qū)分,將“val”的每個字符串前加上“SY01_”,并對變量“V”重新賦值為“1”,此步驟可實現(xiàn)調(diào)查對象所選答案賦值為“1”。對“val”變量進行分列,變量“V”的值隨之對應入各列。5種答案將按順序分為5個變量,所選答案下為“1”,未選擇的答案下記為“NA”。該步語句為:
mutate(val=paste0(“SY01_”, val), V=1)
spread(val,V)
第四步,填充缺失值。使用mutate_at()函數(shù)對缺失值賦值為“0”,最終轉(zhuǎn)換后效果見圖3。此時,所選答案記為“1”,未選答案記為“0”,完成原始編碼向二分法編碼的轉(zhuǎn)換。句法結(jié)構(gòu):
圖3 mutate_at()函數(shù)對缺失值重新賦值
mutate_at(vars(SY01_1:SY01_5),.funs=list(~replace(.,is.na(.),0)))
至此完成對“SY01”多選題原始編碼數(shù)據(jù)向二分法編碼數(shù)據(jù)的轉(zhuǎn)換。在進行轉(zhuǎn)換前需下載及加載“dplyr”“stringr”“tidyr”軟件包。
利用dplyr包的管道函數(shù)“%>%”簡化過程,管道函數(shù)的作用是將左件的值發(fā)送給右件的表達式,并作為右件表達式函數(shù)的第一個參數(shù),省略中間的賦值步驟,大量減少內(nèi)存中的對象。
原始編碼向二分法編碼轉(zhuǎn)化過程代碼如下(#為注釋):
# 讀取文件
sy<- read.csv(“E:/Lenovo/Documents/sy.csv”,header=TRUE,sep=“,”)# E:/Lenovo/Documents/為文件所屬路徑。
# 安裝軟件包
install.packages(“dplyr”)
install.packages(“stringr”)
install.packages(“tidyr”)
# 加載包
library(“dplyr”)
library(“stringr”)
library(“tidyr”)
# 編碼方式轉(zhuǎn)換
sy<- sy%>%
+separate(SY01,paste0(“v”,1:5),remove=F)%>%
+gather(V,val,v1∶v5)%>%
+na.exclude()%>%
+mutate(val=paste0(“SY01_”,val),V=1)%>%
+spread(val,V)%>%
+mutate_at(vars(SY01_1:SY01_5),.funs=list(~replace(.,is.na(.),0)))
完成編碼轉(zhuǎn)化后,使用“table()”“prop.table(table())*100”語句進行描述性分析,結(jié)果見表1。8 763例樣本,共選擇了24 341個答案。SY01_1被選擇的頻數(shù)最多,占35.926%(8 590/24 341);SY01_5最少,占0.296%(72/24 341)??梢园l(fā)現(xiàn)頻數(shù)差異較大,查看列聯(lián)系數(shù)和卡方檢驗確定選項獨立性。χ2值為35 685,P<0.001,列聯(lián)系數(shù)為0.67。因此選項間具有相關(guān)性,可進一步挖掘選項間相關(guān)關(guān)系。
表1 SY01的頻數(shù)分析
本研究以江蘇省高校新生健康素養(yǎng)調(diào)查問卷(2018年)為例,介紹了基于R軟件進行多選題的數(shù)據(jù)清洗、編碼方式轉(zhuǎn)換和初步分析方法。調(diào)查問卷中設計多項選擇題的目的是為了獲取準確、全面的信息。由于其復雜性,難免存在缺失數(shù)據(jù),采用本研究所敘述的多選題編碼轉(zhuǎn)換代碼前,需對數(shù)據(jù)中缺失值進行有效處理。本研究選擇刪除含有缺失數(shù)據(jù)的樣本,是因為經(jīng)過判斷,缺失類型屬于完全隨機缺失,即使刪除也不會造成偏倚[10]。針對缺失數(shù)據(jù)的處理需要謹慎對待,本研究尚未提出針對缺失數(shù)據(jù)新的處理辦法,這是本研究的缺陷所在,僅依據(jù)判斷缺失機制[11]及方法的簡便性而選擇處理手段;若遇到缺失數(shù)據(jù)較多或經(jīng)判斷不可輕易對其刪除,并且刪除會造成信息缺失的情況下,可根據(jù)選項比例或者選項組合模式進行填補[12],亦或是采取其他填補方式。但是無論采取何種處理方式,都要保證轉(zhuǎn)換前不包含缺失數(shù)據(jù)。
不同的編碼形式和數(shù)據(jù)轉(zhuǎn)換是為了高效、準確地分析數(shù)據(jù),挖掘更多的信息。本研究采用的軟件包解決了多選題數(shù)據(jù)編碼之間的轉(zhuǎn)換問題,與使用基本R函數(shù)處理的方法[13]相比,句法結(jié)構(gòu)更簡便。此外,先前的研究[1,7]中,無論是采用SAS軟件亦或是R軟件對多選題編碼方式轉(zhuǎn)換中,條件限制較為苛刻,備選項數(shù)目不能超過9,顯示當多選題備選項數(shù)目超過9時[1],使用其他語句或軟件會發(fā)生混亂,比如“1”與“11”產(chǎn)生的新變量都會轉(zhuǎn)換成“val1”;封永昌等[13]使用基本R函數(shù)進行轉(zhuǎn)換時,是將“10”及“10”以上的選項轉(zhuǎn)換成單字母“a”“b”……,替代原始編號,雖然使得超過9個選項的多選題也能被轉(zhuǎn)換為二分法編碼,無論是錄入方式,還是基本R函數(shù)代碼都比較復雜,處理難度較大;而本研究代碼則無需作特殊轉(zhuǎn)換,錄入原始編碼時直接輸入相應編碼,如“10”“11”等,均以“,”分隔即可,如選擇“1”“3”“11”3個選項,原始編碼輸入“1,3,11”。此外,在原始編碼錄入時,原始編碼數(shù)據(jù)需要嚴格依從小到大的順序錄入,且代碼循環(huán)復雜程度較高,而本研究中所使用的方法,即使錄入時沒有按從小到大的順序輸入,對轉(zhuǎn)換過程也沒有影響,克服了先前研究的多種復雜問題。綜合來看,本研究使用的方法實用性更強、更加簡潔,且利用了3個功能強大的軟件包,數(shù)據(jù)操作的運行時間尤其是分組計算的時間更短。在大樣本調(diào)查中,往往需運行的數(shù)據(jù)樣本量及變量數(shù)龐大。樣本含量越大時占用內(nèi)存越多,采用本研究介紹的R軟件包可大大提高計算效率[8]?!癲plyr”“tidyr”和“stringr”這3個軟件包聯(lián)合使用有強大的數(shù)據(jù)清洗能力,在行列互換、計算和字符串的拼接方面的貢獻不容小覷[14]。
文獻中常將各選項作為二分類變量進行統(tǒng)計描述和假設檢驗,較少有文獻研究選項間相互影響。某些選項的特殊組合是否會導致另一個選項不被選擇,也是值得探討的問題。因此,不去挖掘多選題選項間的信息,造成了信息的浪費。有文獻提示二分法編碼后每個選項可用來構(gòu)建回歸模型、廣義線性模型等[15]。
本研究不足之處:未能提出多選題二分法編碼轉(zhuǎn)后系統(tǒng)的分析思路與步驟,只提出是否應探討多選題各選項間影響關(guān)系的假設,需更深層次地挖掘多選題后續(xù)分析方式,提出更加系統(tǒng)且全面的多選題處理方案。