Рассмотрим бета-распределение для данного набора рейтингов в [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
Также хорошее видео здесь: