Làm thế nào để tìm khoảng tin cậy 95%?


13

Tôi đang cố gắng tính khoảng tin cậy 95% của phân phối sau. Tôi không thể tìm thấy hàm trong R cho nó nhưng cách tiếp cận dưới đây có đúng không?

x <- seq(0.4,12,0.4)
px <-  c(0,0, 0, 0, 0, 0, 0.0002, 0.0037, 0.018, 0.06, 0.22 ,0.43, 0.64,0.7579, 0.7870, 0.72, 0.555, 0.37, 0.24, 0.11, 0.07, 0.02, 0.009, 0.005, 0.0001, 0,0.0002, 0, 0, 0)
plot(x,px, type="l")
mm <- sum(x*px)/sum(px)
var <- (sum((x)^2*px)/sum(px)) - (mm^2)
cat("95% credible interval: ", round(mm -1.96*sqrt(var),3), "-", round(mm + 1.96*sqrt(var),3),"\n")

1
Không thực sự - bạn đã giả sử một phân phối bình thường và một khoảng bằng nhau về giá trị trung bình, cả hai đều không đặc biệt chính đáng trong bối cảnh này. Trong thực tế, bạn đã nắm bắt được khoảng xác suất, giả sử đây là phân phối rời rạc và cần mở rộng một chút khoảng cách của bạn để có được 95 % . Tốt hơn có thể là lấy vùng mật độ cao nhất là [ 4.4 , 8.0 ] nếu đây là phân phối rời rạc. Hoặc lấy một khoảng để xác suất ở dưới nó là 2,5 % hoặc ít hơn, và xác suất ở trên nó là 2,5 % hoặc ít hơn, cũng [ 4,4 ,94%95%[4.4,8.0]2.5%2.5% đây. [4.4,8.0]
Henry

Câu trả lời:


23

Như Henry đã lưu ý , bạn đang giả sử phân phối bình thường và hoàn toàn ổn nếu dữ liệu của bạn tuân theo phân phối bình thường, nhưng sẽ không chính xác nếu bạn không thể giả sử phân phối bình thường cho nó. Dưới đây tôi mô tả hai cách tiếp cận khác nhau mà bạn có thể sử dụng cho phân phối không xác định chỉ được cung cấp dữ liệu xvà ước tính mật độ kèm theo px.

Điều đầu tiên cần xem xét là chính xác những gì bạn muốn tóm tắt bằng cách sử dụng khoảng thời gian của bạn. Ví dụ: bạn có thể quan tâm đến các khoảng thu được bằng cách sử dụng lượng tử, nhưng bạn cũng có thể quan tâm đến khu vực mật độ cao nhất (xem tại đây hoặc tại đây ) trong phân phối của bạn. Mặc dù điều này sẽ không tạo ra sự khác biệt (nếu có) trong các trường hợp đơn giản như phân phối đối xứng, không chính thống, điều này sẽ tạo ra sự khác biệt cho các phân phối "phức tạp" hơn. Nói chung, các lượng tử sẽ cung cấp cho bạn khoảng thời gian chứa khối lượng xác suất tập trung quanh trung vị (trung bình phân phối của bạn), trong khi khu vực mật độ cao nhất là khu vực xung quanh các chế độ100α%của phân phối. Điều này sẽ rõ ràng hơn nếu bạn so sánh hai ô trên hình dưới đây - lượng tử "cắt" phân phối theo chiều dọc, trong khi vùng mật độ cao nhất "cắt" theo chiều ngang.

Lượng tử và khoảng thời gian HDR

Điều tiếp theo cần xem xét là làm thế nào để đối phó với thực tế là bạn có thông tin không đầy đủ về phân phối (giả sử rằng chúng ta đang nói về phân phối liên tục, bạn chỉ có một loạt các điểm chứ không phải là một hàm). Những gì bạn có thể làm về nó là lấy các giá trị "nguyên trạng" hoặc sử dụng một số loại nội suy hoặc làm mịn để có được các giá trị "ở giữa".

Một cách tiếp cận sẽ là sử dụng phép nội suy tuyến tính (xem ?approxfuntrong R), hoặc cách khác là một cái gì đó trơn tru hơn như spline (xem ?splinefuntrong R). Nếu bạn chọn cách tiếp cận như vậy, bạn phải nhớ rằng các thuật toán nội suy không có kiến ​​thức về miền về dữ liệu của bạn và có thể trả về kết quả không hợp lệ như các giá trị dưới 0, v.v.

# grid of points
xx <- seq(min(x), max(x), by = 0.001)

# interpolate function from the sample
fx <- splinefun(x, px) # interpolating function
pxx <- pmax(0, fx(xx)) # normalize so prob >0

Cách tiếp cận thứ hai mà bạn có thể xem xét là sử dụng phân phối hỗn hợp / mật độ hạt nhân để xấp xỉ phân phối của bạn bằng cách sử dụng dữ liệu bạn có. Phần khó khăn ở đây là quyết định về băng thông tối ưu.

# density of kernel density/mixture distribution
dmix <- function(x, m, s, w) {
  k <- length(m)
  rowSums(vapply(1:k, function(j) w[j]*dnorm(x, m[j], s[j]), numeric(length(x))))
}

# approximate function using kernel density/mixture distribution
pxx <- dmix(xx, x, rep(0.4, length.out = length(x)), px) # bandwidth 0.4 chosen arbitrary

Tiếp theo, bạn sẽ tìm thấy các khoảng quan tâm. Bạn có thể tiến hành bằng số hoặc bằng cách mô phỏng.

1a) Lấy mẫu để thu được các khoảng lượng tử

# sample from the "empirical" distribution
samp <- sample(xx, 1e5, replace = TRUE, prob = pxx)

# or sample from kernel density
idx <- sample.int(length(x), 1e5, replace = TRUE, prob = px)
samp <- rnorm(1e5, x[idx], 0.4) # this is arbitrary sd

# and take sample quantiles
quantile(samp, c(0.05, 0.975)) 

1b) Lấy mẫu để thu được vùng mật độ cao nhất

samp <- sample(pxx, 1e5, replace = TRUE, prob = pxx) # sample probabilities
crit <- quantile(samp, 0.05) # boundary for the lower 5% of probability mass

# values from the 95% highest density region
xx[pxx >= crit]

2a) Tìm số lượng tử

cpxx <- cumsum(pxx) / sum(pxx)
xx[which(cpxx >= 0.025)[1]]   # lower boundary
xx[which(cpxx >= 0.975)[1]-1] # upper boundary

2b) Tìm vùng mật độ cao nhất bằng số

const <- sum(pxx)
spxx <- sort(pxx, decreasing = TRUE) / const
crit <- spxx[which(cumsum(spxx) >= 0.95)[1]] * const

Như bạn có thể thấy trên các ô bên dưới, trong trường hợp phân phối đối xứng, không đối xứng, cả hai phương thức đều trả về cùng một khoảng.

Hai loại khoảng

100α%Pr(Xμ±ζ)αζ


Tại sao bạn lấy mẫu khi bạn có thể tính toán các lượng tử trực tiếp từ thông tin đã cho (sử dụng một trong hai phương pháp)?
whuber

1
@whuber vì nó rẻ và dễ dàng, nhưng tôi sẽ chỉnh sửa để mô tả tính toán không mô phỏng vào ngày mai.
Tim

Xin chào Tim, Điều này rất hữu ích. Nó sẽ không chính xác nếu chỉ lấy định lượng từ sự phân định. (thấp hơn <- x [which (as.logical (diff (cumsum (px) / sum (px)> 0.025)))]) (trên <- x [which (as.logical (diff (cumsum (px) / sum) (px) <0,975)))])
dùng19758

@ user19758 vui lòng kiểm tra chỉnh sửa của tôi.
Tim

+1 Các giải thích, minh họa và mã bổ sung đặt ra một tiêu chuẩn cao cho câu trả lời trên trang web này. Cảm ơn bạ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.