如何用SPSS與R語言整理數(shù)據(jù)集?

2023年鄭老師多門科研統(tǒng)計(jì)課程:多次直播,含孟德爾隨機(jī)化方法? ?

提到數(shù)據(jù)分析,首先會(huì)想到的可能是t檢驗(yàn)、回歸分析等各種具體的分析方法,但對于經(jīng)歷過完整數(shù)據(jù)分析的同學(xué)來說,最復(fù)雜、最耗費(fèi)時(shí)間的步驟往往是數(shù)據(jù)的清理,也就是將數(shù)據(jù)整理成為能夠進(jìn)行上述統(tǒng)計(jì)分析的格式。
在實(shí)際數(shù)據(jù)分析過程中,原始數(shù)據(jù)因?yàn)楦鞣N因素,通常是不符合或者不滿足我們分析與建模需求的。為配合進(jìn)行更好的分析,可能涉及到以下數(shù)據(jù)處理工作:定義變量名;計(jì)算變量;轉(zhuǎn)換變量,添加數(shù)據(jù)標(biāo)簽等。
接下來我們結(jié)合R語言自帶MASS數(shù)據(jù)集birthwt實(shí)操數(shù)據(jù)集,分別通過SPSS與R語言軟件開展數(shù)據(jù)集整理,方便大家對兩種方法的特點(diǎn)有更加直觀的認(rèn)識(shí)!
R語言自帶MASS數(shù)據(jù)集birthwt,是一份于1986年在在馬薩諸塞州收集的與嬰兒出生體重低相關(guān)的危險(xiǎn)因素的數(shù)據(jù)。根據(jù)嬰兒出生體重是否小于2.5kg,分為低出生組(59例)與正常組(130例)。研究的暴露因素見下表。

接下來,我們分別采用R語言軟件和SPSS軟件,對數(shù)據(jù)集進(jìn)行整理,主要圍繞下面四部分展開:
1.定義變量名;
2.計(jì)算變量;
3.轉(zhuǎn)換變量;
4.添加數(shù)據(jù)標(biāo)簽
一、R語言進(jìn)行數(shù)據(jù)整理
1.定義變量名
R語言使用reshape包的rename函數(shù)修改數(shù)據(jù)變量的名稱。例如,使用rename函數(shù)自定義修改變量bwt的名稱
(1)安裝和加載R包
install.packages("reshape")
library(reshape)
(2)將變量bwt重命名為BWT
birthwt <- rename(birthwt, c(bwt="BWT"))
str(birthwt)
2.計(jì)算變量
例:原數(shù)據(jù)集中變量BWT單位為g,現(xiàn)通過計(jì)算,單位變?yōu)榻?/p>
birthwt$BWT1<-birthwt$BWT*0.001*2 #生成新變量BWT1
3.轉(zhuǎn)換變量
(1)變量值轉(zhuǎn)換
用cut函數(shù)對變量進(jìn)行分組并為分組變量賦值。將變量ftv分為三組,分別為0次,1次和2次以上。
birthwt$ftv1<-cut(birthwt$ftv,breaks = c(0,1,2,Inf),
labels=c("0","1","2+"),right = F,include.lowest = T)
cut函數(shù)表達(dá)式:cut(x,breaks,labels,right,include.lowest)。
參數(shù)解讀:x為待劃分的數(shù)據(jù);
breaks為劃分依據(jù)(區(qū)間);
labels為劃分的各組打標(biāo)簽;
right=T,區(qū)間左開右閉,right=F,則左閉右開;(開區(qū)間不包括端點(diǎn)(a,b),閉區(qū)間包括端點(diǎn)[a,b])
include.lowest=T,第一個(gè)區(qū)間包含左端點(diǎn),最后一個(gè)區(qū)間包含右端點(diǎn)。
(2)轉(zhuǎn)換為邏輯值
變量low、smoke、ptl、ht、ui為二分類數(shù)據(jù),且結(jié)果為0=否,1=是。as.logical函數(shù):as.logical(A)將A轉(zhuǎn)換為一個(gè)邏輯值數(shù)組。A中的任意非零元素都將轉(zhuǎn)換為邏輯值1(TRUE),零則轉(zhuǎn)換為邏輯值0(FALSE)。
birthwt$low<-as.logical(birthwt$low)#將low變量轉(zhuǎn)換為邏輯值
birthwt$smoke<-as.logical(birthwt$smoke)#將smoke變量轉(zhuǎn)換為邏輯值
(3)轉(zhuǎn)換為因子
birthwt$race<-factor(birthwt$race,levels=c(1,2,3))#將race變量轉(zhuǎn)換為因子,levels對數(shù)據(jù)進(jìn)行排序
varF <- c("low","race","smoke","ptl","ht","ui","ftv")#批量因子化
birthwt[varF] <- lapply(birthwt[varF], factor)
(4)轉(zhuǎn)換為數(shù)值型
birthwt $age<-as.numeric(birthwt $age)
birthwt $lwt<-as.numeric(birthwt $lwt)
4.添加數(shù)據(jù)標(biāo)簽
為變量race添加數(shù)據(jù)標(biāo)簽,1=white;2=black;3=other
birthwt$race <- factor(birthwt $race,levels=c(1,2,3) ,
labels = c("white","black","other"))#levels對數(shù)據(jù)進(jìn)行排序,第一位為對照,labels添加標(biāo)簽,與levels順序?qū)?yīng)

如果每次引用的時(shí)候都使用“數(shù)據(jù)框名$變量名”的形式會(huì)非常麻煩,尤其是當(dāng)數(shù)據(jù)框名比較繁瑣的時(shí)候。為了簡化這個(gè)過程,使用 R 語言的 with 函數(shù),我們可以一次性完成對 R語言表達(dá)式的操作以及調(diào)用該函數(shù)的過程,一起看一下吧!
函數(shù)with()的使用方式為:with(data, expr, ...)。其中參數(shù)data就是需要進(jìn)行運(yùn)算的數(shù)據(jù)集,參數(shù)expr就是需要做的運(yùn)算等。這個(gè)函數(shù)的意思就是對指定的數(shù)據(jù)集做相應(yīng)的運(yùn)算。由于指定了對應(yīng)的數(shù)據(jù)集,因此直接使用對應(yīng)的變量名運(yùn)算就可以,不需要在使用“數(shù)據(jù)框名$變量名”的形式。
birthwt1<- with(birthwt, { race <- factor(race,levels=c(1,2,3) ,
labels = c("white","black", "other"))#factor轉(zhuǎn)換為因子,labels打標(biāo)簽
ptd <- factor(ptl > 0)#轉(zhuǎn)換為因子,大于0為true
ftv <- factor(ftv)#轉(zhuǎn)換為因子
levels(ftv)[-(1:2)] <- "2+"#1,2指的是位次,第三位及以上賦值為2+
bwt<-bwt*0.001*2#計(jì)算變量
data.frame(low=(low>0),bwt, age, lwt, race, smoke = (smoke > 0),
ptd, ht = (ht > 0), ui = (ui > 0), ftv)#生成數(shù)據(jù)框
})
二、SPSS進(jìn)行數(shù)據(jù)整理
首先,我想一般情況下,數(shù)據(jù)一開始的形式,經(jīng)常是EXCEL的格式,基本格式如下:

l 首行是變量名,一般是英文或者拼音,不建議用漢字。
l 從第二行開始,每一行都代表著一個(gè)研究對象的所有變量信息。
l 每一列都代表所有人一個(gè)變量的變量值
l 一般建議,CSV和excel中的變量值,建議用數(shù)字表示,比如男性=1,女性=2;血型(1、2、3、4),這種做法比較靈活,而且可以保證數(shù)據(jù)集在各統(tǒng)計(jì)軟件通行無阻。對于數(shù)據(jù)集賦值不清者,請列一份變量賦值表
l 缺失值默認(rèn)處理,一般是空白代替,不要寫NA6.除非特殊字符串(比如姓名),數(shù)據(jù)庫不要出現(xiàn)漢字或者英文字符串,會(huì)導(dǎo)致后續(xù)分析被卡。


關(guān)于數(shù)據(jù)整理的內(nèi)容,和R語言一樣,主要圍繞下面四部分展開:
1.定義變量名
僅需在變量視圖下名稱一列雙擊修改即可。

2.計(jì)算變量
僅需在轉(zhuǎn)換——計(jì)算變量中,輸入要產(chǎn)生的新變量名BWT1,再輸入計(jì)算公式即可。

3.轉(zhuǎn)換變量
(1)變量值轉(zhuǎn)換
在很多情況下,可以將定量數(shù)據(jù)轉(zhuǎn)換為定性數(shù)據(jù)(二分類、多分類),有序數(shù)據(jù)轉(zhuǎn)換成二分類。這是因?yàn)椴煌臄?shù)據(jù),有不同的統(tǒng)計(jì)策略:
·定量數(shù)據(jù)——t檢驗(yàn)
·轉(zhuǎn)換為等級數(shù)據(jù)——秩和檢驗(yàn)
·轉(zhuǎn)換為二分類數(shù)據(jù)——卡方檢驗(yàn)
這里更推薦“重新編碼為不同變量”,會(huì)產(chǎn)生新變量,而不改變原有變量。

例:定量轉(zhuǎn)換為有序多分類
變量值轉(zhuǎn)換,將ftv轉(zhuǎn)換為0次,1次和2+次。輸入“標(biāo)簽”后一定要點(diǎn)擊“變化量”。


僅需輸入舊值和新值,再點(diǎn)添加,即可轉(zhuǎn)換變量值。由于2+是字符型,所以要勾選輸出變量是字符串。
(2)很多導(dǎo)入的數(shù)據(jù)都默認(rèn)為“名義”,所謂名義就是無序分類數(shù)據(jù)。還有“標(biāo)度”,為定量數(shù)據(jù),“有序”為有序分類數(shù)據(jù)。如果需要修改,點(diǎn)擊下拉菜單即可修改。

4.添加數(shù)據(jù)標(biāo)簽
對變量值打標(biāo)簽:上面說過,我們很多分類變量,其變量值一般也用1234構(gòu)成,但是1234 如果意思不知道怎么辦嘛?就需要在“值”這一列對分類變量值注釋。


最后,諸位可能會(huì)從SPSS導(dǎo)出數(shù)據(jù)到R語言或其他平臺(tái)進(jìn)行數(shù)據(jù)分析,數(shù)據(jù)導(dǎo)出格式更加推薦csv形式,這種格式對缺失值處理以空白代替,而非NA代替這里有個(gè)注意,導(dǎo)出的數(shù)據(jù),可以以值標(biāo)簽的名義導(dǎo)出,也可以以原始值的名義導(dǎo)出。一般情況下,都推薦原始數(shù)據(jù)值,方便后續(xù)對數(shù)據(jù)集進(jìn)行修改。除非,你在SPSS數(shù)據(jù)庫已經(jīng)完全整理好了你的變量值,尤其是分類變量值,并做好了分類。
通過以上內(nèi)容,不知道諸位是否和我一樣,R語言對新手小白來說真的太難太難了,相比而言,SPSS軟件操作上容易上手,簡單易學(xué),大部分功能都是可視化呈現(xiàn)的,操作的話點(diǎn)擊鼠標(biāo)就可以完成。建議大家有能力的用R語言來進(jìn)行數(shù)據(jù)整理,實(shí)在不行也不要勉強(qiáng),SPSS也很不錯(cuò)!
