[R] 잡음 처리(MAF), 이상치 검출(카이제곱분포, LOF)
Moving Average Filter
n개의 데이터가 각rkr 1/n씩 가중치를 가짐
[데이터]
http://ps.cs.utwente.nl/Datasets.php 에서 제공하는 Physical Activity Recognition Dataset Using Smartphone Sensors을 다운받아(63MB) 사용 - Arm.csv 파일로드 하여 사용 하거나 첨부의 txt 파일 사용(일부 데이터)
[코드]
data <- read.csv("Arm.csv")
#첨부파일 사용시
#data <- read.table("arm.txt", stringsAsFactors = F, header = T)
mav <- function(x,n=5){filter(x,rep(1/n,n),sides = 2)}
accX = mav(data)
head(accX)
barplot(data$Ax[2:50000],col="blue",border = "blue",ylim = c(-20,20),cex.axis = 1)
par(new=T)
barplot(mav(data$Ax)[2:50000],col = "red", border = "red", ylim=c(-20,20),cex.axis = 1)
#첨부 파일 사용시
#barplot(data$Ax[2:200],col="blue",border = "blue",ylim = c(-20,20),cex.axis = 1)
#par(new=T)
#barplot(mav(data$Ax)[2:200],col = "red", border = "red", ylim=c(-20,20),cex.axis = 1)
전체 데이터 사용시
첨부파일 사용시
plot의 파란색이 기존 데이터, 빨간색이 MAF를 통해 잡음이 제거된 부분
Outlier 검출
[방법]
- 카이제곱 분포 이용 : 데이터가 정규분포를 따른다고 가정하고, k개의 서로 독립적인 표준 정규 확률 변수를 각각 제곱한 다음 합해서 얻어지는 분포에 의해 97.5%이상
- Local Outlier Factor 이용 : 샘플의 밀도를 측정하여 가장 밀도에서 벗어나는 데이터 즉, LOF값이 가장 큰 데이터를 이상치로 추정
두 가지 방법으로 검출되는 outlier가 서로 다르다 이는 데이터의 특성을 plot으로 찍어보며 어떤 방법이 더 적합할지 찾아야 한다
[데이터]
첨부의 txt 파일 사용(일부 데이터) arm.txt
[필요패키지]
mvoutlier, DMwR, scatterplot3d
[코드]
data <- read.table("arm.txt", stringsAsFactors = F, header = T)
#카이제곱 분포 이용
install.packages("DMwR")
library(DMwR)
outlier.scores1 <- aq.plot(data[c("Ax","Ay")])
#LOF 이용
install.packages("mvoutlier")
library(mvoutlier)
outlier.scores <- lofactor(data$Ax[1:1000],k = 10)
outlier <- order(outlier.scores, decreasing = T)[1:10]
n<-1000
pch<-rep(".",n)
pch[outlier]<-"+"
col<-rep("black",n)
col[outlier]<-"red"
pairs(data[1:1000,2:3], pch=pch, col=col)
#3차원 산점도 출력
#
install.packages("scatterplot3d")
library(scatterplot3d)
outlier.scores2 <- aq.plot(data[c("Ax","Ay","Az")])
outlier <-which(outlier.scores2[[1]])
col<-rep("black",n)
col[outlier]<-"red"
scatterplot3d(x=data$Ax,y=data$Ay,z=data$Ax,color = col)
outlier.scores3 <- lofactor(data[,c(2,3,4)],k=10)
outlier <- order(outlier.scores3, decreasing = T)[1:100]
col<-rep("black",n)
col[outlier]<-"red"
scatterplot3d(x=data$Ax,y=data$Ay,z=data$Ax,color = col)
'Data > R' 카테고리의 다른 글
html 파싱하기 rvest 패키지 (0) | 2017.04.14 |
---|---|
[R 기초] 범주형 변수를 지시형 변수로 변환, 결측치 채우기 (0) | 2016.03.24 |
[R 기초] 통계, 분포함수, t-검정 (0) | 2016.03.06 |
[R 기초] 패키지와 그래프 (0) | 2016.03.06 |
[R 기초] 사용자정의함수, 재귀함수, z-test (0) | 2016.03.06 |