新冠肺炎疫情期間本職工作比較忙。河胎。馏锡。好久沒更新簡書了OTL
筆記說明
讀《Discovering Statistics Using R》第四章 Exploring data with graphs中的4.7節(jié)箱形圖 以及5.8.1節(jié) 處理離群值 做的筆記示括。主要是介紹箱形圖和離群值览效。之前本系列筆記跳過了第四章的內(nèi)容,因為對于用R作圖我打算另開文集來寫的逛漫。特意又跳回4.7節(jié)是因為按照之前筆記順序該做如何處理離群值的內(nèi)容了黑低。
示例數(shù)據(jù)
一個生物學家懷疑音樂節(jié)會對人的健康產(chǎn)生影響,他找了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)離群值后有幾種常用方法可以減少離群值對分析的影響塞蹭。在應(yīng)用這些方法前需要先檢查一下離群值是否是數(shù)據(jù)錯誤錄入造成孽江。如果數(shù)據(jù)錄入無誤讶坯,主要有三種處理方法:
- 剔除離群值
當有理由認為該樣本不屬于目標總體時可以采用這種方式。 - 數(shù)據(jù)轉(zhuǎn)換
- 更改測量值
常見的具體更改方法:
(1)用次高或次低的測量值替代
(2)用Z分數(shù)反推出替代值岗屏。
Z值大于3.29也是判定離群值的一種方法辆琅。據(jù)此可以反推Z值為3.29時對應(yīng)測量值應(yīng)該是多少:,用該值代替離群值
(3)均值加或減2倍標準差,
用if_else()或ifelse()進行數(shù)據(jù)修改
有理由認為這個20.02的離群值應(yīng)該是2.02由于錯誤錄入造成的这刷。這時應(yīng)該去找原始數(shù)據(jù)進行核實婉烟。假設(shè)我們經(jīng)核實確實應(yīng)該是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ù)分布大致對稱。另外联予,觸須以外的點展示了離群值的情況啼县。