커널 밀도 추정기를 2D에 통합


12

아무도이 길을 따라 가고 싶어하는 경우에 대비 하여이 질문 에서 왔습니다 .

기본적으로 나는 각 객체에 주어진 수의 측정 값이 붙어있는 N 개의 객체 로 구성된 데이터 세트 을 가지고 있습니다 (이 경우 2 개).ΩN

Ω=o1[x1,y1],o2[x2,y2],...,oN[xN,yN]

I는 확률을 결정하는 방법이 필요 새로운 오브젝트 에 속하는 Ω I는 확률 밀도 수득 질문에 의뢰 그래서 F 내가 이미 판단 커널 밀도 추정기 통해을 .p[xp,yp]Ωf^

제 목표는이 새로운 오브젝트의 확률 (획득하기 때문에 설정이 2D 데이터에 속하는) Ω을 , I는 PDF로 통합 들었다 F를 "위에 지지체의 값되는 밀도 " 관찰 한 것보다 적습니다 ". 은 "관찰"밀도가 f를 새로운 객체 평가 (P) , 즉 : F ( X의 P , Y , P ) . 따라서 방정식을 풀어야합니다.p[xp,yp]Ωf^f^pf^(xp,yp)

∬x,y:f^(x,y)<f^(xp,yp)f^(x,y)dxdy

내 2D 데이터 세트 (python의 stats.gaussian_kde 모듈을 통해 얻은)의 PDF는 다음과 같습니다.

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

여기서 빨간 점 은 내 데이터 세트의 PDF 위에 그려진 새 객체 나타냅니다 .p[xp,yp]

그래서 질문은 : pdf가 그렇게 보일 때 한계 대해 위의 적분을 어떻게 계산할 수 있습니까?x,y:f^(x,y)<f^(xp,yp)


더하다

의견 중 하나에서 언급 한 Monte Carlo 방법이 얼마나 잘 작동하는지 확인하기 위해 몇 가지 테스트를 수행했습니다. 이것이 내가 얻은 것입니다 :

표

저 대역폭 영역의 경우 두 대역폭이 거의 동일한 변동을 나타내는 값이 약간 더 크게 나타납니다. 표에서의 가장 큰 변화는 차이 준다 실버의 VS 2,500 1,000 샘플 값을 비교 점 (x, y) = (2.4,1.5) 발생 0.0126또는 ~1.3%. 제 경우에는 이것이 대부분 허용됩니다.

편집 : 방금 2 차원에서 Scott의 규칙이 여기에 주어진 정의에 따라 Silverman의 규칙과 동일하다는 것을 알았 습니다 .


2
추정값이 단조롭지 않다는 것을 알았지 만, 따르고있는 권장 사항이 "단일"분포에만 명시 적으로 적용된다는 것을 알고 계셨습니까? 그렇다고해서 잘못된 일을하고 있다는 의미는 아니지만 답이 무엇을 의미하는지에 대한 어려운 생각이 생길 것입니다.
— whuber

안녕하세요 @whuber, 그 질문에 사실 대답은 내가 그 아마도 그것은 생각 그래서, 단봉 분포에 대해 "잘 행동"되어 있다고 할 수 약간의 수정과 함께 내 문제에서 작동합니다. "잘 동작"은 통계 전문 용어 (정직한 질문)에서 "작동 만"을 의미합니까? 건배.
— Gabriel

저의 주요 관심사는 KDE가 대역폭 선택에 민감 할 수 있으며 특히 그림에 표시된 것과 같은 한계 위치에 대한 귀하의 적분 이 선택에 매우 민감 할 것으로 기대합니다. (이와 같이 래스터 이미지를 만든 후에는 계산 자체가 쉬워집니다. "프로브"포인트보다 값이 작은 포인트 중 이미지의 평균값에 비례합니다.) 이것은 합리적인 대역폭의 전체 범위에 대한 답을 계산하고 그 범위 내에서 중요한 방식으로 변경되는지 여부를 확인합니다. 그렇지 않다면 괜찮습니다.
— whuber

나는 해결책에 대해 언급하지 않지만 통합은 간단 몬테 카를로하여 수행 할 수 있습니다 : 샘플 포인트에서 (쉽다는 KDE가의 샘플에 쉽게 밀도의 혼합물이기 때문에), 카운트 적분 영역 (부등식이있는)에 속하는 점의 비율. f^
— Zen

데이터 세트에 몇 개의 관측치가 있습니까?
— Hong Ooi

답변:


11

간단한 방법은 적분 영역을 래스터 화하고 적분에 대한 이산 근사를 계산하는 것입니다.

주의해야 할 사항이 있습니다.

  1. 포인트의 범위보다 더 많은 것을 포함해야합니다. 커널 밀도 추정치가 인식 가능한 값을 가질 모든 위치를 포함해야합니다. 즉, 포인트의 범위를 커널 대역폭의 3 ~ 4 배로 확장해야합니다 (가우스 커널의 경우).

  2. 래스터의 해상도에 따라 결과가 약간 다를 수 있습니다. 해상도는 대역폭의 작은 부분이어야합니다. 계산 시간은 래스터의 셀 수에 비례하기 때문에 의도 한 것보다 거친 해상도를 사용하여 일련의 계산을 수행하는 데 거의 시간이 걸리지 않습니다. 최고의 해상도. 그렇지 않은 경우 더 정밀한 해상도가 필요할 수 있습니다.

다음은 256 포인트의 데이터 세트에 대한 그림입니다.

그림 1

포인트는 두 개의 커널 밀도 추정치에 겹쳐진 검은 점으로 표시됩니다. 6 개의 큰 적색 점은 알고리즘이 평가되는 "프로브"입니다. 이것은 1000 x 1000 셀의 해상도에서 4 개의 대역폭 (기본적으로 1.8 (수직)과 3 (수평), 1/2, 1, 5 단위)에 대해 수행되었습니다. 다음 산점도 매트릭스는 결과가 6 가지 프로브 포인트의 대역폭에 얼마나 강한 영향을 미치는지를 보여줍니다.

그림 2

변형은 두 가지 이유로 발생합니다. 분명히 밀도 추정치가 다르므로 한 가지 형태의 변동이 발생합니다. 더 중요한 것은 밀도 추정치의 차이가 단일 ( "프로브") 지점에서 큰 차이를 만들 수 있다는 것 입니다. 후자의 변형은 점 군집의 중간 밀도 "정지"주위에서 가장 큽니다.이 계산이 가장 많이 사용되는 위치입니다.

이는 이러한 계산 결과를 사용하고 해석 할 때 상당한주의가 필요하다는 것을 보여줍니다. 이는 상대적으로 임의의 결정 (사용할 대역폭)에 매우 민감 할 수 있기 때문입니다.


R 코드

이 알고리즘은 첫 번째 함수의 6 줄에 포함되어 f있습니다. 사용법을 설명하기 위해 나머지 코드는 앞의 그림을 생성합니다.

library(MASS)     # kde2d
library(spatstat) # im class
f <- function(xy, n, x, y, ...) {
  #
  # Estimate the total where the density does not exceed that at (x,y).
  #
  # `xy` is a 2 by ... array of points.
  # `n`  specifies the numbers of rows and columns to use.
  # `x` and `y` are coordinates of "probe" points.
  # `...` is passed on to `kde2d`.
  #
  # Returns a list:
  #   image:    a raster of the kernel density
  #   integral: the estimates at the probe points.
  #   density:  the estimated densities at the probe points.
  #
  xy.kde <- kde2d(xy[1,], xy[2,], n=n, ...)
  xy.im <- im(t(xy.kde$z), xcol=xy.kde$x, yrow=xy.kde$y) # Allows interpolation $
  z <- interp.im(xy.im, x, y)                            # Densities at the probe points
  c.0 <- sum(xy.kde$z)                                   # Normalization factor $
  i <- sapply(z, function(a) sum(xy.kde$z[xy.kde$z < a])) / c.0
  return(list(image=xy.im, integral=i, density=z))
}
#
# Generate data.
#
n <- 256
set.seed(17)
xy <- matrix(c(rnorm(k <- ceiling(2*n * 0.8), mean=c(6,3), sd=c(3/2, 1)), 
               rnorm(2*n-k, mean=c(2,6), sd=1/2)), nrow=2)
#
# Example of using `f`.
#
y.probe <- 1:6
x.probe <- rep(6, length(y.probe))
lims <- c(min(xy[1,])-15, max(xy[1,])+15, min(xy[2,])-15, max(xy[2,]+15))
ex <- f(xy, 200, x.probe, y.probe, lim=lims)
ex$density; ex$integral
#
# Compare the effects of raster resolution and bandwidth.
#
res <- c(8, 40, 200, 1000)
system.time(
  est.0 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, lims=lims)$integral))
est.0
system.time(
  est.1 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1, lims=lims)$integral))
est.1
system.time(
  est.2 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1/2, lims=lims)$integral))
est.2
system.time(
  est.3 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=5, lims=lims)$integral))
est.3
results <- data.frame(Default=est.0[,4], Hp5=est.2[,4], 
                      H1=est.1[,4], H5=est.3[,4])
#
# Compare the integrals at the highest resolution.
#
par(mfrow=c(1,1))
panel <- function(x, y, ...) {
  points(x, y)
  abline(c(0,1), col="Red")
}
pairs(results, lower.panel=panel)
#
# Display two of the density estimates, the data, and the probe points.
#
par(mfrow=c(1,2))
xy.im <- f(xy, 200, x.probe, y.probe, h=0.5)$image
plot(xy.im, main="Bandwidth=1/2", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

xy.im <- f(xy, 200, x.probe, y.probe, h=5)$image
plot(xy.im, main="Bandwidth=5", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

놀라운 대답 나는 확실히 내가의 의미를 이해하고 있지 않다하더라도, Default및 Hp5대역폭 (I 가정 H1및 H5평균 h=1과 h=5)가 Hp5값은 h=1/2? 그렇다면 무엇 Default입니까?
— Gabriel

1
이해가 정확합니다. ( "p5"는 ".5"를 의미합니다.) 기본값은을 kde2d사용하여 자동으로 계산됩니다 bandwidth.nrd. 샘플 데이터의 경우 가로 방향으로 , 세로 방향으로 로, 테스트에서 과 사이의 중간 정도 입니다. 이러한 기본 대역폭은 점 자체의 범위를 넘어서 전체 밀도의 상당한 비율을 배치 할 수있을만큼 충분히 크기 때문에 사용 하려는 통합 알고리즘에 관계없이 범위를 확장해야 합니다. 31.8515
— whuber

따라서 사용 된 대역폭 kde을 늘리면 결과의 범위 도 증가하므로 통합 한계를 확장해야 한다고 올바르게 이해 하고 있습니까? <10%적분의 결과 가치에 오류가 생길 수 있다고 가정한다면 Scott의 규칙을 사용하는 것에 대해 어떻게 생각하십니까?
— Gabriel

이 규칙은 완전히 다른 목표를 위해 개발 되었기 때문에, 특히 stats.stackexchange.com/questions/63263 에서 제안을 구현하는 경우, 목적에 따라 제대로 수행되지 않을 수 있다고 생각해야합니다 . KDE에 사용할 경험 법칙에 대해 걱정하는 것은 시기상조입니다. 이 단계에서는 전체 접근 방식이 안정적으로 작동하는지 심각하게 고려해야합니다.
— whuber

1
위를 긁으십시오. 나는 어떻게 구현이 작동하고 심지어 얼마나 잘 작동하고 있는지 정량화의 경우 알 수있는 방법이있다. 조금 복잡하고 시간이 많이 걸리지 만 할 수는 있습니다.
— Gabriel

1

적절한 수의 관측치가있는 경우 통합을 전혀 수행하지 않아도됩니다. 새로운 포인트가 . 당신이 밀도 추정이 가정 ; 대한 관측치 수 를 요약 하고 표본 크기로 나눕니다. 이것은 필요한 확률에 대한 근사치를 제공합니다.x0f^xf^(x)<f^(x0)

이것은 가 "너무 작지 않다"고 샘플 크기가 저밀도 지역에서 적절한 추정치를 제공하기에 충분히 크고 (확산 될 정도로) 가정합니다. 이변 량 경우 20000 건이 충분히 커 보입니다 .f^(x0)x


이 권장 사항에 대한 일부 정량 분석 ​​또는 실제 응용 프로그램의 적어도 하나의 예를 환영합니다. 나는 당신의 제안의 정확성 이 커널의 모양에 크게 의존 한다고 생각합니다 . 이것은 그 속성에 대한 실질적인 연구없이 그러한 계산에 의존하는 것을 꺼려 할 것입니다.
— whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.