Stimare la dimensione di una popolazione campionata dal numero di osservazioni ripetute


13

Supponiamo che io abbia una popolazione di 50 milioni di cose uniche e prendo 10 milioni di campioni (con sostituzione) ... Il primo grafico che ho allegato mostra quante volte campiono la stessa "cosa", che è relativamente raro come la popolazione è più grande del mio campione.

Tuttavia, se la mia popolazione è solo di 10 milioni di cose, e prendo 10 milioni di campioni, come mostra il secondo grafico, più spesso campionerò la stessa cosa volte ripetute.

La mia domanda è: dalla mia tabella di frequenza delle osservazioni (i dati nei grafici a barre) è possibile ottenere una stima della dimensione della popolazione originale quando è sconosciuta? E sarebbe fantastico se tu potessi fornire un suggerimento su come procedere in R.

testo alternativo

Risposte:


10

Come sta il Garvan?

Il problema è che non sappiamo quanti conteggi zero vengono osservati. Dobbiamo stimarlo. Una procedura statistica classica per situazioni come questa è l'algoritmo Expectation-Maximization.

Un semplice esempio:

Supponiamo di attingere da una popolazione sconosciuta (di 1.000.000) con una costante di poisson di 0,2.

counts <- rpois(1000000, 0.2)
table(counts)

     0      1      2      3      4      5
818501 164042  16281   1111     62      3

Ma non osserviamo i conteggi zero. Invece osserviamo questo:

table <- c("0"=0, table(counts)[2:6])

table

     0      1      2      3      4      5
     0 164042  16281   1111     62      3

Possibili frequenze osservate

k <- c("0"=0, "1"=1, "2"=2, "3"=3, "4"=4, "5"=5)

Inizializza la media della distribuzione di Poisson - prova a indovinare (sappiamo che qui è 0,2).

lambda <- 1 
  1. Aspettativa - distribuzione di Poisson

    P_k <- lambda^k*exp(-lambda)/factorial(k)
    P_k
                  0           1           2           3           4           5
    0.367879441 0.367879441 0.183939721 0.061313240 0.015328310 0.003065662  
    n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
    
    
    n0
           0
    105628.2     
    table[1] <-  105628.2
  2. Massimizzazione

    lambda_MLE <- (1/sum(table))*(sum(table*k))        
    lambda_MLE        
    [1] 0.697252        
    lambda <- lambda_MLE
  3. Seconda iterazione

    P_k <- lambda^k*exp(-lambda)/factorial(k)        
    n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])       
    table[1] <-  n0 
    lambda <- (1/sum(table))*(sum(table*k))
    
    
    
     population lambda_MLE
    
    [1,] 361517.1 0.5537774

Ora ripetete fino alla convergenza:

for (i in 1:200) {  
P_k <- lambda^k*exp(-lambda)/factorial(k)  
n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
table[1] <-  n0
lambda <- (1/sum(table))*(sum(table*k))
}
cbind( population = sum(table), lambda_MLE)
     population lambda_MLE
[1,]    1003774  0.1994473

La nostra stima della popolazione è 1003774 e il nostro tasso di poisson è stimato a 0,1994473 - questa è la percentuale stimata della popolazione campionata. Il problema principale che avrai nei tipici problemi biologici che stai affrontando è l'ipotesi che il tasso di instabilità sia costante.

Ci scusiamo per il post prolisso - questa wiki non è davvero adatta per il codice R.


3
Evidenzia il tuo codice e fai clic sul pulsante che assomiglia a numeri binari ...
Shane

8

Questo suona come una forma di "segna e riprendi", nota anche come "cattura-ripresa", una tecnica ben nota in ecologia (e alcuni altri campi come l'epidemiologia). Non è la mia area, ma l'articolo di Wikipedia sul marchio e sulla riconquista sembra ragionevole, anche se la tua situazione non è quella a cui si applica il metodo Lincoln – Petersen.

Penso che shabbychef sia la strada giusta per la tua situazione, ma usare la distribuzione di Poisson per approssimare il binomio probabilmente renderebbe le cose un po 'più semplici e dovrebbe essere un'ottima approssimazione se la dimensione della popolazione è molto grande, come nei tuoi esempi. Penso che ottenere un'espressione esplicita per la stima della massima verosimiglianza della dimensione della popolazione dovrebbe quindi essere piuttosto semplice (vedi ad esempio Wikipedia di nuovo ), anche se non ho il tempo di elaborare i dettagli in questo momento.


5

nKKP=1K. Pensa a questo come un coinflip ora. La probabilità di esattamentem teste (es m duplicati) da n le prove sono (nm)Pm(1-P)n-m. Moltiplica questo pernper ottenere il numero previsto di volte osservato (la trama). Per grandin può essere un po 'peloso ritirarsi K dai dati, ma per i piccoli m, probabilmente puoi fare bene supponendo che (1-P) il termine è uguale a 1.

modifica : un modo possibile per risolvere i problemi numerici è guardare i rapporti dei conteggi. Cioè sePm è la probabilità di disegnare m teste, quindi Pm/Pm+1 è uguale a (K-1)m+1n-m. Quindi guarda i rapporti dei conteggi dei duplicati nei tuoi dati per ottenere stime multiple diK, quindi prendi la mediana o la media.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.