午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

(二)異常值分析

 hucy_Bioinfo 2021-08-19
導(dǎo)讀

異常值分析是檢驗數(shù)據(jù)是否有錄入錯誤以及含有不合常理的數(shù)據(jù);

異常值是指樣本中的個別值,其數(shù)據(jù)明顯偏離其余的觀測值。

異常值也稱為離群點,異常值的分析也稱為離群點分析。

異常值通常被定義為小于Q11.5IQR或大于Q31.5IQR的值,但是也需要根據(jù)實際情況而定;

異常值處理一般步驟:異常值檢測、異常值篩選、異常值處理。

異常值檢測方法主要有:箱型圖、簡單統(tǒng)計量(比如觀察極(大/小)值),原則。

異常值處理方法主要有:刪除法、插補(bǔ)法、替換法。

數(shù)據(jù)不一致:指數(shù)據(jù)的矛盾性、不相容性;在數(shù)據(jù)挖掘過程中,不一致數(shù)據(jù)的產(chǎn)生主要發(fā)生在數(shù)據(jù)集成的過程中,可能是由于被挖掘數(shù)據(jù)是來自于從不同的數(shù)據(jù)源、重復(fù)存放的數(shù)據(jù)未能進(jìn)行一致性地更新造成的。

1. 異常值檢驗

異常值大概包括缺失值、離群值、重復(fù)值,數(shù)據(jù)不一致。

(1) 基本函數(shù)

summary可以顯示每個變量的缺失值數(shù)量。

(2) 缺失值檢驗

關(guān)于缺失值的檢測應(yīng)該包括:缺失值數(shù)量、缺失值比例、缺失值與完整值數(shù)據(jù)篩選。

#缺失值解決方案 

sum(complete.cases(saledata))         #is.na(saledata) 

sum(!complete.cases(saledata)) 

mean(!complete.cases(saledata))       #1/201數(shù)字,缺失值比例 

saledata[!complete.cases(saledata),]  #篩選出缺失值的數(shù)值 

(3) 箱型圖檢驗離群值

箱型圖的檢測包括:四分位數(shù)檢測(箱型圖自帶)+1δ標(biāo)準(zhǔn)差上下+異常值數(shù)據(jù)點。

箱型圖有一個非常好的地方是,boxplot之后,結(jié)果中會自帶異常值,就是下面代碼中的sp$out,這個是做箱型圖,按照上下邊界之外為異常值進(jìn)行判定的。

上下邊界,分別是Q3+Q3-Q1)、Q1-Q3-Q1)。

sp=boxplot(saledata$"銷量",boxwex=0.7) 

title("銷量異常值檢測箱線圖") 

xi=1.1 

sd.s=sd(saledata[complete.cases(saledata),]$"銷量") 

mn.s=mean(saledata[complete.cases(saledata),]$"銷量") 

points(xi,mn.s,col="red",pch=18) 

arrows(xi,mn.s-sd.sxi,mn.s+sd.scode=3col="pink",angle=75length=.1) 

text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)]

sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red") 

代碼中text函數(shù)的格式為text(x,label,y,col)points加入均值點;arrows加入均值上下標(biāo)準(zhǔn)差范圍箭頭。

箱型圖還有等寬與等深分箱法。

(4) 數(shù)據(jù)去重

數(shù)據(jù)去重與數(shù)據(jù)分組合并存在一定區(qū)別,去重是純粹的所有變量都是重復(fù)的,而數(shù)據(jù)分組合并可能是因為一些主鍵的重復(fù)。

數(shù)據(jù)去重包括重復(fù)檢測(table、unique函數(shù))以及重復(fù)數(shù)據(jù)處理(unique/duplicated)。

常見的有unique、數(shù)據(jù)框中duplicated函數(shù),duplicated返回的是邏輯值。

2. 異常值處理

常見的異常值處理辦法是刪除法、替代法(連續(xù)變量均值替代、離散變量用眾數(shù)以及中位數(shù)替代)、插補(bǔ)法(回歸插補(bǔ)、多重插補(bǔ));

除了直接刪除,可以先把異常值變成缺失值、然后進(jìn)行后續(xù)缺失值補(bǔ)齊。

實踐中,異常值處理,一般劃分為NA缺失值或者返回進(jìn)行數(shù)據(jù)修整(數(shù)據(jù)返修為主要方法)。

異常值處理方法

方法描述

刪除法

直接將含有異常值的記錄刪除

視為缺失值

將異常值視為缺失值,利用處理缺失值處理的方法進(jìn)行處理

數(shù)據(jù)平滑

利用前后觀測值的分布情況修正該異常值。

不處理

直接在具有異常值的數(shù)據(jù)集上進(jìn)行挖掘建模

(1) 異常值識別

利用圖形——箱型圖進(jìn)行異常值檢測。

#異常值識別 

par(mfrow=c(1,2))#將繪圖窗口劃為1行兩列,同時顯示兩圖 

dotchart(inputfile$sales)#繪制單變量散點圖

pc=boxplot(inputfile$sales,horizontal=T)#繪制水平箱形圖 

代碼來自《R語言數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》第四節(jié)。

(2) 蓋帽法

整行替換數(shù)據(jù)框里99%以上和1%以下的點,將99%以上的點值=99%的點值;小于1%的點值=1%的點值。

#異常數(shù)據(jù)處理 

q1<-quantile(result$tot_derog,0.001)  #取得1%時的變量值 

q99<-quantile(result$tot_derog,0.999)#replacementhas 1 row, data has 0 說明一個沒換 

result[result$tot_derog<q1,]$tot_derog<-q1 

result[result$tot_derog>q99,]$tot_derog<-q99 

summary(result$tot_derog)   #蓋帽法之后,查看數(shù)據(jù)情況 

fix(inputfile)#表格形式呈現(xiàn)數(shù)據(jù) 

which(inputfile$sales==6607.4)#可以找到極值點序號(位置)是啥 

把缺失值數(shù)據(jù)集、非缺失值數(shù)據(jù)集分開。

#缺失值的處理 

inputfile$date=as.numeric(inputfile$date)#將日期轉(zhuǎn)換成數(shù)值型變量 

sub=which(is.na(inputfile$sales))#識別缺失值所在行數(shù) 

inputfile1=inputfile[-sub,]#將數(shù)據(jù)集分成完整數(shù)據(jù)和缺失數(shù)據(jù)兩部分 

inputfile2=inputfile[sub,] 

(3) 噪聲數(shù)據(jù)處理——分箱法

將連續(xù)變量等級化后,不同分位數(shù)數(shù)據(jù)就會變成不同的等級數(shù)據(jù),連續(xù)變量離散化,消除了極值的影響。

分箱法:通過考察“鄰居”(周圍的值)來平滑存儲數(shù)據(jù)的值,用“箱的深度”表示不同的箱里有相同個數(shù)的數(shù)據(jù),用“箱的寬度”來表示每個箱值的取值區(qū)間。(不同平滑方法對數(shù)據(jù)整體的影響)

假設(shè)原始數(shù)據(jù)項:4, 8, 9, 15, 21, 21, 24, 25, 26,28, 29, 34

根據(jù)數(shù)據(jù)值順序,將數(shù)據(jù)分到相同等深等寬的“箱子里”:

       -箱子14, 8, 9, 15

       -箱子221, 21, 24, 25

       -箱子326, 28, 29, 34

數(shù)據(jù)平滑-均值:

       -箱子14, 4, 4, 4

       -箱子223, 23, 23, 23

       -箱子329, 29, 29, 29

數(shù)據(jù)平滑-邊界值:

       -箱子14, 4, 4, 15

       -箱子221, 21, 25, 25

       -箱子326, 26, 26, 34

# Install WHO library

install.packages("WHO")

library(WHO)

# Getting data

codes<-get_codes(extra=FALSE)

# Access corresponding data

dfDeathsMalaria<-get_data("MDG_0000000016")

#異常值識別

par(mfrow=c(1,2))

dotchart(dfDeathsMalaria$value)

boxplot(dfDeathsMalaria$value,horizontal=T)

#異常值處理

#1 刪除法移除所有含有異常數(shù)據(jù)的行subB=which(dfDeathsMalaria$value>150)

dfDeathsMalariaB1=dfDeathsMalaria[-subB,]#去除包含異常值的集

dfDeathsMalariaB2=dfDeathsMalaria[subB,]  #異常數(shù)據(jù)集

#2 替換為缺失值,再用所在屬性的均值替換

dfDeathsMalariaB2$value=NA

平均值修正(利用所在鄰接區(qū)域的平均值)例如

#3 數(shù)據(jù)平滑-分箱,選擇非洲區(qū)的子集(分箱標(biāo)準(zhǔn))

subC=which(dfDeathsMalaria$region=="Africa")

dfDeathsMalariaC2=dfDeathsMalaria[subC,]

#取平均值

averageAfrica=mean(dfDeathsMalariaC2$value)

dfDeathsMalariaB2$value=averageAfrica

result3=rbind(dfDeathsMalariaB1,dfDeathsMalariaB2)

#平滑后的箱圖

par(mfrow=c(1,2))

boxplot(dfDeathsMalaria$value,horizontal=T,main="Rawdata")

boxplot(result3$value,horizontal=T,main="Datasmoothing")

(4) 異常值處理——均值替換

數(shù)據(jù)集分為缺失值、非缺失值兩塊內(nèi)容。缺失值處理如果是連續(xù)變量,可以選擇均值;離散變量,可以選擇眾數(shù)或者中位數(shù)。

計算非缺失值數(shù)據(jù)的均值,然后賦值給缺失值數(shù)據(jù)。

#均值替換法處理缺失,結(jié)果轉(zhuǎn)存 

#思路:拆成兩份,把缺失值一份用均值賦值,然后重新合起來 

avg_sales=mean(inputfile1$sales)#求變量未缺失部分的均值 

inputfile2$sales=rep(avg_sales,n)#用均值替換缺失 

result2=rbind(inputfile1,inputfile2)#并入完成插補(bǔ)的數(shù)據(jù) 

(5)異常值處理——回歸插補(bǔ)法

#回歸插補(bǔ)法處理缺失,結(jié)果轉(zhuǎn)存 

model=lm(sales~date,data=inputfile1)#回歸模型擬合 

inputfile2$sales=predict(model,inputfile2)#模型預(yù)測 

result3=rbind(inputfile1,inputfile2) 

(6) 異常值處理——多重插補(bǔ)——mice

注意:多重插補(bǔ)的處理有兩個要點:先刪除Y變量的缺失值然后插補(bǔ)

  1) 被解釋變量有缺失值的觀測不能填補(bǔ),只能刪除,不能自己亂補(bǔ);

  2) 只對放入模型的解釋變量進(jìn)行插補(bǔ)。

多重插補(bǔ)法步驟:

缺失數(shù)據(jù)集→MCMC估計插補(bǔ)成幾個數(shù)據(jù)集每個數(shù)據(jù)集進(jìn)行插補(bǔ)建模(glm、lm模型)將這些模型整合到一起(pool評價插補(bǔ)模型優(yōu)劣(模型系數(shù)的t統(tǒng)計量)輸出完整數(shù)據(jù)集(compute

步驟詳細(xì)介紹:

函數(shù)mice()首先從一個包含缺失數(shù)據(jù)的數(shù)據(jù)框開始,然后返回一個包含多個(默認(rèn)為5個)完整數(shù)據(jù)集的對象。每個完整數(shù)據(jù)集都是通過對原始數(shù)據(jù)框中的缺失數(shù)據(jù)進(jìn)行插補(bǔ)而生成的。由于插補(bǔ)有隨機(jī)的成分,因此每個完整數(shù)據(jù)集都略有不同。

其中,mice中使用決策樹cart有以下幾個要注意的地方:該方法只對數(shù)值變量進(jìn)行插補(bǔ),分類變量的缺失值保留,cart插補(bǔ)法一般不超過5k數(shù)據(jù)集。

然后, with()函數(shù)可依次對每個完整數(shù)據(jù)集應(yīng)用統(tǒng)計模型(如線性模型或廣義線性模型),

最后, pool()函數(shù)將這些單獨(dú)的分析結(jié)果整合為一組結(jié)果。最終模型的標(biāo)準(zhǔn)誤和p值都將準(zhǔn)確地反映出由于缺失值和多重插補(bǔ)而產(chǎn)生的不確定性。

#多重插補(bǔ)法處理缺失,結(jié)果轉(zhuǎn)存 

library(lattice)#調(diào)入函數(shù)包 

library(MASS) 

library(nnet) 

library(mice)#前三個包是mice的基礎(chǔ) 

imp=mice(inputfile,m=4)#4重插補(bǔ),即生成4個無缺失數(shù)據(jù)集 

fit=with(imp,lm(sales~date,data=inputfile))#選擇插補(bǔ)模型 

pooled=pool(fit) 

summary(pooled) 

result4=complete(imp,action=3)#選擇第三個插補(bǔ)數(shù)據(jù)集作為結(jié)果 

imp$imp$sales 

結(jié)果解讀:

1imp對象中,包含了:每個變量缺失值個數(shù)信息、每個變量插補(bǔ)方式(PMM,預(yù)測均值法常見)、插補(bǔ)的變量有哪些、預(yù)測變量矩陣(在矩陣中,行代表插補(bǔ)變量,列代表為插補(bǔ)提供信息的變量, 10分別表示使用和未使用);同時利用這個代碼imp$imp$sales 可以找到,每個插補(bǔ)數(shù)據(jù)集缺失值位置的數(shù)據(jù)補(bǔ)齊具體數(shù)值是啥。

2with對象。插補(bǔ)模型可以多樣化,比如lm,glm都是可以直接應(yīng)用,見《R語言實戰(zhàn)》第十五章;

3pool對象。summary之后,會出現(xiàn)lm模型系數(shù),如果出現(xiàn)系數(shù)不顯著,則需要考慮換插補(bǔ)模型;

4complete對象。m個完整插補(bǔ)數(shù)據(jù)集,同時可以利用此函數(shù)輸出。

其他:

mice包提供了一個很好的函數(shù)md.pattern(),用它可以對缺失數(shù)據(jù)的模式有個更好的理解。還有一些可視化的界面,通過VIM、箱型圖、lattice來展示缺失值情況??梢姴┛停涸?/span>R中填充缺失數(shù)據(jù)—mice

3. 離群點檢測

離群點檢測與異常值主要的區(qū)別:異常值針對單一變量,而離群值指很多變量綜合考慮之后的異常值。

下面介紹一種基于聚類+歐氏距離的離群點檢測方法。

基于聚類的離群點檢測:數(shù)據(jù)標(biāo)準(zhǔn)化——聚類——求每一類每一指標(biāo)的均值點——每一類每一指標(biāo)生成一個矩陣——計算歐式距離——畫圖判斷。

Data=read.csv(".data.csv",header=T)[,2:4] 

Data=scale(Data) 

set.seed(12) 

km=kmeans(Data,center=3) 

print(km) 

km$centers  #每一類的均值點 

#各樣本歐氏距離,每一行 

x1=matrix(km$centers[1,]nrow=940ncol=3byrow=T) 

juli1=sqrt(rowSums((Data-x1)^2)) 

x2=matrix(km$centers[2,]nrow=940ncol=3byrow=T) 

juli2=sqrt(rowSums((Data-x2)^2)) 

x3=matrix(km$centers[3,]nrow=940ncol=3byrow=T) 

juli3=sqrt(rowSums((Data-x3)^2)) 

dist=data.frame(juli1,juli2,juli3) 

##歐氏距離最小值 

y=apply(dist,1min) 

plot(1:940,y,xlim=c(0,940),xlab="樣本點",ylab="歐氏距離") 

points(which(y>2.5),y[which(y>2.5)],pch=19,col="red") 

·END·

Keep Learning

超乎想象的體驗

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多