Funkcja prawdopodobieństwa i prawdopodobieństwo
W odpowiedzi na pytanie o problem z urodzinami wstecznymi Cody Maughan podał rozwiązanie funkcji wiarygodności.
Funkcja prawdopodobieństwa liczby typów gotowania fortuny gdy narysujemy różnych ciasteczek fortuny w losowaniach (gdzie każdy typ ciasteczka fortuny ma równe prawdopodobieństwo pojawienia się w losowaniu) może być wyrażony jako:mkn
L(m|k,n)=m−nm!(m−k)!∝P(k|m,n)===m−nm!(m−k)!⋅S(n,k)Stirling number of the 2nd kindm−nm!(m−k)!⋅1k!∑ki=0(−1)i(ki)(k−i)n(mk)∑ki=0(−1)i(ki)(k−im)n
W celu ustalenia prawdopodobieństwa po prawej stronie zobacz problem z zajętością. Zostało to wcześniej opisane na tej stronie przez Bena. Wyrażenie jest podobne do tego w odpowiedzi Sylvaina.
Oszacowanie maksymalnego prawdopodobieństwa
Możemy obliczyć przybliżenia pierwszego i drugiego rzędu maksimum funkcji wiarygodności przy
m1≈(n2)n−k
m2≈(n2)+(n2)2−4(n−k)(n3)−−−−−−−−−−−−−−−√2(n−k)
Przedział prawdopodobieństwa
(Uwaga, to nie jest to samo co przedział ufności patrz: Podstawowa logika konstruowania przedziału ufności )
To pozostaje dla mnie otwarty problem. Nie jestem jeszcze pewien, jak poradzić sobie z wyrażeniem (Oczywiście można obliczyć wszystkie wartości i na tej podstawie wybrać granice, ale byłoby więcej miło mieć jakąś konkretną dokładną formułę lub oszacowanie). Nie mogę się odnieść do żadnej innej dystrybucji, która bardzo pomogłaby w jego ocenie. Ale wydaje mi się, że z tego podejścia opartego na przedziałach prawdopodobieństwa możliwe byłoby miłe (proste) wyrażenie.m−nm!(m−k)!
Przedział ufności
Dla przedziału ufności możemy użyć normalnego przybliżenia. W odpowiedzi Bena podano następującą średnią i wariancję:
E[K]=m(1−(1−1m)n)
V[K]=m((m−1)(1−2m)n+(1−1m)n−m(1−1m)2n)
Powiedz dla danej próbki i zaobserwowano unikalne pliki cookie 95% granic wygląda następująco:n=200kE[K]±1.96V[K]−−−−√
Na powyższym obrazku narysowano krzywe dla interwału, wyrażając linie jako funkcję wielkości populacji i wielkości próbki (więc oś x jest zmienną zależną podczas rysowania tych krzywych).mn
Trudność polega na odwróceniu tego i uzyskaniu wartości przedziału dla danej obserwowanej wartości . Można to zrobić obliczeniowo, ale być może istnieje bardziej bezpośrednia funkcja.k
Na obrazku dodałem również przedziały ufności Cloppera Pearsona w oparciu o bezpośrednie obliczenie skumulowanego rozkładu na podstawie wszystkich prawdopodobieństw (Zrobiłem to w R, gdzie musiałem użyć funkcja z pakietu CryptRndTest , która jest asymptotycznym przybliżeniem logarytmu liczby Stirlinga drugiego rodzaju). Widać, że granice pokrywają się dość dobrze, więc normalne przybliżenie działa w tym przypadku dobrze.P(k|m,n)Strlng2
# function to compute Probability
library("CryptRndTest")
P5 <- function(m,n,k) {
exp(-n*log(m)+lfactorial(m)-lfactorial(m-k)+Strlng2(n,k))
}
P5 <- Vectorize(P5)
# function for expected value
m4 <- function(m,n) {
m*(1-(1-1/m)^n)
}
# function for variance
v4 <- function(m,n) {
m*((m-1)*(1-2/m)^n+(1-1/m)^n-m*(1-1/m)^(2*n))
}
# compute 95% boundaries based on Pearson Clopper intervals
# first a distribution is computed
# then the 2.5% and 97.5% boundaries of the cumulative values are located
simDist <- function(m,n,p=0.05) {
k <- 1:min(n,m)
dist <- P5(m,n,k)
dist[is.na(dist)] <- 0
dist[dist == Inf] <- 0
c(max(which(cumsum(dist)<p/2))+1,
min(which(cumsum(dist)>1-p/2))-1)
}
# some values for the example
n <- 200
m <- 1:5000
k <- 1:n
# compute the Pearon Clopper intervals
res <- sapply(m, FUN = function(x) {simDist(x,n)})
# plot the maximum likelihood estimate
plot(m4(m,n),m,
log="", ylab="estimated population size m", xlab = "observed uniques k",
xlim =c(1,200),ylim =c(1,5000),
pch=21,col=1,bg=1,cex=0.7, type = "l", yaxt = "n")
axis(2, at = c(0,2500,5000))
# add lines for confidence intervals based on normal approximation
lines(m4(m,n)+1.96*sqrt(v4(m,n)),m, lty=2)
lines(m4(m,n)-1.96*sqrt(v4(m,n)),m, lty=2)
# add lines for conficence intervals based on Clopper Pearson
lines(res[1,],m,col=3,lty=2)
lines(res[2,],m,col=3,lty=2)
# add legend
legend(0,5100,
c("MLE","95% interval\n(Normal Approximation)\n","95% interval\n(Clopper-Pearson)\n")
, lty=c(1,2,2), col=c(1,1,3),cex=0.7,
box.col = rgb(0,0,0,0))