library(matlib)
library(fpp3)
## -- Attaching packages -------------------------------------------- fpp3 0.4.0 --
## v tibble      3.1.6     v tsibble     1.1.1
## v dplyr       1.0.7     v tsibbledata 0.4.0
## v tidyr       1.2.0     v feasts      0.2.2
## v lubridate   1.8.0     v fable       0.3.1
## v ggplot2     3.3.5
## -- Conflicts ------------------------------------------------- fpp3_conflicts --
## x lubridate::date()    masks base::date()
## x dplyr::filter()      masks stats::filter()
## x tsibble::intersect() masks base::intersect()
## x tsibble::interval()  masks lubridate::interval()
## x dplyr::lag()         masks stats::lag()
## x tsibble::setdiff()   masks base::setdiff()
## x tsibble::union()     masks base::union()
#programar una funcion que resuelva cualquier ecuacion de primer grado

#Existe una poblacion de topos, que se multiplican 4 veces cada año,
#se mueren 5 y que la poblacion inicial es 10
#calcule la poblacion para el anio 20 de forma analitica

#y(t+1) =  Ay(t) + B

#y(t+1) = 4y(t) - 5 y(0) = 10

#Se tiene una población de insectos que se duplica cada año, 
#además mueren 10 insectos por la edad. 
#Se sabe que la población inicial es de 50 insectos. 
#¿Cuál será la población para el año 11?

#y(t+1) =  Ay(t) + B

#y(t+1) = 2y(t) - 10 y(0) = 50
library(matlib)
library(fpp3)

primer_orden <- function(A, B, y0, x){
  if(A==1){yx = (A^x)*y0+B*x}
  else{yx=(A^x)*y0+B*((1-A^x)/(1-A))}
}
yx=primer_orden(2,-10,50,11)
yx
## [1] 81930
#Se tiene un cultivo de trigo, que cada año produce 2 veces más que el año anterior y 5 veces más que el anterior a este. El total del cultivo se utiliza para cultivar nuevamente, por lo que no existen pérdidas ni ganancias en el peso. Si se inició con un peso de 100Kg en el año 0 y 150Kg en el año 1, cuanto se tendrá en 5 años?

segundo_orden<-function(A1, A2, y0, y1, x){
  raiz = A1^2-4*A2
  if(raiz>0){
    m1 = (-A1 + sqrt(A1^2 - 4*A2))/(2)
    m2 = (-A1 - sqrt(A1^2 - 4*A2))/(2)
    a1 = c(1, m1)
    a2 = c(1, m2)
    A = cbind(a1,a2)
    B = cbind(c(y0, y1))
    C = solve(A)%*%B
    yx = C[1]*m1^x+C[2]*m2^x
    print(yx)
  }
  if(raiz==0){
    m = (-A1/(2))
    a1 = c(1, m)
    a2 = c(1, m)
    A = cbind(a1,a2)
    B = cbind(c(y0, y1))
    C = solve(A)%*%B
    yx = C[1]*m^x + C[2]*x*m^x
  }
  if(raiz<0){}
}
yx1<-segundo_orden(5, 2, 100, 150, 5)
## [1] 92850
# Calcular con el set de datos provisto los siguientes elementos de operadores de rezago:
#L5
#L4
#L3
#D5
#D4
#D6
t<-c('2018Q1','2018Q2','2018Q3','2018Q4','2019Q1','2019Q2','2019Q3','2019Q4')
yt<-c(10,13,10,8,15,16,14,11)
datos<-data.frame(cbind(t,yt))
datos$yt<-as.numeric(datos$yt)
datos <- datos %>% mutate(
  L3yt = lag(yt, 3),
  L4yt = lag(yt, 4),
  L5yt = lag(yt, 5),
  D4_y = difference(yt, differences = 4),
  D5_y = difference(yt, differences = 5),
  D6_y = difference(yt, differences = 6)
)
show(datos)
##        t yt L3yt L4yt L5yt D4_y D5_y D6_y
## 1 2018Q1 10   NA   NA   NA   NA   NA   NA
## 2 2018Q2 13   NA   NA   NA   NA   NA   NA
## 3 2018Q3 10   NA   NA   NA   NA   NA   NA
## 4 2018Q4  8   10   NA   NA   NA   NA   NA
## 5 2019Q1 15   13   10   NA    1   NA   NA
## 6 2019Q2 16   10   13   10  -23  -24   NA
## 7 2019Q3 14    8   10   13   18   41   65
## 8 2019Q4 11   15    8   10   -1  -19  -60