2 votos

Primera vez trabajando en un problema de economía

Estoy trabajando en este problema de economía y me siento un poco perdido. Esperaba que alguien pudiera ayudarme.

  • Supongamos que hay una granja en la que hay dos variables: Rendimiento del cultivo y Costo del fertilizante.
  • Estoy interesado en hacer un modelo de series temporales para modelar la relación entre el Rendimiento del cultivo y el Costo del fertilizante (es decir, cuánto fertilizante elijo comprar, suponiendo que fijo la cantidad de dinero que estoy dispuesto a gastar en fertilizante como constante).
  • En concreto, creo que el Rendimiento del cultivo está influenciado por los valores de (rezagado-1) y (rezagado-2) del Rendimiento del cultivo y el Costo del fertilizante.
  • Después de investigar un poco, me parece que un modelo ARIMAX es una buena elección para este problema.
  • Al final, quiero responder las siguientes preguntas:
    • ¿Cuál es el impacto (estimado) de cada dólar extra de costo de fertilizante en el rendimiento del cultivo?
    • Supongamos que tengo 3 opciones durante los próximos 12 meses: Invertir 1000 dólares cada mes en fertilizante, Invertir 2000 dólares cada mes en fertilizante, Invertir 3000 dólares cada mes en fertilizante. ¿Cuál de estas opciones resultará en el mayor rendimiento del cultivo acumulado (estimado) en 12 meses?

Intenté expresar esto en términos matemáticos:

Deje que $ Y_t $ represente el rendimiento del cultivo en el tiempo $ t $, y permita que $ F_t $ represente el costo del fertilizante en el tiempo $ t $. Suponemos que el precio del fertilizante permanece constante, por lo que las variaciones en $ F_t $ reflejan la cantidad de fertilizante comprado.

El rendimiento del cultivo $ Y_t $ está influenciado por:

  • El rendimiento del cultivo en rezago-1 ($ Y_{t-1} $) y rezago-2 ($ Y_{t-2} $),
  • El costo del fertilizante en rezago-1 ($ F_{t-1} $) y rezago-2 ($ F_{t-2} $).

La relación entre el rendimiento del cultivo y el costo del fertilizante se puede modelar utilizando un modelo ARIMAX de la siguiente manera:

$$ Y_t = \alpha_0 + \alpha_1 Y_{t-1} + \alpha_2 Y_{t-2} + \beta_1 F_{t-1} + \beta_2 F_{t-2} + \epsilon_t $$

donde: $ \alpha_0 $ es el término de intercepción. $ \alpha_1, \alpha_2 $ son los coeficientes para los rendimientos del cultivo rezagados, $ \beta_1, \beta_2 $ son los coeficientes para los costos del fertilizante rezagados, $ \epsilon_t $ es el término de error.

Así, me parece que $\beta$ representaría el impacto estimado del fertilizante en el rendimiento del cultivo ... ¿podría agregar las previsiones estimadas de 12 meses para cada opción para averiguar el beneficio neto? ¿Es correcta mi comprensión de Economía?

¿Alguien puede decirme si voy por buen camino?

¡Gracias!

  • Nota: Intenté hacer una simulación en R para representar mi problema.

Primero simulo datos:

library(forecast)
library(ggplot2)
library(dplyr)
library(tsibble)

set.seed(123)
n <- 100
dates <- seq(as.Date("2020-01-01"), by = "month", length.out = n)
fertilizer <- runif(n, 500, 1500)
seasonal_effect <- sin(2 * pi * (1:n) / 12) * 200
trend <- seq(0, 500, length.out = n)
crop_yield <- 0.5 * fertilizer + seasonal_effect + trend + arima.sim(list(ar = c(0.7, 0.2)), n) + rnorm(n, 0, 50)

data <- tibble(
    date = dates,
    crop_yield = crop_yield,
    fertilizer = fertilizer
) %>%
    as_tsibble(index = date)

Luego, ajusto el modelo:

model <- auto.arima(data$crop_yield, xreg = cbind(data$fertilizer))

A partir de ahí, preparé los datos para el pronóstico:

future_dates <- seq(from = max(dates), by = "month", length.out = 13)

generate_forecast <- function(cost) {
    future_fertilizer <- c(tail(data$fertilizer, 1), rep(cost, 12))
    forecast_result <- forecast(model, xreg = future_fertilizer, h = 13)

    list(
        date = future_dates,
        crop_yield = as.numeric(forecast_result$mean),
        fertilizer = future_fertilizer,
        lower = as.numeric(forecast_result$lower[, 2]),
        upper = as.numeric(forecast_result$upper[, 2]),
        scenario = paste0("Fertilizer $", cost)
    )
}

Luego, ajusté los pronósticos y los representé gráficamente:

forecast_1000 <- generate_forecast(1000)
forecast_2000 <- generate_forecast(2000)
forecast_3000 <- generate_forecast(3000)

ggplot() +
    geom_line(data = data, aes(x = date, y = crop_yield, color = "Histórico")) +
    geom_point(data = data, aes(x = date, y = crop_yield, color = "Histórico")) +
    geom_line(data = tibble(date = forecast_1000$date, crop_yield = forecast_1000$crop_yield), aes(x = date, y = crop_yield, color = "Fertilizante $1000")) +
    geom_line(data = tibble(date = forecast_2000$date, crop_yield = forecast_2000$crop_yield), aes(x = date, y = crop_yield, color = "Fertilizante $2000")) +
    geom_line(data = tibble(date = forecast_3000$date, crop_yield = forecast_3000$crop_yield), aes(x = date, y = crop_yield, color = "Fertilizante $3000")) +
    geom_ribbon(data = tibble(date = forecast_1000$date, ymin = forecast_1000$lower, ymax = forecast_1000$upper), aes(x = date, ymin = ymin, ymax = ymax, fill = "Fertilizante $1000"), alpha = 0.2) +
    geom_ribbon(data = tibble(date = forecast_2000$date, ymin = forecast_2000$lower, ymax = forecast_2000$upper), aes(x = date, ymin = ymin, ymax = ymax, fill = "Fertilizante $2000"), alpha = 0.2) +
    geom_ribbon(data = tibble(date = forecast_3000$date, ymin = forecast_3000$lower, ymax = forecast_3000$upper), aes(x = date, ymin = ymin, ymax = ymax, fill = "Fertilizante $3000"), alpha = 0.2) +
    scale_color_manual(values = c("Histórico" = "black", 
                                  "Fertilizante $1000" = "azul", 
                                  "Fertilizante $2000" = "rojo", 
                                  "Fertilizante $3000" = "verde")) +
    scale_fill_manual(values = c("Fertilizante $1000" = "azul", 
                                 "Fertilizante $2000" = "rojo", 
                                 "Fertilizante $3000" = "verde")) +
    labs(title = "Pronóstico de Rendimiento del Cultivo - Escenarios de Costo de Fertilizante",
         x = "Fecha",
         y = "Rendimiento del Cultivo",
         color = "Escenario",
         fill = "Intervalo de Pronóstico") +
    theme_minimal() +
    theme(legend.position = "inferior")

ingrese aquí la descripción de la imagen

2voto

Lee Puntos 1771

Déjame dar un breve ejemplo de por qué dos rezagos de $y_t$ podrían ser "redundantes", por así decirlo.

Supongamos que solo tuvieras un AR(1), entonces

$$y_t = \beta y_{t-1} + \epsilon_t$$

Entonces, ¿qué está diciendo REALMENTE este modelo? Convirtiéndolo usando el operador de rezago, se obtiene:

(1) $$y_t = \sum_{i=0}^{\infty} \beta^{i} \epsilon_{t-i} $$

Así que, supongamos un shock de $\epsilon_t$ en el tiempo $t$ (esto se conoce como el impulso en la literatura econométrica) y supongamos que no hay más shocks después de eso. Entonces, este modelo implica que la respuesta al impulso de un shock es una versión suavizada exponencialmente de ese mismo shock. Así que, llamemos a ese shock $\epsilon_t$ en el tiempo $t$ como $\epsilon^{*}$ y asumamos que no hay más shocks después de eso.

Entonces, basado en (1), primero, en el tiempo $t$ el efecto del shock de $\epsilon^{*}$ es simplemente $\epsilon^{*}$. Luego, en el tiempo $t+1$, el efecto del shock disminuye a $\beta \epsilon^{*}$. Luego, en el tiempo $t+2$, este mismo shock tiene un efecto de $\beta^2 \epsilon^{*}$ y así sucesivamente hasta que el efecto del shock se disipa por completo y eventualmente se vuelve cero.

Ahora, supongamos que el modelo hubiera sido un AR(2), en lugar de un AR(1). En este caso, tendríamos:

$$y_t = \beta y_{t-1} + \theta y_{t-2} + \epsilon_t $$

Así que, siguiendo una derivación similar, se obtiene $$y_t = \sum_{i=0}^{\infty}\theta^{i} \epsilon_{t-i-1}$$

Así que no solo tenemos este conjunto de "efectos" debido al shock $\epsilon^{*}$ en el tiempo $t$. También tenemos este segundo conjunto de efectos suavizados exponencialmente debido al mismo $\epsilon^{*}$. Este conjunto comienza en el tiempo $t+1$ y resulta en efectos secuenciales que se suavizan exponencialmente con el tiempo. La diferencia entre este segundo conjunto de shocks y el primer conjunto es que comienzan en el tiempo $t+1$ y tienen un coeficiente de suavizado diferente, siendo el coeficiente $\theta$ en lugar de $\beta$.

Mi punto sobre rezagar una vez en lugar de dos es que encuentro difícil justificar esta interpretación para el segundo conjunto de efectos cuando el shock del que se originan es el mismo shock solo rezagado por una unidad de tiempo más. ¿Por qué habría este conjunto de efectos "similares" excepto rezagados por una unidad de tiempo? El primer conjunto ya se encarga de que el efecto del rezago temporal disminuya con el tiempo, así que probablemente no debería haber necesidad de un segundo conjunto. Me parece que hay demasiada superposición a menos que haya alguna razón conocida para esto.

Proporcioné el argumento para el AR(1) pero un argumento similar podría usarse para el ARDL que estás utilizando. Se asume que los $F_t$ son exógenos por lo que no se puede argumentar usando los $\epsilon_t$ como hicimos en los ejemplos anteriores de AR, pero aún se mantiene un argumento similar: Los efectos de los coeficientes de $F_t$ también se disipan con el tiempo debido a la auto-regresión del modelo, por lo que su conjunto de efectos también se suavizan exponencialmente con el tiempo. Por eso argumentaría en contra de un segundo rezago para los $F_t$ también.

Cuando estaba leyendo sobre los ARDL (creo que son sinónimos de lo que los estadísticos llaman ARIMAX pero no estoy seguro), descubrí que hay mucha buena literatura en ciencia política sobre modelos de rezagos distribuidos. Esto fue algo sorprendente y me ayudó mucho. Los autores que recomiendo son Luke Keele, Nathaniel Beck y Suzanne Deboef. Si no puedes encontrar nada relacionado con ellos y los rezagos distribuidos, avísame y puedo enviarte algunos enlaces. Algunos de sus artículos fueron realmente reveladores para mí y mejores que la mayoría de las explicaciones en los textos econométricos. ¡Todo lo mejor!

ADICIÓN A LA PUBLICACIÓN ORIGINAL #================================================================

Observa que el "conjunto" de efectos suavizados exponencialmente surge SÓLO CUANDO HAY UN TÉRMINO DE AUTO-REGRESIÓN CEZADO, en este caso, $y_{t-1}$ y $y_{t-2}$. Si no hubiera términos de auto-regresión rezagados, entonces cualquier shock o efecto exógeno podría considerarse un impulso, pero sería un impulso único en el tiempo $t$ y luego sería cero. Por lo tanto, este concepto de "efecto rezagado" a partir de la respuesta al impulso no existiría sin la existencia de al menos uno de los términos de auto-regresión rezagados, $y_{t-1}$ o $y_{t-2}$.

SEGUNDA ADICIÓN A LA PUBLICACIÓN ORIGINAL #==========================================

Nota que al explicar los dos "conjuntos de efectos" causados por tener dos versiones rezagadas de la misma variable, simplifiqué las cosas en cuanto a que los dos conjuntos son separados y aditivos. El efecto del primer rezago se introduce en el segundo rezago así que los efectos definitivamente no son simplemente separados y aditivos. Se tendría que usar el enfoque de equivalencia polinómica utilizado en el modelado de funciones de transferencia para averiguar la secuencia exacta de efectos debido a la respuesta al impulso. Sin embargo, aunque la forma de pensar en los dos conjuntos siendo "aditivos" no es correcta, el argumento sigue siendo válido: "¿Por qué una respuesta al impulso de $\epsilon^{*}$ causaría una relación tan compleja para los efectos de esa respuesta con el tiempo. Es posible pero no probable.

2voto

Lee Puntos 1771

Hola stats_noob: He leído tu pregunta con más cuidado, así que estoy poniendo algunas preguntas en otra respuesta. Definitivamente NO es una respuesta a tu problema pero contiene algunos comentarios y confusiones.

1a) Me gusta la idea de usar las predicciones (tú las llamas valores esperados y se pueden pensar de esa manera. Me gusta pensar en ellas como predicciones) para tomar tus decisiones. No creo que haya restricciones en tu problema pero no estoy totalmente seguro. Si las hay, entonces este tipo de solución puede no ser factible y una optimización dinámica podría ser una mejor opción. Esto lleva a 1b).

1b) La optimización dinámica se utiliza cuando uno tiene restricciones en su problema junto con algún tipo de modelo. Espero que no tengas restricciones porque es algo así como un campo macroeconómico en sí mismo y algo complicado. Puedo proporcionar algún material introductorio al respecto si hay restricciones. Esto lleva a 2).

2) Al principio pensé que la cantidad de dinero que podrías gastar en fertilizante estaba restringida y que necesitarías gastar más cuando el costo del fertilizante era alto y menos cuando el costo del fertilizante era bajo ? Pero, después de leer la pregunta completa, no creo que sea el caso.

Pero luego me pregunté: "¿Por qué está cambiando el costo del fertilizante?". No tengo claro eso, lo que dificulta brindar cualquier tipo de perspectivas. Además, ¿cómo actúa el costo del fertilizante como predictor del rendimiento de los cultivos? Si el costo del fertilizante cambia, ¿se espera que aumente o disminuya el rendimiento de los cultivos? ¿cuáles son las unidades del rendimiento de los cultivos y el costo del fertilizante? Tal vez el costo del fertilizante no es el $F_t$ en el modelo. Usaste el término "fertilizante" así que tal vez $F_t$ denote la cantidad de fertilizante utilizado en el tiempo $t$.

3) Además, estoy seguro de que auto.arima es una función de R bastante útil para la estimación pero, para tu modelo en particular, es más fácil simplemente crear un data.frame con los 4 predictores y luego usar eso en una llamada a lm. Claramente eres muy bueno con R así que creo que puedes hacerlo sin mi ayuda. Si necesitas ayuda, avísame. Una vez que lo hagas, probar varios modelos es simplemente una llamada directa a lm y luego no tendrás que preocuparte por todos estos coeficientes de arima que quedan. Personalmente, aún no sé qué hay bajo el capó de auto.arima pero sé con certeza que no lo necesitas.

4) Me doy cuenta de que tu código de R es solo una simulación de plantilla (no son los datos reales, etc. Es un hermoso código de R por cierto. Nunca he usado tidyverse o ggplot pero aun así puedo decir que sabes lo que estás haciendo.) No tengo claro por qué estás prediciendo 13 pasos adelante? ¿No deberías estar prediciendo 1 paso adelante, construyendo una pronóstico y luego reestimando el modelo para el siguiente período para que puedas hacer otro pronóstico? ¿Puede que esté confundido acerca de esto también?

Entonces, si puedes abordar mis problemas-preguntas, tal vez pueda brindar algunas retroalimentaciones útiles en lugar de confusiones!!!!!

P.D.: 1 consejo de R: No llames a tus datos "data". Eso puede ser peligroso porque había una función en Splus llamada data(). Creo que hay una en R también así que hacer eso puede causar confusión o incluso problemas más graves que eso.

=============================================================== ANEXO: AGREGANDO CÓDIGO R QUE MUESTRA CÓMO USAR lm PARA ESTIMAR EL MODELO DESCRITO EN LA PREGUNTA ORIGINAL. NO SÉ POR QUÉ TENGO QUE SALTEAR LÍNEAS. SI NO LO HAGO, LAS COSAS SE PONEN FEO.

library(zoo)

set.seed(123)

n <- 10

dates <- seq(as.Date("2020-01-01"), by = "month", length.out = n)

fertcost <- runif(n, 1000, 1500)

cropyield <- runif(n, 1000, 1500)

df <- data.frame(dates, fertcost, cropyield)

mydata <- read.zoo(df)

mylaggeddata <- merge(Ytee = mydata[,2], Yteem1 = lag(mydata$cropyield, -1,), Yteem2= lag(mydata$cropyield, -2), Fteem1= lag(mydata$fertcost, -1,),
                      Fteem2 = lag(mydata$fertcost, -2))

mylaggeddata <- as.data.frame(mylaggeddata)

lm(data = mylaggeddata, as.formula(Ytee ~ Yteem1 + Yteem2 + Fteem1 + Fteem2))

ML: 20-08-2024 #====================================================================

Hola stats_noob: Espero que el código R haya ayudado. Nota que, una vez que las observaciones se alinean correctamente, tu modelo ya no es un modelo de regresión de series temporales en el sentido de que el tiempo ha sido eliminado. Por lo tanto, solo tienes un modelo de regresión que se puede estimar usando lm. Por supuesto, si los términos de error no fueran ruido blanco y hubiera una estructura de términos de error más complicada, entonces no podrías usar lm.

He leído tus respuestas a mi pregunta y me gusta la idea de pronosticar cada mes para los próximos 12 meses y sumarlos. El único problema con ese enfoque es que necesitas los valores de $F_{t-1}$ y $F_{t-2}$ que no tendrás a medida que avances. Entonces, ¿ese enfoque probablemente no sea factible?

La otra confusión que tuve fue que aún no estoy seguro si $F_t$ es la cantidad de fertilizante comprada o el costo del fertilizante ? En cualquier caso, necesitas justificar su capacidad como predictores del rendimiento porque no estoy seguro de su capacidad predictiva ? El costo del fertilizante tendría sentido si estuvieras gastando más en un fertilizante "más potente" pero, aparte de eso, no veo su capacidad predictiva ?

Espero que el código R y mis preguntas te ayuden?

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X