Tích hợp công cụ ước tính mật độ hạt nhân trong 2D


12

Tôi đến từ câu hỏi này trong trường hợp bất kỳ ai muốn đi theo lối mòn.

Về cơ bản tôi có một tập dữ liệu Ω gồm N đối tượng trong đó mỗi đối tượng có một số giá trị đo được cho kèm theo (hai trong trường hợp này):

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

Tôi cần một cách để xác định xác suất của một mới đối tượng p[xp,yp] của thuộc Ω vì vậy tôi đã khuyên trong câu hỏi rằng để có được một mật độ xác suất f qua một ước lượng mật độ hạt nhân, mà tôi tin rằng tôi đã có .f^

Vì mục tiêu của tôi là để có được khả năng đối tượng mới này ( p[xp,yp] ) của thuộc này 2D dữ liệu thiết Ω , tôi được cho biết để tích hợp các pdf f trên " giá trị của sự hỗ trợ mà mật độ ít hơn cái bạn quan sát ". Mật độ "quan sát" là f đánh giá trong các đối tượng mới p , ví dụ: f ( x p , y p ) . Vì vậy, tôi cần phải giải phương trình:f^f^pf^(xp,yp)

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

PDF của tập dữ liệu 2D của tôi (thu được thông qua mô-đun stats.gaussian_kde của python ) trông như thế này:

nhập mô tả hình ảnh ở đây

trong đó dấu chấm màu đỏ đại diện cho đối tượng mới p[xp,yp] vẽ trên tệp PDF của tập dữ liệu của tôi.

Vì vậy, câu hỏi là: làm thế nào tôi có thể tính toán không thể thiếu trên cho các giới hạn khi nhìn pdf như thế?x,y:f^(x,y)<f^(xp,yp)


Thêm vào

Tôi đã thực hiện một số thử nghiệm để xem phương pháp Monte Carlo mà tôi đề cập đến như thế nào trong một trong những ý kiến ​​có hiệu quả. Đây là những gì tôi nhận được:

bàn

Các giá trị dường như thay đổi nhiều hơn một chút đối với các khu vực mật độ thấp hơn với cả hai băng thông hiển thị ít nhiều cùng một biến thể. Biến thể lớn nhất trong bảng xảy ra cho điểm (x, y) = (2.4,1.5) so sánh giá trị mẫu 2500 so với 1000 của Silverman, mang lại sự khác biệt 0.0126hoặc ~1.3%. Trong trường hợp của tôi, điều này sẽ được chấp nhận phần lớn.

Chỉnh sửa : Tôi chỉ nhận thấy rằng quy tắc 2 chiều của Scott tương đương với Silverman theo định nghĩa được đưa ra ở đây .


2
Bạn có nhận thấy công cụ ước tính của bạn không phải là không chính thống, nhưng khuyến nghị mà bạn đang theo dõi chỉ áp dụng rõ ràng cho các bản phân phối "không chính thống"? Điều đó không có nghĩa là bạn đang làm gì đó sai, nhưng nó sẽ tạo ra một số suy nghĩ khó khăn về câu trả lời có nghĩa là gì.
whuber

Xin chào @whuber, thực sự câu trả lời trong câu hỏi đó nói rằng đó là "hành xử tốt" đối với các bản phân phối không chính thống, vì vậy tôi nghĩ rằng có lẽ nó có thể giải quyết vấn đề của tôi với một số sửa đổi. Liệu "cư xử tốt" có nghĩa là "chỉ hoạt động" trong thuật ngữ thống kê (câu hỏi trung thực)? Chúc mừng.
Gabriel

Mối quan tâm chính của tôi là KDE có thể nhạy cảm với sự lựa chọn băng thông và tôi hy vọng tích phân của bạn, đặc biệt là đối với các vị trí cận biên như trong hình minh họa, sẽ rất nhạy cảm với lựa chọn. (Nhân tiện, việc tính toán rất dễ dàng một khi bạn đã tạo ra một hình ảnh raster như thế này: nó tỷ lệ với giá trị trung bình trong hình ảnh giữa các điểm có giá trị nhỏ hơn điểm "thăm dò".) Bạn có thể tiếp cận điều này bằng cách tính toán câu trả lời cho toàn bộ băng thông hợp lý và xem liệu nó có thay đổi theo bất kỳ cách thức vật chất nào trong phạm vi đó không. Nếu không, bạn ổn.
whuber

Tôi sẽ không bình luận về các giải pháp, nhưng việc tích hợp có thể được thực hiện bằng cách đơn giản Monte Carlo: điểm mẫu từ là dễ dàng, vì kde là một hỗn hợp của mật độ được dễ dàng để mẫu từ), và đếm phần của các điểm nằm trong khu vực hội nhập (nơi giữ sự bất bình đẳng). f^
Zen

Có bao nhiêu quan sát bạn có trong tập dữ liệu của bạn?
Hồng Ooi

Câu trả lời:


11

Một cách đơn giản là rasterize miền tích hợp và tính một xấp xỉ rời rạc cho tích phân.

Có một số điều cần chú ý:

  1. Đảm bảo bao phủ nhiều hơn phạm vi của các điểm: bạn cần bao gồm tất cả các vị trí nơi ước tính mật độ hạt nhân sẽ có bất kỳ giá trị đáng kể nào. Điều này có nghĩa là bạn cần mở rộng phạm vi của các điểm bằng ba đến bốn lần băng thông nhân (đối với nhân Gaussian).

  2. Kết quả sẽ thay đổi phần nào với độ phân giải của raster. Độ phân giải cần phải là một phần nhỏ của băng thông. Vì thời gian tính toán tỷ lệ thuận với số lượng ô trong raster, nên hầu như không mất thêm thời gian để thực hiện một loạt các phép tính sử dụng độ phân giải thô hơn so với dự định: kiểm tra xem kết quả cho các ô thô có hội tụ kết quả cho kết quả không độ phân giải tốt nhất. Nếu không, có thể cần một độ phân giải tốt hơn.

Dưới đây là một minh họa cho bộ dữ liệu gồm 256 điểm:

Hình 1

Các điểm được hiển thị dưới dạng các chấm đen chồng lên nhau trên hai ước tính mật độ hạt nhân. Sáu điểm lớn màu đỏ là "thăm dò" mà tại đó thuật toán được đánh giá. Điều này đã được thực hiện cho bốn băng thông (mặc định giữa 1,8 (theo chiều dọc) và 3 (theo chiều ngang), 1/2, 1 và 5 đơn vị) ở độ phân giải 1000 x 1000 ô. Ma trận phân tán sau đây cho thấy kết quả phụ thuộc mạnh mẽ như thế nào vào băng thông cho sáu điểm thăm dò này, bao gồm một phạm vi mật độ rộng:

Hình 2

Các biến thể xảy ra vì hai lý do. Rõ ràng các ước tính mật độ khác nhau, giới thiệu một dạng biến thể. Quan trọng hơn, sự khác biệt trong ước tính mật độ có thể tạo ra sự khác biệt lớn tại bất kỳ điểm nào ("thăm dò"). Biến thể thứ hai là lớn nhất xung quanh các "rìa" mật độ trung bình của các cụm điểm - chính xác là những vị trí mà phép tính này có thể được sử dụng nhiều nhất.

Điều này cho thấy sự cần thiết phải thận trọng trong việc sử dụng và diễn giải kết quả của các tính toán này, bởi vì chúng có thể rất nhạy cảm với một quyết định tương đối độc đoán (băng thông sử dụng).


Mã R

Thuật toán được chứa trong nửa tá dòng của hàm đầu tiên , f. Để minh họa việc sử dụng nó, phần còn lại của mã tạo ra các số liệu trước.

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)

Câu trả lời tuyệt vời, mặc dù tôi không chắc là tôi hiểu ý nghĩa của DefaultHp5băng thông (tôi giả sử H1H5ý nghĩa h=1h=5) Là Hp5giá trị h=1/2? Nếu vậy thì là Defaultgì?
Gabriel

1
kde2dbandwidth.nrd31.8515

Vì vậy, tôi có hiểu chính xác không nếu tôi nói rằng khi tôi tăng băng thông được sử dụng, phạm vi kết quả kdecũng tăng (và vì vậy tôi cần mở rộng giới hạn tích hợp)? Cho rằng tôi có thể sống với một lỗi về <10%giá trị kết quả của tích phân, bạn nghĩ gì về việc sử dụng quy tắc của Scott?
Gabriel

Tôi nghĩ rằng vì các quy tắc này được phát triển cho các mục tiêu hoàn toàn khác nhau, bạn nên nghi ngờ rằng chúng có thể không hoạt động tốt cho mục đích của bạn, đặc biệt nếu đó là để thực hiện đề xuất được đưa ra tại stats.stackexchange.com/questions/63263 . Vẫn còn sớm để lo lắng về quy tắc ngón tay cái mà bạn có thể sử dụng cho KDE; ở giai đoạn này, bạn nên quan tâm nghiêm túc liệu toàn bộ phương pháp có thể hoạt động đáng tin cậy hay không.
whuber

1
Cào những thứ trên. Tôi làm có cách nào để biết nếu việc thực hiện đang làm việc và thậm chí định lượng như thế nào nó đang làm việc. Nó hơi phức tạp và tốn thời gian nhưng tôi có thể (nên có thể) làm điều đó.
Gabriel

1

Nếu bạn có một số lượng quan sát kha khá, bạn có thể không cần thực hiện bất kỳ tích hợp nào cả. Nói điểm mới của bạn làx0f^xf^(x)<f^(x0)

f^(x0)x


Một số phân tích định lượng của khuyến nghị này, hoặc ít nhất một ví dụ về một ứng dụng thực tế, sẽ được hoan nghênh. Tôi nghi ngờ rằng tính chính xác của đề xuất của bạn phụ thuộc rất nhiều vào hình dạng của hạt nhân. Điều này sẽ khiến tôi miễn cưỡng dựa vào tính toán như vậy mà không cần nghiên cứu kỹ về các tính chất của nó.
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.