Função de probabilidade e probabilidade
Em uma resposta a uma pergunta sobre o problema do aniversário reverso, Cody Maughan deu uma solução para uma função de probabilidade.
A função de probabilidade para o número de tipos de fortuna cozinha m quando desenhamos k biscoitos da sorte diferentes em n sorteios (onde cada tipo de biscoito da sorte tem probabilidade igual de aparecer em um sorteio) pode ser expressa como:
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
Para uma derivação da probabilidade no lado direito, consulte o problema de ocupação. Isso já foi descrito anteriormente neste site por Ben. A expressão é semelhante à da resposta de Sylvain.
Estimativa de máxima verossimilhança
Podemos calcular aproximações de primeira e segunda ordem do máximo da função de verossimilhança em
m1≈(n2)n−k
m2≈(n2)+(n2)2−4(n−k)(n3)−−−−−−−−−−−−−−−√2(n−k)
Intervalo de probabilidade
(observe, isso não é o mesmo que um intervalo de confiança, consulte: A lógica básica da construção de um intervalo de confiança )
Isso continua sendo um problema em aberto para mim. Ainda não tenho certeza de como lidar com a expressão m−nm!(m−k)!(é claro que é possível calcular todos os valores e selecionar os limites com base nisso, mas seria mais agradável ter alguma fórmula ou estimativa exata explícita). Não consigo relacioná-lo com nenhuma outra distribuição que ajudaria muito a avaliá-lo. Mas sinto que uma expressão agradável (simples) poderia ser possível a partir dessa abordagem de intervalo de probabilidade.
Intervalo de confiança
Para o intervalo de confiança, podemos usar uma aproximação normal. Na resposta de Ben, são dadas as seguintes médias e variações:
E[K]=m(1−(1−1m)n)
V[K]=m((m−1)(1−2m)n+(1−1m)n−m(1−1m)2n)
Digamos para uma determinada amostra n=200 e observamos cookies únicos k os limites de 95% E[K]±1.96V[K]−−−−√ parece com:
mn
k
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))