Pàg 1 de 66
Quando temos duas variáveis numéricas podemos ter: Relação funcional entre as duas variáveis Y = f(x) Relação estatística entre as duas variáveis A relação entre X e Y não é perfeita Exemplo de relação funcional e relação estatística Pàg 2 de 66
Pàg 3 de 66
Pàg 4 de 66
Pàg 5 de 66
Pàg 6 de 66
Pàg 7 de 66
Pàg 8 de 66
Pàg 9 de 66
Pàg 10 de 66
Pàg 11 de 66
Após executar o script acima obtemos, dentre outros, o seguinte resultado: A equação de regressão acima nos diz que: Se não aplicarmos dose alguma de fertilizante (isto é X = 0) então esperamos que o talhão de 1 ha produza 69.867 kg da cultura plantada. A cada aumento de uma unidade de dose de fertilizante, isto é a cada kg de fertilizante aplicado, espera-se que, além da produção de 69.867 kg, seja produzido adicionalmente 8.442 kg da cultura plantada. Pàg 12 de 66
E este outro resultado apresentado abaixo, o que significa? Bem, estamos lidando com uma amostra (no caso n = 28 talhões). Foi com base nesta amostra que estimamos β 0 e β 1 através do algoritmo de mínimos quadrados. Este procedimento matemático foi feito via comando lm do R. Ok, mas por se tratar de uma amostra, devemos realizar um teste estatístico de hipótese, ou simplesmente um teste de hipótese. Aliás, o procedimento lm já realiza dois testes de hipótese. Um teste para β 0 e outro para β 1. Pàg 13 de 66
O teste de hipótese é para nós uma caixa preta. Mas vamos tentar entender o resultado que ele nos indica. Isto é importante para considerarmos se a reta de regressão obtida pode ser, de fato, representativa para o nosso problema. O primeiro teste de hipótese testa a seguinte hipótese denominada H 0 (hipótese nula) contra a hipótese alternativa H a : H 0 : β 1 = 0 X H a : β 1 0 Em essência, queremos saber se existe uma reta de regressão ou, em outras palavras, se a variável preditora X (em nosso exemplo, DOSE de fertilizante) tem relação estatística com a produção da cultura (Y), aumentando ou diminuindo conforme o valor de X. Se X tem relação estatística Y, então vai existir um valor não nulo para β 1. Então o teste tende a apontar a hipótese alternativa H a. Lembre-se que β 1 é o coeficiente angular da reta!!!! Mas se X não tem relação estatística com Y, então β 1 é nulo, ou seja, β 1 = 0. Pàg 14 de 66
Como interpretar o resultado do teste de hipótese para β 1 sem entender a lógica do mesmo? Passo 1 Com base no valor estimado de β 1, que é o coeficiente da variável preditora X (em nosso exemplo, DOSE) é calculado um t valor (t value). Passo 2 O t valor (t value) é uma espécie de representante do valor estimado β 1. Então se calcula a probabilidade de se obter este t valor (t value) ou um valor maior (Pr > t ), supondo que H 0 é a hipótese correta!!! Passo 3 Normalmente se decide assim: Se Pr > t for menor ou igual a 5%, então aceitamos a hipótese H a. Caso contrário aceitamos H 0. Pàg 15 de 66
Veja na figura abaixo o resultado que obtivemos: Passo 1 O valor estimado de β 1 é 8.4415. O t valor correspondente é t = 10.613 Passo 2 Supondo H 0 correta (isto é supondo que β 1 = 0, o que significa que não há relação linear) a probabilidade de se obter t value maior ou igual a 10.613 é de 6.06e-11 = 6.06 x 10-11 = 0.0000000000606 = 0.000000000000606 %. Passo 3 Como Pr(> t ) = 6.06 x 10-11 < 5%, então aceitamos a hipótese H a, isto é, β 1 0, o que significa dizer que há evidências de que ocorre relação linear entre as variáveis PROD e DOSE. Pàg 16 de 66
Uma vez que o modelo de regressão linear seja construído, é possível calcular uma medida de associação linear entre a variável resposta e a variável preditora/explicativa. Esta medida denomina-se coeficiente de determinação e é representada pelo símbolo R 2, onde 0 R 2 1 A interpretação de R 2 é a seguinte: quanto mais próximo de 1 for R 2, significa que a variável preditora explica melhor a variabilidade da variável resposta. Quanto mais próximo R 2 estiver de zero, significa que a variável preditora não é boa para explicar a variabilidade de valores da variável resposta. Em nosso exemplo R 2 = 81,24%. A variável DOSE explica bem a variabilidade de valores da variável resposta PROD Pàg 17 de 66
Pàg 18 de 66
Pàg 19 de 66
Sobre a influência dos pontos no modelo de regressão... Pàg 20 de 66
Pàg 21 de 66
Pàg 22 de 66
Sobre a alvancagem (leverage) dos pontos no modelo de regressão... Pàg 23 de 66
Sobre os pontos discrepantes (outliers) no modelo de regressão... Pàg 24 de 66
Para medir o grau de influência de cada ponto no modelo de regressão podemos usar a distância de Cook D i... REGRESSÃO LINEAR SIMPLES Noções preliminares Pàg 25 de 66
Veja abaixo as distâncias de Cook D i calculadas para o modelo de regressão com os 28 talhões. Note que o gráfico destacou os talhões 7, 14 e 25. Contudo, apresentam baixo valores para D i indicando baixa influência no modelo de regressão ajustado com os 28 pontos. Então podemos considerar que neste grupo de 28 pontos não ocorre ponto influente, se considerarmos, por exemplo, ponto influente com D i >= 0.5. Pàg 26 de 66
Se aos 28 talhões acrescentarmos o talhão 29 com DOSE = 75 kg e PROD = 92 kg obteremos o resultado abaixo. Observa-se que o talhão 29 é realmente um ponto influente (D 29 = 2.25) e é um ponto discrepante (outlier) com alta alavancagem (high leverage). Sua permanência ou retirada produz modelos de regressão consideravelmente diferentes entre si. Pàg 27 de 66
Agora se aos 28 talhões acrescentarmos o talhão 29 com DOSE = 32 kg e PROD = 610 kg obteremos o resultado abaixo. Observa-se que o talhão 29 não é um ponto influente (D 29 = 0.182) apesar de poder ser considerado um ponto discrepante (outlier) porém com baixa alavancagem (low leverage). Sua permanência ou retirada não altera significativamente o modelo de regressão Pàg 28 de 66
Para medir o grau de alavancagem (leverage) de cada ponto no modelo de regressão podemos usar o hat-value h i... h i com valores altos indicam alta alavancagem (high leverage) mas não necessariamente apresentam alta influência no modelo Como regra prática, h i com valor que seja maior que o dobro do valor médio dos h i da amostra deve ser analisado mais detalhadamente. Se a amostra de dados é muito grande, recomenda-se considerar h i com valor que seja maior que o triplo do valor médio dos h i Pàg 29 de 66
Veja abaixo os hat-values h i calculadas para o modelo de regressão com os 28 talhões. Note que o ponto 16 apresentará alta alavancagem (high leverage) se considerarmos que h 16 > 2h medio (h 16 = 0.1588 e h medio = 0.0714) Pàg 30 de 66
Se aos 28 talhões acrescentarmos o talhão 29 com DOSE = 75 kg e PROD = 92 kg obteremos o resultado abaixo. Note que o talhão 29 (h 29 = 0.191) realmente é um ponto de alta alavancagem (e já vimos que é também influente...) Já o ponto/talhão 16 foi considerado de alta alavancagem pelo fato de seu valor ser mais que o dobro do valor médio (h 16 = 0.147 > (2* h medio ). Mas não é influente para o modelo. Pàg 31 de 66
Para medir o grau de discrepância (outlier) de cada ponto no modelo de regressão poderíamos usar os resíduos semiestudentizados (semistudentized residuals) e* i... Note que raiz(mse) refere-se ao grupo de resíduos... Mas cada resíduo e i pode apresentar variância(e consequentemente desvio padrão) diferente de alguns outros e i. Então os resíduos semiestudentizados, embora possam, não são usados para detectar outliers... Pàg 32 de 66
Para medir o grau de discrepância (outlier) de cada ponto no modelo de regressão podemos usar os resíduos padronizados (standardized residuals) r i também denominados resíduos studentizados internamente (internally studentized residuals). Os resíduos padronizados (standardized residuals) dos 28 talhões não apresentam outliers Pàg 33 de 66
Se aos 28 talhões acrescentarmos o talhão 29 com DOSE = 75 kg e PROD = 92 kg obteremos o resultado abaixo. Note que o talhão 29 (r 29 = -4.3657) realmente é um ponto discrepante (outlier) Pàg 34 de 66
Porquê Análise de Resíduos???? Pàg 35 de 66
Mas antes... vamos usar os resíduos para ver outras coisas em nossa massa de dados... Pàg 36 de 66
Vamos verificar a linearidade da função de regressão via gráfico da variável preditora X Resíduos. (No exemplo, a variável preditora é DOSE)... Observe que no gráfico DOSE versus Resíduos não se observa um padrão... os pontos estão espalhados de forma relativamente simétrica em relação ao resíduo 0... Então, a priori a linearidade é boa... Será? Um gráfico de resíduos consegue mostrar eventuais tendências... e queremos não encontrar tendência/padrão para poder considerar o modelo adequado... Pàg 37 de 66
Tem casos que o gráfico variável preditora versus resíduo vai apontar a não linearidade... veja abaixo... Note por exemplo que no gráfico acima Weight X Resíduo, poderíamos passar uma reta com inclinação pelos pontos... Isto é uma tendência (um padrão) que aponta que o modelo não está adequado... Pàg 38 de 66
Olha o exemplo abaixo (http://data.library.virginia.edu/diagnostic-plots/) Pàg 39 de 66
No exemplo abaixo, o gráfico de resíduos X variável resposta predita mostra que a regressão linear simples Y ~ X não é boa para representar a relação estatística entre Y e X, pois pelo gráfico nota-se um padrão de distribuição dos resíduos... Pàg 40 de 66
Veja abaixo a ideia conceitual de homocedasticidade e heterocedasticidade... Pàg 41 de 66
Para verificar a homocedasticidade dos resíduos... Para os 28 talhões temos: Pàg 42 de 66
Para verificar a homocedasticidade observando-se os gráficos devemos esperar que a linha vermelha (lowess curve) seja uniforme horizontalmente. No caso dos 28 talhões há indícios de heterocedasticidade. Assim, o requisito de homocedasticidade não é atendido, o que pode comprometer a validade do modelo de regressão linear construído... Veja abaixo outro exemplo: Pàg 43 de 66
Podemos também realizar testes de hipótese para verificar a ocorrência ou não de homocedasticidade. Neste teste temos: Hipótese nula H 0 : Hipótese alternativa H a : Ocorre homocedasticidade Não ocorre homocedasticidade (ocorre heterocedasticidade) Vamos realizar 3 teste de hipótese para averiguação de homocedasticidade: Teste de Breusch-Pagan NCV teste Tesste de Brown-Forsythe Lembre-se que se o p-valor do teste de hipótese for menor que 5%, adota-se o procedimento de rejeitar a hipótese H 0, aceitando portanto válida a hipótese H a. Em caso contrário, aceita-se H 0. Pàg 44 de 66
Vejamos os resultados dos testes para os dados dos 28 talhões E agora??? Em dois testes o p-valor foi maior que 5% (68,12% e 79,18%) indicando aceitação de H 0 e no teste de Brown- Forsythe foi significativo (1,44%) indicando aceitação de H a. Qual a sua decisão? Os resíduos apresentam ou não homocedasticidade? Pàg 45 de 66
Para verificar a normalidade dos resíduos... Para analisar a normalidade dos resíduos podemos usar (1) box plot; (2) histograma e (3) diagrama ramo-e-folhas dos resíduos. Estes gráficos apresentam maior utilidade quando a amostra de dados é grande. Para os 28 talhões temos: Pàg 46 de 66
Para analisar graficamente a normalidade dos resíduos podemos usa-se também o gráfico Q-Q plot (Quantile-Quantile plot) Veja o gráfico QQ plot para o exemplo dos 28 talhões... E então? Você acha que podemos sustentar a normalidade dos resíduos com base na observação do QQ plot? Pàg 47 de 66
APENDICE - SCRIPT R e Dados 28 talhões TALHAO;DOSE;PROD 1;33.2;476 2;58.8;514 3;30;400 4;52.6;578 5;52.8;512 6;30;284 7;47.4;576 8;30;226 9;30;334 10;41;420 11;61;580 12;19.8;318 13;20.8;248 14;10;244 15;12.6;178 16;5.2;126 17;8;82 18;51.8;430 19;55.8;482 20;24.6;194 21;37.8;280 22;47.6;412 23;46.4;522 24;62.6;652 25;15.8;110 26;41.4;490 27;41.4;358 28;36.6;414 Pàg 48 de 66
SCRIPT R #---> Obs.: para executar este script copie o comando abaixo e execute-o no ambiente do R ##### source("c:/estatistica/cursos/tut002_codr01.r") #--------------------------------------------------------------------------------------------- # Pegar o diretório atual... initial.dir<-getwd() #--------------------------------------------------------------------------------------------- # Mudar para o diretório de trabalho... setwd("c:/estatistica/cursos") #--------------------------------------------------------------------------------------------- # Carregar eventuais bibliotecas necessárias ao processamento... library("lmtest") library("car") library("hh") #--------------------------------------------------------------------------------------------- # Definir o arquivo "log" com resultados do processamento... #sink("result01.out", append = FALSE) #--------------------------------------------------------------------------------------------- # Ler os dados... vdados <- read.csv("tut002_dose_prod.csv", sep=";", dec=".", header=true, stringsasfactors = FALSE) #############vdados <- read.csv("tut002_dose_prod_29outlier.csv", sep=";", dec=".", header=true, stringsasfactors = FALSE) Pàg 49 de 66
cat("\n \n") cat("variáveis disponíveis\n") cat("-------------------- \n") print(names(vdados)) cat("\n \n") #-------------------------------------------------------------------------------------------- cat("\n \n") cat("dados da amostra\n") cat("----------------\n") print(vdados) cat("\n \n") ###sink("result09.txt", append = FALSE) #---------------------------------------------------------- # #---> aqui executa a regressão linear (com o comando lm) #... o resultado fica armazenado na variável vregrlin # vregrlin <- lm(vdados$prod ~ vdados$dose) #-------------------------------------------------------------------------------------------- Pàg 50 de 66
cat("\n \n") cat("estimadores obtidos via regressão linear\n") cat("----------------------------------------\n") print(vregrlin) #-------------------------------------------------------------------------------------------- cat("\n \n") cat("inferências para os estimadores de Beta0 e Beta1\n") cat("------------------------------------------------\n") print(summary(vregrlin)) #------------------------------------------------------------------------------ # Mostrar os resíduos... # vdataframeaux = cbind(vdados,vregrlin$fitted.values, vregrlin$residuals) cat("\n \n") cat("dados completos - mostrando resíduos\n") cat("------------------------------------\n") print(vdataframeaux) #------------------------------------------------------------------------------ # Mostrar variável preditora X resíduos... # vdataframeaux = cbind(vdados$dose, vregrlin$residuals) vdataframeaux = as.data.frame(vdataframeaux) Pàg 51 de 66
names(vdataframeaux)[names(vdataframeaux)=="v1"] <- "DOSE" names(vdataframeaux)[names(vdataframeaux)=="v2"] <- "RESÍDUO" cat("\n \n") cat("variável preditora X Resíduo\n") cat("----------------------------\n") print(vdataframeaux) #-------------------------------------------------------------------------------------------- cat("\n \n") cat("distância de Cook\n") cat("-----------------\n") vdistcook = cooks.distance(vregrlin) vdataframeaux = cbind(vdados$talhao,vdistcook) vdataframeaux = as.data.frame(vdataframeaux) names(vdataframeaux)[1] <- "TALHÃO" names(vdataframeaux)[2] <- "DIST_COOK" print(vdataframeaux) cat("\n \n") #-------------------------------------------------------------------------------------------- cat("\n \n") cat("hat-values\n") cat("----------\n") Pàg 52 de 66
vhatvalues = hatvalues(vregrlin) vmediahatvalues = mean(vhatvalues) cat("\n") cat("valor médio: hmedio = ") cat(vmediahatvalues) cat("\n\n") # #---> Hat values que requerem atenção... maior que o dobro da média... vstatushatvalues = c() for (i in 1:length(vHatValues)) { if (vhatvalues[i] > (2* vmediahatvalues)) { vstatushatvalues[i] = "***" } else { vstatushatvalues[i] = "" } } vdataframeaux = cbind(vdados$talhao,vhatvalues,vstatushatvalues) vdataframeaux = as.data.frame(vdataframeaux) names(vdataframeaux)[1] <- "TALHÃO" names(vdataframeaux)[2] <- "Hat Value (h)" names(vdataframeaux)[3] <- "Obs" print(vdataframeaux) cat("\n \n") #-------------------------------------------------------------------------------------------- Pàg 53 de 66
# f_calcula_mse <- function(avetnumerico) { vsomaquad = sum(avetnumerico * avetnumerico) vmse = vsomaquad /(length(avetnumerico) - 2) # 2 glib #--- return(vmse) } cat("\n \n") cat("resíduos semi-studentizados (semistudentized residuals)\n") cat("-------------------------------------------------------\n") cat("\n") cat("---> Para melhor detectar outliers usa-se os \n") cat(" resíduos padronizados (STANDARDIZED RESIDUALS) conhecidos por \n") cat(" INTERNALLY STUDENTIZED RESIDUALS...\n\n") vresiduos vmse = vregrlin$residuals = f_calcula_mse(vresiduos) vsemistudentizeedresiduals = vresiduos / sqrt(vmse) vdataframeaux = cbind(vdados$talhao, vresiduos, vsemistudentizeedresiduals) vdataframeaux = as.data.frame(vdataframeaux) names(vdataframeaux)[1] <- "TALHAO" names(vdataframeaux)[2] <- "Residuo" names(vdataframeaux)[3] <- "Residuo semistudentizado" print(vdataframeaux) cat("\n \n") Pàg 54 de 66
#-------------------------------------------------------------------------------------------- # # Testes de hipótese para verificação de homocedasticidade # cat("\n \n") cat("testes de hipótese para verificação de homocedasticidade\n") cat("--------------------------------------------------------\n") cat("\n") cat("1) Teste de Breush-Pagan\n") cat(" ---------------------\n") cat("\n") cat(" H0: ocorre homocedasticidade nos resíduos \n") cat(" Ha: não ocorre homocedasticidade nos resíduos \n") vbptest = bptest(vregrlin) print(vbptest) cat("\n") cat("2) NCV Test\n") cat(" --------\n") cat("\n") cat(" H0: ocorre homocedasticidade nos resíduos \n") cat(" Ha: não ocorre homocedasticidade nos resíduos \n") cat("\n") Pàg 55 de 66
vncvtest = ncvtest(vregrlin) print(vncvtest) cat("\n") cat("3) Brown-Forsythe Test \n") cat(" --------------------\n") cat("\n") cat(" H0: ocorre homocedasticidade nos resíduos \n") cat(" Ha: não ocorre homocedasticidade nos resíduos \n") cat("\n") cat(" Obs.: Este teste não depende da normalidade dos erros.\n") cat(" cat(" É um teste robusto quanto à forte não normalidade\n") dos dados. \n") vbrownforsythe = hov(prod ~ DOSE, data=vdados) print(vbrownforsythe) cat("\n") #---------------------------------------------------------------------------------- # Gráfico dos dados com reta de regressão # dev.new() # Or X11() dev.1 <- as.integer(dev.cur()) dev.set(dev.1) plot(vdados$dose, vdados$prod, main="dados com reta de regressão", Pàg 56 de 66
xlab="dose (Kg)", ylab="produção (Kg)", pch=20) abline(vregrlin, col="red", lwd=4) #---------------------------------------------------------------------------------- # Gráficos para verificar a distância de Cook # dev.new() # Or X11() dev.2 <- as.integer(dev.cur()) dev.set(dev.2) par(mfrow=c(1,2)) #---> Grafico 1... plot(vdados$dose, vdados$prod, main="os dados dos 28 talhões", cex.main=0.8, xlab="dose (Kg)", ylab="produção (Kg)", pch=20) abline(vregrlin, col="blue", lwd=4) text(vdados$dose, vdados$prod, labels=vdados$talhao, pos=1, cex=0.7, col="red") #---> Grafico 2... plot(vregrlin, which = 4, xaxt="n", main="distância de Cook \n Regressão com 28 talhões", cex.main=0.8 ) axis(1,vdados$talhao, cex.axis=0.6, xlab="observação (talhão)") #---------------------------------------------------------------------------------- # Gráficos para verificar alavancagem (hat-values) Pàg 57 de 66
# dev.new() # Or X11() dev.3 <- as.integer(dev.cur()) dev.set(dev.3) par(mfrow=c(1,2)) #---> Grafico 1... plot(vdados$dose, vdados$prod, main="os dados dos 28 talhões", cex.main=0.8, xlab="dose (Kg)", ylab="produção (Kg)", pch=20) abline(vregrlin, col="blue", lwd=4) text(vdados$dose, vdados$prod, labels=vdados$talhao, pos=1, cex=0.7, col="red") #---> Grafico 2... plot(vhatvalues, xaxt="n", main="alavancagem (leverage) \n Regressão com 28 talhões", cex.main=0.8, ylab="hat values (h)", type="h", xlab="observação (talhão)" ) axis(1,vdados$talhao, cex.axis=0.6, xlab="observação (talhão)") for (i in 1:length(vHatValues)) { if (vhatvalues[i] > (2* vmediahatvalues)) { #### points(vdados[i,1], vhatvalues[i], col='red', pch=20) text(vdados[i,1], vhatvalues[i], labels=vdados[i,1], pos=3, cex=0.7) } } Pàg 58 de 66
#---------------------------------------------------------------------------------- # Gráficos para verificar linearidade da função de regressão # dev.new() # Or X11() dev.4 <- as.integer(dev.cur()) dev.set(dev.4) par(mfrow=c(1,2)) #---> Grafico 1... vresiduos = resid(vregrlin) plot(vdados$dose, vresiduos, main="verificar linearidade via resíduos", cex.main=0.8, xlab="dose (Kg)", ylab="resíduos", pch=20) abline(0,0, col="blue", lwd=4, lty=2) vx = vdados$dose vy = vresiduos vcurvalowess = loess(vy ~ vx) vxloess_seq = seq(min(vx),max(vx), (max(vx)- min(vx))/1000) lines(vxloess_seq, predict(vcurvalowess,vxloess_seq), col='red', lwd=1) #---> Grafico 2... plot(vdados$dose, vdados$prod, main="gráficos dos dados \n para verificar linearidade", cex.main=0.8, xlab="dose (Kg)", ylab="produção (Kg)", pch=20) abline(vregrlin, col="red", lwd=4) Pàg 59 de 66
#---------------------------------------------------------------------------------- # Gráficos para verificar homocedasticidade (constância da variância) # dev.new() # Or X11() dev.5 <- as.integer(dev.cur()) dev.set(dev.5) par(mfrow=c(1,3)) #---> Grafico 1... vresiduos = resid(vregrlin) plot(vdados$dose, vresiduos, main="serve para \n verificar homocedasticidade", cex.main=0.9, xlab="dose (Kg)", ylab="resíduos", pch=20) abline(0,0, col="blue", lwd=4, lty=2) vx = vdados$dose vy = vresiduos vcurvalowess = loess(vy ~ vx) vxloess_seq = seq(min(vx),max(vx), (max(vx)- min(vx))/1000) lines(vxloess_seq, predict(vcurvalowess,vxloess_seq), col='red', lwd=1) #---> Grafico 2... vresiduos = resid(vregrlin) plot(vregrlin$fitted, vresiduos, main="serve para \n verificar homocedasticidade", cex.main=0.9, xlab="produção ajustada(kg)", ylab="resíduos", pch=20) Pàg 60 de 66
abline(0,0, col="blue", lwd=4, lty=2) vx = vregrlin$fitted vy = vresiduos vcurvalowess = loess(vy ~ vx) vxloess_seq = seq(min(vx),max(vx), (max(vx)- min(vx))/1000) lines(vxloess_seq, predict(vcurvalowess,vxloess_seq), col='red', lwd=1) #---> Grafico 3... # # Gráfico Scale-Location # #------> Padronização dos resíduos... para auxiliar detecção de homo/hetero...cedasticidade!!! vresiduos = resid(vregrlin) # pegar os resíduos... vresiduos = vresiduos / (summary(vregrlin)$sigma) # resíduos (semi)studentizados... vresiduos = abs(vresiduos) vresiduos = sqrt(vresiduos) vdataframeaux = cbind(vregrlin$fitted.values, vresiduos) vdataframeaux = as.data.frame(vdataframeaux) names(vdataframeaux)[1] <- "PROD_ESTIMADA" names(vdataframeaux)[2] <- "RAIZ_RESIDUO_PADRONIZADO" plot(vdataframeaux$prod_estimada, vdataframeaux$raiz_residuo_padronizado, main="gráfico SCALE-LOCATION \n Para verificar homocedasticidade", cex.main=0.9, xlab="produção ajustada (Kg)", ylab="raiz(resíduo-standardized)", pch=20) vy = vdataframeaux$raiz_residuo_padronizado Pàg 61 de 66
vx = vdataframeaux$prod_estimada vcurvalowess = loess(vy ~ vx) vxloess_seq = seq(min(vx),max(vx), (max(vx)- min(vx))/1000) lines(vxloess_seq, predict(vcurvalowess,vxloess_seq), col='red', lwd=1) #---------------------------------------------------------------------------------- # Gráficos para verificar normalidade dos resíduos # dev.new() # Or X11() dev.6 <- as.integer(dev.cur()) dev.set(dev.6) par(mfrow=c(2,2)) #---> Grafico 1... Box plot dos resíduos vresiduos = resid(vregrlin) # pegar os resíduos... boxplot(vresiduos, main="resíduos dos 28 talhões", ylab="resíduo") #---> Grafico 2... Histograma dos resíduos vresiduos = resid(vregrlin) # pegar os resíduos... vnumclassessturges = nclass.sturges(vresiduos) hist(vresiduos, main="histograma dos resíduos (default do R)", cex.main=0.9, xlab="resíduo", ylab="núm. talhões") #---> Grafico 3... Histograma dos resíduos vresiduos = resid(vregrlin) # pegar os resíduos... vnumclassessturges = nclass.sturges(vresiduos) hist(vresiduos, main="histograma dos resíduos com + ou - classes", cex.main=0.9, xlab="resíduo", ylab="núm. talhões", breaks=3) Pàg 62 de 66
#---> Grafico 4... Histograma dos resíduos vresiduos = resid(vregrlin) # pegar os resíduos... vnumclassessturges = nclass.sturges(vresiduos) hist(vresiduos, main="histograma dos resíduos com + ou - classes", cex.main=0.9, xlab="resíduo", ylab="núm. talhões", breaks=10) #---> Grafico 5... Ramo-e-folhas(steam-and-leaf cat("\n") cat("diagrama ramo-e-folhas (steam-and-leafs)\n") cat("----------------------------------------\n") vresiduos = resid(vregrlin) # pegar os resíduos... stem(vresiduos) cat("\n") #---------------------------------------------------------------------------------- # Gráfico QQ-plot para verificar normalidade dos resíduos # dev.new() # Or X11() dev.7 <- as.integer(dev.cur()) dev.set(dev.7) par(mfrow=c(2,2)) vresiduos = resid(vregrlin) # pegar os resíduos... vresiduos = sort(vresiduos) # tem que estar ordenado... N = length(vresiduos) Pàg 63 de 66
n.props = pnorm(vresiduos, mean(vresiduos), sd(vresiduos)) # here I calculate the probabilities associated # w/ these data if they came from a normal # distribution w/ the same mean & SD # I calculate the proportion of x we've gone through at each point props = 1:N /(N+1) n.quantiles = qnorm(props, mean=mean(vresiduos), sd=sd(vresiduos)) # this calculates the quantiles (ie # z-scores) associated w/ the props # here I bundle them together my.data = data.frame(x=vresiduos, props=props, normal.proportions=n.props, normal.quantiles=n.quantiles) vmedia = mean(my.data$normal.quantiles) vdesvpad = sd(my.data$normal.quantiles) vquantisnormaisescorez = (my.data$normal.quantiles - vmedia) / vdesvpad my.data = cbind(my.data,vquantisnormaisescorez) names(my.data)[names(my.data)=="vquantisnormaisescorez"] <- "QuantisTeoricos" vdadosgrafico = round(my.data, digits=3) cat("\n") cat("dados para composição 'manual' do QQ plot \n") cat("----------------------------------------- \n") cat("\n") print(vdadosgrafico) cat("\n") Pàg 64 de 66
#---> Plot PP-plot plot(my.data$props,my.data$normal.props, main="pp plot", xlab="proporção dados %", ylab="proporção normalidade %") #---> Plot QQ-plot plot(my.data$quantisteoricos,my.data$x, main="qq plot", xlab="quantis teóricos", ylab="resíduos") #---> QQ plot do R... qqnorm(vresiduos) qqline(vresiduos,col="red") #--------------------------------------------------------------------------------------------- # Para finalizar... cat("\n") cat("-------------------- \n") cat("fim DE PROCESSAMENTO \n") cat("-------------------- \n") # fechar o arquivo de saida #sink() # descarregar as bibliotecas eventualemnte usadas... detach("package:mass") detach("package:tseries") # volta a apontar ao diretório inicial setwd(initial.dir) Pàg 65 de 66
#====================================== F I M =============================================== Pàg 66 de 66