Descripción de los datos

Una cooperativa de siembra ubicada en la provincia de Córdoba desea medir las variaciones en las cosechas de maíz durante un periodo de ocho años (2012 a 2019). En la siguiente tabla se muestra el volumen de cereal cosechado en cada uno de los años, expresado en toneladas por hectárea (tn/ha).

Carga de los datos

# Vector de datos de variable explicativa: Tiempo en años
anios <- c(2012:2019)
anios
## [1] 2012 2013 2014 2015 2016 2017 2018 2019
# Vector de datos de variable expicada: Cosecha de maíz en toneladas
cosechas<-c(7.5,7.8,8.2,8.2,8.4,8.5,8.7,9.1)
cosechas
## [1] 7.5 7.8 8.2 8.2 8.4 8.5 8.7 9.1
# Creamos un data frame a partir de los vectores generados
datos <- data.frame(cosechas, anios)
summary(datos)# resumen estadístico de las variables del conjunto de datos
##     cosechas        anios     
##  Min.   :7.50   Min.   :2012  
##  1st Qu.:8.10   1st Qu.:2014  
##  Median :8.30   Median :2016  
##  Mean   :8.30   Mean   :2016  
##  3rd Qu.:8.55   3rd Qu.:2017  
##  Max.   :9.10   Max.   :2019

Gráfico de la serie de tiempo

Utilizaremos la librería ggplot2 de R para graficar:

library(ggplot2)
ggplot(datos, aes(x = anios, y = cosechas)) +
  geom_line(color = "blue") +
  geom_point(color = "black") +
  labs(title = "Cosecha de maíz en Córdoba - 2012 a 2019",
       x = "Año",
       y = "Cosecha (tn)") +
  theme_minimal()

Codificación de la variable tiempo

Crearemos una nueva variable \(x\) que es la codificación del tiempo. Servirá para ingresarla como variable explicativa en el proceso de estimación de los coeficientes del modelos que crearemos.

dim(datos) #para conocer cuántas filas tenemos en el data frame
## [1] 8 2
library(dplyr)
datos <- datos %>%
  mutate(x = (anios - mean(anios) )*2) # mutate(x = (anios - mean(anios) )) para n impar ó mutate(x = (anios - mean(anios) )*2) en el caso de n par
datos
##   cosechas anios  x
## 1      7.5  2012 -7
## 2      7.8  2013 -5
## 3      8.2  2014 -3
## 4      8.2  2015 -1
## 5      8.4  2016  1
## 6      8.5  2017  3
## 7      8.7  2018  5
## 8      9.1  2019  7

Estimación del Modelo Lineal para la tendencia secular

Utilizamos la función \(lm\) y la variable \(x\) del tiempo codificado.

mod1 <- lm(cosechas ~ x, datos)   ## usamos la función "lm(y~x,datos)"
mod1
## 
## Call:
## lm(formula = cosechas ~ x, data = datos)
## 
## Coefficients:
## (Intercept)            x  
##         8.3          0.1
summary(mod1)
## 
## Call:
## lm(formula = cosechas ~ x, data = datos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -0.100 -0.100  0.000  0.025  0.200 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 8.300000   0.040825  203.31 9.55e-13 ***
## x           0.100000   0.008909   11.22 2.99e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1155 on 6 degrees of freedom
## Multiple R-squared:  0.9545, Adjusted R-squared:  0.947 
## F-statistic:   126 on 1 and 6 DF,  p-value: 2.986e-05

Gráfica del modelo lineal sobre la serie de tiempo

library(ggplot2)   #usamos la librería ggplot2 de R para graficar
ggplot(datos, aes(x = x, y = cosechas)) +
  geom_line(color = "blue") + #valores observados
  geom_point(color = "black") +  #valores observados
  geom_smooth(method = "lm", se = FALSE,color="green") +  #modelo lineal
  labs(title = "Cosecha de maíz en Córdoba - 2012 a 2019",
       x = "Año codificado",
       y = "Cosecha de maíz (tn)") +
  theme_minimal()

library(ggplot2)

ggplot(datos, aes(anios, cosechas)) +
  geom_point(aes(color = "Datos observados")) +
  geom_line(aes(color = "Datos observados")) +
  geom_smooth(aes(color = "Modelo lineal"), method = "lm", formula = y ~ x, se = FALSE) +
    labs(title = "Cosecha de maíz en Córdoba - 2012 a 2019",
       x = "Año",
       y = "Cosecha de maíz (tn)",
       color = "Referencias") +
  theme_minimal()+
  scale_x_continuous(breaks = datos$anios, labels = datos$anios)   # esto asegura que los años se vean

Cálculo del porcentaje de tendencia

# Calculamos los valores predichos del modelo
pre <- predict(mod1) # Predichos
pre
##   1   2   3   4   5   6   7   8 
## 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0
# Guardamos valores predichos del modelo en una nueva columna del dataframe
datos$predichos <-pre
datos
##   cosechas anios  x predichos
## 1      7.5  2012 -7       7.6
## 2      7.8  2013 -5       7.8
## 3      8.2  2014 -3       8.0
## 4      8.2  2015 -1       8.2
## 5      8.4  2016  1       8.4
## 6      8.5  2017  3       8.6
## 7      8.7  2018  5       8.8
## 8      9.1  2019  7       9.0
#Generamos la variable "Porcentaje de tendencia" y la agregamos al dataframe
datos$porc_tendencia <- ((datos$cosecha / datos$predichos)*100)
datos
##   cosechas anios  x predichos porc_tendencia
## 1      7.5  2012 -7       7.6       98.68421
## 2      7.8  2013 -5       7.8      100.00000
## 3      8.2  2014 -3       8.0      102.50000
## 4      8.2  2015 -1       8.2      100.00000
## 5      8.4  2016  1       8.4      100.00000
## 6      8.5  2017  3       8.6       98.83721
## 7      8.7  2018  5       8.8       98.86364
## 8      9.1  2019  7       9.0      101.11111
#Generamos la variable "Porcentaje de tendencia" y la agregamos al dataframe
datos$porc_tendencia <- ((datos$cosecha / datos$predichos)*100)
datos
##   cosechas anios  x predichos porc_tendencia
## 1      7.5  2012 -7       7.6       98.68421
## 2      7.8  2013 -5       7.8      100.00000
## 3      8.2  2014 -3       8.0      102.50000
## 4      8.2  2015 -1       8.2      100.00000
## 5      8.4  2016  1       8.4      100.00000
## 6      8.5  2017  3       8.6       98.83721
## 7      8.7  2018  5       8.8       98.86364
## 8      9.1  2019  7       9.0      101.11111

Cálculo de residuo cíclico relativo

datos$res_cic_rel <- ((datos$cosecha-datos$predichos)/datos$predichos*100)
datos
##   cosechas anios  x predichos porc_tendencia   res_cic_rel
## 1      7.5  2012 -7       7.6       98.68421 -1.315789e+00
## 2      7.8  2013 -5       7.8      100.00000  1.138690e-14
## 3      8.2  2014 -3       8.0      102.50000  2.500000e+00
## 4      8.2  2015 -1       8.2      100.00000  0.000000e+00
## 5      8.4  2016  1       8.4      100.00000  2.114711e-14
## 6      8.5  2017  3       8.6       98.83721 -1.162791e+00
## 7      8.7  2018  5       8.8       98.86364 -1.136364e+00
## 8      9.1  2019  7       9.0      101.11111  1.111111e+00

Gráfico de porcentaje de tendencia

library(ggplot2)   #usamos la librería ggplot2 de R para graficar
ggplot(datos, aes(x = anios, y = porc_tendencia)) +
  geom_line(color = "blue") + #valores observados
  geom_point(color = "black") +  #valores observados
    geom_hline(yintercept = 100,linetype = "dashed") +  # Agregar línea horizontal en y = 100
  labs(title = "Porcentaje de tendencia de Cosecha de maíz en Córdoba - 2012 a 2019",
       x = "Año",
       y = "Porcentaje de tendencia") +
  theme_minimal()