1 噪聲數據處理
噪聲時一個測量變量中的隨機錯誤或偏差,包括錯誤值或偏離期望的孤立點值,在R中可以調用outliers軟件包中的outlier()函數尋找噪聲點,該函數通過尋找數據集中於其他觀測值及均值擦話劇很大的點作為異常值,函數的格式為:
其中x表示一個數據,通常是一個向量,如果x是一個數據框或矩陣,則將逐列計算,opposit為T或F,若為T,給出相反值(如果最大值於均值差異最大,則給出最小值),logical為T或F,若為T,則給出邏輯值,把可能出現噪聲的位置用TRUE表示。
install.packages("outliers")
library(outliers)
set.seed(1234)
y<-rnorm(100) #隨機生成100個標准正太隨機數
outlier(y) #找出其中利群最遠的值
outlier(y,opposite = T) #找出最遠離群值相反的值
dotchart(y) #繪制點圖
dim(y)<-c(20,5) #將y中的數據重新划分呈20行5列
outlier(y) #求矩陣中每列的離群值
outlier(y,opposite = T) #求矩陣中每列的離群值的相反值
set.seed(1234)
y=rnorm(10) #隨機生成10個標准正態隨機數
outlier(y,logical = T) #返回相應邏輯值,離群點用TRUE標記
plot(y) #繪制散點圖
離群點話還可以通過聚類的方法進行檢測,落在“簇”集合之外的值被視為離群點。
在進行噪聲見檢查后,操作實際中常用分箱、回歸、計算檢查和人工檢查結合等方法光滑數據,去掉數據中的噪聲。
分箱方法是通過對數據進行排序,利用數據“近鄰”來光滑有序數據值的一種局部光滑方法。在分箱方法中,可以使用箱均值、箱中位數或箱邊界等進行光滑。箱均值光滑、箱中位數光滑分別為對於每個“箱”,使用其均值或中位數來代替箱中的值;而箱邊界光滑則是指將給定箱中的最大值和最小值被視為箱邊界,箱中每一個值都被替換為最近邊界。一般而言,寬度越大,光滑效果越明顯。箱可以是等寬的,即每個箱的區間范圍是常量。
下面以等寬均值光滑方法為例:
set.seed(1234)
x<-rnorm(12)
x<-sort(x) #對x排序
dim(x)<-c(3,4) #將數據形式轉換成3行4列的矩陣,每行代表一個箱
x[1,]<-apply(x,1,mean)[1] #用第1行的均值代替第1行中的數據
x[2,]<-apply(x,1,mean)[2] #用第1行的均值代替第1行中的數據
x[3,]<-apply(x,1,mean)[3] #用第1行的均值代替第1行中的數據
#apply()函數是通過對數組或矩陣的邊際應用一個函數而獲得的數值列表。x是一個向量或數組,MARGIN取值1表示行,2表示列。
x
回歸是指通過一個函數擬合來對數據進行光滑處理。線性回歸涉及找出擬合兩個變量的“最佳”直線,使得一個屬性可以用來預測另一個;多元線性回歸是線性回歸的擴充,其中涉及的屬性多於兩個,並且數據擬合到一個多維曲面。
2 數據不一致的處理
當對數據進行批量操作時,可以通過對函數返回值進行約束,根據是否提示錯誤判斷、是否存在數據不一致問題,如vapply函數。
vapply函數的作用是對一個列表或向量進行指定的函數操作,其常用格式如下:
其中X是作為輸入變量的列表或向量, FUN是指定函數, FUN.VALUE是函數要求的返回值,當USE.NAMES賦值為TRUE且X是字符型時,若返回值沒有變量名則用X作為變量名。
x<-list(a=1:10,beta=exp(-3:3),logic=c(T,F,F,T)) #生成一個列表
x
probs<-c(1:3/4) #設置返回3個數
rt.value<-c(0,0,0) #設置返回值為3個數字
vapply(x,quantile,FUN.VALUE = rt.value,probs=probs)
probs<-c(1:4/4) #設置返回4個數
rt.value<-c(0,0,0,"") #設置返回3個數和1個字符串
vapply(x,quantile,FUN.VALUE = rt.value,probs=probs)
由於要求返回值的種類必須是'character',但 FUN(X[[1]I)結果的種類卻是'double',導致產生錯誤提示。
因此可以根據vapply函數的這一功能,使用FUN.VALUE參數對數據進行批量檢測。