Existe uma chance de ter algo errado quando o modelo é feito sem usar o periodo todo que os dados foram coletados (2003/2023.12). Verificar com outros alunos para ver se tem diferenca.
FUNCOES QUE EU ESTOU USANDO
regressao_personalizada <- function(dados, dependent_var, independent_vars, start_date, end_date) {
# Filtrando os dados pelo intervalo de datas desejado
dados_filtrados <- dados[dados$data >= start_date & dados$data <= end_date, ]
# Criando a fórmula para a regressão
formula <- as.formula(paste(dependent_var, "~", paste(independent_vars, collapse = " + ")))
# Realizando a regressão linear
model <- lm(formula, data = dados_filtrados)
#rodrigo Retornando o modelo
return(model)
}
analisar_modelo <- function(modelo) {
residuos <- residuals(modelo)
##Rodrigo
# Plot dos resíduos
plot(residuos, type="l", col="red")
abline(h=0, col="blue", lw=3)
# Histograma dos resíduos
hist(residuos, main="", col="cadetblue", prob=T, xlab = names(residuos)[1], breaks = 30)
curve(expr=dnorm(x,mean=mean(residuos),sd=sd(residuos)),col="red",add= TRUE, lwd=2)
# Teste de Jarque-Bera
jarquebera <- jarqueberaTest(residuos)
print(jarquebera)
# QQ plot dos resíduos
qqnorm(residuos, col="blue")
qqline(residuos, col="red")
# Teste de Shapiro-Wilk
shapiro <- shapiro.test(residuos)
print(shapiro)
# Teste de heterocedasticidade
coeftest_result <- coeftest(modelo)
print(coeftest_result)
n <- length(residuos)
# Teste de heterocedasticidade
gqtest_result <- gqtest(modelo, fraction = n * 0.15, alternative = "greater")
print(gqtest_result)
# Teste de Breusch-Pagan
bptest_result <- bptest(modelo)
print(bptest_result)
# Teste de White
white_test_result <- white_test(modelo)
print(white_test_result)
# Teste de Durbin-Watson
dwtest_result <- dwtest(modelo)
print(dwtest_result)
# Teste de Autocorrelação
ArchTest_result <- ArchTest(residuos, lags = 2)
print(ArchTest_result)
# Teste de Box-Pierce
Box.test_result <- Box.test(residuos, lag=12, type="Box-Pierce")
print(Box.test_result)
# Teste de Dickey-Fuller
df_test <- adf.test(residuos)
print(df_test)
##Rodrigo
# Retorna o modelo e os resultados dos testes
return(list(modelo = modelo, residuos = residuos, jarque_bera = jarquebera, shapiro = shapiro, coeftest = coeftest_result, gqtest = gqtest_result, bptest = bptest_result, white_test = white_test_result, dwtest = dwtest_result, ArchTest = ArchTest_result, Box.test = Box.test_result))
}
# Função para capturar as datas inseridas pelo usuário
renderRegModel <- function(start_date, end_date) {
# Chama a função regressao_personalizada com as datas fornecidas pelo usuário
resultado <- regressao_personalizada(Dadosn, dependent_var, independent_vars, start_date, end_date)
# Retorna o resumo do modelo
return(summary(resultado))
}
ARRUMANDO OS DADOS
Dadosn <- as.data.frame(taylor)
Dadosn$data <- seq(as.Date("2003-01-01"), by = "month", length.out = nrow(Dadosn))
str(Dadosn)
## 'data.frame': 252 obs. of 5 variables:
## $ selic : num 25.1 25.7 26.3 26.3 26.3 ...
## $ desvio: num 0.73 0.67 4.98 2.29 2.35 ...
## $ hiato : num 1.888 1.018 0.578 0.307 0.12 ...
## $ cambio: num 3.53 3.56 3.35 2.89 2.97 ...
## $ data : Date, format: "2003-01-01" "2003-02-01" ...
Para arrumar o modelo so mudar as datas e as variaveis independentes(“desvio”,“hiato”,“cambio”)
start_date <- as.Date("2019-01-01") # Data inicial desejada
end_date <- as.Date("2022-12-01") # Data final desejada
dependent_var <- "selic"
independent_vars <- c("desvio","hiato","cambio") # Adicione as variáveis independentes desejadas
Chamando a funcao pra fazer o mqo
# Chamando a função
completao <- regressao_personalizada(Dadosn, dependent_var, independent_vars, start_date, end_date)
# Visualizando os resultados
summary(completao)
##
## Call:
## lm(formula = formula, data = dados_filtrados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5071 -0.9242 0.1379 1.1416 4.8433
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.8727 2.6620 4.836 1.66e-05 ***
## desvio 2.5460 0.2832 8.992 1.59e-11 ***
## hiato 0.9254 0.2154 4.295 9.48e-05 ***
## cambio -1.4366 0.5529 -2.598 0.0127 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.15 on 44 degrees of freedom
## Multiple R-squared: 0.725, Adjusted R-squared: 0.7063
## F-statistic: 38.67 on 3 and 44 DF, p-value: 2.131e-12
Chamando a funcao que analisa o modelo
novo <- analisar_modelo(completao)
##
## Title:
## Jarque - Bera Normalality Test
##
## Test Results:
## STATISTIC:
## X-squared: 0.3283
## P VALUE:
## Asymptotic p Value: 0.8486
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.97727, p-value = 0.4708
##
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.87268 2.66196 4.8358 1.655e-05 ***
## desvio 2.54601 0.28315 8.9917 1.594e-11 ***
## hiato 0.92539 0.21544 4.2953 9.475e-05 ***
## cambio -1.43658 0.55286 -2.5985 0.01269 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Goldfeld-Quandt test
##
## data: modelo
## GQ = 30.195, df1 = 17, df2 = 16, p-value = 5.213e-09
## alternative hypothesis: variance increases from segment 1 to 2
##
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 14.214, df = 3, p-value = 0.002627
##
## White's test results
##
## Null hypothesis: Homoskedasticity of the residuals
## Alternative hypothesis: Heteroskedasticity of the residuals
## Test Statistic: 8.51
## P-value: 0.014202
##
## Durbin-Watson test
##
## data: modelo
## DW = 0.2499, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
##
##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: residuos
## Chi-squared = 24.795, df = 2, p-value = 4.129e-06
##
##
## Box-Pierce test
##
## data: residuos
## X-squared = 115.86, df = 12, p-value < 2.2e-16
##
##
## Augmented Dickey-Fuller Test
##
## data: residuos
## Dickey-Fuller = -1.9967, Lag order = 3, p-value = 0.5754
## alternative hypothesis: stationary
####so rodar isso se as funcoes estiverem quebradas 2 ou testes e pa