Khoảng cách tối thiểu dự kiến ​​từ một điểm có mật độ khác nhau


8

Tôi đang xem xét khoảng cách Euclide tối thiểu dự kiến ​​giữa các điểm thống nhất ngẫu nhiên và điểm gốc thay đổi như thế nào khi chúng ta tăng mật độ của các điểm ngẫu nhiên ( điểm trên một đơn vị hình vuông ) xung quanh gốc. Tôi đã cố gắng đưa ra một mối quan hệ giữa hai mô tả như sau:

Expected Min Distance=12Density

Tôi đã nghĩ ra điều này bằng cách chạy một số mô phỏng Monte Carlo trong R và khớp một đường cong bằng tay (mã bên dưới).

Câu hỏi của tôi là : tôi có thể có được kết quả này về mặt lý thuyết chứ không phải thông qua thử nghiệm?

#Stack Overflow example
library(magrittr)
library(ggplot2)


#---------
#FUNCTIONS
#---------
#gen random points within a given radius and given density
gen_circle_points <- function(radius, density) {
  #round radius up then generate points in square with side length = 2*radius
  c_radius <- ceiling(radius)
  coords <- data.frame(
    x = runif((2 * c_radius) ^ 2 * density, -c_radius, c_radius),
    y = runif((2 * c_radius) ^ 2 * density, -c_radius, c_radius)
  )
  return(coords[sqrt(coords$x ^ 2 + coords$y ^ 2) <= radius, ])#filter in circle
}

#Example plot
plot(gen_circle_points(radius = 1,density = 200)) #200 points around origin
points(0,0, col="red",pch=19) #colour origin

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

#return euclidean distances of points generated by gen_circle_points()
calculate_distances <- function(circle_points) {
  return(sqrt(circle_points$x ^ 2 + circle_points$y ^ 2))
}

#find the smallest distance from output of calculate_distances()
calculate_min_value <- function(distances) {
  return(min(distances))
}


#Try a range of values
density_values <- c(1:100)

expected_min_from_density <- sapply(density_values, function(density) {
  #simulate each density value 1000 times and take an average as estimate for
  #expected minimum distance
  sapply(1:1000, function(i) {
    gen_circle_points(radius=1, density=density) %>%
      calculate_distances() %>%
      calculate_min_value()
  }) %>% mean()
})

results <- data.frame(density_values, expected_min_from_density)

#fit based off exploration
theoretical_fit <- data.frame(density = density_values, 
                              fit = 1 / (sqrt(density_values) * 2))

#plot monte carlo (black) and fit (red dashed)
ggplot(results, aes(x = density_values, y = expected_min_from_density)) +
  geom_line() + 
  geom_line(
    data = theoretical_fit,
    aes(x = density, y = fit),
    color = "red",
    linetype = 2
  )

Biểu đồ các giá trị mật độ so với mức tối thiểu dự kiến, cả monte carlo và lý thuyết


Sự phụ thuộc trực tiếp (tiệm cận) vào gốc mật độ nghịch đảo dễ dàng và ngay lập tức từ việc xem xét các đơn vị đo lường, vì vậy câu hỏi duy nhất quan tâm tại sao bội số là1/2.
whuber

@whuber Có, tôi nhận thấy các đơn vị xếp hàng độc đáo và có, câu hỏi trở thành: 2 đã đến từ đâu?
Michael Bird

1
Các là chiều rộng của hình vuông của bạn. 2
whuber

Câu trả lời:


8

n(Xi,Yi)[1,1]2.

Ri2=Xi2+Yi2

Pr(Rir1)=14πr2

trong khi (với một chút công việc)

Pr(1Rir2)=14(πr2+4r214r2ArcTan(r21)).

Hình 1: Sơ đồ của hàm phân phối

Cùng nhau xác định hàm phân phối chung cho tất cảFRi.

Vì các điểm là độc lập, nên khoảng cách từ đó hàm sinh tồn của lànRi,min(Ri)

Sn(r)=(1F(r))n,

ngụ ý khoảng cách ngắn nhất có nghĩa là

μ(n)=02Sn(r)dr.

Đối với gần như tất cả diện tích trong tích phân này gần bằng vì vậy chúng tôi có thể ước chừng nó làn1,0,

μapprox(n)=01Sn(r)dr=01(1π4r2)ndr.

Lỗi không lớn hơn phần tích phân bị bỏ qua, đến lượt nó không lớn hơn

(21)(1F(1))n=(21)(1π/4)n,

mà rõ ràng giảm theo cấp số nhân vớin.

Chúng ta có thể lần lượt xấp xỉ tích phân là

(1π4r2)nexp(12r22/(nπ)).

Lên đến hằng số chuẩn hóa, đây là hàm mật độ của phân phối Bình thường với giá trị trung bình và phương sai Hằng số chuẩn hóa bị thiếu là0σ2=2/(nπ).

C(n)=12πσ2=12π 2/(nπ)=n2.

Do đó, việc mở rộng tích phân từ đến (thêm lỗi tỷ lệ với ),1e-n

μkhoảng(n)0e-t2/(2σ2)dt= =1C(n)12= =1n.

Trong quá trình đạt được xấp xỉ này, ba lỗi đã được thực hiện. Nói chung, chúng có nhiều nhất là lỗi phát sinh khi xấp xỉ bởi Gaussian.n-1,Sn(r)

! [Hình 2: Sơ đồ lỗi mô phỏng

Hình này biểu thị lần chênh lệch giữa và lần khoảng cách trung bình ngắn nhất quan sát được trong bộ dữ liệu mô phỏng riêng biệt cho mỗi Vì chúng giảm khi tăng, đây là bằng chứng cho thấy lỗi làn1n105n.no(n-1/n)= =o(n-3/2).

Cuối cùng, hệ số trong câu hỏi xuất phát từ kích thước của hình vuông:1/2 mật độ là số điểm trên một đơn vị diện tích và hình vuông có diện tích , từ đón,[-1,1]24

2Tỉ trọng= =2n/4= =n.

Đây là Rmã cho mô phỏng:

n.sim <- 1e5  # Size of each simulation
d <- 2        # Dimension
n <- 2^(1:11) # Numbers of points in each simulation
#
# Estimate mean distance to the origin for each `n`.
#
y <- sapply(n, function(n.points) {
  x <- array(runif(d*n.points*n.sim, -1, 1), c(d, n.points, n.sim))
  mean(sqrt(apply(colSums(x^2), 2, min)))
})
#
# Plot the errors (normalized) against `n`.
#
library(ggplot2)
ggplot(data.frame(Log2.n = 1:length(n), Error=sqrt(n)* (1 - y * n^(1/d))),
       aes(Log2.n, Error)) + geom_point() + geom_smooth() 
  ylab("Error * n") + ggtitle("Simulation Means")

2
Ồ Thật là một câu trả lời! Cảm ơn rất nhiều, điều này là tuyệt vời. Cảm ơn!
Michael Bird

Xin chào @whuber, tôi đã cố gắng tạo lại của bạn và tôi nhận thấy phương trình của bạn cho không trả về như hiển thị biểu đồ của bạn. Khi tôi tính Tôi đã nhận được cung cấp đường cong bạn cung cấp. Bạn đã làm một lỗi đánh máy? F(r)1Pr(1RirF(2)1π/4-r(rARccOS(1/r)-Pr(1RTôir2)π/4-r(rArcCos(1/r)-1-1/r2)
Michael Bird

1
@Michael Cảm ơn bạn, có một lỗi đánh máy - nhưng đó không phải là lỗi mà bạn đề xuất: một trong những " " của tôi phải là " " Tôi đã sửa cái đó. 4r4
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.