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).
# 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
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()
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.
En el caso de n impar: datos <- datos %>% y debajo
mutate(x = (anios - mean(anios) )) .
En el caso de n par: datos <- datos %>% y debajo
mutate(x = (anios - mean(anios) )*2) .
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
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
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
# 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
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
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()