R語言:噪聲數據處理
正文
噪聲是一個測量變量中的隨機錯誤或偏差,包括錯誤值或偏離期望的孤立點值。在R中可以通過調用outliers軟件包中的outlier函數尋找噪聲數據,該函數通過尋找數據集中與其他觀測值及均值差距最大的點作為異常值,函數的主要形式為:
outlier(x, opposite = FALSE, logical = FALSE)
其中,x表示一個數據,通常是一個向量,如果x輸入的是一個數據框或矩陣,則outlier函數將逐列計算;opposite可輸入TRUE或者FALSE,如果值為TRUE,給出相反值(如果最大值與均值差異最大,則給出最小值);logical可輸入TRUE或者FALSE,如果值為TRUE,給向量賦予邏輯值,可能出現噪聲的位置用TRUE表示。
> library(outliers)
# 設置隨機數種子,保證每次出現的隨機數相同
> set.seed(1); s1=.Random.seed
# 生成100個標准正態隨機數
> y=rnorm(100)
>
# 找出其中離群最遠的值
> outlier(y)
[1] -2.2147
# 找出最遠離群值相反的值
> outlier(y,opposite=TRUE)
[1] 2.401618
# 對y繪制點圖,如圖所示
> dotchart(y)
# 將y中的數據重新划分成20行5列的矩陣
> dim(y) <- c(20,5)
# 求矩陣中每列的離群最遠值
> outlier(y)
[1] -2.214700 -1.989352 1.980400 2.401618 -1.523567
# 求矩陣中每列的離群最遠值的相反值
> outlier(y,opposite=TRUE)
[1] 1.595281 1.358680 -1.129363 -1.804959 1.586833
# 設置隨機數種子,保證每次出現的隨機數相同
> set.seed(1); s1=.Random.seed
# 生成10個標准正態隨機數
> y=rnorm(10)
# 返回相應邏輯值,離群最遠值用TRUE標記
> outlier(y,logical=TRUE)
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[9] FALSE FALSE
# 繪制散點圖,如圖所示
> plot(y)
圖例如下:
離群點檢測還可以通過聚類方法進行檢測,聚類將類似的取值組織成“群”或“簇”,落在“簇”集合之外的值被視為離群點。聚類方法將在第7章進行詳細闡述。
在進行噪聲檢查后,操作實際中常用分箱、回歸、計算機檢查和人工檢查結合等方法“光滑”數據,去掉數據中的噪聲。
分箱方法是通過對數據進行排序,利用數據“近鄰”來光滑有序數據值的一種局部光滑方法。在分箱方法中,可以使用箱均值、箱中位數或箱邊界等進行光滑。箱均值光滑、箱中位數光滑分別為對於每個“箱”,使用其均值或中位數來代替箱中的值;而箱邊界光滑則是指將給定箱中的最大值和最小值被視為箱邊界,箱中每一個值都被替換為最近邊界。一般而言,寬度越大,光滑效果越明顯。箱可以是等寬的,即每個箱的區間范圍是常量。
下面以等寬箱均值光滑方法為例來介紹。
> # 設置隨機數種子,保證每次出現的隨機數相同
> set.seed(1); s1=.Random.seed
> # 生成12個標准正態隨機數
> x=rnorm(12)
> # 將數據從小到大排序
> x=sort(x)
> # 將數據形式轉換成3行4列矩陣,每行代表一個箱
> dim(x)=c(3,4)
> # 用第一行的均值代替第一行中的數據
> x[1,]=apply(x,1,mean)[1]
> # 用第二行的均值代替第二行中的數據
> x[2,]=apply(x,1,mean)[2]
> # 用第三行的均值代替第三行中的數據
> x[3,]=apply(x,1,mean)[3]
> # 等寬分箱均值光滑結果
> x
[,1] [,2] [,3] [,4]
[1,] -0.003212265 -0.003212265 -0.003212265 -0.003212265
[2,] 0.340596290 0.340596290 0.340596290 0.340596290
[3,] 0.468529029 0.468529029 0.468529029 0.468529029
回歸是指通過一個函數擬合來對數據進行光滑處理。線性回歸涉及找出擬合兩個變量的“最佳”直線,使得一個屬性可以用來預測另一個;多元線性回歸是線性回歸的擴充,其中涉及的屬性多於兩個,並且數據擬合到一個多維曲面。