【发布时间】:2015-08-21 17:52:19
【问题描述】:
我正在尝试确定某些数据是否存在总体趋势。我正在绘制不同排放类型的排放数据(以吨为单位)。我觉得我正在解决这个问题,但也许我不完全理解删除(或隐藏?)异常值如何影响线性模型拟合箱线图。我的方法是为数据本身绘制一些箱线图,并为每个方面叠加一个线性模型,以了解每种排放类型的总体趋势。
有异常值:
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,因为 1999 年箱线图的“NONPOINT”的顶部尾部看起来与前两个图非常接近:
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() 是否在主动删除数据?
我的方法是否存在严重缺陷?我还没有在堆栈或其他地方看到更好的方法来从箱线图中删除异常值。
【问题讨论】:
-
好地方,抱歉打错了。相应地用 lm 更新绘图...
-
没有看到您的数据我不能肯定地说,但是当您将限制设置为 y = 60 时,您正在切断部分数据,从而改变分布。有意义的是,如果您删除 60 以上的值,您会将数据的中位数(和 IQR)向下移动,并且最大晶须也会向下移动。
-
涂鸦 - 这是有道理的,并且可以解释将 Y 限制降低到如此低时线性模型的行为变化。在去除异常值后,将一个安全的方法调整为所有方面的最高胡须(图 3)?
-
这将是一种安全的方法,可能会为您提供更符合您期望的结果。值得注意的是,简单地删除异常值很少是最好的方法。相反,您可能想要探索一种不太可能受到异常值严重影响的更稳健的回归方法。如果这回答了您的问题,请接受下面的答案,以便其他人知道您的问题已得到解决。
-
我不确定你的线性模型在这里是否合适,你的数据看起来非常扭曲。如果您只是在探索数据,那么不要成为纯粹主义者,但如果您想做一些适当的统计,您可能需要查看其他分布,可能是泊松。或询问交叉验证...