# Programa extraído do site: https://www.ime.usp.br/~giapaula/textoregressao.htm # Créditos: Prof. Dr. Gilberto Alvarenga Paula #---------------------------------------------------------------# # Para rodar este programa deixe no objeto fit.model a saída # do ajuste da regressão com erro normal. Deixe os dados # disponíveis através do comando attach(...). Depois use o # comando source(...) no S-Plus ou R para executar o programa. # A sequência de comandos é a seguinte: # # > fit.model <- ajuste # > attach(dados) # > source("diag_norm") # # A saída terá quatro gráficos: de pontos de alavanca, de pontos # influentes e dois de resíduos. Para identificar os pontos # que mais se destacam usar o comando identify(...). Se por # exemplo se destacam três pontos no plot(fitted(fit.model),h,...), # após esse comando coloque # # > identify(fitted(fit.model),h,n=3) # # O mesmo pode ser feito nos demais gráficos. Nos gráficos de # resíduos foram traçados os limites ylim=c(a-1,b+1), onde a # é o menor valor e b o maior valor para o resíduo..Mude esses # limites se necessário.Para voltar a ter apenas um gráfico # por tela faça o seguinte: # # > par(mfrow=c(1,1)) # #---------------------------------------------------------------# # X <- model.matrix(fit.model) n <- nrow(X) p <- ncol(X) H <- X%*%solve(t(X)%*%X)%*%t(X) h <- diag(H) lms <- summary(fit.model) s <- lms$sigma r <- resid(lms) ts <- r/(s*sqrt(1-h)) di <- (1/p)*(h/(1-h))*(ts^2) si <- lm.influence(fit.model)$sigma tsi <- r/(si*sqrt(1-h)) a <- max(tsi) b <- min(tsi) par(mfrow=c(2,2)) # plot(tsi,xlab="Índice", ylab="Resíduo Studentizado", ylim=c(b-1,a+1), pch=16,cex=1.1,cex.axis=1.1,cex.lab=1.1) abline(2,0,lty=2) abline(-2,0,lty=2) #identify(tsi, n=1) #title(sub="(c)") # plot(fitted(fit.model),tsi,xlab="Valores Ajustados", ylab="Resíduo Studentizado", ylim=c(b-1,a+1), pch=16,cex=1.1,cex.axis=1.1,cex.lab=1.1) # abline(2,0,lty=2) abline(-2,0,lty=2) #boxplot(tsi,ylab="Resíduo Studentizado",cex=1.1,cex.axis=1.1,cex.lab=1.1) hist(tsi,xlab="Resíduo Studentizado",probability=TRUE,main="") #title(sub="(d)") #identify(fitted(fit.model),tsi, n=1) # ident <- diag(n) epsilon <- matrix(0,n,100) e <- matrix(0,n,100) e1 <- numeric(n) e2 <- numeric(n) # for(i in 1:100){ epsilon[,i] <- rnorm(n,0,1) e[,i] <- (ident - H)%*%epsilon[,i] u <- diag(ident - H) e[,i] <- e[,i]/sqrt(u) e[,i] <- sort(e[,i]) } # for(i in 1:n){ eo <- sort(e[i,]) e1[i] <- (eo[2]+eo[3])/2 e2[i] <- (eo[97]+eo[98])/2 } # med <- apply(e,1,mean) faixa <- range(tsi,e1,e2) # #par(pty="s") qqnorm(tsi,xlab="Percentil da N(0,1)", ylab="Resíduo Studentizado", ylim=faixa, pch=16, main="",cex=1.1,cex.axis=1.1,cex.lab=1.1) par(new=T) qqnorm(e1,axes=F,xlab="",ylab="",type="l",ylim=faixa,lty=1, main="") par(new=T) qqnorm(e2,axes=F,xlab="",ylab="", type="l",ylim=faixa,lty=1, main="") par(new=T) qqnorm(med,axes=F,xlab="",ylab="",type="l",ylim=faixa,lty=2, main="") #---------------------------------------------------------------#