[R-br] Problema numérico no gnm

Davi davi.butturi em gmail.com
Quarta Maio 8 20:18:21 BRT 2013


Boa noite a todos!

Estou tentando simular de um modelo não-linear generalizado e depois ajustar
esse modelo aos dados gerados na simulação. A variável resposta pode seguir
Poisson ou Binomial, não tem problema.

 

A média é modelada por: n*(1-exp(-(b0+b1*x))*(exp(-gx) ), em que x é uma
variável quantitativa, n pode ser uma variável offset, no caso da Poisson,
ou o número de ensaios Bernoulli, no caso da binomial.

 

Aí vai o exemplo que vem dando erro, que eu suponho ter a ver com o optim,
devido aos valores muito pequenos dos parâmetros b0, b1 e g e do valor da
offset “n” ser muito grande.

 

Agradeço a todos pela atenção! Abraços.

 

 

# no R

 

require(gnm)

 

x  <- sort( rep(0:5,3) )

b0 <- 1.5*1e-6

b1 <- 3*1e-6

g  <- 3*1e-1

n  <- rep(1e+8,length(x))

p  <- (1 - exp(-(b0+b1*x)) ) * exp(-g*x) ; p

mu <- n*p

 

## Funções não lineares

# Parametrização original

margo.betas <- function(x){

  list(predictors=list(beta0=1,beta1=1,gamma=1),

       variables=list(substitute(x)),

       term=function(predictors,variables){

 
pred<-paste("(1-exp(",variables[1],"+",variables[2],"*",predictors[1],"))*(e
xp(",

                     variables[3],"*",predictors[1],"))",sep="")

       })

}

class(margo.betas) <- "nonlin"

 

# Reparametrização, com b0 = 1/(ln k0), b1=1/(ln k1) e g=1/(ln k2)

margo.ks <- function(x){

  list(predictors=list(k0=1,k1=1,k2=1),

       variables=list(substitute(x)),

       term=function(predictors,variables){

 
pred<-paste("(1-",variables[1],"*(",variables[2],"^",predictors[1],"))*(",

                     variables[3],"^",predictors[1],")",sep="")

       })

}

class(margo.ks) <- "nonlin"

 

 

######## ABORDAGEM POISSON

set.seed(0119)

y <-rpois(length(x),lambda=mu)

 

eta.margo1   <- formula(y ~ -1 + Mult(offset(n), margo.ks(x) ) )

eta.margo2   <- formula(y ~ -1 + Mult(offset(n), margo.betas(x) ) )

 

gnm(eta.margo1,family=poisson,tolerance=1e-50)

gnm(eta.margo2,family=poisson,tolerance=1e-50)

 

 

######## ABORDAGEM BINOMIAL

set.seed(0119)

y            <-rbinom(length(x),size=n,prob=p)

 

eta.margo1   <- formula(cbind(y,n-y) ~ -1+ margo.ks(x) )

eta.margo2   <- formula(cbind(y,n-y) ~ -1+ margo.betas(x) )

 

 

gnm(eta.margo1,family=binomial)

gnm(eta.margo2,family=binomial)

 

 

___________________________________________________

Davi Butturi-Gomes

Doutorando em Estatística e Experimentação Agronômica - ESALQ /USP -
Piracicaba

Mestre em Biometria - IB/UNESP - Botucatu

Ecólogo - IB/UNESP - Rio Claro

Skype: davibg87

(19)8206.6565

 

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130508/3af95fb4/attachment.html>


Mais detalhes sobre a lista de discussão R-br