커널 밀도 추정기를 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)

놀라운 대답 나는 확실히 내가의 의미를 이해하고 있지 않다하더라도, DefaultHp5대역폭 (I 가정 H1H5평균 h=1h=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.