沒(méi)有一成不變的統(tǒng)計(jì)問(wèn)題建瘫,統(tǒng)計(jì)上的一成不變都是有問(wèn)題的 ——Sir David Cox
對(duì)分布進(jìn)行可視化表示
對(duì)變量進(jìn)行可視化表示取決于變量是分類(lèi)變量還是連續(xù)變量显蝌。如果在較小的集合內(nèi)取值挂洛,那么這個(gè)變量就是分類(lèi)變量佩谣。要想檢查分類(lèi)變量的分布可以使用條形圖凡怎。
library(ggplot2)
ggplot(diamonds)+geom_bar(aes(cut))
條形圖的高度表示每個(gè)x中觀測(cè)的數(shù)量,可以使用dplyr::count()手動(dòng)計(jì)算出這些值:
library(dplyr)
diamonds %>% count(cut)
# A tibble: 5 x 2
cut n
<ord> <int>
1 Fair 1610
2 Good 4906
3 Very Good 12082
4 Premium 13791
5 Ideal 21551
如果在無(wú)限大的有序集合中連續(xù)取值宫蛆,這個(gè)變量就是連續(xù)變量艘包。數(shù)值型和日期型就是連續(xù)變量的例子。要檢查連續(xù)變量的分布耀盗,可以使用直方圖:
ggplot(diamonds)+geom_histogram(aes(carat),binwidth = 0.5)
可以通過(guò)
dplyr::count()
和ggplot2::cut_width()
函數(shù)的組合來(lái)手動(dòng)計(jì)算結(jié)果:
diamonds %>% count(cut_width(carat,0.5))
# A tibble: 11 x 2
`cut_width(carat, 0.5)` n
<fct> <int>
1 [-0.25,0.25] 785
2 (0.25,0.75] 29498
3 (0.75,1.25] 15977
4 (1.25,1.75] 5313
5 (1.75,2.25] 2002
6 (2.25,2.75] 322
7 (2.75,3.25] 32
8 (3.25,3.75] 5
9 (3.75,4.25] 4
10 (4.25,4.75] 1
11 (4.75,5.25] 1
直方圖會(huì)對(duì)x軸進(jìn)行等寬分箱想虎,binwidth參數(shù)可以設(shè)定直方圖的間隔寬度。
如果只考慮質(zhì)量小于3克拉的鉆石袍冷,并選擇一個(gè)更小的分箱寬度來(lái)繪制直方圖:
smaller <- diamonds %>% filter(carat<3)
ggplot(smaller)+geom_histogram(aes(carat),binwidth=0.1)
如果想要在同一張圖上疊加多個(gè)直方圖磷醋,建議使用
geom_freqpoly()
函數(shù)來(lái)代替geom_histogram()
函數(shù),geom_freqpoly()
可以執(zhí)行和geom_histogram()
同樣的計(jì)算過(guò)程胡诗,但前者不使用條形來(lái)顯示計(jì)數(shù)邓线,而是使用折線:
ggplot(smaller,aes(carat,color=cut))+geom_freqpoly(binwidth=0.1)
典型值
條形圖和直方圖都會(huì)用比較高的條形表示變量中的常見(jiàn)值,而用比較矮的條形表示變量中不常見(jiàn)的值煌恢。沒(méi)有條形的位置表示數(shù)據(jù)中沒(méi)有這樣的值骇陈。
作為示例可以從以下直方圖中發(fā)現(xiàn)幾個(gè)有趣的問(wèn)題。
- 為什么重量為整數(shù)克拉和常見(jiàn)分?jǐn)?shù)克拉的鉆石更多瑰抵?
- 為什么位于每個(gè)峰值稍偏右的鉆石比稍偏左的鉆石更多你雌?
- 為什么沒(méi)有重量超過(guò)3克拉的鉆石?
ggplot(smaller,aes(carat))+geom_histogram(binwidth = 0.01)
異常值
異常值是與眾不同的觀測(cè)或者是模式之外的數(shù)據(jù)點(diǎn)二汛。查看鉆石數(shù)據(jù)集中y軸的變量分布:
ggplot(diamonds,aes(y))+geom_histogram(binwidth = 0.5)
此時(shí)y的分布范圍出奇的寬婿崭,我們可以限定它的取值范圍,使用
coord_cartesian()
函數(shù)將y靠近0的部分放大肴颊。
ggplot(diamonds)+geom_histogram(aes(y),binwidth = 0.5)+coord_cartesian(ylim = c(0,50))
這樣就可以看出有三個(gè)異常值氓栈,使用dplyr找出:
unusual <- diamonds %>% filter(y<3|y>20) %>% arrange(y)
unusual
# A tibble: 9 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 1 Very Good H VS2 63.3 53 5139 0 0 0
2 1.14 Fair G VS1 57.5 67 6381 0 0 0
3 1.56 Ideal G VS2 62.2 54 12800 0 0 0
4 1.2 Premium D VVS1 62.1 59 15686 0 0 0
5 2.25 Premium H SI2 62.8 59 18034 0 0 0
6 0.71 Good F SI2 64.1 60 2130 0 0 0
7 0.71 Good F SI2 64.1 60 2130 0 0 0
8 0.51 Ideal E VS1 61.8 55 2075 5.15 31.8 5.12
9 2 Premium H SI2 58.9 57 12210 8.09 58.9 8.06
y變量是鉆石得三維度之一,鉆石的寬度不可能為0婿着,所以這些值肯定是錯(cuò)誤的授瘦,而32mm和59mm的寬度也并不符合客觀事實(shí)
如果要剔除異常值并繪圖醋界,結(jié)果如下:
unusual <- diamonds %>% filter(y>=3&y<=20) %>% arrange(y)
unusual
# A tibble: 53,931 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.2 Premium D VS2 62.3 60 367 3.73 3.68 2.31
2 0.2 Premium F VS2 62.6 59 367 3.73 3.71 2.33
3 0.2 Very Good E VS2 63.4 59 367 3.74 3.71 2.36
4 0.2 Premium D VS2 61.7 60 367 3.77 3.72 2.31
5 0.2 Ideal E VS2 62.2 57 367 3.76 3.73 2.33
6 0.2 Premium E SI2 60.2 62 345 3.79 3.75 2.27
7 0.2 Premium E VS2 59.8 62 367 3.79 3.77 2.26
8 0.2 Ideal D VS2 61.5 57 367 3.81 3.77 2.33
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.2 Premium E VS2 59 60 367 3.81 3.78 2.24
# ... with 53,921 more rows
ggplot(unusual)+geom_histogram(aes(y),binwidth = 0.5)