我有以下数据集,我试图用ggplot2绘图,它是三个实验A1,B1和C1的时间序列,每个实验有三个重复.
我想添加一个stat,它可以在返回更平滑(均值和方差?)之前检测并删除异常值.我已经编写了自己的异常函数(未显示),但我希望已经有一个函数来执行此操作,我只是没有找到它.
我从ggplot2书中的一些例子看过stat_sum_df("median_hilow",geom ="smooth"),但我不明白Hmisc的帮助文档,看它是否删除了异常值.
是否有一个函数可以在ggplot中删除这样的异常值,或者我在哪里修改我的代码以添加我自己的函数?
编辑:我刚看到这个(如何在R代码中使用异常值测试)并注意到Hadley建议使用一个强大的方法,如rlm.我正在绘制细菌生长曲线,所以我不认为线性模型是最好的,但是在这种情况下对其他模型或使用或使用稳健模型的任何建议都将受到重视.
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 …Run Code Online (Sandbox Code Playgroud) 我想找到检测异常值的最佳方法.这是问题和一些可能不起作用的事情.假设我们想要从mysql中的脏varchar(50)列中删除一些准统一数据.让我们从字符串长度进行分析开始.
| strlen | freq |
| 0 | 2312 |
| 3 | 45 |
| 9 | 75 |
| 10 | 15420 |
| 11 | 395 |
| 12 | 114 |
| 19 | 27 |
| 20 | 1170 |
| 21 | 33 |
| 35 | 9 |
Run Code Online (Sandbox Code Playgroud)
我想要做的是设计一种算法来确定哪个字符串长度有可能是有目的的唯一而不是类型或随机垃圾.该字段有可能是"枚举"类型,因此有效值可能有几个频率峰值.显然10和20都有效,0只是省略数据.35和3可能是一些随机垃圾,尽管两者的频率差别很大.19和21可能是20格式的type-os.11可能是10的type-os,但是12呢?
似乎只是使用发生频率%是不够的.需要在明显的异常值周围存在更高"仅错误"概率的热点.
此外,当有15个独特长度可以在5-20个字符之间变化时,具有固定阈值失败,每个字符在7%-20%之间出现.
标准偏差不起作用,因为它依赖于平均值.中位绝对偏差可能不会起作用,因为你可以有一个不能丢弃的高频率异常值.
是的,将有其他参数用于清理代码中的数据,但长度似乎非常快速地预过滤和分类具有任何数量结构的字段.
有没有任何已知的方法可以有效地工作?我不太熟悉贝叶斯过滤器或机器学习,但也许他们可以提供帮助?
谢谢!莱昂
在计算相关性时如何告诉R删除异常值?我从散点图中发现了一个潜在的异常值,并且我试图比较有和没有这个值的相关性.这是一个介绍统计课程; 我只是在玩这些数据来开始理解相关性和异常值.
我的数据如下:
"Australia" 35.2 31794.13
"Austria" 29.1 33699.6
"Canada" 32.6 33375.5
"CzechRepublic" 25.4 20538.5
"Denmark" 24.7 33972.62
...
Run Code Online (Sandbox Code Playgroud)
等等,对于26行数据.我试图找到第一个和第二个数字的相关性.
我确实读过这个问题,但是,我只想删除一个点,而不是一个百分点.R中是否有命令执行此操作?
我试图让ggplot2的geom_boxplot的胡须覆盖异常值.事实上,异常值不会显示为点,因为它们被箱图包围.
如果我使用标准的'boxplot',我将使用:
boxplot(x, range=n)
Run Code Online (Sandbox Code Playgroud)
其中ñ将是一个大数目,使得,而不是显示异常值,该箱线图的胡子延伸覆盖异常值.
如何用ggplot2完成?我试过了:
ggplot(myDF, aes(x=x, y=y)) +
geom_boxplot(range = 5)
Run Code Online (Sandbox Code Playgroud)
注意:我不想使用以下内容丢弃异常值:
geom_boxplot(outlier.shape = NA)
Run Code Online (Sandbox Code Playgroud) 我正在生成一个带有固定异常值数据的热图,我需要将这些异常值显示为我使用的“热”的 cmap 调色板中的颜色。通过使用 cmap.set_bad('green') 和 np.ma.masked_values(data, outlier),我得到了一个看起来正确的图,但是即使我使用 cmap.set_over,颜色条也没有与数据正确同步('绿色')。这是我一直在尝试的代码:
plt.xlim(0,35)
plt.ylim(0,35)
img=plt.imshow(data, interpolation='none',norm=norm, cmap=cmap,vmax=outlier)
cb_ax=fig.add_axes([0.85, 0.1, 0.03, 0.8])
cb=mpl.colorbar.ColorbarBase(cb_ax,cmap=cmap,norm=norm,extend='both',spacing='uniform')
cmap.set_over('green')
cmap.set_under('green')
Run Code Online (Sandbox Code Playgroud)
这是数据(异常值显然是 1.69):
Data;A;B;C;D;E;F;G;H;I;J;K
A;1.2;0;0;0;0;1.69;0;0;1.69;1.69;0
B;0;0;0;0;0;1.69;0;0;1.69;1.69;0
C;0;0;0;0;0;1.69;0;0.45;1.69;1.69;0.92
D;1;0;-0.7;-1.2;0;1.69;0;0;1.69;1.69;0
E;0;0;0;0;0;1.69;0;0;1.69;1.69;0
F;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69
G;0;0;0;0;0;1.69;0;0;1.69;1.69;0
H;0;0;0;0;0;1.69;0;0;1.69;1.69;0
I;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69
J;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69
K;0;0;0;0;0;1.69;0;0;1.69;1.69;0
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助
在我的项目中,我的目标之一是在航空发动机数据中找到异常值,并选择使用复制器神经网络来执行此操作,并阅读有关此数据的以下报告(http://citeseerx.ist.psu.edu/viewdoc/download ?doi = 10.1.1.12.3366&rep = rep1&type = pdf),并且对逐步函数(图3,第4页)和由于该函数的预测值略有了解。
在上面的报告中最好地描述了复制器神经网络,但作为背景,我构建的复制器神经网络的工作原理是具有与输入相同的输出数量,并具有3个具有以下激活功能的隐藏层:
隐藏层1 = tanh Sigmoid S1(?)= tanh,隐藏层2 =逐步,S2(?)= 1/2 + 1 /(2(k?1)){求和每个变量j} tanh [a3( ??j / N)]隐藏层3 =正弦S1(?)= tanh,输出层4 =正弦S3(?)= 1/1 + e ^-?我已经实现了该算法,而且似乎正在训练中(因为均方误差在训练过程中不断减小)。我唯一不了解的是应用带有逐步激活功能的中间层时如何进行预测,因为这会使3个中间节点的激活成为特定的离散值(例如,我对3个节点的最后一次激活)中间是1.0,-1.0、2.0),这会使这些值向前传播,并且每次我得到的预测都非常相似或完全相同。
第3-4页的报告中的部分最能说明算法,但是我不知道该如何解决,我也没有太多时间:(
任何帮助将不胜感激。
谢谢
我试图标签上使用卡方QQ图离群mvOutlier()的功能MVN包R。
我设法通过标签识别异常值并获得它们的x坐标。我尝试使用 将前者放在图上text(),但x和y坐标似乎被翻转了。
基于文档中的示例:
library(MVN)
data(iris)
versicolor <- iris[51:100, 1:3]
# Mahalanobis distance
result <- mvOutlier(versicolor, qqplot = TRUE, method = "quan")
labelsO<-rownames(result$outlier)[result$outlier[,2]==TRUE]
xcoord<-result$outlier[result$outlier[,2]==TRUE,1]
text(xcoord,label=labelsO)
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:

我也试过text(x = xcoord, y = xcoord,label = labelsO),当点靠近 y = x 线时很好,但当不满足正态性时可能会失败(并且点偏离这条线)。
有人可以建议如何访问卡方分位数或为什么函数的x坐标text()似乎不服从输入参数。
我有一个数据帧和一个预测模型,我想应用于数据.但是,我想过滤掉模型可能不适用的记录.为此,我有另一个数据帧,其中包含每个变量在训练数据中观察到的最小值和最大值.我想从我的新数据中删除那些一个或多个值超出指定范围的记录.
为了使我的问题清楚,这就是我的数据可能是这样的:
id x y
---- ---- ---------
1 2 30521
2 -1 1835
3 5 25939
4 4 1000000
Run Code Online (Sandbox Code Playgroud)
这是我的第二张桌子,包括分钟和最大值,看起来像:
var min max
----- ----- -------
x 1 5
y 0 99999
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想在我的数据中标记以下记录:2(低于x的最小值)和4(高于y的最大值).
我怎么能在R中轻松做到这一点?我有预感,有一些聪明的dplyr代码可以完成这项任务,但我不知道它会是什么样子.
我想知道是否可以在 scikit-learn 的管道中包含 scikit-learn 异常值检测,例如隔离森林?
所以这里的问题是我们只想在训练数据上拟合这样的对象,而在测试数据上什么都不做。特别是,人们可能想在这里使用交叉验证。
解决方案如何?
构建一个继承自 TransformerMixin(以及用于 ParameterTuning 的 BaseEstimator)的类。现在定义一个 fit_transform 函数,用于存储该函数是否已被调用的状态。如果尚未调用,则该函数会拟合并预测数据上的异常值函数。如果之前已经调用过该函数,则已经对训练数据调用了异常值检测,因此我们假设我们现在找到了我们简单返回的测试数据。
这种方法有机会奏效还是我在这里遗漏了什么?
我试图用我的密度图识别异常值。我目前正在使用 seaborn 库来绘制我的数据。我将如何识别异常值?我一直在考虑使用 stats 库实现 Z-score,这是唯一可以实现的方法,这不能在密度图中完成吗?
outliers ×10
r ×5
python ×3
ggplot2 ×2
statistics ×2
boxplot ×1
colorbar ×1
correlation ×1
database ×1
density-plot ×1
heatmap ×1
label ×1
matplotlib ×1
sanitization ×1
scikit-learn ×1
scipy ×1
seaborn ×1