Exemplo de Regressão Linear Simples
Dados: Valores de vendas de empresas do ramo de bebidas, sendo:
Y = Total das vendas (US$10mil) e X = gastos com propaganda.
X 11 5 3 9 12 6 5 9
Y 25 13 8 20 25 12 10 15
Figura 1: Gráfico de pontos de Y versus X.
I) Somas e somas de quadrados:
a) x 11 5 3 9 12 6 5 9 60
b) x
2 121 25 9 81 144 36 25 81 522 c) y 25 13 8 20 25 12 10 15 128
d) y
2 625 169 64 400 625 144 100 225 2352 e) xy 275 65 24 180 300 72 50 135 1101
II) Médias e variâncias amostrais:
a) 7 . 50
8 60
x e 16 . 0
8 128
y
b) S
x2 x
2 n x
2 522 8 ( 7 . 5 )
2 72 e
7
2
72
s
xc) S
y2 y
2 n y
2 2352 8 ( 16 )
2 304 e
7
2
304 s
yd) S
xy2 xy n x y 1101 8 ( 7 . 5 )( 16 ) 141 e
7
141 s
xye) Correlaۥo entre X e Y: 0 . 953
304 72
141
2
2
y x
xy xy
s s
r s (muito alta)
III) Estimativas dos coeficientes de regress•o:
a) 1 . 958
72 ˆ 141
1
2
x xy
S
S e ˆ ˆ 1 . 312
1
0
y x
b) Reta ajustada: y ˆ ˆ
0 ˆ
1x 1 . 312 1 . 958 x
c) Coeficiente de determinaۥo: ( ) 0 . 908
304 72
) 141
(
2 22 2
2
2
xyy x
xy
r
S S
R S ,
ou seja, a porcentagem da varia€•o de Y explicada pela reta ajustada ƒ de 90.8%.
IV) Valores ajustados e res„duos:
y
iy ˆ
i ˆ
0 ˆ
1x
ie
i y
i y ˆ
i25 22.85 2.15
13 11.10 1.89
8 7.19 0.81
20 18.94 1.06
25 24.81 0.19
12 13.06 -1.06
10 11.10 -1.10
15 18.94 -3.94
V) Tabela de Analise de vari…ncia:
125 . 276 ˆ )
(
2
y y
SQRegr
i875 . 27 ˆ )
(
2
y
iy
iSQRes
304 )
(
2
2
y
iy S
ySQTotal
Nota: SQTotal SQRegr SQRes 276 . 125 27 . 875 304
ANOVA
Fonte de Variação GL SQ QM F Valor p
Regressão 1 276.125 276.125 59.435 0.0002497
Resíduos 6 27.875 4.64583
Total 7 304.000
Observações:
i) Hipóetes para a tabela ANOVA: H
0:
1 0 H
A:
1 0 ;
ii) O valor F da tabela ANOVA, sob a hipótese nula, tem distribuição F com 1 e 6 graus de liberdade, associados aos graus de liberdade da regressão e resíduos, respectivamente, ou seja:
F F
1;6iii) O valor p associado do teste F é obtido de p P F
1;6 59 . 435 0 . 0002497 . No R este valor é calculado com o comando: 1-pf(59.435,1,6)
VI) Análise dos resíduos: Realizados os cálculos e análises anteriores, vamos avaliar os resíduos para avaliar a qualidade do ajuste. (normalidade, igualdade de variâncias e independência)
Figura 2: Gráfico 41 para análise dos resíduos.
A questão que fica: O que dizer desse ajuste?
# Exemplo 1 - Dados qualidade do ar
###################################
Sol.R <- c(190,118,149,313,299,99,256,290,274,65,334,307,78,322,44,8,320,25,92, 13,252,279,127,291,323,148,191,37,120,137,248,236,175,314,276,267, 272,175,264,175)
Wind <- c(7.4,8,12.6,11.5,8.6,13.8,9.7,9.2,10.9,13.2,11.5,12,18.4,11.5,9.7,9.7, 16.6,9.7,12,12,14.9,7.4,9.7,13.8,11.5,8,14.9,9.2,11.5,10.3,9.2,9.2, 4.6,10.9,5.1,6.3,5.7,7.4,14.3,14.9)
Temp <- c(67,72,74,62,65,59,69,66,68,58,64,66,57,68,62,59,73,61,61,67,81,76,82, 90,87,82,77,65,73,76,85,81,83,83,88,92,92,89,73,81)
Ozone <- c(41,36,12,18,23,19,16,11,14,18,14,34,6,30,11,1,11,4,32,23,45,37,29,71, 39,23,21,20,12,13,49,32,64,40,77,97,97,85,10,27)
cor(cbind(Ozone,Sol.R,Wind,Temp)) # corelações plot(Sol.R,Ozone,pch=19)
plot(Wind,Ozone,pch=19) plot(Temp,Ozone,pch=19)
## Ajustando o modelo para as variáveis Ozone vs. Temp
## X = Temp e Y = Ozone
## --- n <- length(Temp)
xbar <- mean(Temp) ybar <- mean(Ozone)
Sx2 <- sum(Temp^2)-n*(xbar^2) Sy2 <- sum(Ozone^2)-n*(ybar^2) Sxy <- sum(Ozone*Temp)-n*xbar*ybar rxy <- Sxy/sqrt(Sx2*Sy2)
beta1 <- Sxy/Sx2
beta0 <- ybar-beta1*xbar c(beta0,beta1)
ych <- beta0+beta1*Temp # valores ajustados res <- Ozone-ych # resíduos
# Análise gráfica dos resíduos
par(mfrow = c(2,2)) # esse comando divide a janela gráfica numa matriz 2x2
# histograma dos resíduos
hist(res, col = "bisque", xlab="Resíduos padronizados", ylab=" ", main="Histograma dos Resíduos", cex.main=1)
# gráfico normal qq-plot dos resíduos
qqnorm(res, pch=19, col="red", xlab="Quantis teóricos", ylab="Quantis amostrais", main="Normal Q-Q plot dos Resíduos", cex.main=1) qqline(res, col="blue3")
# gráfico resíduos x valores ajustados
plot(ych,res,pch=19,col="red", xlab="Valores ajustados", ylab="Resíduos padronizados", main="Resíduos x Ajustados", cex.main=1)
lines(c(0,max(ych)),c(0,0),lty=2)
# resíduos x ordem (timeplot)
plot(res, main="Resíduos x ordem", ylab="Resíduos padronizados", pch=19, col="red3", cex.main=1)
lines(res, col="blue3")
lines(c(0,max(ych)),c(0,0),lty=2) par(mfrow = c(1,1))
# gráfico de pontos com modelo ajustado
plot(Temp,Ozone,pch=19, xlab="Temperatura", ylab="Conc.Ozone (ppm)", main="Gráfico XY", cex.main=1)
lines(Temp[order(Temp)],ych[order(Temp)], col="blue3", lwd=2)
# Exemplo 2 - Dados com função quadrática
#########################################
x <- c(2.5,3.6,5.0,3.7,3.8,3.2,4.3,3.6,4.6,4.3,4.3,4.2,3.0,2.1,2.6,3.1,2.0, 2.2,4.9,4.0,4.9,3.3,2.5,3.5,4.1,2.6,3.9,4.6,4.1,2.3,4.6,3.5,4.4,3.6, 2.9,2.7,4.7,3.6,3.8,3.8)
y <- c(27.2,43.0,146.6,73.4,57.6,37.1,82.0,74.0,104.1,70.8,79.3,105.9,27.5, 21.3,42.6,45.3,18.5,12.2,135.0,70.4,138.9,36.2,26.6,51.3,76.4,14.5, 71.4,130.7,89.3,23.9,111.2,61.6,101.4,77.6,36.8,16.4,144.0,72.1,83.0, 57.5)
cor(x,y)
plot(x,y,pch=19) # gráfico de pontos com relação quadrática entre X e Y
## Ajustando o modelo linear entre X e Y
## ---
ajuste <- lm(y~x) # modelo RLS com variável quadrática coef(ajuste) # coeficientes beta0 e beta1 estimados summary(ajuste) # testes de hipóteses
aov(ajuste) # somas de quadrados
# Análise gráfica dos resíduos
# ---
res <- ajuste$res # resíduos
sdres <- rstandard(ajuste) # resíduos padronizados ych <- ajuste$fit # valores ajustados
par(mfrow = c(2,2)) # esse comando divide a janela gráfica numa matriz 2x2
# histograma dos resíduos
hist(sdres, col = "bisque", xlab="Resíduos padronizados", ylab=" ", main="Histograma dos Resíduos", cex.main=1)
# gráfico normal qq-plot dos resíduos
qqnorm(sdres, pch=19, col="red", xlab="Quantis teóricos", ylab="Quantis amostrais", main="Normal Q-Q plot dos Resíduos", cex.main=1) qqline(sdres, col="blue3")
# gráfico resíduos x valores ajustados
plot(ych,sdres,pch=19,col="red", xlab="Valores ajustados", ylab="Resíduos padronizados", main="Resíduos x Ajustados", cex.main=1)
lines(c(min(ych),max(ych)),c(0,0),lty=2)
# resíduos x ordem (timeplot)
plot(sdres, main="Resíduos x ordem", ylab="Resíduos padronizados", pch=19, col="red3", cex.main=1)
lines(sdres, col="blue3")
lines(c(0,mlength(sdres)),c(0,0),lty=2) par(mfrow = c(1,1))
# gráfico do modelo ajustado
#---
plot(x,y,pch=19, xlab="X", ylab="Y", main="Gráfico XY", cex.main=1) lines(x[order(x)],ych[order(x)], col="red2", lwd=2)
## Ajustando o modelo quadrático entre X e Y
## --- x.q <- x^2
ajuste.q <- lm(y~x.q) # modelo RLS com variável quadrática coef(ajuste.q) # coeficientes beta0 e beta1 estimados summary(ajuste.q) # testes de hipóteses
aov(ajuste.q) # somas de quadrados
# Análise gráfica dos resíduos
# ---
res.q <- ajuste.q$res # resíduos
sdres.q <- rstandard(ajuste.q) # resíduos padronizados ych.q <- ajuste.q$fit # valores ajustados
par(mfrow = c(2,2)) # esse comando divide a janela gráfica numa matriz 2x2
# histograma dos resíduos
hist(sdres.q, col = "bisque", xlab="Resíduos padronizados", ylab=" ", main="Histograma dos Resíduos", cex.main=1)
# gráfico normal qq-plot dos resíduos
qqnorm(sdres.q, pch=19, col="red", xlab="Quantis teóricos", ylab="Quantis amostrais", main="Normal Q-Q plot dos Resíduos", cex.main=1)
qqline(sdres.q, col="blue3")
# gráfico resíduos x valores ajustados
plot(ych.q,sdres.q,pch=19,col="red", xlab="Valores ajustados", ylab="Resíduos padronizados", main="Resíduos x Ajustados", cex.main=1)
lines(c(min(ych.q),max(ych.q)),c(0,0),lty=2)
# resíduos x ordem (timeplot)
plot(sdres.q, main="Resíduos x ordem", ylab="Resíduos padronizados", pch=19, col="red3", cex.main=1)
lines(sdres.q, col="blue3")
lines(c(0,length(sdres.q)),c(0,0),lty=2) par(mfrow = c(1,1))
# gráfico do modelo ajustado
#---
plot(x,y,pch=19, xlab="X", ylab="Y", main="Gráfico XY - modelo quadrático em X", cex.main=1)
lines(x[order(x)],ych.q[order(x)], col="red2", lwd=2)
# Exemplo 3 - Dados gerados
###########################
x1 <- c(18,18,20,23,23,19,22,22,17,20,21,20,17,22,18,22,21,18) x2 <- c(11,12,13,12,13,10,12,12,13,14,11,13,14,13,13,11,13,14) x3 <- c( 6,32,34,66,33,30,41,46,25,33,37,15,34,11,22,49,41,27) y <- c( 3, 6, 9,13, 9, 3,10,12, 8, 8, 8, 7, 8, 1, 6,10,11, 9) cor(cbind(y,x1,x2,x3)) # corelações
## Realize os três ajustes e verifique os testes F para Ho: beta1 = 0 em cada um deles
## --- plot(x2,y,pch=19)
ajuste2 <- lm(y~x2) # modelo RLS entre x2 e y
summary(ajuste2) # Estatística-F: 0.5625 com 1 e 16 GL, p-valor: 0.4641 plot(x2,y,pch=19, xlab="X2", ylab="Y", main="Gráfico Y vs. X2", cex.main=1) lines(x2[order(x2)],ajuste2$fit[order(x2)], col="red2", lwd=2)
plot(x1,y,pch=19)
ajuste1 <- lm(y~x1) # modelo RLS entre x1 e y
summary(ajuste1) # Estatística-F: 3.12 com 1 e 16 GL, p-valor: 0.0964 plot(x1,y,pch=19, xlab="X1", ylab="Y", main="Gráfico Y vs. X1", cex.main=1) lines(x1[order(x1)],ajuste1$fit[order(x1)], col="red2", lwd=2)
plot(x3,y,pch=19)
ajuste1 <- lm(y~x3) # modelo RLS entre x3 e y
summary(ajuste3) # Estatística-F: 34.69 com 1 e 16 GL, p-valor: 0.00002282 plot(x3,y,pch=19, xlab="X3", ylab="Y", main="Gráfico Y vs. X3", cex.main=1) lines(x3[order(x3)],ajuste3$fit[order(x3)], col="red2", lwd=2)
# Exemplo - 4
#############
y <- c(727.86,735.84,426.53,596.63,1035.7,1141.44,658.88,792.8,783.4,644.13, 504.54,774.79,923.65,702.38,925.6)
x1 <- c(25,26,20,23,30,31,25,28,27,24,22,26,28,25,29) x2 <- c(4,2,4,3,7,6,1,3,2,3,1,4,5,6,3)
cor(cbind(y,x1,x2)) # corelações plot(x2,y,pch=19)
ajuste2 <- lm(y~x2) # modelo RLS entre x1 e y
summary(ajuste2) # Verifique a estatística F e o p-valor
plot(x2,y,pch=19, xlab="X2", ylab="Y", main="Gráfico Y vs. X2", cex.main=1) lines(x2[order(x2)],ajuste2$fit[order(x2)], col="red2", lwd=2)
plot(x1,y,pch=19)
ajuste1 <- lm(y~x1) # modelo RLS entre x1 e y
summary(ajuste1) # Verifique a estatística F e o p-valor
plot(x1,y,pch=19, xlab="X1", ylab="Y", main="Gráfico Y vs. X1", cex.main=1) lines(x1[order(x1)],ajuste1$fit[order(x1)], col="red2", lwd=2)