255:如何畫(huà)一個(gè)boxplot_箱型圖以及如何檢查是否正確(一)

最近有個(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í)一下。

image.png

理論圖

二: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ì)輸出下面的這樣子的圖。


image.png

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


image.png

當(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ì)這樣。我們看下輸出


image.png

同時(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;
image.png

我們發(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;
image.png

我們先來(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;
image.png

數(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)題。


image.png

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容