# Pacote utilizado
pacman::p_load(dlm, dplyr)
# Carregamento da base de dados
dados <- tibble(read.csv2("SalmonChinook.csv", sep= ';'))
knitr::kable(head(dados), caption = 'Head dos dados')
| X | year | logit.s | CUI.apr |
|---|---|---|---|
| 1 | 1964 | -3.46 | 57 |
| 2 | 1965 | -3.32 | 5 |
| 3 | 1966 | -3.58 | 43 |
| 4 | 1967 | -3.03 | 11 |
| 5 | 1968 | -3.61 | 47 |
| 6 | 1969 | -3.35 | -21 |
# Padronizar a covariável CUI.apr
CUI.z <- scale(dados$CUI.apr)
# Distribuição dos dados
plot(dados)
#Definiravariávelresposta
y<-dados$logit.s
#ConstruiroDLM(ModeloLinearDinâmico)
build_dlm<-function(param){
dlmModReg(CUI.z) +dlmModPoly(order=1,dV=exp(param[1]),dW=exp(param[2]))
}
#EstimarosparâmetrosusandoMaximumLikelihood
fit<-dlmMLE(y,parm=c(0,0),build=build_dlm)
dlm<-build_dlm(fit$par)
#FiltragemdeKalman
filter_result<-dlmFilter(y,dlm)
#SuavizaçãodeKalman
smooth_result<-dlmSmooth(filter_result)
#Resíduos
res<-residuals(filter_result,sd = FALSE)
#Analisarseosresíduospodemserconsideradosumruídobrancogaussiano
par(mfrow=c(2,2))
acf(res,main="ACFdosResíduos")
pacf(res,main="PACFdosResíduos")
qqnorm(res); qqline(res,col=2)
hist(res,main="HistogramadosResíduos",breaks=20,col="gray")
# Teste de Shapiro para veridicar se os resíduos seguem uma distribuição normal
shapiro.test(res)
##
## Shapiro-Wilk normality test
##
## data: res
## W = 0.98195, p-value = 0.7367
O teste tem como \(H_0\) que os dados se distribuem segundo uma distribuição normal. Com base no p-valor observado, a um nível de significância de 5%, os resíduos não rejeitam \(H_0\), por tanto, se distribuem de forma normal, indicando um bom ajuste do modelo.