[英]Remove outliers fully from multiple boxplots made with ggplot2 in R and display the boxplots in expanded format
[英]Outliers and scales with boxplots: is my linear model being influenced in ggplot2?
我正在嘗試確定某些數據是否存在總體趨勢。 我正在繪制不同排放類型的排放數據(噸)。 我覺得我正在正確地解決問題,但是也許我不完全了解移除(或隱藏?)離群值如何影響盒裝圖上的線性模型。 我的方法是為數據本身繪制一些箱形圖,並為每個方面覆蓋一個線性模型,以了解每種排放類型的總體趨勢。
有異常值:
q <- ggplot(balt, aes(year, Emissions))
q +
geom_boxplot(aes(color=factor(year))) +
facet_grid(.~type)
geom_smooth(method='lm')
產生:
沒有異常值:
q +
geom_boxplot(aes(color=factor(year)), outlier.shape=NA) +
facet_grid(.~type)
geom_smooth(method='lm')
產生:
顯然,我想調整Y軸的大小,因此我將Y的上限設置為80,因為“ NONPOINT”的1999年箱形圖的左上角看起來很接近前兩個圖:
q +
geom_boxplot(aes(color=factor(year)), outlier.shape=NA) +
scale_y_continuous(limits=c(0,80)) +
facet_grid(.~type)
geom_smooth(method='lm')
產生:
為了證明它正在調整大小,我將Y上限重新設置為60,其中“ NONPOINT” 1999箱形圖明顯越過:
我對最終劇情的警告如下:
Warning messages:
1: Removed 4 rows containing non-finite values (stat_boxplot).
2: Removed 24 rows containing non-finite values (stat_boxplot).
3: Removed 9 rows containing non-finite values (stat_boxplot).
4: Removed 4 rows containing missing values (stat_smooth).
5: Removed 24 rows containing missing values (stat_smooth).
6: Removed 9 rows containing missing values (stat_smooth).
7: Removed 9 rows containing missing values (geom_point).
8: Removed 17 rows containing missing values (geom_point).
9: Removed 17 rows containing missing values (geom_point).
10: Removed 17 rows containing missing values (geom_point).
11: Removed 1 rows containing missing values (geom_point).
12: Removed 1 rows containing missing values (geom_point).
13: Removed 1 rows containing missing values (geom_point).
14: Removed 2 rows containing missing values (geom_point).
15: Removed 20 rows containing missing values (geom_point).
16: Removed 52 rows containing missing values (geom_point).
17: Removed 59 rows containing missing values (geom_point).
18: Removed 41 rows containing missing values (geom_point).
19: Removed 1 rows containing missing values (geom_point).
20: Removed 7 rows containing missing values (geom_point).
21: Removed 10 rows containing missing values (geom_point).
22: Removed 43 rows containing missing values (geom_point).
18: Removed 10 rows containing missing values (geom_point).
19: Removed 43 rows containing missing values (geom_point).
我不太了解非限定值的含義,但是其他警告似乎只是在消除異常值? 我在這里可能是錯的,但我不知道該怎么猜。
最后,將Y上限設置為20會產生相互矛盾的線性模型結果:
在以前將“ NONPOINT”建模為負斜率的情況下,現在顯示為正斜率。 顯然,框線圖的大小會影響模型。 outlier.shape=NA
和scale_y_continuous()
正在主動刪除數據?
我的方法存在嚴重缺陷嗎? 我還沒有在堆棧上或其他地方看到過更好的方法來從盒圖中移除異常值。
評論太長,因此無法回答。 沒有看到您的數據我無法確定,但是當您將限制設置為y = 60
,您將切斷部分數據,從而更改分布。 如果您刪除大於60的值,則會使數據的中位數(和IQR)向下移動,而最大晶須也會向下移動。 當您限制y = 20
,您將截斷大量數據,從而獲得截然不同的結果,因為來自每個時間點的數據由於各自分布的差異而不會以相同的方式受到影響。
因此,要回答您的問題,由於要引入數據的人為限制, lm
(實際上是ggplot2
一部分)會受到ggplot2
影響。
有許多方法可以處理異常值,但是您可能希望在ggplot2
之外處理它們。 一種選擇是在每個時間點刪除> +/- 3 SD的值。 另一個是轉換您的數據。 您可能需要探索平方根變換,對數變換以及逆/倒數變換(按嚴重性遞增的順序)。 因此,如果日志轉換還不夠,則可以使用下一個轉換級別。 Box-Cox自動運行所有轉換,因此您可以選擇最佳轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.