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
.
2) Pensar em um modelo simples de ocorrência com dois parâmetros:
dim, ncol, nrow
.
3) Declarar dois vetores para possíveis valores de psi e p. Dicas de comandos: seq
.
4) Declarar uma matriz para guardar os valores de verossimilhança para cada combinação de psi e p. Dicas de comandos: matrix, rep
.
5) Calcular valores de verosimilhança para cada par de combinação de psi e p. Dicas de comandos: for, if else
.
for
para passar por psifor
(dentro do anterior) para passar por pfor
for
para calcular os componentes de verossimilhança correspondentes a cada linha (em cada combinação de psi e p) - <color blue>aqui é que entram as formulinhas</color>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
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
.
################################# ## 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 #####################################################################