《Discovering Statistics Using R》筆記6-箱形圖和離群值

新冠肺炎疫情期間本職工作比較忙。。。好久沒更新簡書了OTL

筆記說明

讀《Discovering Statistics Using R》第四章 Exploring data with graphs中的4.7節(jié)箱形圖 以及5.8.1節(jié) 處理離群值 做的筆記。主要是介紹箱形圖和離群值。之前本系列筆記跳過了第四章的內容,因為對于用R作圖我打算另開文集來寫的。特意又跳回4.7節(jié)是因為按照之前筆記順序該做如何處理離群值的內容了。

示例數(shù)據(jù)

一個生物學家懷疑音樂節(jié)會對人的健康產生影響,他找了810個音樂會觀眾,收集了音樂節(jié)三天他們的衛(wèi)生情況,衛(wèi)生情況得分0-4.我們使用該數(shù)據(jù)的未去除極端值的版本DownloadFestival.dat

# 數(shù)據(jù)導入
library(rio)
dlf <- import("data/DownloadFestiva.dat")
head(dlf)
##   ticknumb gender day1 day2 day3
## 1     2111   Male 2.64 1.35 1.61
## 2     2229 Female 0.97 1.41 0.29
## 3     2338   Male 0.84   NA   NA
## 4     2384 Female 3.03   NA   NA
## 5     2401 Female 0.88 0.08   NA
## 6     2405   Male 0.85   NA   NA

箱形圖

箱形圖是展示連續(xù)性變量情況很好的方法。
箱體的中間表示中位數(shù)
箱體的兩端表示為下四分位數(shù)(Q1)和上四分位數(shù)(Q3)
箱體兩端向外分出兩條“觸須”,觸須長度不超過1.5倍的四分位間距(interquartile range IQR=Q3-Q1)

接下來我們使用箱形圖來分性別(gender)展示示例數(shù)據(jù)中第一天衛(wèi)生評分的情況(day1):

library(ggplot2)
festivalBoxplot <- ggplot(dlf, aes(gender, day1)) +
    geom_boxplot() + labs(x = "Gender", y = "Hygiene (Day 1 of Festival)")

在生成的箱形圖中我們可以看到女性組里有一個明顯的離群值(outlier)。

離群值

離群值(outlier)也叫異常值,簡單來說就是與其他數(shù)據(jù)點明顯不同的測量值。在箱形圖中:
大于上四分位數(shù)+1.5倍四分位間距的值或者小于下四分位數(shù)-1.5倍四分位間距的值被定義為離群值。
大于上四分位數(shù)+3倍四分位間距的值或者小于下四分位數(shù)-3倍四分位間距的值被定義為極端離群值(extreme outliers)。
離群值對一些統(tǒng)計量影響很大(比如均值),因此有時需要留意。

我們對原始數(shù)據(jù)按照day1變量降序排列后可以找到那個離群值:

library(dplyr)
dlf <- dlf %>% arrange(desc(day1))
head(dlf)
##   ticknumb gender  day1 day2 day3
## 1     4158 Female 20.02 2.44   NA
## 2     4016 Female  3.69   NA   NA
## 3     3374   Male  3.58 3.35   NA
## 4     4264   Male  3.44   NA   NA
## 5     3371 Female  3.41   NA   NA
## 6     3338 Female  3.38   NA   NA

離群值的處理

發(fā)現(xiàn)離群值后有幾種常用方法可以減少離群值對分析的影響。在應用這些方法前需要先檢查一下離群值是否是數(shù)據(jù)錯誤錄入造成。如果數(shù)據(jù)錄入無誤,主要有三種處理方法:

  • 剔除離群值
    當有理由認為該樣本不屬于目標總體時可以采用這種方式。
  • 數(shù)據(jù)轉換
  • 更改測量值
    常見的具體更改方法:
    (1)用次高或次低的測量值替代
    (2)用Z分數(shù)反推出替代值。
    Z值大于3.29也是判定離群值的一種方法。據(jù)此可以反推Z值為3.29時對應測量值應該是多少:X=(Z×s)+\overline{X},用該值代替離群值
    (3)均值加或減2倍標準差,

用if_else()或ifelse()進行數(shù)據(jù)修改

有理由認為這個20.02的離群值應該是2.02由于錯誤錄入造成的。這時應該去找原始數(shù)據(jù)進行核實。假設我們經核實確實應該是2.02,現(xiàn)在把它改正。
這里我使用dplyr包的if_else()進行數(shù)據(jù)修改,其用法和R自帶的ifelse()基本一致:if_else(condition, true, false, missing = NULL),當condition的判斷為TRUE時返回true參數(shù)的值,當condition的判斷為FALSE時返回false參數(shù)的值。

dlf$day1 <- if_else(dlf$day1 == 20.02, 2.02, dlf$day1)
head(dlf)
##   ticknumb gender  day1 day2 day3
## 1     4158 Female  2.02 2.44   NA
## 2     4016 Female  3.69   NA   NA
## 3     3374   Male  3.58 3.35   NA
## 4     4264   Male  3.44   NA   NA
## 5     3371 Female  3.41   NA   NA
## 6     3338 Female  3.38   NA   NA

修改后再做一次箱形圖:



從箱形圖中我們可以看出數(shù)據(jù)分布的范圍、中位數(shù)水平、中間50%的數(shù)據(jù)分布的范圍(箱體)、最高25%的數(shù)據(jù)分布范圍和最低25%的數(shù)據(jù)分布范圍。通過箱形圖還可以看出數(shù)據(jù)分布是否對稱:如果上下觸須長度相近則數(shù)據(jù)分布大致對稱。另外,觸須以外的點展示了離群值的情況。

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

友情鏈接更多精彩內容