resid.norm <- function(modelo=fit.model,var=NA,iden=NA,nome=seq(along = model.matrix(modelo)[,1])) { # # Descrição e detalhes: # A saída terá gráficos de resíduos contra as variáveis do modelo ou contra variáveis especificadas. # # 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: # var: se não for informada, serão feitos gráficos dos resíduos contra as variáveis do ajuste do modelo. Se for # informada, os gráficos dos resíduos serão feitos contra cada uma das variáveis informadas. É necessário # que a matriz tenha o mesmo número de linhas do modelo. Sugere-se usar o comando cbind(). # Uma sugestão é primeiro fazer um gráfico para as variáveis existentes no modelo e depois especificar # outras variáveis que não estão no modelo; # 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 # # Exemplo: # resid.norm(ajuste,var=cbind(X1,X3,X8),iden=-1) # 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) !!!")) } tsi <- resid(modelo)/(lm.influence(modelo)$sigma*sqrt(1-lm.influence(modelo)$hat)) if (is.na(var[1])) { var<-model.matrix(modelo)[,2:ncol(model.matrix(modelo))] } p<-ncol(var) if (is.na(iden[1])) { iden<-rep(0,p) } if(p>length(iden)) { iden<-rep(-1,p) } 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))) } for(i in 1:p) { plot(var[,i],tsi,xlab=dimnames(var)[[2]][i],ylab="Resíduo Padronizado", pch=16) lines(lowess(var[,i],tsi)) 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(var[,i],tsi,n=iden[i],labels=nome)} } par(mfrow=c(1,1)) cat("\n") }