最近有個(gè)一期項(xiàng)目畫(huà)箱型圖的需求。
一:概論
箱型圖也是描述數(shù)據(jù)離散程度的,同時(shí)能識(shí)別數(shù)據(jù)中的異常值。
如果想知道你的箱型圖畫(huà)的是否正確,你首先得知道箱型圖中的各種元素代表什么,怎么看:
箱型圖(盒形圖),如果分布是對(duì)稱(chēng)的,則上下百分位數(shù)離中位數(shù)的距離應(yīng)近似相等;
如果上百分位數(shù)比下百分位數(shù)離中位數(shù)更遠(yuǎn),則此分布是正傾斜的;
如果下百分位數(shù)比上百分位數(shù)離中位數(shù)更遠(yuǎn),則分布是負(fù)傾斜的。
在箱型圖中,異常值的定義為:
一個(gè)觀察值x如果是屬于下面之一,則為異常值(outlying value):
①:x>上百分位數(shù)+1.5(上百分位數(shù)-下百分位數(shù))
②:x<下百分位數(shù)-1.5(上百分位數(shù)-下百分位數(shù))
上百分位數(shù)即Q3;下百分位數(shù)即Q1。IQR即Q3-Q1
一個(gè)觀察值x如果是屬于下面之一,則為極端異常值(extreme outlying value):
①:x>上百分位數(shù)+3(上百分位數(shù)-下百分位數(shù))
②:x<下百分位數(shù)-3(上百分位數(shù)-下百分位數(shù))
因此盒形圖的一個(gè)做法就是:
1)在樣本中從上百分位數(shù)到最大的非異常值之間畫(huà)一垂直的條形;
2)在樣本中從下百分位數(shù)到最小的非異常值之間畫(huà)一垂直的條形;
3)在樣本中識(shí)別異常值及極端異常值,并分別用"0"及"*"表示.
先看下箱型圖各個(gè)部分代表的意思,之后我們結(jié)合實(shí)際例子和上面的理論一起學(xué)習(xí)一下。

理論圖
二:proc boxplot
以SAShelp.cars數(shù)據(jù)集為例(以TYPE為分組變量,即X軸,Y軸為mpg_city):
箱型圖的實(shí)現(xiàn)是通過(guò)GTL中的boxplot實(shí)現(xiàn)的,但是我們也可以提前通過(guò)proc boxplot看看SAS自己畫(huà)出的箱型圖是什么樣的,然后可以和你自己畫(huà)出的箱型圖進(jìn)行比對(duì)。
data cars;
set sashelp.cars;
/* proc sort;by type;*/
run;
proc boxplot data=cars;
plot mpg_city*type;
/* by type;*/
inset min mean max stddev /
header = 'Overall Statistics'
pos = tm;
insetgroup min max /
header = 'Extremes by type';
run;
plot語(yǔ)句前面一個(gè)參數(shù)是分析變量,通過(guò)這個(gè)分析變量得出的分析統(tǒng)計(jì)量用于Y軸。后面一個(gè)參數(shù)是分組變量,用于X軸。
需要注意的是,用proc boxplot畫(huà)圖需要提前排序,要不然就會(huì)輸出下面的這樣子的圖。

我們排序之后,即輸出成一個(gè)正確的圖。

當(dāng)然,分析變量可以有不止一個(gè),我們?cè)偌由弦粋€(gè)分析變量看看;
proc boxplot data=cars;
plot (mpg_city Horsepower)*type;
/* by type;*/
inset min mean max stddev /
header = 'Overall Statistics'
pos = tm;
insetgroup min max /
header = 'Extremes by type';
run;
多加一個(gè)分析變量的寫(xiě)法是這樣(mpg_city Horsepower)*type;如果需要一個(gè)分組出一個(gè)圖,可以通過(guò)by,但是一般不會(huì)這樣。我們看下輸出

同時(shí),通過(guò)proc boxplot也沒(méi)發(fā)現(xiàn)數(shù)據(jù)中出現(xiàn)什么極端值,,proc boxplot也不是我要講的重點(diǎn),感興趣的可以自己去查找相關(guān)知識(shí)點(diǎn),今天重點(diǎn)要講的是如何QC 箱型圖。
通過(guò)GTL畫(huà)箱型圖的話,挺簡(jiǎn)單的。通過(guò)一個(gè)boxplot就可以了。
proc template;
define statgraph boxplot;
begingraph;
entrytitle "City Mileage for Vehicle Types";
layout overlay /
xaxisopts=(offsetmin=0.1 offsetmax=0.1);
boxplot y=mpg_city x=type /
datalabel=make spread=true;
endlayout;
endgraph;
end;
run;
proc sgrender data=cars template=boxplot;
label type="Vehicle Type";
run;

我們發(fā)現(xiàn)通過(guò)GTL畫(huà)出的盒形圖標(biāo)出了一些點(diǎn),但是proc boxplot畫(huà)出來(lái)的卻沒(méi)有(應(yīng)該是可以的)。
現(xiàn)在我們來(lái)驗(yàn)證一下自己畫(huà)出來(lái)的圖是否正確,同時(shí)來(lái)驗(yàn)證一下文章最開(kāi)頭講的理論。
通過(guò)proc means計(jì)算mean,madian,Q3,Q1,max,min
proc means data=cars;
by type;
var mpg_city ;
output out=stat mean=mean median=median q3=q3 q1=q1 min=min max=max;
run;
data stat2;
set stat;
if nmiss(q3,q1)=0 then upoutly=Q3+1.5*(Q3-Q1); /*計(jì)算異常值*/
if nmiss(q3,q1)=0 then looutly=Q1-1.5*(Q3-Q1);
if nmiss(q3,q1)=0 then extupoutly=Q3+3*(Q3-Q1); /*計(jì)算極端異常值*/
if nmiss(q3,q1)=0 then extlooutly=Q1-3*(Q3-Q1);
proc sort;by type;
run;
data stat3;
merge cars(keep=type mpg_city) stat2;
by type;
run;

我們先來(lái)檢查T(mén)ype=Hybrid
1)◇菱形對(duì)應(yīng)理論圖中的①,這就是均值,對(duì)應(yīng)數(shù)據(jù)集中的55;看起來(lái)沒(méi)問(wèn)題。
2)箱型圖中間的那條橫線對(duì)應(yīng)理論圖中的②,這就是中位數(shù),對(duì)應(yīng)數(shù)據(jù)集的59,看起來(lái)沒(méi)問(wèn)題。
3)Q3,Q1對(duì)應(yīng)圖中的⑥,③,對(duì)應(yīng)數(shù)據(jù)集的60,46,看起來(lái)也沒(méi)問(wèn)題
4)upoutly就是計(jì)算出的upper fence,對(duì)應(yīng)理論圖中的⑧,也就是異常值了,對(duì)應(yīng)到數(shù)據(jù)集中的81,looutly就是計(jì)算出的lower fence,對(duì)應(yīng)理論圖中的⑤,對(duì)應(yīng)到數(shù)據(jù)集的25,我們看到圖中很奇怪的一點(diǎn)就是Type=Hybrid只有一個(gè)盒子,線呢?
回顧一下:在樣本中從上百分位數(shù)到最大的非異常值之間畫(huà)一垂直的條形,Type=Hybrid,異常值是81,那么我們需要在Q3和異常值81之間找到最大的非異常值,是多少?就是60,相當(dāng)于沒(méi)有垂直線。
所以箱型圖的盒子上面的第一條橫線不能簡(jiǎn)單的理解為數(shù)據(jù)中的最大值,而是小于異常值,大于Q3的最大值。對(duì)應(yīng)理論圖中的⑦(lower fence都不解釋了,同理)
那我們現(xiàn)在再去檢查一下Type=Sports
data stat3;
merge cars(keep=type mpg_city) stat2;
by type;
if type="Sports";
if upoutly>MPG_City>=q3>.;
run;

數(shù)據(jù)集中mean,median,q1,q3和圖中比較一下,沒(méi)什么問(wèn)題,異常值是24.5,大于Q3,小于24.5的記錄中選取最大的,就是圖中的24了,這時(shí)候在Q3和24之間畫(huà)一條線,就如圖中所示,也沒(méi)問(wèn)題。
data stat3;
merge cars(keep=type mpg_city) stat2;
by type;
if type="Sports";
if MPG_City>=upoutly>.;
run;
篩選一下大于異常值的,26,也就是圖中的Toyota,也沒(méi)問(wèn)題。

上面就是如何檢查箱型圖的實(shí)操,后續(xù)看看如何美化箱型圖。