eta2.nb <- function(modelo=fit.model,maxit=20) { # # Descrição e detalhes: # McCullagh e Nelder (1989), pág.401, citam que uma forma de checar formalmente a má especificação da função de # ligação ou falta de covariadas no modelo é adicionar o quadrado do preditor linear ajustado como uma covariada # extra e analisar a queda no desvio. # # Essa função automaticamente pega um modelo ajustado com distribuição binomial negativa e lista o seu desvio, o # obtido adicionando o preditor linear ao quadrado e faz um teste de razão de verossimilhanças comparando os dois. # É necessário ter a função rv.nb instalada. # # Os dados devem estar disponíveis pelo comando attach( ). # # Argumentos obrigatórios: # modelo: deve-se informar o objeto onde está o ajuste do modelo com distribuição gama, caso não seja informado, a # função procurará o ajuste no objeto fit.model; # # Argumentos opcionais: # maxit: essa é utilizada no ajustes do novo modelo. O padrão é maxit=20. # # Autor: Frederico Zanqueta Poleto , arquivo disponível em http://www.poleto.com # # Referência: # MCCULLAGH, P. e NELDER, J. A. (1989). Generalized Linear Models. 2ª ed. Chapman and Hall, London. # # Exemplo: # eta2.nb(ajuste) # if(class(modelo)[1] != "negbin") { stop(paste("\nA classe do objeto deveria ser binomial negativa e nao ",class(modelo)[1],"!!!\n")) } X <- model.matrix(modelo) y <- modelo$y fi <- modelo$theta pl2 <- predict(modelo)^2 link<-modelo$family["link"] X2<-cbind(X,pl2) if ( (is.null(version$language) == T && link == "Log: log(mu)") | (is.null(version$language) == F && link == "log") ) { modelo2 <- glm.nb(y ~ X2-1,init.theta=fi,maxit=maxit) } else { if ( (is.null(version$language) == T && link == "Square Root: sqrt(mu)") | (is.null(version$language) == F && link == "sqrt") ) { modelo2 <- glm.nb(y ~ X2-1,init.theta=fi,link=sqrt,maxit=maxit) } else { if ( (is.null(version$language) == T && link == "Identity: mu") | (is.null(version$language) == F && link == "identity") ) { modelo2 <- glm.nb(y ~ X2-1,init.theta=fi,link=identity,maxit=maxit) } else { stop(paste("\nEsta funcao so aceita as ligacoes: canonica (log), raiz quadrada e identidade!!!\nLigacao ",link," desconhecida!!!\n")) } } } cat("H0: Without Eta^2: deviance",round(summary(modelo)$deviance,digits=6),"on",summary(modelo)$df[2],"degrees of freedom\n") cat("H1: With Eta^2 : deviance",round(summary(modelo2)$deviance,digits=6),"on",summary(modelo2)$df[2],"degrees of freedom\n\n") rv.nb(modelo,modelo2) }