데이터를 대치하거나 주변 데이터를 찾는 데 인접 정보 사용 (R)


13

가장 가까운 이웃이 가장 좋은 예측 변수라는 가정하에 데이터 세트가 있습니다. 양방향 그래디언트의 완벽한 예

여기에 이미지 설명을 입력하십시오

값이 거의없는 경우가 있다고 가정하고 이웃과 추세를 기반으로 쉽게 예측할 수 있습니다.

여기에 이미지 설명을 입력하십시오

R의 해당 데이터 매트릭스 (운동의 더미 예) :

miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    5    6    7    8    9   10   11
[2,]    6    7    8    9   10   NA   12
[3,]    7    8    9   10   11   12   13
[4,]    8    9   10   11   12   13   14
[5,]    9   10   11   12   NA   14   15
[6,]   10   11   12   13   14   15   16

참고 : (1) 결 측값 의 속성은 임의적 인 것으로 가정되며 어디에서나 발생할 수 있습니다.

(2) 모든 데이터 포인트는 단일 변수의 값이지만 해당 값은 neighbors인접한 행 및 열의 영향을받는 것으로 가정 합니다. 따라서 행렬의 위치가 중요 하며 다른 변수로 간주 될 수 있습니다.

일부 상황에서 나는 희망을 가질 수있는 일부 가치 (예 : 실수 일 수 있음)와 올바른 편견 (예 : 더미 데이터에서 이러한 오류를 생성 할 수 있음)을 예측할 수 있습니다.

> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2

    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    4    5    6    7    8    9   10
[2,]    5   16    7   11    9   10   11
[3,]    6    7    8    9   10   11   12
[4,]    7    8    9   10   11   12   13
[5,]    8    9   10   11   12   13   14
[6,]    9   10   11   12   13    4   15
[7,]   10   11    2   13   14   15   16

위의 예는 예시 일 뿐이며 (시각적으로 대답 할 수 있음) 실제 예는 더 혼란 스러울 수 있습니다. 그러한 분석을 수행하는 강력한 방법이 있는지 찾고 있습니다. 이것이 가능해야한다고 생각합니다. 이 유형의 분석을 수행하는 데 적합한 방법은 무엇입니까? 이 유형의 분석을 수행하는 R 프로그램 / 패키지 제안?

여기에 이미지 설명을 입력하십시오


결측 데이터가 MAR이라고 가정 할 수 있습니까 (1976 년 Rubin의 용어에서)?
user603

예, 값은 임의로 누락 된 것으로 간주 될 수 있습니다 (MAR). 최근 편집 내용을 참조하십시오.
rdorlearn

답변:


7

이 질문은 현지화 된 특이 치를 식별하고 수정 하기 위해 가장 가까운 이웃강력 하게 사용하는 방법을 묻습니다 . 왜 그렇게하지 않습니까?

절차는 강력한 로컬 스무스를 계산하고 잔차를 평가하고 너무 큰 값을 제거하는 것입니다. 이 기능은 모든 요구 사항을 직접 충족 시키며 로컬 이웃의 크기와 특이 치를 식별하기위한 임계 값을 변경할 수 있으므로 다른 응용 프로그램에 맞게 조정할 수있을만큼 유연합니다.

(유연성이 중요한 이유는 무엇입니까? 그러한 절차는 특정 지역화 된 행동을 "외부적인"것으로 식별 할 가능성이 높기 때문에 그러한 절차는 모두 매끄럽게 간주 될 수 있습니다 . 세부 사항을 유지하는 것과 로컬 특이 치를 탐지하지 못하는 사이의 트레이드 오프를 약간 제어해야합니다.)

이 절차의 또 다른 장점은 사각형의 행렬 행렬이 필요하지 않다는 것입니다. 실제로 이러한 데이터에 적합한 로컬 스무스를 사용하여 불규칙 데이터 에도 적용 할 수 있습니다 .

R, 및 모든 기능을 갖춘 통계 패키지뿐만 아니라와 같은 강력한 로컬 스무더가 내장되어 있습니다 loess. 다음 예제는이를 사용하여 처리되었습니다. 이 행렬에는 개의 행과 개의 열 이 있으며 약 항목이 있습니다. 이것은 여러 개의 극한 극단뿐만 아니라 구별 할 수없는 전체 지점 ( "주름")을 갖는 복잡한 기능을 나타냅니다. "outlying"으로 간주되는 비율의 이상을 약간 초과 하여 표준 편차가 원본 데이터의 표준 편차의 에 불과한 가우시안 오차가 추가되었습니다 . 이 합성 데이터 세트는 실제 데이터의 여러 가지 까다로운 기능을 제공합니다.794940005%1/20

피규어

(당 것을 유의 R매트릭스 행은 수직 스트립으로서 그려 규칙). 잔차를 제외한 모든 이미지는 약간의 차이가있는 값을 표시하는 데 도움이됩니다. 이것이 없으면 거의 모든 지역 특이 치가 보이지 않을 것입니다!

"Imputed"(고정)와 "Real"(원래의 오염되지 않은) 이미지를 비교하여 이상치 (outlier)를 제거하면 에서 발생하는 주름의 일부가 전부는 아니 을 알 수 있습니다. 로 , 라이트 시안)는 "잔차"플롯 스트라이프 각도로 명백하다.(0,79)(49,30)

"잔여 물"그림의 얼룩은 명백한 고립 된 지역 특이 치를 나타냅니다. 이 그림에는 기본 데이터에 기인 한 다른 구조 (예 : 대각선 줄무늬)도 표시됩니다. 지리 통계적 방법을 통해 데이터의 공간 모델을 사용하여이 절차를 개선 할 수 있지만,이를 설명하고 설명하면 여기에 너무 멀어 질 수 있습니다.

BTW,이 코드는 찾아보고 의 도입 이상치. 이것은 절차의 실패가 아닙니다. 특이 치가 정규 분포로 분포 되었기 때문에 그 중 절반은 크기가 이상인 기본 값과 비교하여 크기 가 0에서 가깝 거나 너무 작아서 표면에서 감지 할 수있는 변화가 없었습니다. 1022003600

#
# Create data.
#
set.seed(17)
rows <- 2:80; cols <- 2:50
y <- outer(rows, cols, 
           function(x,y) 100 * exp((abs(x-y)/50)^(0.9)) * sin(x/10) * cos(y/20))
y.real <- y
#
# Contaminate with iid noise.
#
n.out <- 200
cat(round(100 * n.out / (length(rows)*length(cols)), 2), "% errors\n", sep="")
i.out <- sample.int(length(rows)*length(cols), n.out)
y[i.out] <- y[i.out] + rnorm(n.out, sd=0.05 * sd(y))
#
# Process the data into a data frame for loess.
#
d <- expand.grid(i=1:length(rows), j=1:length(cols))
d$y <- as.vector(y)
#
# Compute the robust local smooth.
# (Adjusting `span` changes the neighborhood size.)
#
fit <- with(d, loess(y ~ i + j, span=min(1/2, 125/(length(rows)*length(cols)))))
#
# Display what happened.
#
require(raster)
show <- function(y, nrows, ncols, hillshade=TRUE, ...) {
  x <- raster(y, xmn=0, xmx=ncols, ymn=0, ymx=nrows)
  crs(x) <- "+proj=lcc +ellps=WGS84"
  if (hillshade) {
    slope <- terrain(x, opt='slope')
    aspect <- terrain(x, opt='aspect')
    hill <- hillShade(slope, aspect, 10, 60)
    plot(hill, col=grey(0:100/100), legend=FALSE, ...)
    alpha <- 0.5; add <- TRUE
  } else {
    alpha <- 1; add <- FALSE
  }
  plot(x, col=rainbow(127, alpha=alpha), add=add, ...)
}

par(mfrow=c(1,4))
show(y, length(rows), length(cols), main="Data")

y.res <- matrix(residuals(fit), nrow=length(rows))
show(y.res, length(rows), length(cols), hillshade=FALSE, main="Residuals")
#hist(y.res, main="Histogram of Residuals", ylab="", xlab="Value")

# Increase the `8` to find fewer local outliers; decrease it to find more.
sigma <- 8 * diff(quantile(y.res, c(1/4, 3/4)))
mu <- median(y.res)
outlier <- abs(y.res - mu) > sigma
cat(sum(outlier), "outliers found.\n")

# Fix up the data (impute the values at the outlying locations).
y.imp <- matrix(predict(fit), nrow=length(rows))
y.imp[outlier] <- y[outlier] - y.res[outlier]

show(y.imp, length(rows), length(cols), main="Imputed")
show(y.real, length(rows), length(cols), main="Real")

whuber : 특이 치가 분리 된 셀이라고 가정하는 것이 올바르게 이해됩니까? 그렇다면이 가정을 위반하는이 방법이 얼마나 민감한 지 알고 있습니까?
user603

@ user603 나는 특이 치가 분리되어 있다고 가정하지는 않지만 (예시의 대부분은 그렇지 않다) 어떤 지역 이웃의 특이 치 비율이 로컬 스무딩을 분해하지 않을 정도로 충분히 낮다고 가정합니다. 의심 할 여지없이, 그러한 특이 치의 비율이 매우 높은 이웃이 있다면 더 이상 지역 특이 치로 간주 될 수 없습니다!
whuber

1
@ user603 절대적으로! 그러나 그것은 "가장 가까운 이웃이 최선의 예측 자"인 추정 적 상황에서 우리를 빠져 나온 것 같습니다. 이와 관련하여 데이터를 처리 할 때 수행하는 모든 작업은이 로컬 예측 가능성을 유지해야합니다. 한 컬럼이 다른 컬럼과 "매우 다른 스케일"을 갖는 경우, 해당 상황은이 가정을 매우 강력하게 위반합니다. (또한 열에 집중 한 것이 궁금합니다. 질문을 다시 읽으면 열과 행의 역할에서 비대칭 성을 감지 할 수 없습니다.)
whuber

1
@ user603 이제 나는 당신이 어디에서 왔는지 알 것입니다 : 사건 행렬 (= 행) 및 속성 (또는 "필드"또는 "인자"또는 "변수", 모두 열) 을 다루는 것으로 질문을 이해할 수 있습니다. ; 케이스가 차원 공간 에서 (불규칙적으로 이격 된) 포인트를 나타내는 것으로 생각 될 수 있고 ; "가장 가까운 이웃"은이 공간에 대한 자연적인 측정법의 관점에서 이해됩니다. 그것은 나의 것과 완전히 다른 해석이며 두 가지 해석은 쉽게 관련 될 수 없습니다. 결 측값 또는 특이 치는 이러한 점의 위치 에 영향을 미치기 때문 입니다. p
whuber

1
@ whuber 이것은 훌륭한 솔루션입니다. 감사합니다-적어도 실제 값 인 누락 값 (예 : 50 누락 값)과 이상치 (100 이상치)의 혼합을 항상 시도했습니다. 신나는!
rdorlearn 3:29에

4

기사를 살펴 보는 것이 좋습니다 [0]. 해결하려는 문제는 저자가 제안한 방법이 NN 입력보다 약간 더 정교하다는 점을 제외하고는 귀하의 설명에 잘 맞는 것 같습니다 (시작점과 비슷한 것을 사용하더라도).

( , by 데이터 행렬이 표준화 되었다고 가정합니다 . 분석의 전처리 단계에서 각 열이 미친 사람으로 나뉘 )XXnp

이 방법의 아이디어는 랭크 획득하는 (값 및 누락 (이는 PCA 성분을 추정 한정된 손실 함수를 사용하여 수행된다) 특이점의 존재 가능성에 저항하는 방식으로 데이터 매트릭스의 견고한 PCA 분해 EM 유형 대치 방법을 사용하여 수행됩니다. 아래에서 설명하는 것처럼 데이터 세트의 PCA 분해가 발생하면 누락 된 요소를 채우고 이러한 추정치에 대한 불확실성을 평가하는 것은 매우 간단합니다.k

각 반복의 첫 번째 단계는 데이터 대치 단계입니다. 이것은 EM 알고리즘에서와 같이 수행됩니다. 누락 된 셀은 예상 한 값으로 채워집니다 (이는 E- 단계).

2 단계 반복 절차의 두 번째 부분에서는 이전 단계에서 얻은 증강 데이터에 (강한) PCA를 맞 춥니 다. 이는 의 스펙트럼 분해 를 (중심의 추정치), by 직교 행렬 및 by 대각선 행렬 ( 와 robustified, PCA 기반 M 단계의 일종이다).XXttRppkLLkkDDkp

논문을 요약하면 다음과 같이 제안하는 일반적인 알고리즘이 있습니다.

  • 설정하십시오 . 누락 된 요소가 초기 추정값으로 채워지 는 추정값 을 구하십시오. 누락 된 각 셀에 대해 이러한 초기 추정값은 (원래 데이터 행렬) 의 누락되지 않은 요소의 행 단위 및 열 단위 평균의 평균입니다 .l=0WW0XX

  • 그런 다음 수렴 될 때까지 수행하십시오.

    ㅏ. 에서 강력한 PCA를 수행하고 추정값을 얻습니다WWl(ttl,LLl,DDl)

    비. 세트l=l+1

    씨. 사용YYl=LLl1(WWl1ttl1)(LLl1)

    디. 의 누락 된 요소를 모델 (EM 알고리즘의 E 단계에서와 같이) 및 해당 항목에 의해 누락되지 않은 요소 .WWlWWlN(ttl1,LLl1DDl1(LLl1))YYl

가 일부 임계 값보다 작을 때까지 (a-> c)를 반복하십시오 . 최종 반복에서 얻은 추정 된 매개 변수의 벡터는 됩니다. ( t||WWl1WWl||F(tt,LL,DD)

아이디어는 각 반복에서 데이터 모델 이 점점 더 멀어지고 있다는 것입니다. 순진한 초기 추정치 및 강력한 M 단계는 특이 치가 적합치에 영향을 미치지 않도록합니다.(ttl1,LLl1DDl1)

이 접근 방식은 또한 대치의 품질을 확인하기위한 다양한 진단 도구를 제공합니다. 예를 들어, 에서 다중 드로우를 생성 할 수 있지만 이번에는 데이터의 누락되지 않은 요소에 대해 -매트릭스를 생성하고 생성 된 (반상 수) 데이터의 분포가 누락되지 않은 각 셀의 관찰 된 값과 얼마나 일치하는지 확인하십시오.N(ttl1,LLDD(LL))

이 접근법에 대한 기성품 R 구현에 대해서는 잘 모르지만 하위 구성 요소 (주로 강력한 PCA 알고리즘)에서 쉽게 생성 할 수 있으며 R로 잘 구현됩니다 .rrcov 패키지를 참조하십시오 (논문은 이 주제에 대한 조용한 정보).

  • Serneels S. and Verdonck, T. (2008). 특이 치 및 누락 된 요소가 포함 된 데이터의 주요 구성 요소 분석 계산 통계 및 데이터 분석 vol : 52 호 : 3 페이지 : 1712-1727.

고마워, 내 목표는 여기서 이상치 (예 : 분포에서 멀어짐)를 예측하는 것이 아니라 패턴에 맞지 않는 값이 아닌 (이상치)입니다.
rdorlearn 12

내 대답을 오해 한 것 같아 이 접근 방식은 모든 가치에 대한 예측을 생성하지만 특이 치는 잘 예측되지 않습니다. 이는 PCA 적합성에 영향을 줄 수 없기 때문입니다. 나는 당신이 신문을 읽는 것이 좋습니다.
user603

고마워, 접근 방식이 흥미로워 보이고 추측도 잘 작동 할 수 있습니다. 그러나 적절한 코드가 없으면 구현하기가 어려울 것입니다.
rdorlearn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.