如何提取boxplot里的时间序列异常值处理序列

如何用SPSS探测及检验异常值3收藏分享举报{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[],&title&:&如何用SPSS探测及检验异常值&,&author&:&lu-shang-de-ni-36&,&content&:&\u003Cp\u003E\u003Cb\u003E如何用SPSS探测及检验异常值\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E一、采用数据探索过程探测异常值\u003C\u002Fp\u003E\u003Cp\u003ESPSS菜单实现程序为: 主菜单–&“Analyze”–&“Descriptive Statistics”–&“Explore……”选项–&“Statistics”按钮–&选中“Outliers”复选框。输出结果中将列出5个最大值和5个最小值作为异常的嫌疑值。\u003C\u002Fp\u003E\u003Cp\u003E二、采用箱线图(boxplot)探测异常值\u003C\u002Fp\u003E\u003Cp\u003E箱线图比较直观、形象,易于理解,因此它在统计分析中占有非常重要的地位。\u003C\u002Fp\u003E\u003Cp\u003E1. 利用上述的数据探测过程,在“Explore”对话框中单击“Plots”,出现如图2所示的对话框,通过“Boxplots”方框可以确定箱线图的生成方式。“Factor levels together”复选框表示将要为每个因变量创建一个箱线图,“Dependent together”复选框表示将为每个分组变量水平创建箱线图,“None”复选框表示不创建箱线图。\u003C\u002Fp\u003E\u003Cp\u003E2. 直接利用SPSS中的画图功能实现箱线图,SPSS给出了两种箱线图,一种是基本箱线图,另一种是交互式箱线图。基本箱线图的SPSS菜单实现为:点击主菜单中的“Graphs”选项,在弹出的一级菜单中选择“Boxplot……”选项。交互式箱形图的SPSS菜单实现为:点击主菜单中的“Graphs”选项,在弹出的一级菜单中点击“Interactive”选项,在弹出的二级菜单中选择“Boxplot……”选项。下面仍以A公司雇员分工种的开始工资为例构造基本箱线图(如图3)。箱线图中的“○”表示可疑的异常值,此处异常值的确定采用的是“五数概括法”,即:变量值超过第75百分位点和25百分位点上变量值之差的1.5倍(箱体上方)或变量值小于第75百分位点和25百分位点上变量值之差的1.5倍(箱体下方)的点对应的值。\u003C\u002Fp\u003E\u003Cp\u003E三、SPSS 14 后的新功能 Data –& Validation:???如何设置。。。\u003C\u002Fp\u003E\u003Cp\u003E四、Z分标准化法(3δ法):±3δ 以外的数据为高度异常值,应予剔除。\u003C\u002Fp\u003E\u003Cp\u003E五、数据异常值的检验\u003C\u002Fp\u003E\u003Cp\u003ESPSS中没有提供直接检验异常数据的工具,但是使用SPSS能使异常值的检验工作变得非常方便。通过SPSS中的Frequencies等过程,可以对指定变量的数据同时得到均值、方差等统计量,代入上述的公式,结合查表,很快就能得出检验结果。在多个异常数据下,使用SPSS更显方便,因为剔除前一个异常数据后,需要对剩余的数据重新计算均值和方差,如果数据很多,用手工计算将是很烦琐的事情,而且准确度不高。而通过SPSS,只需要重新选择数据以后,重复一次Frequencies过程的操作就可以了。\u003C\u002Fp\u003E\u003Cp\u003E分别对含异常值和删去异常值两种情况下的数据进行分析,并比较后才能增加可信度,避免误删。\u003C\u002Fp\u003E\u003Cp\u003E六、SPSS中异常值的剔除\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E发现异常值后,把大于等于最小异常值或小于等于最大异常值的值用Data主菜单里的Cases Select子菜单里的条件设置按钮,就可以自动剔除异常值。\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fcda.pinggu.org\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Ecda数据分析师培训\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T12:00:57.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&collapsedCount&:0,&likeCount&:3,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&SPSS&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&SPSS 数据分析&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&数据挖掘 SPSS&}],&adminClosedComment&:false,&titleImageSize&:{&width&:0,&height&:0},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&tipjarState&:&closed&,&annotationAction&:[],&sourceUrl&:&&,&pageCommentsCount&:0,&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T20:00:57+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:null,&isFollowing&:false,&hash&:&da2ed1e44cba642656ede2a1ff0fb578&,&uid&:415700,&isOrg&:false,&slug&:&ai-wo-de-tian&,&isFollowed&:false,&description&:&&,&name&:&诶我的天&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fai-wo-de-tian&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&我这么好看 可不能胖啊&,&isFollowing&:false,&hash&:&e310b7ff8df1a10af85346&,&uid&:180900,&isOrg&:false,&slug&:&qing-fang-jiang&,&isFollowed&:false,&description&:&爱音乐的死宅&,&name&:&清芳酱&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fqing-fang-jiang&,&avatar&:{&id&:&3adb0cf749cfa31d2c91ff7&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&心理语言学(第二语言习得)在读,伪文青,要考博&,&isFollowing&:false,&hash&:&8d2a4bf8d09af90068fb3e&,&uid&:451900,&isOrg&:false,&slug&:&onegaofei&,&isFollowed&:false,&description&:&其实,我是一名演员。&,&name&:&高小河&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fonegaofei&,&avatar&:{&id&:&v2-28aa82cf1c62fffe&,&template&:&https:\u002F\u002Fpic1.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cb\u003E如何用SPSS探测及检验异常值\u003C\u002Fb\u003E一、采用数据探索过程探测异常值SPSS菜单实现程序为: 主菜单–&“Analyze”–&“Descriptive Statistics”–&“Explore……”选项–&“Statistics”按钮–&选中“Outliers”复选框。输出结果中将列出5个最大值和5个最小值作为异…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&annotationDetail&:null,&commentsCount&:0,&likesCount&:3,&FULLINFO&:true}},&User&:{&lu-shang-de-ni-36&:{&isFollowed&:false,&name&:&路上的你&,&headline&:&&,&avatarUrl&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-0cabea06ed2a063bb6af6fd_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&lu-shang-de-ni-36&,&bio&:&数据分析师&,&hash&:&ccad8e912697bdb17e20dd&,&uid&:498300,&isOrg&:false,&description&:&&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Flu-shang-de-ni-36&,&avatar&:{&id&:&v2-0cabea06ed2a063bb6af6fd&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&growthSearch&:&s1&,&nwebQAGrowth&:&experiment&,&qawebRelatedReadingsContentControl&:&close&,&liveStore&:&ls_a2_b2_c1_f2&,&qawebThumbnailAbtest&:&new&,&nwebSearch&:&nweb_search_heifetz&,&enableVoteDownReasonMenu&:&enable&,&showVideoUploadAttention&:&true&,&isOffice&:&false&,&enableTtsPlay&:&post&,&newQuestionDiversion&:&true&,&wechatShareModal&:&wechat_share_modal_show&,&newLiveFeedMediacard&:&old&,&androidPassThroughPush&:&all&,&hybridZhmoreVideo&:&no&,&nwebGrowthPeople&:&default&,&nwebSearchSuggest&:&default&,&qrcodeLogin&:&qrcode&,&androidDbFollowRecommendHide&:&open&,&isShowUnicomFreeEntry&:&unicom_free_entry_off&,&newMobileColumnAppheader&:&new_header&,&androidDbCommentWithRepinRecord&:&open&,&feedHybridTopicRecomButtonIcon&:&yes&,&androidDbRecommendAction&:&open&,&zcmLighting&:&zcm&,&androidDbFeedHashTagStyle&:&button&,&appStoreRateDialog&:&close&,&topWeightSearch&:&new_top_search&,&default&:&None&,&isNewNotiPanel&:&no&,&androidDbRepinSelection&:&open&,&growthBanner&:&default&,&androidProfilePanel&:&panel_b&}},&columns&:{&next&:{}},&columnPosts&:{},&columnSettings&:{&colomnAuthor&:[],&uploadAvatarDetails&:&&,&contributeRequests&:[],&contributeRequestsTotalCount&:0,&inviteAuthor&:&&},&postComments&:{},&postReviewComments&:{&comments&:[],&newComments&:[],&hasMore&:true},&favlistsByUser&:{},&favlistRelations&:{},&promotions&:{},&switches&:{&couldSetPoster&:false},&draft&:{&titleImage&:&&,&titleImageSize&:{},&isTitleImageFullScreen&:false,&canTitleImageFullScreen&:false,&title&:&&,&titleImageUploading&:false,&error&:&&,&content&:&&,&draftLoading&:false,&globalLoading&:false,&pendingVideo&:{&resource&:null,&error&:null}},&drafts&:{&draftsList&:[],&next&:{}},&config&:{&userNotBindPhoneTipString&:{}},&recommendPosts&:{&articleRecommendations&:[],&columnRecommendations&:[]},&env&:{&edition&:{&baidu&:false,&yidianzixun&:false,&qqnews&:false},&isAppView&:false,&appViewConfig&:{&content_padding_top&:128,&content_padding_bottom&:56,&content_padding_left&:16,&content_padding_right&:16,&title_font_size&:22,&body_font_size&:16,&is_dark_theme&:false,&can_auto_load_image&:true,&app_info&:&OS=iOS&},&isApp&:false,&userAgent&:{&ua&:&Mozilla\u002F5.0 (compatible, MSIE 11, Windows NT 6.3; Trident\u002F7.0; rv:11.0) like Gecko&,&browser&:{&name&:&IE&,&version&:&11&,&major&:&11&},&engine&:{&version&:&7.0&,&name&:&Trident&},&os&:{&name&:&Windows&,&version&:&8.1&},&device&:{},&cpu&:{}}},&message&:{&newCount&:0},&pushNotification&:{&newCount&:0}}关注今日:3 | 主题:114342
微信扫一扫
求助:用perl从FASTA文件里提取某些序列
页码直达:
这个帖子发布于7年零82天前,其中的信息可能已发生改变或有所发展。
各位大侠,本人perl初学者,遇一问题无法解决,特来求助:说明:文件“seq.fasta”里有上千条fasta格式的序列,如下所示:
&jgi|Trire2|71126|e_gw1.63.1.1
YKVAFILFFTFFSFFYKVAFIFFFTPSPFFFKVAFILFFTFSLFFYKVAFILFFTFSPSFYKVAFILFFT
PSLSFYKVAFILFFTPSSSFYKVAFILFFTLSSS
&jgi|Trire2|109199|fgenesh5_pg.C_scaffold_
YKLKGLGKEFKLKFKAEFKIKFKVKFKAEFKAGKEFKVEFKAEFKLKFKLEFKAIISLKLLLFLLPKLST
文件"RUTC30"里有我想要序列的表头信息,如:71126
.....我打算用perl根据文件"RUTC30"从“seq.fasta”文件里提取我想要的序列,试编程如下,不知问题出在哪里?#!/usr/bin/perl -w$inputfilename1 = "seq.fasta";$inputfilename2 = "RUTC30";$outputfilename = "result.fasta";open if1, "$inputfilename1";open if2, "$inputfilename2";open of1, "$outputfilename";while ($line = &if1&){ chomp $
if (substr ($line,0,1) eq '&')
{$name = $
else { $seqs{$name} .= $
}}while ($L = &if2&){ chomp $L;
foreach $s (keys %seqs)
{ if ($s =~ /^&jgi|Trire2|($L)/)
{ print of1 $s;
}}close if1;close if2;close of1;print "\nDone~!\n\nPress &Enter& to quit ...";&&;
不知道邀请谁?试试他们
微信扫一扫
广告宣传推广
政治敏感、违法虚假信息
恶意灌水、重复发帖
违规侵权、站友争执
附件异常、链接失效
open of1, "$outputfilename";少了一个“&”,要写成open of1, "&$outputfilename";
微信扫一扫
广告宣传推广
政治敏感、违法虚假信息
恶意灌水、重复发帖
违规侵权、站友争执
附件异常、链接失效
archen_dog open of1, "$outputfilename";少了一个“&”,要写成open of1, "&$outputfilename";谢谢你的建议,改为 "&$outputfilename"后,仍然无法运行,还是有问题。。。
微信扫一扫
广告宣传推广
政治敏感、违法虚假信息
恶意灌水、重复发帖
违规侵权、站友争执
附件异常、链接失效
/^&jgi|Trire2|($L)/的时候要写成/^&jgi\|Trire2\|($L)/我写了一个你自己试试吧,你的程序逻辑不太好。#!/usr/bin/perl
open(LIST,"RUTC30")||die "$!";
while(&LIST& ){
&&&&&&my ($name)=$_=~/^(\S+)/;&&$hash{$name}=1;}close(LIST); open(IN,"seq.fasta")||die "$!";
open(OUT,"&result.fasta")||die "$!"; local $/ = "&";while(&IN& ){
my ($head,$seq) = split(/\n/,$_,2);
next unless($head && $seq);
$seq=~s/\s+//g;&&
$head=~s/\s+$//;&&
my ($name)=$head=~/^\S+\|\S+\|(\d+)/;&&
if(exists $hash{$name}){&&
&&print OUT "&$head\n$seq\n";&&
}}close(IN);close(OUT);
微信扫一扫
广告宣传推广
政治敏感、违法虚假信息
恶意灌水、重复发帖
违规侵权、站友争执
附件异常、链接失效
关于丁香园数据中的异常值是该保留还是丢弃?_突袭网
当前位置&:&&&&数据中的异常值是该保留还是丢弃?
热门标签:&
数据中的异常值是该保留还是丢弃?
编辑:李利平评论:
关注公众号
回复“”得到
回复“大数据”得到大数据学习资料
回复“经典”下载经典影音 动漫 周星驰合集 余罪 等好料
回复“ppt”“Excel”“简历”得到几千套工作模板
欢迎转发朋友圈
返回搜狐,查看更多 责任编辑:
更多精彩 >>>R语言:异常数据处理
在数据处理中,尤其在作函数拟合时,异常点的出现不仅会很大程度的改变函数拟合的效果,而且有时还会使得函数的梯度出现奇异梯度,这就导致算法的终止,从而影响研究变量之间的函数关系。为了有效的避免这些异常点造成的损失,我们需要采取一定的方法对其进行处理,而处理的第一步便是找到异常点在数据中的位置。
什么是异常值?如何检测异常值?
1. 单变量异常值检测
2. 使用LOF(local outlier factor,局部异常因子)进行异常检测
3. 通过聚类的方法检验异常值
4. 检验时间序列数据里面的异常值
主要程序包
install.packages(c(&DMwR&,&dprep&))
library(DMwR)
library(dprep)
1. 单变量异常值检测
这节主要讲单变量异常值检测,并演示如何将它应用到多元(多个自变量)数据中。使用函数boxplot.stats()实现单变量检测,该函数根据返回的统计数据生成箱线图。在上述函数的返回结果中,有一个参数out,它是由异常值组成的列表。更明确的说就是里面列出了箱线图中箱须线外面的数据点。其中参数coef可以控制箱须线从箱线盒上延伸出来的长度,关于该函数的更多细节可以通过输入‘?boxplot.ststs’查看。
画箱线图:
set.seed(3147)
#产生100个服从正态分布的数据
x &- rnorm(100)
summary(x)
#输出异常值
boxplot.stats(x)$out
#绘制箱线图
boxplot(x)
如上的单变量异常检测可以用来发现多元数据中的异常值,通过简单搭配的方式。在下例中,我们首先产生一个数据框df,它有两列x和y。之后,异常值分别从x和y检测出来。然后,我们获取两列都是异常值的数据作为异常数据。
x &- rnorm(100)
y &- rnorm(100)
# 生成一个包含列名分别为x与y的数据框df
df &- data.frame(x, y)
# 连接数据框df
attach(df)
# 输出x中的异常值
(a &- which(x %in% boxplot.stats(x)$out))
# 输出y中的异常值
(b &- which(y %in% boxplot.stats(y)$out))
# 断开与数据框的连接
detach(df)
# 输出x,y相同的异常值
(outlier.list1 &- intersect(a,b))
# 标注异常点
points(df[outlier.list1,], col=&red&, pch=&+&, cex=2.5)
# x或y中的异常值
(outlier.list2 &- union(a, b))
points(df[outlier.list2,], col=&blue&, pch=&x&, cex=2)
当有三个以上的变量时,最终的异常值需要考虑单变量异常检测结果的多数表决。当选择最佳方式在真实应用中进行搭配时,需要涉及领域知识。
2. 使用LOF(local outlier factor,局部异常因子)进行异常检测
LOF(局部异常因子)是一种基于密度识别异常值的算法。算法实现是:将一个点的局部密度与分布在它周围的点的密度相比较,如果前者明显的比后者小,那么这个点相对于周围的点来说就处于一个相对比较稀疏的区域,这就表明该点事一个异常值。(使用LOF,一个点的局部密度会与它的邻居进行比较。如果前者明显低于后者(有一个大于1 的LOF值),该点位于一个稀疏区域,对于它的邻居而言,这就表明,该点是一个异常值。)LOF算法的缺点是它只对数值型数据有效。
lofactor()函数使用LOF算法计算局部异常因子,并且它在DMwR和dprep包中是可用的。下面将介绍一个使用LOF进行异常检测的例子,k是用于计算局部异常因子的邻居数量。下图呈现了一个异常值得分的密度图。
& library(DMwR)
& # 移除“Species”这个鸢尾花类别列数据
& iris2 &- iris[,1:4]
& # k是计算局部异常因子所需要判断异常点周围的点的个数
& outlier.scores &- lofactor(iris2, k=5)
& # 绘制异常值得分的密度分布图
& plot(density(outlier.scores))
& # 挑出得分排前五的数据作为异常值
& outliers &- order(outlier.scores, decreasing = T)[1:5]
& # 输出异常值
& print(outliers)
接下来对鸢尾花数据进行主成分分析,并利用产生的前两个主成分绘制成双标图来显示异常值。
& n &- nrow(iris2)
& labels &- 1:n
& # 除了异常值以外所有的数据用&.&标注
& labels[-outliers] &- &.&
& biplot(prcomp(iris2), cex=.8, xlabs=labels)
上面的代码中,prcomp()实现对数据集iris2的主成分分析,biplot()取主成分分析结果的前两列数据也就是前两个主成分绘制双标图。上图中,x轴和y轴分别代表第一、二主成分,箭头指向了原始变量名,其中5个异常值分别用对应的行号标注。
我们也可以通过pairs()函数绘制散点图矩阵来显示异常值,其中异常值用红色的'+'标注:
& # 使用rep()生成n个&.&
& pch &- rep(&.&, n)
& pch[outliers] &- &+&
& col &- rep(&black&, n)
& col[outliers] &- &red&
& pairs(iris2, pch=pch, col=col)
Rlof包,对LOF算法的并行实现。它的用法与lofactor()相似,但是lof()有两个附加的特性,即支持k的多元值和距离度量的几种选择。如下是lof()的一个例子。在计算异常值得分后,异常值可以通过选择前几个检测出来。注意,目前包Rlof的版本在MacOS X和Linux环境下工作,但并不在windows环境下工作,因为它要依赖multicore包用于并行计算。
library(Rlof)
outlier.scores &- lof(iris2, k=5)
# 尝试使用不同的k值
# try with different number of neighbors (k=5,6,7,8,9 and 10)
outlier.scores &- lof(iris2, k=c(5:10))
3. 通过聚类的方法检验异常值
另外一种异常检测的方法是聚类。通过把数据聚成类,将那些不属于任务一类的数据作为异常值。比如,使用基于密度的聚类DBSCAN,如果对象在稠密区域紧密相连,它们将被分组到一类。因此,那些不会被分到任何一类的对象就是异常值。
我们也可以使用k-means算法来检测异常。使用k-means算法,数据被分成k组,通过把它们分配到最近的聚类中心。然后,我们能够计算每个对象到聚类中心的距离(或相似性),并且选择最大的距离作为异常值。
#####################################
iris2 &- iris[,1:4]
kmeans.result &- kmeans(iris2, centers=3)
#class(kmeans.result)
# 输出簇中心
kmeans.result$centers
#length(kmeans.result$centers)
# 分类结果
kmeans.result$cluster
#mode(kmeans.result$cluster)
# 计算数据对象与簇中心的距离
centers &- kmeans.result$centers[kmeans.result$cluster, ]
#class(centers)
distances &- sqrt(rowSums((iris2 - centers)^2))
# 挑选出前5个最大距离
outliers &- order(distances, decreasing = T)[1:5]
# 输出异常值
print(outliers)
print(iris2[outliers,])
# 画出聚类结果
plot(iris2[,c(&Sepal.Length&, &Sepal.Width&)], pch=&o&, col=kmeans.result$cluster, cex=0.3)
# 绘制类(簇)中心,用&*&标记
points(kmeans.result$centers[,c(&Sepal.Length&, &Sepal.Width&)], col=1:3, pch=8, cex=1.5)
# 画出异常值,用&+&标记
points(iris2[outliers,c(&Sepal.Length&, &Sepal.Width&)], pch=&+&, col=4, cex=1.5)
#####################################
#####################################
& iris2 &- iris[,1:4]
& kmeans.result &- kmeans(iris2, centers=3)
& #class(kmeans.result)
& # 输出簇中心
& kmeans.result$centers
Sepal.Length Sepal.Width Petal.Length Petal.Width
& #length(kmeans.result$centers)
& # 分类结果
& kmeans.result$cluster
[1] 2 3 3 3 2 2 2 2 3 3 2 2 3 3 2 2 2 2 2 2 2 2 2 2 3 3 2 2 2 3 3 2
[33] 2 2 3 2 2 2 3 2 2 3 3 2 2 3 2 3 2 2 1 1 1 1 1 1 1 3 1 1 3 1 1 1
[65] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1
[97] 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[129] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
& #mode(kmeans.result$cluster)
& # 计算数据对象与簇中心的距离
& centers &- kmeans.result$centers[kmeans.result$cluster, ]
& #class(centers)
& distances &- sqrt(rowSums((iris2 - centers)^2))
& # 挑选出前5个最大距离
& outliers &- order(distances, decreasing = T)[1:5]
& # 输出异常值
& print(outliers)
[1] 119 118 132 123 106
& print(iris2[outliers,])
Sepal.Length Sepal.Width Petal.Length Petal.Width
& # 画出聚类结果
& plot(iris2[,c(&Sepal.Length&, &Sepal.Width&)], pch=&o&, col=kmeans.result$cluster, cex=0.3)
& # 绘制类(簇)中心,用&*&标记
& points(kmeans.result$centers[,c(&Sepal.Length&, &Sepal.Width&)], col=1:3, pch=8, cex=1.5)
& # 画出异常值,用&+&标记
& points(iris2[outliers,c(&Sepal.Length&, &Sepal.Width&)], pch=&+&, col=4, cex=1.5)
#####################################
在上图中,聚类中心被标记为星号,异常值标记为'+'
4. 检验时间序列数据里面的异常值
本部分讲述一个对时间序列数据进行异常检测的例子。在本例中,时间序列数据首次使用stl()进行稳健回归分解,然后识别异常值。
########################################
# 使用稳健回归拟合
f &- stl(AirPassengers, &periodic&, robust=TRUE)
(outliers &- which(f$weights & 1e-8))
# 绘图布局
op &- par(mar=c(0, 4, 0, 3), oma=c(5, 0, 4, 0), mfcol=c(4, 1))
plot(f, set.pars=NULL)
sts &- f$time.series
# 画出异常值,用红色&x&标记
points(time(sts)[outliers], 0.8*sts[,&remainder&][outliers], pch=&x&, col=&red&)
########################################
& # 使用稳健回归拟合
& f &- stl(AirPassengers, &periodic&, robust=TRUE)
& (outliers &- which(f$weights & 1e-8))
92 102 103 104 114 115 116 126 127 128 138 139 140
& # 绘图布局
& op &- par(mar=c(0, 4, 0, 3), oma=c(5, 0, 4, 0), mfcol=c(4, 1))
& plot(f, set.pars=NULL)
& sts &- f$time.series
& # 画出异常值,用红色&x&标记
& points(time(sts)[outliers], 0.8*sts[,&remainder&][outliers], pch=&x&, col=&red&)
########################################
在上图中,异常值用红色标记为'x'
LOF算法擅长检测局部异常值,但是它只对数值数据有效。Rlof包依赖multicore包,在Windows环境下失效。对于分类数据的一个快速稳定的异常检测的策略是AVF(Attribute Value Frequency)算法。
一些用于异常检测的R包包括:
extremevalues包:单变量异常检测
mvoutlier包:基于稳定方法的多元变量异常检测
outliers包:对异常值进行测验
阅读(...) 评论() &

我要回帖

更多关于 boxplot 异常值 的文章

 

随机推荐