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.

2) Pensar em um modelo simples de ocorrência com dois parâmetros:

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.

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
#####################################################################