Розглянемо бета-розподіл для заданого набору оцінок у [0,1]. Після підрахунку середнього:
Чи є спосіб забезпечити інтервал довіри навколо цього значення?
Розглянемо бета-розподіл для заданого набору оцінок у [0,1]. Після підрахунку середнього:
Чи є спосіб забезпечити інтервал довіри навколо цього значення?
Відповіді:
Хоча існують конкретні методи обчислення довірчих інтервалів для параметрів у бета-розподілі, я опишу кілька загальних методів, які можна використовувати для (майже) всіляких розподілів , включаючи бета-розподіл, і легко реалізуються в R .
Почнемо з максимальної оцінки ймовірності з відповідними інтервалами вірогідності довіри профілю. Спочатку нам потрібні деякі зразкові дані:
# Sample size
n = 10
# Parameters of the beta distribution
alpha = 10
beta = 1.4
# Simulate some data
set.seed(1)
x = rbeta(n, alpha, beta)
# Note that the distribution is not symmetrical
curve(dbeta(x,alpha,beta))
Реальна / теоретична середня величина
> alpha/(alpha+beta)
0.877193
Тепер ми повинні створити функцію для обчислення функції ймовірності негативного журналу для вибірки з бета-розподілу, із середнім значенням як одним із параметрів. Ми можемо використовувати dbeta()
функцію, але оскільки для цього не використовується параметризація, що включає середнє значення, ми повинні виражати її параметри ( α і β ) як функцію середнього та іншого параметра (наприклад, стандартне відхилення):
# Negative log likelihood for the beta distribution
nloglikbeta = function(mu, sig) {
alpha = mu^2*(1-mu)/sig^2-mu
beta = alpha*(1/mu-1)
-sum(dbeta(x, alpha, beta, log=TRUE))
}
Щоб знайти максимальну оцінку ймовірності, ми можемо використовувати mle()
функцію в stats4
бібліотеці:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Просто ігноруйте попередження поки що. Вони спричинені алгоритмами оптимізації, які намагаються визначити недійсні значення параметрів, даючи від’ємні значення для α та / або β . (Щоб уникнути попередження, ви можете додати lower
аргумент та змінити використовувану оптимізацію method
.)
Тепер у нас є обидва оцінки та довірчі інтервали для наших двох параметрів:
> est
Call:
mle(minuslogl = nloglikbeta, start = list(mu = mean(x), sig = sd(x)))
Coefficients:
mu sig
0.87304148 0.07129112
> confint(est)
Profiling...
2.5 % 97.5 %
mu 0.81336555 0.9120350
sig 0.04679421 0.1276783
Зауважте, що, як очікувалося, інтервали довіри не симетричні:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(Друга зовнішня пурпурова лінія показує довірчий інтервал 95%.)
Також врахуйте, що навіть маючи лише 10 спостережень, ми отримуємо дуже хороші оцінки (вузький інтервал довіри).
В якості альтернативи mle()
ви можете використовувати fitdistr()
функцію з MASS
пакету. Це також обчислює максимальну оцінку ймовірності і має ту перевагу, що вам потрібно лише подати щільність, а не негативну ймовірність журналу, але не дає вам профілів вірогідності довіри, лише асимптотичні (симетричні) довірчі інтервали.
Кращим варіантом є mle2()
(та пов'язані з ним функції) з bbmle
пакету, який дещо гнучкіший та потужніший за mle()
та дає трохи приємніші сюжети.
Ще один варіант - використовувати завантажувальний інструмент. Це надзвичайно просто у використанні в R, і вам навіть не потрібно поставляти функцію щільності:
> library(simpleboot)
> x.boot = one.boot(x, mean, R=10^4)
> hist(x.boot) # Looks good
> boot.ci(x.boot, type="bca") # Confidence interval
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 10000 bootstrap replicates
CALL :
boot.ci(boot.out = x.boot, type = "bca")
Intervals :
Level BCa
95% ( 0.8246, 0.9132 )
Calculations and Intervals on Original Scale
Завантажувальна програма має додаткову перевагу в тому, що вона працює, навіть якщо ваші дані не надходять з бета-версії.
Для середніх довірчих інтервалів не забуватимемо старі добрі асимптотичні довірчі інтервали на основі теореми про центральну межу (та t- розподілу). Поки ми маємо або великий розмір вибірки (так застосовується CLT, і середнє значення розподілу вибірки є приблизно нормальним), або великі значення як α, так і β (так що сам розподіл бета є приблизно нормальним), він працює добре. Тут у нас немає жодного, але інтервал довіри все ще не надто поганий:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Для трохи більших значень n (і не надто екстремальних значень двох параметрів) асимптотичний довірчий інтервал працює надзвичайно добре.
Перевірте бета-регресію. Хороший вступ про те, як це зробити за допомогою R, можна знайти тут:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Іншим (дійсно простим) способом побудови інтервалу довіри було б використання непараметричного підходу до завантаження. У Вікіпедії є добра інформація:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
Також приємне відео тут: