REGRESSÃO LINEAR SIMPLES Noções preliminares

Texto

(1)

Pàg 1 de 66

(2)

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

(3)

Pàg 3 de 66

(4)
(5)

Pàg 5 de 66

(6)
(7)

Pàg 7 de 66

(8)
(9)

Pàg 9 de 66

(10)
(11)

Pàg 11 de 66

(12)

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.

(13)

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 β

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

.

(14)

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

(15)

Pàg 15 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

.

(16)

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.

(17)

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

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

(18)
(19)

Pàg 19 de 66

(20)

Sobre a influência dos pontos no modelo de regressão...

(21)

Pàg 21 de 66

(22)
(23)

Pàg 23 de 66

Sobre a alvancagem (leverage) dos pontos no modelo de

regressão...

(24)

Sobre os pontos discrepantes (outliers) no modelo de

regressão...

(25)

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

(26)

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.

(27)

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.

(28)

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

(29)

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

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

(30)

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)

(31)

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.

(32)

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...

(33)

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

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

(34)

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)

(35)

Pàg 35 de 66

Porquê “Análise de Resíduos” ????

(36)

Mas antes.... vamos usar os resíduos para

ver outras coisas em nossa massa de

dados...

(37)

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...

(38)

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...

(39)

Pàg 39 de 66

Olha o exemplo abaixo

(http://data.library.virginia.edu/diagnostic-plots/)

(40)

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...

(41)

Pàg 41 de 66

Veja abaixo a ideia conceitual de homocedasticidade e

heterocedasticidade...

(42)

Para verificar a homocedasticidade dos resíduos...

Para os 28 talhões temos:

(43)

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:

(44)

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

.

(45)

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

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?

(46)

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:

(47)

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?

(48)

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

(49)

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)

(50)

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

#

(51)

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)

(52)

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")

(53)

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")

#---

(54)

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"

(55)

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")

(56)

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()

(57)

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)

(58)

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)

(59)

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)

(60)

# 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...

(61)

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

(62)

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

(63)

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)

(64)

# 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")

(65)

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)

(66)

Imagem

Referências

temas relacionados :