dfbeta.norm <- function(modelo=fit.model,iden=double(ncol(model.matrix(modelo))),nome=seq(along = model.matrix(modelo)[,1])) { # # Descrição e detalhes: # A saída terá gráficos do DFBETA para cada coeficiente do modelo. Neter et alli (1996, pág.379, 382-383) sugerem que para # conjuntos de dados pequenos ou médios deve-se utilizar o ponto de corte igual a 1, enquanto que para conjuntos grandes # 2/raiz(n). Esta função utiliza apenas o último critério para destacar observações que possam ser influentes. # # Os dados devem estar disponíveis pelo comando attach( ). # # Argumentos obrigatórios: # modelo: deve-se informar o objeto onde está o ajuste do modelo normal linear, caso não seja informado, a função # procurará o ajuste no objeto fit.model; # # Argumentos opcionais: # iden: caso deseje, informe o número de observações que irá querer destacar em cada gráfico. O vetor deve # conter números inteiros. A ordem que deve ser informada é a mesma das variáveis da opção var, caso seja # utilizada, ou deve ter a mesma ordem da matriz modelo. Os componentes do vetor iguais a 0 indicam que não se # quer que identifique pontos, se for um inteiro positivo irá automaticamente nos gráficos pertinentes permitir # que identifiquemos o número de pontos solicitados e qualquer outro valor (negativo ou decimal) parará nos # gráficos e irá solicitar que especifiquemos o número de pontos a ser destacado. O padrão é c(0,...,0) caso não # se entre com nada e c(-1,...,-1) caso se entre com qualquer coisa que não satisfaça os requisitos citados # de ser número inteiro, não negativo e de ter o mesmo comprimento da opção var ou da matriz modelo; # nome: esse argumento só é utilizado caso algum dos componentes do vetor da opção iden não seja 0. Caso não # seja informado nada, os pontos identificados serão os números da ordem em que estão no banco de dados. # Caso se queira, pode-se informar um vetor de nomes ou de identificações alternativas. Obrigatoriamente # esse vetor deve ter o mesmo comprimento do banco de dados. # # Autor: Frederico Zanqueta Poleto , arquivo disponível em http://www.poleto.com # # Referência: # NETER, J., KUTNER, M. H., NACHTSHEIM, C. J. and WASSERMAN, W. (1996). Applied Linear Statistical Models. 4ª ed. # Mc Graw Hill, Boston. # # Exemplos: # dfbeta.norm(ajuste) # dfbeta.norm(ajuste,iden=-1,nome=estados) # if( class(modelo)[1]=="lm" || (class(modelo)[1]=="glm" && (modelo$family[[1]]=="Gaussian" | modelo$family[[1]]=="gaussian")) ) { } else { stop(paste("\nA classe do objeto deveria ser lm ou glm (com distribuicao gaussian) !!!")) } X <- model.matrix(modelo) n <- nrow(X) p <- ncol(X) if(p>length(iden)) { iden<-rep(-1,p) } ck <- diag(solve(t(X)%*%X)) si <- lm.influence(modelo)$sigma bi <- lm.influence(modelo)$coefficients if (p>2) { if (p>8) { par(mfrow=c(3,ceiling(p/3))) } else { par(mfrow=c(2,ceiling(p/2))) } } else { par(mfrow=c(1,ceiling(p))) } cut<-2/sqrt(n) for(i in 1:p) { if(is.null(version$language)) { # O $coefficients do S-Plus dá os valores dos coeficientes sem as observações dfb <- (modelo$coef[i]-bi[,i])/(si*sqrt(ck[i])) } else { # O $coefficients do R dá a variação dos valores dos coeficientes sem as observações dfb <- bi[,i]/(si*sqrt(ck[i])) } plot(dfb,xlab="Índice", ylab="DFBETA",main=dimnames(X)[[2]][i],ylim=c(min(dfb,-cut),max(dfb,cut)), pch=16) abline(cut,0,lty=2) abline(-cut,0,lty=2) while ( (!is.numeric(iden[i])) || (round(iden[i],0) != iden[i]) || (iden[i] < 0) ) { cat("Digite o num.de pontos a ser identificado (0=nenhum) e para continuar\n") out <- readline() iden[i]<-as.numeric(out) } if(iden[i]>0) {identify(dfb,n=iden[i],labels=nome)} } par(mfrow=c(1,1)) cat("\n") }