Una serie de tiempo es una colección de observaciones sobre un determinado fenómeno, efectuadas en momentos sucesivos, usualmente equiespaciados.
Algunos ejemplos de series de tiempo son:
1. Precios de acciones
2. Niveles de inventario
3. Rotación de personal
4. Ventas
5. PIB (GDP)
Más información:
Libro R for Data Science
(2e)
if(!require('forecast')){
install.packages("forecast")
}
library(forecast)
library(dplyr)
library(magrittr)
library(tidyr)
Ejemplo:
Los siguientes datos de producción trimestral inician en el primer
trimestre de 2020.
Se busca pronosticar la producción de los siguientes 5 trimestres.
produccion <- c(50,53,55,57,55,60)
ts <- ts(data=produccion,start=c(2020,1),frequency = 4)
ts
## Qtr1 Qtr2 Qtr3 Qtr4
## 2020 50 53 55 57
## 2021 55 60
ARIMA significa AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Promedio Móvil.
arima <- auto.arima(ts, D=1)
arima
## Series: ts
## ARIMA(0,0,0)(0,1,0)[4] with drift
##
## Coefficients:
## drift
## 1.5000
## s.e. 0.1768
##
## sigma^2 = 2.01: log likelihood = -2.84
## AIC=9.68 AICc=-2.32 BIC=7.06
summary(arima)
## Series: ts
## ARIMA(0,0,0)(0,1,0)[4] with drift
##
## Coefficients:
## drift
## 1.5000
## s.e. 0.1768
##
## sigma^2 = 2.01: log likelihood = -2.84
## AIC=9.68 AICc=-2.32 BIC=7.06
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.03333332 0.5787923 0.3666667 0.03685269 0.6429133 0.06111111
## ACF1
## Training set -0.5073047
pronostico <- forecast(arima,level = c(95),h=5)
pronostico
## Point Forecast Lo 95 Hi 95
## 2021 Q3 61 58.22127 63.77873
## 2021 Q4 63 60.22127 65.77873
## 2022 Q1 61 58.22127 63.77873
## 2022 Q2 66 63.22127 68.77873
## 2022 Q3 67 63.07028 70.92972
plot(pronostico)
lechita <- read.csv('Ventas_Históricas_Lechitas.csv')
lechita$Ventas <- as.numeric(lechita$Ventas)
ts1 <- ts(data=lechita$Ventas,start=c(2017,1),frequency = 12)
ts1
## Jan Feb Mar Apr May Jun Jul Aug
## 2017 25520.51 23740.11 26253.58 25868.43 27072.87 27150.50 27067.10 28145.25
## 2018 28463.69 26996.11 29768.20 29292.51 29950.68 30099.17 30851.26 32271.76
## 2019 32496.44 31287.28 33376.02 32949.77 34004.11 33757.89 32927.30 34324.12
## Sep Oct Nov Dec
## 2017 27546.29 28400.37 27441.98 27852.47
## 2018 31940.74 32995.93 32197.12 31984.82
## 2019 35151.28 36133.07 34799.91 34846.17
arima1 <- auto.arima(ts1)
arima1
## Series: ts1
## ARIMA(1,0,0)(1,1,0)[12] with drift
##
## Coefficients:
## ar1 sar1 drift
## 0.6383 -0.5517 288.8980
## s.e. 0.1551 0.2047 14.5026
##
## sigma^2 = 202700: log likelihood = -181.5
## AIC=371 AICc=373.11 BIC=375.72
summary(arima1)
## Series: ts1
## ARIMA(1,0,0)(1,1,0)[12] with drift
##
## Coefficients:
## ar1 sar1 drift
## 0.6383 -0.5517 288.8980
## s.e. 0.1551 0.2047 14.5026
##
## sigma^2 = 202700: log likelihood = -181.5
## AIC=371 AICc=373.11 BIC=375.72
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 25.22163 343.863 227.1699 0.08059942 0.7069541 0.06491041
## ACF1
## Training set 0.2081043
pronostico1 <- forecast(arima1,level = c(95),h=12)
pronostico1
## Point Forecast Lo 95 Hi 95
## Jan 2020 35498.90 34616.48 36381.32
## Feb 2020 34202.17 33155.29 35249.05
## Mar 2020 36703.01 35596.10 37809.92
## Apr 2020 36271.90 35141.44 37402.36
## May 2020 37121.98 35982.07 38261.90
## Jun 2020 37102.65 35958.91 38246.40
## Jul 2020 37151.04 36005.74 38296.35
## Aug 2020 38564.65 37418.71 39710.59
## Sep 2020 38755.23 37609.03 39901.42
## Oct 2020 39779.03 38632.73 40925.33
## Nov 2020 38741.63 37595.29 39887.97
## Dec 2020 38645.86 37499.50 39792.22
plot(pronostico1)
José Gabriel Usiña Mogro A00831435
Lorena Villarreal Vega A01720802
Ximena Solís Islas A00831371
if(!require('finreportr')){
install.packages("finreportr")
}
library(finreportr)
Con la función finreportr podemos obtener la siguiente
información:
- CompanyInfo() = Brinda información general como nombre, ubicación,
ZIP, etc.
- AnnualReports() = Brinda el nombre, fecha y número de acceso
- GetIncome() = Brinda el estado de resultados
- GetBalanceSheet() = Brinda el Balance General
- GetCashFlow() = Brinda el Flujo de Efectivo
options(HTTPUserAgent = "a a@gmail.com")
CompanyInfo('JPM')
## company CIK SIC state state.inc FY.end street.address
## 1 JPMORGAN CHASE & CO 0000019617 6021 NY DE 1231 383 MADISON AVENUE
## city.state
## 1 NEW YORK NY 10017
AnnualReports('JPM')
## filing.name filing.date accession.no
## 1 10-K 2024-02-16 0000019617-24-000225
## 2 10-K 2023-02-21 0000019617-23-000231
## 3 10-K 2022-02-22 0000019617-22-000272
## 4 10-K 2021-02-23 0000019617-21-000236
## 5 10-K 2020-02-25 0000019617-20-000257
## 6 10-K 2019-02-26 0000019617-19-000054
## 7 10-K 2018-02-27 0000019617-18-000057
## 8 10-K 2017-02-28 0000019617-17-000314
## 9 10-K 2016-02-23 0000019617-16-000902
## 10 10-K 2015-02-24 0000019617-15-000272
## 11 10-K 2014-02-20 0000019617-14-000289
## 12 10-K 2013-02-28 0000019617-13-000221
## 13 10-K 2012-02-29 0000019617-12-000163
## 14 10-K 2011-02-28 0000950123-11-019773
## 15 10-K 2010-02-24 0000950123-10-016029
## 16 10-K 2009-03-02 0000950123-09-003840
## 17 10-K 2008-02-29 0001193125-08-043536
## 18 10-K 2007-03-01 0000950123-07-003015
## 19 10-K/A 2006-08-03 0000950123-06-009854
## 20 10-K/A 2006-06-22 0000950123-06-008545
## 21 10-K 2006-03-09 0000950123-06-002875
## 22 10-K/A 2005-06-28 9999999997-05-030472
## 23 10-K 2005-03-02 0000950123-05-002539
## 24 10-K/A 2004-06-28 9999999997-04-028305
## 25 10-K 2004-02-18 0000950123-04-002022
## 26 10-K/A 2003-06-30 9999999997-03-028080
## 27 10-K 2003-03-19 0000950123-03-002985
## 28 10-K/A 2002-06-28 9999999997-02-037872
## 29 10-K405 2002-03-22 0000950123-02-002823
## 30 10-K405 2001-03-22 0000950123-01-002499
## 31 10-K/A 2000-06-28 0000019617-00-000125
## 32 10-K 2000-03-13 0000950123-00-002204
## 33 10-K/A 1999-06-29 0000950123-99-006055
## 34 10-K405 1999-03-11 0000950123-99-002057
## 35 10-K405 1998-03-30 0000950123-98-003043
## 36 10-K 1997-03-25 0000950123-97-002412
## 37 10-K405 1996-03-20 0000950123-96-001197
## 38 10-K/A 1995-06-26 0000019617-95-000080
## 39 10-K405 1995-03-27 0000950123-95-000706
## 40 10-K/A 1994-05-09 0000019617-94-000048
## 41 10-K 1994-03-25 0000950123-94-000607
google_income <- GetIncome('GOOG',2016)
amazon_balance <- GetBalanceSheet('AMZN',2015)
apple_cashflow <- GetCashFlow('AAPL',2014)
options(HTTPUserAgent = "a a@gmail.com")
jpm_income_2015<-GetIncome("JPM",2015)
jpm_balance_2015 <- GetBalanceSheet("JPM",2015)
jpm_income_2018<-GetIncome("JPM",2018)
jpm_balance_2018 <- GetBalanceSheet("JPM",2018)
jpm_balance_2013<-GetBalanceSheet("JPM",2013)
jpm_balance_2016<-GetBalanceSheet("JPM",2016)
conjunto<-rbind(jpm_balance_2015,jpm_balance_2018,jpm_income_2015,jpm_income_2018,jpm_balance_2013,jpm_balance_2016)
conjunto<-conjunto %>%
filter(Metric %in% c("Assets","Net Income (Loss) Attributable to Parent","Liabilities","Deposits"))
conjunto$endDate <- as.Date(conjunto$endDate)
conjunto_filtered <- conjunto %>%
filter(endDate >= as.Date("2012-01-01") & endDate <= as.Date("2017-12-31")) %>%
group_by(Metric, year = as.numeric(format(endDate, "%Y"))) %>%
mutate(row_number = row_number()) %>%
filter(row_number == 1) %>%
select(-row_number) %>%
ungroup()
conjunto_filtered<-conjunto_filtered%>%select(1,3,6)
df_pivot <- conjunto_filtered %>%
spread(key = Metric, value = Amount)
# Opcional: Renombramos las columnas para que tengan nombres más descriptivos
names(df_pivot)[1] <- "Year"
df_pivot$Assets<-as.numeric(df_pivot$Assets)
df_pivot$Deposits<-as.numeric(df_pivot$Deposits)
df_pivot$Liabilities<-as.numeric(df_pivot$Liabilities)
df_pivot$`Net Income (Loss) Attributable to Parent`<-as.numeric(df_pivot$`Net Income (Loss) Attributable to Parent`)
ts2<-ts(df_pivot$Deposits,start =c(2012,1),frequency =1)
ts2
## Time Series:
## Start = 2012
## End = 2017
## Frequency = 1
## [1] 1.193593e+12 1.287765e+12 1.363427e+12 1.279715e+12 1.375179e+12
## [6] 1.443982e+12
ARIMA significa AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Promedio Móvil
arima3<-auto.arima(ts2,d=1)
summary(arima3)
## Series: ts2
## ARIMA(0,1,0)
##
## sigma^2 = 7.09e+21: log likelihood = -132.88
## AIC=267.75 AICc=269.09 BIC=267.36
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 41930432067 76865093443 69834432067 3.021252 5.201737 0.835714
## ACF1
## Training set -0.3972446
pronostico3 <- forecast(arima3,level=c(95), h=5)
pronostico3
## Point Forecast Lo 95 Hi 95
## 2018 1.443982e+12 1.278950e+12 1.609014e+12
## 2019 1.443982e+12 1.210592e+12 1.677372e+12
## 2020 1.443982e+12 1.158138e+12 1.729826e+12
## 2021 1.443982e+12 1.113918e+12 1.774046e+12
## 2022 1.443982e+12 1.074959e+12 1.813005e+12
plot(pronostico3)