====== Máxima Verossimilhança ====== Este é um exercício sobre Máxima Verossimilhança, utilizando os dados de presença e ausência. \\ **Objetivos:**\\ i) Obter estimativa de parâmetros psi e p com base em método de máxima verosimilhança;\\ ii) Representar graficamente a superfície de verosimilhança.\\ 1) **Construa uma base de dados fictícia**. __Dicas de comandos__: ''sample'', ''rbinom'' ,''rbind''.\\ * Esta base de dados pode ser compreendida como uma matriz [i,j], com número i de linhas e j de colunas.\\ * Como tratam-se de dados de presença e ausência, vamos representar as ausências por zeros, e as presenças por um.\\ 2) Pensar em um modelo simples de **ocorrência com dois parâmetros**:\\ * __psi__ é a probabilidade de ocorrência, relativa aos locais (LINHAS);\\ * __ p__ é a detecção (condicionada à ocorrência), relativa ao momento da amostragem (COLUNAS);\\ * Declarar dois objetos, um para representar o número de linhas da matriz e outro para o número de colunas. __Dicas de comandos__: ''dim, ncol, nrow''.\\ 3) **Declarar dois vetores para possíveis valores de __psi__ e __p__.** __Dicas de comandos__: ''seq''.\\ * Lembrem-se de que as probabilidades __psi__ e __p__ variam entre 0 e 1.\\ 4) **Declarar uma matriz para guardar os valores de verossimilhança para cada combinação de __psi__ e __p__.** __Dicas de comandos__: ''matrix, rep''.\\ * Esta será uma matriz em que o número de células será equivalente ao número de interações entre os valores criados para __psi__ e para __p__. Isto é, o número de valores de __psi__ multiplicado ao número de valores de __p__ equivale ao número de células.\\ 5) **Calcular valores de verosimilhança para cada par de combinação de psi e p.** __Dicas de comandos__: ''for, if else''.\\ * 5.1) um ''for'' para passar por __psi__\\ * 5.2) um ''for'' (dentro do anterior) para passar por __p__\\ * 5.3) crie índices para chamar os valores de __psi__ e __p__ dentro dos loops ''for''\\ * 5.4) crie um vetor para guardar os valores de verossimilhança das linhas\\ * 5.5) mais um ''for'' para calcular os componentes de verossimilhança correspondentes a cada linha (em cada combinação de __psi__ e __p__) - aqui é que entram as formulinhas\\ * 5.6) use ''if else''. Lembrem-se de que linhas em que tudo é zero levam a uma formulinha diferente das linhas que têm pelo menos uma observação\\ * 5.7) obtenha o valor de verossimilhança dos dados para a combinação corrente de __psi__ e __p__ com base no resultado das formulinhas para cada linha (não esqueça dos logaritmos)\\ 6) Selecione, na matriz em que você guardou os dados de verossimilhança, os valores dos parâmetros __psi__ e __p__ que maximizam a ocorrência dos dados.__Dicas de comandos__: ''which''.\\ 7) Faça uma **representação gráfica** dos valores de verossimilhança encontrados para cada combinação de __psi__ e __p__. __Dicas de comandos__: ''contour''.\\ 8) Adicione no gráfico o **ponto de coordenadas (__psi__,__p__)**, correspondentes aos valores dos parâmetros psi e p que maximizam a ocorrência dos dados. __Dicas de comandos__: ''abline''.\\ ===== Uma solução ===== ################################# ## criando os dados #### ## com parâmetros conhecidos #### ################################# ## Alexandre Adalardo de Oliveira ## 21 de outubro de 2013 # processo de interesse: ocorrência # prob de ocorrenciam psi=0.7 ocorre<-sample(c(1,0),10, prob=c(0.7, 0.3), replace=TRUE) #ou #ocorre<-rbinom(10,1, 0.7) ########################## ## processo de observação ######################### # prob de detecção p=0.4 ######################## # 10 sessões de amostra em cada localidade observa= sample(c(1,0), 100, prob= c(0.4, 0.6), replace=TRUE) detecta<-matrix(observa, ncol=10) ## conectando os dois processos detecta[ocorre==0, ]<-0 amostra<-detecta ############################ ## nome das colunas e linhas rownames(amostra)<-paste("local", 1:10, "") colnames(amostra)<-paste("tempo", 1:10, "") ############################### ## Calculando as probabilidade ## para diferentes parâmetros ############################### nocor<-apply(amostra, 1, sum) ## ocorrência em cada localidade nt<- dim(amostra)[2] ## número de visitas a cada localidade ## sequencia de valores de psi e p seqpsi<-seqp<-seq(0.05,0.955, 0.05) ## criando uma matrix para guardar os resultados resulta<-matrix(NA, ncol=length(seqp), nrow=length(seqpsi), dimnames=list(seqpsi,seqp)) ## um função para o cálculo de verossimilhança para valores de p e psi verosim<-function(psi, p, nocor,nt) { n0 = nocor==0 res<-psi * p ^ nocor * (1-p)^(nt-nocor) res[n0]<-psi * (1-p)^nt + (1-psi) return(res) } ############################################################# ## calculando a Verossimilhança para a sequência de valores ## de p e psi ############################################################# for (i in 1:(length(seqpsi))) { psi<-seqpsi[i] for (j in 1:(length(seqp))) { p<-seqp[j] resulta[i,j]<- -1*sum(log(verosim(psi, p, nocor, nt))) } } ####################################################### ## encontrando a estimativa de Maxima Verossimilhança ## ou minima -LogVerossimilhança ####################################################### indmin<-arrayInd(which.min(resulta), dim(resulta)) psiEst<-dimnames(resulta)[[1]][[indmin[1]]] pEst<-dimnames(resulta)[[2]][[indmin[2]]] psiEst; pEst ###################################################### ## O gráfico da superfície de Verossimilhança contour(resulta, xlab="Ocorrência (psi)", ylab="Detecção (p)", nlevels=20) abline(v=as.numeric(psiEst), col="red", lty=2) abline(h=as.numeric(pEst), col="red", lty=2) ######################################################## # Um conjunto de dados que não conhecemos os parâmetros ######################################################## ## dados de Ploeophana em 10 árvores #################################### ploe<-rbind(c( 0, 0, 0, 0, 0, 0), c( 0, 0, 0, 0, 0, 1), c( 0, 0, 0, 0, 0, 0), c( 0, 0, 0, 0, 0, 0), c( 0, 0, 0, 0, 0, 1), c( 0, 1, 1, 0, 0, 0), c( 0, 1, 1, 1, 0, 0), c( 0, 0, 0, 0, 0, 0), c( 0, 0, 0, 1, 0, 0), c( 1, 0, 1, 0, 1, 0), c( 1, 1, 1, 1, 1, 1)) ##################################################################### # calcule os parâmetros e faça o gráfico da função de verossimilhança #####################################################################