Berechnen Sie das Konfidenzintervall für den Mittelwert einer Beta-Verteilung

12

Betrachten Sie eine Betaverteilung für eine bestimmte Gruppe von Ratings in [0,1]. Nachdem Sie den Mittelwert berechnet haben:

μ=αα+β

Gibt es eine Möglichkeit, ein Konfidenzintervall um diesen Mittelwert herum bereitzustellen?

dominierend
quelle
1
dominisch - Sie haben den Bevölkerungsmittelwert definiert . Ein Konfidenzintervall würde auf einer Schätzung dieses Mittelwerts basieren. Welche Beispielstatistik verwenden Sie?
Glen_b
Glen_b - Hallo, ich verwende eine Reihe von normalisierten Bewertungen (eines Produkts) im Intervall [0,1]. Was ich suche, ist eine Schätzung eines Intervalls um den Mittelwert (für ein gegebenes Konfidenzniveau), zum Beispiel: Mittelwert + - 0,02
dominierend
2
±
Glen_b - vielen Dank für Ihre Geduld. Ich verwende MLE
dominic am
2
nμμ

Antworten:

22

Während es spezielle Methoden zur Berechnung von Konfidenzintervallen für die Parameter in einer Beta-Verteilung gibt, beschreibe ich einige allgemeine Methoden, die für (fast) alle Arten von Verteilungen verwendet werden können , einschließlich der Betaverteilung, verwendet werden können und in R leicht implementiert werden können .

Konfidenzintervalle der Profilwahrscheinlichkeit

Beginnen wir mit der Maximum-Likelihood-Schätzung mit entsprechenden Profil-Likelihood-Konfidenzintervallen. Zunächst benötigen wir einige Beispieldaten:

# 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))

Wahrscheinlichkeitsdichtefunktion für die Beta-Verteilung.

Das reale / theoretische Mittel ist

> alpha/(alpha+beta)
0.877193

Nun müssen wir eine Funktion zur Berechnung der negativen Log-Likelihood-Funktion für eine Stichprobe aus der Beta-Verteilung erstellen, wobei der Mittelwert einer der Parameter ist. Wir können die dbeta()Funktion verwenden, aber da dies keine Parametrisierung mit dem Mittelwert verwendet, müssen wir seine Parameter ( α und β ) als Funktion des Mittelwerts und einiger anderer Parameter (wie der Standardabweichung) ausdrücken :

# 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))
}

Um die maximale Wahrscheinlichkeitsschätzung zu finden, können wir die mle()Funktion in der stats4Bibliothek verwenden:

library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))

Ignorieren Sie einfach die Warnungen. Sie werden durch die Optimierungsalgorithmen verursacht, die ungültige Werte für die Parameter versuchen und negative Werte für α liefern und / oder β . (Um die Warnung zu vermeiden, können Sie ein lowerArgument hinzufügen und die verwendete Optimierung ändern method.)

Jetzt haben wir sowohl Schätzungen als auch Konfidenzintervalle für unsere beiden Parameter:

> 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

Beachten Sie, dass die Konfidenzintervalle erwartungsgemäß nicht symmetrisch sind:

par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot

Profilwahrscheinlichkeitsdiagramm für die Betaverteilung.

(Die zweiten äußeren magentafarbenen Linien zeigen das 95% -Konfidenzintervall.)

Beachten Sie auch, dass wir bereits mit 10 Beobachtungen sehr gute Schätzungen erhalten (ein enges Konfidenzintervall).

Alternativ dazu mle()können Sie die fitdistr()Funktion aus derMASS Paket verwenden. Auch dies berechnet den Maximum Likelihood Estimator und hat den Vorteil, dass Sie nur die Dichte und nicht die negative Log Likelihood angeben müssen, aber keine Profil-Likelihood-Konfidenzintervalle, sondern nur asymptotische (symmetrische) Konfidenzintervalle.

Eine bessere Option ist mle2()(und verwandte Funktionen) aus dem bbmlePaket, das etwas flexibler und leistungsfähiger ist als mle()und etwas schönere Plots liefert.

Bootstrap-Konfidenzintervalle

Eine andere Möglichkeit ist die Verwendung des Bootstraps. Es ist extrem einfach in R zu verwenden und Sie müssen nicht einmal eine Dichtefunktion bereitstellen:

> 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

Der Bootstrap hat den zusätzlichen Vorteil, dass er auch dann funktioniert, wenn Ihre Daten nicht aus einer Beta-Distribution stammen.

Asymptotische Konfidenzintervalle

Vergessen wir für Konfidenzintervalle im Mittel nicht die guten alten asymptotischen Konfidenzintervalle, die auf dem zentralen Grenzwertsatz (und der t- Verteilung) basieren . Solange wir entweder eine große Stichprobengröße haben (so gilt die CLT und die Verteilung des Stichprobenmittelwerts ist ungefähr normal) oder große Werte von α und β (so dass die Beta-Verteilung selbst ungefähr normal ist), funktioniert es gut. Hier haben wir keine, aber das Konfidenzintervall ist immer noch nicht so schlecht:

> t.test(x)$conf.int
[1] 0.8190565 0.9268349

Für nur geringfügig größere Werte von n (und nicht zu extreme Werte der beiden Parameter) funktioniert das asymptotische Konfidenzintervall außerordentlich gut.

Karl Ove Hufthammer
quelle
Danke Karl. Kurze Frage: Wie haben Sie Ihr Alpha und Beta ermittelt? Ich habe die Varianz und den Stichprobenmittelwert verwendet, um Alpha und Beta zu erhalten, aber ich glaube, ich habe den Stichprobenmittelwert möglicherweise mit dem Populationsmittelwert verwechselt, daher bin ich mir nicht sicher, ob ich richtig vorgegangen bin ... siehe Glen_bs obigen Kommentar .
Dominic
Um α und β als Funktionen des Mittelwerts und der Standardabweichung zu bestimmen , habe ich gerade die Funktionen für den Mittelwert und die Standardabweichung als Funktionen von α und β invertiert (aber ich bin sicher, Sie können sie auch im Netz nachschlagen).
Karl Ove Hufthammer
+1 Karl. Ich habe eine ähnliche Frage gestelltα,β, Mittelwert und Varianz der Beta-Verteilung gibt es eine Möglichkeit, das Konfidenzintervall des Mittelwerts abzuschätzen. Zum Beispiel in der Normalverteilung könnten wir das leicht tun, aber ich weiß nicht, wie Sie diese Beta-Verteilung machen können. Ich habe eine Frage gestellt , diese wurde jedoch als Duplikat markiert.
Prognose
0

Testen Sie die Beta-Regression. Eine gute Einführung in die Vorgehensweise mit R finden Sie hier:

http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf

Eine andere (sehr einfache) Möglichkeit, ein Konfidenzintervall zu erstellen, wäre die Verwendung eines nicht parametrischen Boostrap-Ansatzes. Wikipedia hat gute Infos:

http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29

Auch schönes Video hier:

http://www.youtube.com/watch?v=ZCXg64l9R_4

Rasmus Bååth
quelle