R:如何从ggplot2中的平滑器中删除异常值?
我有以下数据集,我正试图用ggplot2绘制,它是一个时间序列,由三个实验A1、B1和C1组成,每个实验有三个重复 我试图添加一个统计数据,在返回一个更平滑的数据(均值和方差?)之前检测并删除异常值。我已经编写了我自己的离群值函数(未显示),但我希望已经有一个函数可以这样做,我只是没有找到它 我看过ggplot2书中一些例子中的stat_sum_df(“median_hilow”,geom=“smooth”),但我不理解Hmisc的帮助文档,看它是否删除了异常值 在ggplot中是否有这样一个函数来删除异常值,或者我在哪里修改下面的代码来添加我自己的函数 编辑:我刚刚看到这个()并注意到Hadley建议使用一个健壮的方法,比如rlm。我正在绘制细菌生长曲线,所以我不认为线性模型是最好的,但任何关于其他模型或在这种情况下使用或使用稳健模型的建议都将不胜感激R:如何从ggplot2中的平滑器中删除异常值?,r,ggplot2,statistics,outliers,R,Ggplot2,Statistics,Outliers,我有以下数据集,我正试图用ggplot2绘制,它是一个时间序列,由三个实验A1、B1和C1组成,每个实验有三个重复 我试图添加一个统计数据,在返回一个更平滑的数据(均值和方差?)之前检测并删除异常值。我已经编写了我自己的离群值函数(未显示),但我希望已经有一个函数可以这样做,我只是没有找到它 我看过ggplot2书中一些例子中的stat_sum_df(“median_hilow”,geom=“smooth”),但我不理解Hmisc的帮助文档,看它是否删除了异常值 在ggplot中是否有这样一个函
library (ggplot2)
data = data.frame (day = c(1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7), od =
c(
0.1,1.0,0.5,0.7
,0.13,0.33,0.54,0.76
,0.1,0.35,0.54,0.73
,1.3,1.5,1.75,1.7
,1.3,1.3,1.0,1.6
,1.7,1.6,1.75,1.7
,2.1,2.3,2.5,2.7
,2.5,2.6,2.6,2.8
,2.3,2.5,2.8,3.8),
series_id = c(
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1"),
replicate = c(
"A1.1","A1.1","A1.1","A1.1",
"A1.2","A1.2","A1.2","A1.2",
"A1.3","A1.3","A1.3","A1.3",
"B1.1","B1.1","B1.1","B1.1",
"B1.2","B1.2","B1.2","B1.2",
"B1.3","B1.3","B1.3","B1.3",
"C1.1","C1.1","C1.1","C1.1",
"C1.2","C1.2","C1.2","C1.2",
"C1.3","C1.3","C1.3","C1.3"))
> data
day od series_id replicate
1 1 0.10 A1 A1.1
2 3 1.00 A1 A1.1
3 5 0.50 A1 A1.1
4 7 0.70 A1 A1.1
5 1 0.13 A1 A1.2
6 3 0.33 A1 A1.2
7 5 0.54 A1 A1.2
8 7 0.76 A1 A1.2
9 1 0.10 A1 A1.3
10 3 0.35 A1 A1.3
11 5 0.54 A1 A1.3
12 7 0.73 A1 A1.3
13 1 1.30 B1 B1.1
... etc...
到目前为止,这就是我所拥有的,并且工作得很好,但是异常值并没有被删除:
r <- ggplot(data = data, aes(x = day, y = od))
r + geom_point(aes(group = replicate, color = series_id)) + # add points
geom_line(aes(group = replicate, color = series_id)) + # add lines
geom_smooth(aes(group = series_id)) # add smoother, average of each replicate
r您是否尝试了family=“symmetric”
参数到geom\u smooth
(该参数将依次传递到leash
)?这将使黄土光滑,不受异常值的影响
然而,看看你的数据,为什么你认为线性拟合是不够的?你只有4个x值,而且似乎没有强有力的证据表明偏离了线性。首先,我不确定在如此小的数据上是否正确定义了“异常值”
其次,你必须决定你所说的“异常值”是什么意思,也就是说,它是一种药物,一种复制品,还是一个时间点
正如哈德利所指出的,几乎没有证据表明偏离了线性
最后,我认为使用平滑器的部分意义在于,只要有足够的数据,它可以很好地处理异常值。但你几乎没有
所以,我必须确切地问一下,为什么要删除异常值。也就是说,你打算如何处理这些数据(除了绘制漂亮的曲线图)
我希望这有帮助当我尝试这个时,我得到了错误:未知参数:family
。找到了!正确的语法是geom_-smooth(method=leash,method.args=list(family=“symmetric”)