6 votos

Estimación del número total de canciones ("cupones") por número de repeticiones

Si al reproducir aleatoriamente la lista de reproducción ×100 se repiten [10 13 10 3 2 2] canciones diferentes [1 2 3 4 5 6] veces, ¿cuál es la estimación del número total de canciones? (suponiendo que la reproducción aleatoria fuera completamente aleatoria)

Actualización: (código R)

k <- 50 # k number of songs on the disk indexed 1:k
n <- 100 # n number of random song selections
m <- 20 # m number of repeat experiments
colnum <- 10
mat <- matrix(data=NA,nrow=m,ncol=colnum)
df <- as.data.frame(mat)
for(i in 1:m){
  played <- 1+floor(k*runif(n)) # actual song indices (1:k) selected 
  freq <- sapply(1:k,function(x){sum(played==x)})
  # = number of times song with index x is being played
  histo <- sapply(1:colnum,function(x){sum(freq==x)});
  for(j in 1:colnum){
   df[i,j] <- histo[j]
  }
}
df

Resultando en: Por ejemplo, 20 distribuciones (V1=número de jugadas simples, V2=número de jugadas dobles, etc.):

   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  15 13 11  1  2  2  0  0  0   0
2  15 12 10  1  4  0  1  0  0   0
3  12 14  7  6  3  0  0  0  0   0
4  17 16  6  4  2  0  1  0  0   0
5  17 10 12  5  0  0  1  0  0   0
6  13 15 11  6  0  0  0  0  0   0
7  10 14  9  3  2  1  1  0  0   0
8  12 17  5  6  3  0  0  0  0   0
9   9 19  8  3  1  2  0  0  0   0
10 13  9 11  6  1  0  1  0  0   0
11 16  9 12  5  2  0  0  0  0   0
12 15  9 11  6  2  0  0  0  0   0
13 19  9  7  4  4  1  0  0  0   0
14 17 11  4  7  3  1  0  0  0   0
15 11 20  8  1  3  1  0  0  0   0
16 14 12 10  5  0  2  0  0  0   0
17  9 12  8  7  3  0  0  0  0   0
18 10 15  9  4  2  0  1  0  0   0
19 14 11 12  7  0  0  0  0  0   0
20 16 14 11  3  1  1  0  0  0   0

Ahora necesito pasar de aquí a la modelización de Poisson mi R está un poco oxidado (? lmer )...--Se agradecería cualquier ayuda...

Intento de modelización de Poisson: ¿ajuste decepcionante?

plot(1:colnum,df[1,1:colnum],ylim=c(0,30),
   type="l",xlab="repeats",ylab="count")
for(i in 1:m){
  clr <- rainbow(m)[i]
  lines(1:colnum,df[i,1:colnum],type="l",col=clr)
  points(1:colnum,df[i,1:colnum],col=clr)
}

df.lambda=data.frame(lambda=seq(1,5,0.1),ssq=c(NA));df.lambda
for(ii in 1:dim(df.lambda)[1]){
  l <- df.lambda$lambda[ii]
      ssq <- 0
      for(i in 1:20){
        for(j in 1:10){
          ssq <- ssq + (df[i,j] - n*dpois(j,l))^2
        }
      }
      print(ssq)
      df.lambda$lambda[ii] <- l
  df.lambda$ssq[ii] <- ssq
    }
    df.lambda
    lambda.est <- df.lambda$lambda[which.min(df.lambda$ssq)]
lambda.est # 2.4
points(x <- 1:10, n*dpois(1:10,lambda.est),type="l",lwd=2)

100*dpois(1:10,3)
n/lambda.est

lambda estimada se mantiene en torno a 2,3, con una estimación n de alrededor de 43; la curva ajustada parece muy discrepante y parece empeorar con el aumento de n? ¿No tendrá esto que ver con el hecho de que nuestras repeticiones son diferente ¡de las distribuciones de Poisson "clásicas": no se trata de UN acontecimiento que se repite x número de veces, sino de la suma de repeticiones de diferentes elementos (canciones) !

4voto

Shabaz Puntos 403

Se puede aproximar mediante un Distribución de Poisson que es más válida a medida que se alarga la lista de reproducción. Basta con encontrar el valor de $\lambda$ el número medio de veces que se ha reproducido una canción que mejor se ajuste a tus datos. Es decir $\frac {100}{number of songs}$ Cualquier libro de análisis numérico puede ayudar, o simplemente puede utilizar el objetivo buscar en Excel en la suma de error cuadrático en cada bin. Como has tocado 40 canciones diferentes, la canción media que se ha tocado ha sido $2.5$ veces. Si usamos eso para $\lambda$ la posibilidad de que una canción no se reproduzca es de aproximadamente $8.2\%$ por lo que podría haber otro $3$ canciones más o menos. Incluso puedes empezar a comprobar si la selección es realmente aleatoria haciendo una prueba chi-cuadrado de la distribución.

2voto

palehorse Puntos 8268

Puedes calcular la probabilidad: Sea $M$ sea el número total (desconocido) de canciones, $n_i$ la cantidad de canciones que aparecieron $i$ veces, así que $ n_1 + 2 n_2 + 3 n_3 \cdots 6 n_6= N = 100$ y que $P=n_1 + n_2 +\cdots + n_6 = 40$

Entonces, la probabilidad es

$${\mathbb l}(M) = \left(\frac{1}{M}\right)^N {M \choose n_1} {M -n_1 \choose n_2} \cdots {M - P + n_6 \choose n_6} K = \left(\frac{1}{M}\right)^N \frac{M!}{n_1! n_2! \cdots (M-P)!} K$$

donde $K$ cuenta las permutaciones de $N$ elementos con $n_2, n_3 \cdots$ elementos repetidos - que no depende de $M$ . Tomando el loglikehood, ignorando los elementos que no dependen de $M$ y utilizando la aproximación de Stirling, obtenemos

$$L(M)= -N \log(M) + M ( \log(M) -1) -(M-p) (\log(M-P)-1)$$

El máximo de esta logicidad se produce entre 44 y 45.

2voto

Mischa Puntos 26200

Utilizando la notación de leonbloy, dejemos también que $N_1=10$ es el número de canciones que se han reproducido una vez. Un simple estimador de Good-Turing para $M$ viene dada por $$ \hat M = {{P} \over {1-{N_1 \over N} }}= {{40} \over {1-{10 \over 100}}}=44.4,$$ lo que concuerda perfectamente con el enfoque de máxima verosimilitud.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X