In [1]:
# rm(list=ls())
options(OutDec = ",")
#===================================================================
# Construindo exemplo com dados artificiais.
#===================================================================
silence <- suppressPackageStartupMessages
silence(library(fGarch))
set.seed(1234)
n <- 1000
beta0 <- 2
beta1 <- 3
x <- rnorm(n)
y <- beta0 + beta1*x + arima.sim(n,model=list(ar=0.7))
spec = garchSpec(model = list(alpha = 0.2, beta = 0.7))
y <- y + garchSim(spec,n=n)
In [2]:
#===================================================================
# Nas análises abaixo, você deve ignorar o conhecimento do processo
# gerador dos dados.
#===================================================================
# Teste de correlação
#===================================================================
print(cor.test(x,y))
Pearson's product-moment correlation data: x and y t = 69,121, df = 998, p-value < 2,2e-16 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0,8981566 0,9196490 sample estimates: cor 0,9095087
In [3]:
#===================================================================
# Histograma dos dados y e dispersão de x contra y.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
hist(y,main="",prob=T,lwd=2,col="darkorange",xlab=expression(y),
ylab="Densidade",xlim=c(-15,15),ylim=c(0,0.12))
plot(x,y,pch=15,lwd=2,col="red",xlim=c(-4,4),ylim=c(-15,15),
xlab=expression(x),ylab=expression(y))
In [4]:
#===================================================================
# Ajuste do modelo de regressão linear:
# y = beta_0 + beta_1*x + erro.
#===================================================================
ajuste <- lm(y ~ x)
print(summary(ajuste))
Call: lm(formula = y ~ x) Residuals: Min 1Q Median 3Q Max -4,7360 -0,9150 0,0029 0,9547 4,1044 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2,03304 0,04387 46,34 <2e-16 *** x 3,04074 0,04399 69,12 <2e-16 *** --- Signif. codes: 0 ‘***’ 0,001 ‘**’ 0,01 ‘*’ 0,05 ‘.’ 0,1 ‘ ’ 1 Residual standard error: 1,387 on 998 degrees of freedom Multiple R-squared: 0,8272, Adjusted R-squared: 0,827 F-statistic: 4778 on 1 and 998 DF, p-value: < 2,2e-16
In [5]:
#===================================================================
# Análises dos resíduos.
#===================================================================
res <- ajuste$residual
yajustado <- ajuste$fitted.values
print(mean(res))
[1] 2,702347e-17
In [6]:
#===================================================================
# Histograma dos resíduos.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
hist(res,main="",prob=T,xlab="Resíduos",ylab="Densidade",lwd=2,
col="darkorange",xlim=c(-6,6),ylim=c(0,0.30))
In [7]:
#===================================================================
# Boxplot dos resíduos.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
boxplot(res,ylim=c(-6,6),col="darkorange")
In [8]:
#===================================================================
# qq-norm dos resíduos.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
qqnorm(res,col="red",main="",xlab="Percentis teóricos",xlim=c(-4,4),
ylim=c(-6,6),ylab="Percentis amostrais",pch=16,xpd=F)
qqline(res,lwd=2,bty="n",lty=2)
In [9]:
#===================================================================
# Resíduos ao longo dos índices (tempo).
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(6,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
ts.plot(res,lwd=2,col="blue",ylim=c(-6,6),xlab=expression(i),
ylab=expression(e[i]))
points(res,pch=16,lwd=3,col=1)
In [10]:
#===================================================================
# Dispersão entre valores ajustados e os resíduos.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
plot(yajustado,res,lwd=2,col="blue",xlim=c(-15,15),ylim=c(-6,6),
pch=16,xlab=expression(hat(y)[i]),ylab=expression(e[i]))
print(cor(yajustado,res))
[1] -2,320386e-18
In [11]:
#===================================================================
# Dispersão entre valores da regressora e os resíduos.
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
plot(x,res,lwd=2,col="blue",ylim=c(-6,6),xlim=c(-4,4),
pch=16,xlab=expression(x[i]),ylab=expression(e[i]))
print(cor(x,res))
[1] -1,736206e-17
In [12]:
#===================================================================
# Qual o problema encontrado nas analises graficas?
#===================================================================
In [13]:
#===================================================================
# Verificando se os resíduos são correlacionados utilizando a função
# de autocorrelação amostral
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
acf(res,lwd=2,col="black",main="",xlab="Defasagem",ylab="ACF",
xpd=F)
In [14]:
#===================================================================
# Verificando se os resíduos são correlacionados utilizando a função
# de autocorrelação amostral (quadrado dos resíduos).
# Homocedástico ou heterocedástico (ao longo das observações)?
#===================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(8,8,5),
mar=c(4.5,4.5,1,1),cex.main=2.0,bty="n")
acf(res^2,lwd=2,col="black",main="",xlab="Defasagem",ylab="ACF",
xpd=F)
In [15]:
#===================================================================
# Quais tipos de problemas em relação as hipóteses do modelo de
# regressao linear verificamos nos dois gráficos acima?
#===================================================================
In [16]:
#===================================================================
# Teste formal de normalidade
# Para os testes de normalidade é necessário que os elementos da
# amostra sejam independentes. Então, os testes de normalidade
# abaixo não fazem sentido porque os resíduos são correlacionados
# (violam a hipótese de independência).
#===================================================================
# Teste parametrico
silence(library(tseries))
jarque.bera.test(res)
Jarque Bera Test data: res X-squared = 0,76778, df = 2, p-value = 0,6812
In [17]:
#===================================================================
# Fim
#===================================================================