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 3 de 66
Pàg 5 de 66
Pàg 7 de 66
Pàg 9 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 13 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 β
0e β
1atravé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 β
0e outro para β
1.
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 β . Então o teste tende a apontar a hipótese
Pàg 15 de 66
Como interpretar o resultado do teste de hipótese para β
1sem 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.
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
0correta (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 17 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
2estiver 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 19 de 66
Sobre a influência dos pontos no modelo de regressão...
Pàg 21 de 66
Pàg 23 de 66
Sobre a alvancagem (leverage) dos pontos no modelo de
regressão...
Sobre os pontos discrepantes (outliers) no modelo de
regressão...
Pàg 25 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
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
iindicando 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 27 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.
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 29 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
icom valores “altos” indicam alta alavancagem (high leverage) mas não necessariamente apresentam alta influência no modelo
Como regra prática, h
icom valor que seja maior que o dobro do
valor médio dos h
ida amostra deve ser analisado mais
detalhadamente. Se a amostra de dados é muito grande,
recomenda-se considerar h
icom valor que seja maior que o
triplo do valor médio dos h
iVeja abaixo os hat-values h
icalculadas 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 31 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.
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
ipode 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 33 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
itambém denominados “resíduos studentizados internamente” (internally studentized residuals).
Os resíduos padronizados (standardized residuals) dos 28
talhões não apresentam outliers
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 35 de 66
Porquê “Análise de Resíduos” ????
Mas antes.... vamos usar os resíduos para
ver outras coisas em nossa massa de
dados...
Pàg 37 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...
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 39 de 66
Olha o exemplo abaixo
(http://data.library.virginia.edu/diagnostic-plots/)
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 41 de 66
Veja abaixo a ideia conceitual de homocedasticidade e
heterocedasticidade...
Para verificar a homocedasticidade dos resíduos...
Para os 28 talhões temos:
Pàg 43 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:
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: Ocorre homocedasticidade
Hipótese alternativa H
a: 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 45 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
0e 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?
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 47 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?
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
Pàg 49 de 66
#---> 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)
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
#
Pàg 51 de 66 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)
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")
Pàg 53 de 66 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")
#---
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 = vRegrLin$residuals vMSE = 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"
Pàg 55 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")
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(" É um teste robusto quanto à forte não normalidade\n") cat(" 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()
Pàg 57 de 66 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)
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 59 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)
# 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...
Pàg 61 de 66 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
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
Pàg 63 de 66 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)
# 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")
Pàg 65 de 66 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)