Як знайти 95% надійний інтервал?


13

Я намагаюся обчислити 95% достовірний інтервал наступного заднього розподілу. Я не зміг знайти для нього функцію в R, але правильний підхід нижче?

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
Не насправді - ви припустили нормальний розподіл і рівний інтервал про середнє значення, жодне з яких не є особливо виправданим у цьому контексті. Насправді ви захопили близько ймовірності, припускаючи, що це дискретний розподіл, і вам потрібно трохи розширити свій інтервал, щоб отримати 95 \% . Можливо, краще взяти область найвищої щільності, яка становить [4.4,8.0], якщо це дискретний розподіл. Альтернативно, візьміть інтервал, так що ймовірність бути нижче 2,5 \% або менше, а також ймовірність бути вище 2,5 \% або менше [4.4,8.0] тут. 95 % [ 4,4 , 8,0 ] 2,5 % 2,5 % [ 4,4 , 8,0 ]94%95%[4.4,8.0]2.5%2.5%[4.4,8.0]
Генрі

Відповіді:


24

Як зазначає Генрі , ви припускаєте нормальний розподіл, і це абсолютно нормально, якщо ваші дані слід нормальному розповсюдженню, але буде неправильним, якщо ви не можете припустити його нормального розповсюдження. Нижче я описую два різних підходи, які ви могли б використовувати для невідомого розподілу, даючи лише точки даних xта супутні оцінки щільності px.

Перше, що слід врахувати, - що саме ви хочете узагальнити, використовуючи свої інтервали. Наприклад, вас можуть зацікавити інтервали, отримані за допомогою квантових елементів, але ви також можете бути зацікавлені у регіоні найвищої щільності (див. Тут чи тут ) вашого розповсюдження. Незважаючи на те, що це не має великої різниці у простих випадках, таких як симетричні, одномодальні розподіли, це змінить більш складні розподіли. Як правило, квантили дають вам інтервал, що містить масу ймовірності, сконцентровану навколо медіани (середня вашого розподілу), а область найвищої щільності - область навколо мод100α%розподілу. Це буде зрозуміліше, якщо порівняти дві ділянки на малюнку нижче - квантили «вирізають» розподіл вертикально, тоді як область найвищої щільності «ріже» його по горизонталі.

Кванти та інтервали HDR

Наступне, що слід врахувати - як боротися з тим, що у вас є неповна інформація про розподіл (якщо припустити, що ми говоримо про безперервний розподіл, у вас є лише купа очок, а не функція). Що ви можете зробити з цього приводу, це взяти значення "як є", або використовувати якусь інтерполяцію або згладжування, щоб отримати значення "між".

Одним із підходів було б використання лінійної інтерполяції (див. ?approxfunR), або ж щось більш гладке, як сплайни (див. ?splinefunR). Якщо ви обираєте такий підхід, ви повинні пам’ятати, що алгоритми інтерполяції не мають доменних знань про ваші дані і можуть повертати недійсні результати, такі як значення нижче нуля тощо.

# 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

Другий підхід, який ви можете розглянути, - це використовувати розподіл щільності / суміші ядра, щоб наблизити розподіл за допомогою даних, які у вас є. Тут складно вирішити питання про оптимальну пропускну здатність.

# 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

Далі ви збираєтеся знайти інтервали, що цікавлять. Ви можете перейти чисельно, або за допомогою моделювання.

1a) Вибірка для отримання квантильних інтервалів

# 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) Відбір проб для отримання області найвищої щільності

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]

2а) Знайдіть кванти чисельно

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

2b) Чисельно знайдіть область найвищої щільності

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

Як видно з наведених нижче графіків, у разі одномодального симетричного розподілу обидва способи повертають один і той же інтервал.

Два види інтервалів

Звичайно, ви також можете спробувати знайти інтервал навколо якогось центрального значення, такого, що і використовувати якусь оптимізацію для пошуку відповідного , але два описані вище підходи, здається, використовуються частіше і є більш інтуїтивно зрозумілими.100α%Pr(Xμ±ζ)αζ


Чому ви вибираєте вибірку, коли ви могли просто обчислити квантування безпосередньо з наданої інформації (використовуючи будь-який метод)?
whuber

1
@whuber, тому що це дешево і просто, але я редагую, щоб описати несимуляційний розрахунок завтра.
Тім

Привіт Тім, це дуже корисно. Чи не було б правильним також просто взяти квантил з розгону. (нижній <- x [який (а.логічний (розл. (cumsum (px) / сума (px)> 0,025)))]]) (верхній <- x [який (а.логічний (розл. (cumsum (px) / сума) (px) <0,975)))])
користувач19758

@ user19758, будь ласка, перевір мою редагування.
Тім

+1 Додаткові пояснення, ілюстрації та код встановили високий стандарт відповідей на цьому веб-сайті. Дякую!
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.