R語言之探索性資料分析篇
探索性資料分析(Exploratory Data Analysis,EDA):是通過分析資料集以決定選擇哪種方法適合統計推斷的過程。
4.1 主要分析工具
主要的圖形表示方法有(括號中為R語言繪圖函式):
(1)條圖(barplot):用於分類資料;
(2)直方圖(hist)、點圖(dotchart)、莖葉圖(stem):用於觀察數值型分佈的形狀;
(3)箱線圖(boxplot):給出數值型分佈的彙總資料,適用於不同分佈的比較和拖尾、截尾分佈的識別;
(4)正態概率圖(qqnorm):用於觀察資料是否近似地服從正態分佈;
例4-1:
從某大學統計系的學生中隨機抽取24人,對數學和統計學的考試成績進行調查,結果如下,試對這些學生的數學成績和統計成績進行探索性分析。
//將檔案存放在一個txt文件中
> MS=read.table("C:\\Users\\lenovo\\Desktop\\mathstat.txt",header=T)
> MS
math stat
1 81 72
2 90 90
3 91 96
4 73 78
5 88 89
6 78 82
7 95 96
8 63 75
9 85 86
10 60 71
11 83 78
12 81 94
13 77 73
14 60 66
15 66 58
16 84 87
17 80 86
18 85 84
19 70 82
20 54 56
21 93 98
22 68 76
> stem(MS$stat)
The decimal point is 1 digit(s) to the right of the |
5 | 68
6 | 6
7 | 1235688
8 | 2246679
9 | 04668
> stem(MS$math)
The decimal point is 1 digit(s) to the right of the |
5 | 4
6 | 00368
7 | 0378
8 | 01134558
9 | 0135
> EDA<-function(x)
+ {
+ par(mfrow=c(2,2))#圖視窗為2行2列格式
+ hist(x); # 直方圖
+ dotchart(x); # 點圖
+ boxplot(x,horizontal=T); # 箱式圖
+ qqnorm(x);qqline(x)
+ par(mfrow=c(1,1))
+ }
> EDA(MS$math)
> EDA(MS$stat)
>
當資料成偏態分佈時,可使用穩健方法去分析,如使用中位數或進行資料變換
4.2 單變數資料分析
4.2.1 分型別資料
取值範圍是有限個值或是一個數列構成的變數稱為 離散變數,若表示分類情況的離散變數又稱為分類變數
對於分類資料,我們可以用頻數表來分析,也可以用條形圖和餅圖來表示
1 分類頻數表(table)
頻數表可以描述一個分類變數的數值分佈概況,R中的table命令可以生成頻數表。若X是分類資料,只要用table(X)就可以生成分類頻數表
例:
> x=c("是","否","是","否","是","否","是")
> table(x)
x
否 是
3 4
>
2 條圖(Barplot)
R畫條圖的命令是barplot(),對分類資料作條圖,需先對原始資料進行分組,否則作出來的不是分類資料的條形圖
例:
> drink=c(3, 4,1,1,3,4,3,3,1,3,2,1,2,1,2,3,2,3,1,1,1,1,4,3,1)
> barplot(drink)#沒有對Y軸資料進行分組的條圖
> barplot(table(drink)) #對Y軸資料進行分組的條圖
> barplot(table(drink)/length(drink)) #將y軸修改為頻率
> barplot(table(drink),col=c("red","yellow","blue","green")) #給條圖填充不同的顏色
3 餅圖(Pie Graph)
對於分類資料還可以用餅圖來描述,餅圖用於表示各類別某種牲的構成比情況
> drink=c(3, 4,1,1,3,4,3,3,1,3,2,1,2,1,2,3,2,3,1,1,1,1,4,3,1)
> drink.count=table(drink)
> pie(drink.count)
> names(drink.count)=c("紅酒","白酒","黃酒","啤酒") #把各標記改成文字
> pie(drink.count)
> pie(drink.count,col=c("purple","green","cyan","white")) #修改各扇區的顏色
4.2.2 數值型資料
1 集中趨勢和離散程度
對於數值型資料,經常要分析一個分佈的集中趨勢和離散程度,用來描述集中趨勢的主要有均值(mean())、中位數(median())
描述離散程度的主要有方差(var())、標準差(sd())
fivenum( )對數值資料五等分法(運算)
summary()示出分位數
例:
> salary = c(2000,2100,2200,2300,2350,2450,2500 ,2700,2900,2850,
+ 3500,3800,2600,3000,3300,3200,4000,3100,4200)
> mean(salary) #求均值
[1] 2897.368
> median(salary)#求中位數
[1] 2850
> var(salary) #求方差
[1] 414853.8
> sd(salary) #求標準差
[1] 644.0915
> fivenum(salary) #對數值資料五等分分法(運算)
[1] 2000 2400 2850 3250 4200
> summary(salary) #求分位數
Min. 1st Qu. Median Mean 3rd Qu. Max.
2000 2400 2850 2897 3250 4200
2 穩健的集中趨勢和離散程度
利用均值和方差描述集中趨勢和離散程度往往基於正態分佈,而若資料是長尾或是有異常值時,這時用均值和方差就不能正確地描述集中趨勢和離散程度。
而此時用中位數來描述集中趨勢則是穩健的,不易受異常值影響。
可對mean函式裡對trim引數進行設定
例:
> salarym=c(salary,15000)
> mean(salarym)
[1] 3502.5
> median(salarym)
[1] 2875
> mean(salarym,trim=0.2) #用R計算截尾均值 即去兩頭20%後的均值
[1] 2870.833
> mean(salarym,0.5) #去兩頭50%後的均值,trim可以省略,實際上就是中位數
[1] 2875
> IQR(salarym) #四分位間距
[1] 925
> mad(salarym) #平均差
[1] 704.235
3 莖葉圖(Stem-and-Leaf Graph)
由於繪製直方圖時需要先對資料進行分組彙總,故對樣本量較小的情形,直方圖會損失一部分資訊,此時可以使用莖葉圖來進行更精確的描述。
4 對數值資料分組
統計分析中經常要碰到 對數值資料進行分組,在R裡可以用cut函式對數值資料進行分組
例:
我們需要對工資按2 000~3 000,3 000~4 000,4 000以上進行分組,並用table()函式整理成頻數表形式:
> salaryg=cut(salary,breaks=c(2000,3000,4000,max(salary)))
> table(salaryg)
salaryg
(2e+03,3e+03] (3e+03,4e+03] (4e+03,4.2e+03]
11 6 1
5 直方圖(Histogram)
直方圖用於表示(描述)連續性變數的頻數分佈,實際應用中常用於考察變數的分佈是否服從某種分佈型別,如正態分佈
用R來作直方圖的函式是hist()
圖形以矩陣的面積表示各組段的頻數(或頻率),各矩陣的面積總和為總頻數(或等於1)
作頻率直方圖時,只要把 probability引數設定為T可以了,預設為F
R中還可以用rug()命令把各個資料豎線描繪在X軸上
6 箱線圖(Boxplot Graph)
箱線圖和直方圖一樣用於考察連續變數的分佈情況,但直方圖側重於一個連續變數的分佈情況進行詳細考察,而箱線圖更注重於勾勒出統計的主要資訊,並便於對多個連續變數同時考察,或對一個變數分組進行考察,在使用上要比直方圖更為靈活,用途更為廣泛。
函式為:boxplot() 可設定垂直和水平型,預設為垂直型,要得到水平型箱線圖,只要把引數horizontal設為T就可以了
> boxplot(salary)
> boxplot(salary,horizontal=T)
> boxplot(salary,horizontal=F)
7 密度函式線(Densities)
把直方圖各個中點連線起來就是密度函式線
函式為:density()
> hist(faithful$eruptions,prob=T,breaks=25)
> lines(density(faithful$eruptions),col='red')
4.3 雙變數資料分析
4.3.1 分類資料對分類資料
1 二維表
table()可以把雙變數分類資料整理成二維表形式,table命令處理雙變數資料類似於處理單變數資料,只是引數由原來的不念舊惡變成了兩個。
邊緣概率函式:
prop.table( )
其句法是:prop.table(x,margin) 當margin=1時,表示各個資料佔行彙總數的比例,margin=2表示各個資料佔列彙總數的比例,省略時,表示佔總和的比例。
> smoke=c("Y","N","N","Y","N","Y","Y","Y","N","Y")
> study=c("<5h","5-10h","5-10h",">10h",">10h","<5h","5-10h","<5h
+ ", ">10h","5-10h")
> table(smoke,study)
study
smoke <5h <5h\n >10h 5-10h
N 0 0 2 2
Y 2 1 1 2
> tab=table(smoke,study)
> prop.table(tab,1)
study
smoke <5h <5h\n >10h 5-10h
N 0.0000000 0.0000000 0.5000000 0.5000000
Y 0.3333333 0.1666667 0.1666667 0.3333333
2 複雜(複式)條圖
條圖用等寬直條的長短來表示相互獨立的各指標數值大小,該指標可以是連續性變數的某彙總指標,也可以是分類變數的頻數或構成比。
R作條形圖的函式是:barpolt() 在作條圖前需對資料進行分組
main 引數用來為影象新增標題;
sub新增副標題;
beside引數設定為False時,作出的圖是分段式條形圖,True時作出的條形圖是並式,R預設的是False;
legend.text作為圖新增的圖例來說明;
4.3.2 分類資料地數值型資料
例:
藥物臨床試驗,有實驗組和對照組兩組資料。
實驗組:5 5 5 13 7 11 11 9 8 9
對照組:11 8 4 5 9 5 10 5 4 10
可以用箱線圖粗略比較這兩組資料之間的關係,對於這種雙變數資料作箱線圖類似於單變數資料。
> x=c(5,5,13,7,11,11,9,8,9)
> y=c(11,8,4,5,9,5,10,5,4,10)
> boxplot(x,y)
4.3.3 數值型資料對數值型資料
1 散點圖
plot()函式
2 相關係數
相關係數是用來反映兩個數值變數的相關程度
Person相關係數用來反映兩個變數的線性相關關係。
總體相關係數的定義式是:
樣本相關係數的定義公式是:
spearman等級相關係數:
其中di=(xi-yi),xi和yi分別是兩個變數按大小排位的等級,n是樣本的容量,spearman
R 語言中求相關係數的函式是:cor()
spearman等級相關係數(秩相關係數) spearman相關是一種秩相關,可先對資料求秩,然後計算它們的pearson相關
R裡的rank()函式提供了求秩功能
4.4 多變數資料分析
4.4.1 訪問資料框資料
R使用資料框(data frame)形式儲存多變數資料
1 資料框繫結“attach”
attach()函式將資料框“連線(繫結)”入當前的名字空間,從而可以直接用資料框中的變數名訪問而不必用“資料框名$變數名”這種格式;
對於資料框變數我們不能直接引用,要用“資料框名$變數名”的格式,或利用attach()把資料框“連線(繫結)”入當前的名字空間。
要取消連線,用函式detach()即可
2 以陣列形式訪問
資料框可以看作是特殊的陣列,故可以以陣列形式訪問資料框。
陣列可以按行或列訪問,故可利用"陣列名[行,列]"
3 以列表形式訪問資料框
列表是物件的集合,且這些物件可以是不同型別的。
資料框是特殊的列表,資料框的列看作向量,且標是同一型別的物件。
以列表形式訪問資料框:
在列表名稱後面加$,再加上變數名即可:yx$x
列表名[[變數名(號)]]形式訪問:yx[['y']] yx[[1]]
4.4.2 資料框的拆分與合併
R中拆分資料框:unstack()
合併資料框:stack()
4.4.3 多變數資料的分析
1 多維列聯表
2 複式條形圖
多變數資料統計分析中經常用到複式條形圖,複式條形圖是指兩條或兩個以上小直條組成條圖的條形圖。與簡單條形圖相比,複式條形圖多考察了一個分組因素,常用於考察比較兩組研究物件的某觀察指標。
作複式條形圖時:先用table()函式作頻數表,作複式條形圖的函式是barplot()
R預設的分段式複式條形圖,要作並列式複式條形圖,要設定引數beside=TRUE
3 並列箱線圖
對於多變數資料結黨要用到箱線圖來分析各個變數的分佈情況
R作箱線圖的函式是:boxplot()
4 點帶圖(stripchart)
箱線圖經常用來比較各變數的分佈情況,尤其是當每個變數都有很(較)多的觀察值時
點帶圖也可以用來比較各變數的分佈情況,但主要用在樣本觀察值比較少時。
R作點帶圖的函式是:stripchart()
對於雙變數資料其用法是 stripchart(z~t) z變數在t變數上的分佈情況,不同的是這裡z變數刻度在x軸上,而t變數在x軸上
5 多變數散點圖
(1)重疊散點圖
將兩個或多組兩個變數的散點圖繪製在同一個圖中,可以更好比較它們之間的相關關係,這時可以繪重疊散點圖
(2)矩陣式散點圖
當欲同時考察三個或三個以上的數值變數間的相關關係時,若一一繪製它們之間的簡單散點圖,十分麻煩,利用矩陣式散點圖比較合適,這樣可以快速發現多個變數間主要相關性,在多元線性迴歸顯得尤為重要。
R作矩陣式散點圖的函式是:pairs()