---
title: "Métodos de Escenarios"
date: "`r Sys.Date()`"
author: "Ricardo R. Palma"
output:
  rmdformats::readthedown:
    highlight: kate
---


```{r setup, echo=FALSE, cache=FALSE}
library(knitr)
library(rmdformats)

## Global options
options(max.print="75")
opts_chunk$set(echo=FALSE,
	             cache=TRUE,
               prompt=FALSE,
               tidy=TRUE,
               comment=NA,
               message=FALSE,
               warning=FALSE)
opts_knit$set(width=75)
```


# MÉTODO DE ESCENARIOS


## HISTORIA

“El término ‘Escenario’ proviene del arte dramático y se refiere a un espacio o a un conjunto de directivas para la secuencia de una acción. Según Peter Schwartz, del Global Business Network de California; se puede comparar un escenario con un guión cinematográfico, porque se formulan ideas y desarrollan los caracteres, que son los bloques de construcción de escenarios. En la década del ’50, **Herman Kahn** de la Rand Corporation, que se ocupaba de estudios militares y estratégicos, introdujo el término escenarios en la técnica del planeamiento.” [1]


## CONCEPTO:

Los escenarios constituyen “descripciones exploratorias y provisionales de un futuro probable, o según la definición de uno de los cultivadores conocidos de esta técnica: “…son secuencias hipotéticas de eventos articulados, con el designio de concentrar la atención en procesos causales y en rompimientos factibles”. Una definición de Eduardo Balbi, que vincula las ideas de escenario y ámbito, dice que “un escenario es un conjunto de circunstancias que pueden producirse en un determinado ámbito, dentro del cual operan actores e intereses que se deben analizar con coherencia y unidad de criterio”[2]

Un escenario “es una imagen o visión que describe una situación futura así como la secuencia de eventos que permiten llegar a esa situación. Este método, permite, entonces, transitar desde la situación actual hasta otra situación futura, deseable y posible, describiendo coherentemente dicho tránsito.

La construcción de escenarios debe ser una tarea de equipo y, como tal, implica la utilización consciente de conocimientos de dinámica grupal. Muchas veces, encaramos esa actividad con una actitud puramente técnica, desprovista, de esta manera de cualquier contenido emocional.”[3]

“La elaboración de escenarios representa una parte fundamental de todo ejercicio prospectivo. Los escenarios (pasados, presentes o futuros) son construcciones conceptuales a partir de supuestos: representan “una fotografía” del fenómeno global que se desea analizar.  Los escenarios futuros representan visiones hipotéticas de futuro construidas a partir del desarrollo de un conjunto de premisas disponibles en el presente. Estas diferentes imágenes del futuro nos ayudan a comprender cómo las decisiones y las acciones que hoy tomamos pueden influir en nuestro futuro.

Elaborar escenarios es una forma de pensar el futuro. Debe servir para decidir lo que hay que hacer en el presente. No ponderan probabilidades sino que consideran posibilidades, no son la lista de cosas que nos gustaría que ocurriesen o que pensamos que deberían ocurrir, sino un conjunto de relatos sobre el futuro, consistentes, plausibles y que abarcan un amplio abanico de acontecimientos posibles.”[4]

## CARACTERÍSTICAS:

Los escenarios poseen ciertas características que a continuación se detalla:

“· Son narraciones dinámicas. Generalmente, se diseñan con el fin de ofrecer una imagen viva y real de una posible situación de futuro. Se enmarca en un contexto concreto, que, además, puede estar basado en estimaciones estadísticas.

· Carácter múltiple. Es frecuente que se generen diversas posibilidades de una misma situación y la ventaja que esto ofrece es el contraste y la amplitud de visión ante una situación futura.

· Presentan una progresión del presente al futuro. Los escenarios no sólo tratan de describir cómo será el futuro, sino que además trazan el camino que tomará la situación presente hasta llegar a ese estadio. Se trata de conectar una serie de acontecimientos interrelacionados que se desarrollan a partir de una secuencia necesaria.”[5]

Los escenarios son un método que cumple varias funciones dentro del proceso de planificación como:

“· Tener en cuenta muchos puntos de vista;

· Preparar estrategias de respuesta para un amplio abanico de contingencias;

· Identificar indicadores que ayuden a la elección de las estrategias a ejecutar.

· Se puede entender con facilidad sin necesidad de recurrir a un vocabulario muy especializado o de métodos estadísticos;

· Utiliza una estructura narrativa muy persuasiva;

· Estimula la creación de un pensamiento futuro amplio en lugar de una visión simple.

Así mismo los escenarios tienen muchas aplicaciones:

· Enriquecer el debate y ampliar la conversación estratégica en la organización. El propósito aquí es traer nuevos conceptos e interpretaciones a los usuarios y, en último término, cambiar los **mapas mentales**.

· Desencadenar un proceso formal de planeación que incluya la valoración de estrategias y planes existentes”[6]

Pueden elaborarse y aplicarse escenarios a diferentes escalas. “Por ejemplo a nivel internacional (a escala global o continental); dentro de sistemas nacionales (por ejemplo, en Nueva Zelanda y la Federación Rusa); a escala regional o sectorial (en una industria en concreto como el transporte); e incluso a escala de una institución u organización, ya sea de un organismo de la administración pública, una escuela o un instituto.”[7] En cada una de estas escalas las características de los escenarios difieren, y los motivos de dicha diferencia resultan con frecuencia tantos más específicos cuantos más locales sean los parámetros de aplicación de los escenarios.




Series de Tiempo
----


```{r,echo=TRUE}
library(fpp)
library(ggplot2)
beer2 <- window(ausbeer, start=1992)
fit.beer <- tslm(beer2 ~ trend + season)
fcast <- forecast(fit.beer)

autoplot(beer2, xlab="Año", ylab="Millones de Galones") + ggtitle("Despacho de Cerveza en Australia")

# No funciona el uso de titulo del gráfico
#autoplot(fcast  , ggtitle("Despacho de Cerveza")  ,xlab("Year"), ylab("megalitres"))

```


```{r, echo=TRUE}
autoplot(fcast, xlab="Año", ylab="Millones de Galones")
```


## Regresión no lineal
Aunque la relación lineal asumida hasta ahora en este apartado es a menudo adecuada, hay muchos casos en los que una forma funcional no lineal es más adecuada. Para mantener las cosas simples en esta sección asumimos que sólo tenemos un predictor  $X$

La forma más sencilla de modelar una relación no lineal es transformar la variable de previsión  
$y$   y/o la variable predictora $X$  antes de estimar un modelo de regresión. Aunque esto proporciona una forma funcional no lineal, el modelo sigue siendo lineal en los parámetros. La transformación más utilizada es el logaritmo (natural) .

Se especifica un formulario funcional log-log como

$$log (y) = \beta_0 + \beta_1 * log (x) + \varepsilon $$
En este modelo, la pendiente   $\beta_1$ puede interpretarse como una elasticidad:  
Se puede decir que  es el cambio porcentual promedio en $y$ resultado de un  
  aumento porcentual de $X$.
  
También se pueden especificar otras formulas útiles. La formulación log-linear se especifica transformando únicamente la variable de previsión y la formula de registro lineal se obtiene transformando el predictor.

Recuerde que para realizar una transformación logarítmica en una variable, todos sus valores observados deben ser mayores que cero. En el caso de que esa variable  
$X$   contiene ceros, usamos la transformación  

$log (X+1)$  ; Es decir, añadimos uno al valor de la variable y luego tomamos logaritmos. Esto tiene un efecto similar a tomar logaritmos, pero evita el problema de los ceros. También tiene el efecto secundario ordenado de ceros en la escala original ceros aparezcan  en la escala transformada como ceros.

Hay casos para los que simplemente transformar los datos no seriá adecuado y puede ser necesaria una especificación más general. Entonces el modelo que usamos será

$$ y=f(x) + \varepsilon$$

Dónde  $F$  es una función no lineal. En regresión estándar (lineal),  
$ F (X)=\beta_0+\beta_1 * X$. En la especificación de regresión no lineal que sigue, permitimos  
$F$   para ser una función no lineal más flexible de $X$  , en comparación con simplemente una transformación logarítmica u otra transformación.

Una de las especificaciones más sencillas es $F$
  lineal por partes . Es decir, introducimos puntos donde la pendiente de  
$F$
  puede cambiar. Estos puntos se llaman nodos. Esto se puede lograr dejando que  
$X_{1,t}$ = X ,
  e introducir la variables  
$ X_{2,t}$ tal que :


$$x_{2,t} = (x-c) =$$  
$$x_{2,t} = (x-c)  + =\left\{\begin{array}{l l}
x=0  &  x < c \\
(x-c) & x \geq c 
\end{array}
\right\}
$$

La notación  
$(X − C) +$
  significa que si el valor  
$X − C$ si es positivo y 0 de lo contrario. 
Esto obliga a la pendiente a doblarse en el punto  $C$  . Los pliegues adicionales se pueden incluir en la relación añadiendo otras variables la ecuación anterior.

Un ejemplo de esto sería  
$X= T$
  y ajustar una tendencia lineal por tramos a una serie temporal.

Las relaciones lineales por partes construidas de esta manera son un caso especial de splines de regresión. En general, se obtiene una spline de regresión lineal utilizando

$$x_1 = x , x_2 =(x - c_1)_+ ... x_k=(x-c_{k-1})_+ $$

Dónde  $ C_1, ... c_{k-1}   son los nodos (los puntos en los que la línea puede doblarse). 

Selecciando del número de nudos $(K-1)$
 y dónde deben posicionarse puede ser difícil y algo arbitrario. Algunos algoritmos automáticos de selección de nudos están disponibles en algún software, pero aún no son ampliamente utilizados.

Se puede obtener un resultado más suave utilizando expresiones cúbicas a piezas en lugar de líneas por piezas. Estos están limitados para ser continuos (se unen) y suaves (para que no haya cambios repentinos de dirección, como vemos con splines lineales por piezas). En general, una spline de regresión cúbica se escribe como

$$ x_1=x , x_2= x^2 , x_3=x^3 , x_4=(x - c_1), \ldots  , x_k = (x-c_{k-3}) $$



Maraton de Boston
----
La cantidad de energía para una carga a pulso de un camión de 24 palets es equivalente a la que una persona gasta en una maratón. Hoy , con la existencia de carga mecanizada es inhumano pensar en esta alternativa, pero tomemos las datos a ejemplo ilustrativo.

La figura muestra los tiempos ganadores del maratón de Boston (en minutos). Según las estadística, ll curso se alargó (de 24,5 millas a 26,2 millas) en 1924, lo que condujo a un salto en los tiempos del ganadores, por lo que sólo consideramos datos a partir de esa fecha. La serie temporal muestra una tendencia general a la baja a medida que los tiempos de los ganadores han ido mejorando a lo largo de los años. El panel inferior muestra los residuos entre la correlación de una tendencia lineal a los datos y el tiempo verdadero. La gráfica muestra un patrón no lineal obvio que no ha sido capturado por la tendencia lineal. También hay algo de heteroscedasticidad, con variación decreciente con el tiempo.



```{r,echo=TRUE}
library(fpp2)
boston_men <- window(marathon, start=1924)
h <- 10
fit.lin <- tslm(boston_men ~ trend)
fcasts.lin <- forecast(fit.lin, h = h)
fit.exp <- tslm(boston_men ~ trend, lambda = 0)
fcasts.exp <- forecast(fit.exp, h = h)

t <- time(boston_men)
t.break1 <- 1950
t.break2 <- 1980
tb1 <- ts(pmax(0, t - t.break1), start = 1924)
tb2 <- ts(pmax(0, t - t.break2), start = 1924)

fit.pw <- tslm(boston_men ~ t + tb1 + tb2)
t.new <- t[length(t)] + seq(h)
tb1.new <- tb1[length(tb1)] + seq(h)
tb2.new <- tb2[length(tb2)] + seq(h)

newdata <- cbind(t=t.new, tb1=tb1.new, tb2=tb2.new) %>%
  as.data.frame()
fcasts.pw <- forecast(fit.pw, newdata = newdata)

fit.spline <- tslm(boston_men ~ t + I(t^2) + I(t^3) +
  I(tb1^3) + I(tb2^3))
fcasts.spl <- forecast(fit.spline, newdata = newdata)

autoplot(boston_men) +
  autolayer(fitted(fit.lin), series = "Linear") +
  autolayer(fitted(fit.exp), series = "Exponential") +
  autolayer(fitted(fit.pw), series = "Piecewise") +
  autolayer(fitted(fit.spline), series = "Cubic Spline") +
  autolayer(fcasts.pw, series="Piecewise") +
  autolayer(fcasts.lin, series="Linear", PI=FALSE) +
  autolayer(fcasts.exp, series="Exponential", PI=FALSE) +
  autolayer(fcasts.spl, series="Cubic Spline", PI=FALSE) +
  xlab("Year") + ylab("Winning times in minutes") +
  ggtitle("Boston Marathon") +
  guides(colour = guide_legend(title = " "))
```


arriba muestra las líneas y pronósticos ajustados de las tendencias lineales, exponenciales, lineales por tramos y spline cúbicas. Las mejores previsiones parecen provenir de la tendencia lineal por partes, mientras que la spline cúbica da el mejor ajuste a los datos históricos, pero malas previsiones.

Hay una formulación alternativa de splines cúbicas (llamadas splines de suavizado cúbico natural) que impone algunas restricciones, por lo que la función spline es lineal al final, lo que generalmente da pronósticos mucho mejores sin comprometer el ajuste. En la Figura siguiente, hemos utilizado la función splinef() para producir las previsiones de spline cúbica. Esto utiliza muchos más nudos de los que usamos en la Figura 5.21, pero los coeficientes están restringidos para evitar el sobreajuste, y la curva es lineal en ambos extremos. Esto tiene la ventaja añadida de que la selección de nudos no es subjetiva. También hemos utilizado una transformación de registro (lambda=0) para manejar la heteroscedasticidad.

```{r, echo=TRUE}
boston_men %>%
  splinef(lambda=0) %>%
  autoplot()
```
Los residuos trazados a continuación muestran que este modelo ha capturado bien la tendencia, aunque queda algo de heteroscedasticidad. El amplio intervalo de predicción asociado con las previsiones refleja la volatilidad observada en los tiempos históricos de victoria.

```{r, echo=TRUE}
boston_men %>%
  splinef(lambda=0) %>%
  checkresiduals()
```


Árbol de escenario reducido 
----

#Programación estocástica de varias etapas

EL objetivo de este apartado es presentarte el método de gas neural para la reducción de escenarios, y mostrarte cómo utilizar las funciones buildtree y checktree en el paquete de escenarios para construir árboles de escenario con
estructuras nodales predefinidas. 

para que puedas utilizarlo debes cargar la biblioteca:

      install.packages("scenario")

Muchos problemas de optimización deben permitir el la incorporación de control sobre recursos, o la capacidad del operador para cambiar las decisiones de control conforme la incertidumbre se reduce a través del tiempo (pasos). 

Teniendo en cuenta este tipo de programación en estocástica se puede lograr transformando las entradas de escenarios con perturbación en el árbol de escenarios. Una manera
de hacer esto es mediante la aplicación del método conocido como  **gas neural**. 
Este enfoque difiere de otros métodos en que permite la usuario predefinir y establecer la estructura nodal del árbol y mediante la perturbación de las probabilidades agrupar los resultados o escenrio final simplificando el árbol que llamaremos realizaciones.


##¿Qué es un árbol de escenario?

Un árbol de escenarios es una forma reducida de un conjunto de escenarios o realizaciones de un proceso. Los cúmulos de árboles de esas realizaciones se graficon como un conjunto de ramas con probabilidades especificadas de ocurrencia. El árbol está formado por $S$ escenarios, denotados como $s_i , (i = 1, 2, . . , S )$. Cada escenario contiene nodos $t$, denotados $s_{i,t} , (t = 1, 2, . . , T )$. Una condición fáctica es que todos las realizaciones nacen de el mismo estado actual de situación. Esto implica que $t = 1$ , todos los escenarios del árbol comparten el mismo nodo $s_{i,1} $ . A medida que $t$ aumenta, el árbol comienza a ramificarse. Cuando
$t = T$ , todos los nodos pertenecen a un solo escenario. Cada escenario tiene una probabilidad $P_i$ , y la suma de $P_i$ en todos los escenarios debe ser igual a 1 .


![Árbol ejemplo ficticio ](fig_1.png)

La estructura de un árbol de escenarios se puede representar mediante una matriz de partición nodal de dicho árbol de escenario, con el número de columnas iguales al número de escenarios (4 en el caso anterior) y el número de filas igual al número de pasos de tiempo (3 en el caso anterior). Esta forma de matriz se introduce en las funciones *buildtree* y *checktree* del paquete ***escenario***  mediante el parámetro *treeStruct*.

En el ejemplo anterior la matriz que lo representa sería así.

$$ S = \begin{matrix}
 & [ ,1] & [ ,2] & [ ,3] & [ ,4] \\
a[1,] & S_{1,1} & S_{1,2} & S_{1,3} & S_{1,4} \\
b[2,] & S_{2,1} & S_{2,2} & S_{2,3} & S_{2,4} \\
c[3,] & S_{3,1} & S_{3,2} & S_{3,3} & S_{3,4}
\end{matrix}
$$
Dato que todos los escenarios en $t=1$ todos los escenarios comparten el mismo estado inicial (o tabula raza en caso de emprender) Se debe cumplir que $S_{1,1} = S_{2,1} = S_{3,1} = S_{4,1}$
$S$ Podría ser cualquier cantidad mesurable (capital, empleados, valor de acción , inflación, etc).
Similarmente en el primer paso (estado 2) sólo existen dos escenarios posibles. Por lo tanto $S{1,2}=S_{2,2}$ y $S_{3,2} = S_{4,2}$ .
De este modo la matris de estados asociados a la matriz nodal de partición del árbol sería escrita así.


$$ S = \begin{matrix}
 & [ ,1] & [ ,2] & [ ,3] & [ ,4] \\
a[1,] & 1 & 1 & 1 & 1 \\
b[2,] & 2 & 2 & 5 & 5 \\
c[3,] & 3 & 4 & 6 & 7
\end{matrix}
$$

La forma más facil de armar la matrix en R-Cran es ir por filas. Sin embrago en el paper de *Giorgio Consigli* el autor sugiere otro método. 
 Él propone escribir esta matriz avanzando columna por columna, elevando el entero de nodo por 1 para cada nodo que tienes (que aún has definido). Después de escribir una matriz de estructura de árbol, se puede comprobar si es correcta utilizando el comando *checktree* .

```{r, echo=TRUE}

library(scenario)
treeStruct <- rbind(c(1,1,1,1),
c(2,2,5,5),
c(3,4,6,7))
scenario::checktree(treeStruct)


```

Si entonces quisieses que el árbol cambio o se requiere más o menos complejidad, simplemente hya que alterarlo y vuelver a comprobar antes de usar la estructura
con la función *buildtree*. Por ejemplo:

```{r,echo=TRUE}
treeStruct <- rbind(c(1,1,1,1,1,1),
c(2,2,5,5,8,11),
c(3,4,6,7,9,12))
scenario::checktree(treeStruct)

```

## El algoritmo del gas neural

El gas neural es un algoritmo simple para encontrar representaciones de datos óptimas basadas en
Vectores. El algoritmo fue acuñado como "gas neural" debido a la dinámica de los vectores de características durante el proceso de adaptación, que se distribuyen como un gas dentro del espacio de datos. Remeda partes de la técnicas de las redes neuronales.

El algoritmo de gas neural se puede utilizar para definir los valores de nodo (y los probabilidades de escenario) de un escenario determinado estructura de un árbol para describir *el mejor conjunto* de escenarios a partir de una entrada y que satisface las restricciones final (que denominaremos **realizaciones** para distinguir de la escenarios intermedios pertenecientes al árbol de escenarios). 

Cuando se aplica la generación de un árbol de escenario con un nodo inicial predefinido y cierta estructura, el algoritmo de gas neural requiere tres tipos de entrada. 

En primer lugar, necesitamos un conjunto inicial de realizaciones de
longitud T , que vamos a denominar $X$ (X puede ser un conjunto de pronósticos, o simplemente un registro de histórico observado disturbios o el resultado de una ronda delphi). 

En segundo lugar, necesitamos definir la estructura de árbol de escenario deseada y luego codificarla como un árbol de escenario , tal como hemos visto. Esta matriz de partición nodal, como se describió anteriormente. Es la parte más complicada de la metodología.

En tercer lugar, necesitamos algunos parámetros de entrada que definan la resolución de
las iteraciones tomadas por el algoritmo. Estos se establecen de forma predeterminada en los valores recomendados en la función *buildtree*.

El parámetro que se llama *jMax*  se puede modificar para cambiar la acumulación y el tiempo de cálculo.

Los pasos siguientes se corren el algoritmo con un ejemplo sencillo y estilizado. Aquí generamos el
realizaciones artificialmente desde un árbol conocido, con el fin de ilustrar la eficacia del algoritmo.



```{r,echo=TRUE}
known_tree <- cbind(c(0,2,3),
c(0,2,1),
c(0,-2,-3),
c(0,-2,-1)
)
# now add some noise to the known tree...
realizations <- matrix(rep(known_tree,5), ncol=20) + matrix(rnorm(60,0,1),ncol=20)
matplot(realizations, lty=2, col = "grey", type="l",
ylab = "Disturbance", xaxt = "n", main = "Initial realizations")
axis(1, at=1:3, labels=1:3)

```

Observe bien como hemos introducido ruido (disturbancia) al estilo de lo que hacemos en el método Montecarlo.



## Paso 1 - Inicializar los parámetros del algorítmo

Para inicializar el árbol antes de ejecutar las iteraciones, los nodos de árbol deben recibir un valor inicial. 
Exactamente lo que estos valores reflejen serán relativamente poco importantes, ya que el algoritmo perturbará rápidamente el árbol a medida que comienza a encajar a las realizaciones. 

Una forma sencilla de inicializar el árbol es asignar a cada escenario el valor de un
realización, $X_k ,(k = 1, 2, . . . , K)$ ; Donde $K$ es el número total de realizaciones— 20 (escenarios finales) en el ejemplo dado anteriormente.

A continuación, se toman promedios para dar a los nodos pertenecientes a más de un escenario el mismo valor, lo que garantiza que se mantiene la estructura del árbol de escenario. A continuación se muestra un ejemplo de una posición inicial del árbol.

El algoritmo tiene una serie de parámetros que se pueden alterar, pero no complicaremos el ejemplo con esto valores ahora.
Por defecto el algoritmo toma estos valores para los parámetro tal como se ha señalado en el paper.

$$ \lambda_0 =10 $$
$$ \lambda_f = 0.01$$
$$ \epsilon_0=0.5$$
$$ \epsilon_f=0,05$$
$$ \dot{\jmath}{_{max}} =40.000$$






## Referencias Bibliográficas

[1] Firmenich B. Ernesto H. Metodología para la construcción de escenarios. Obtenido en línea el 6 de abril de 2010. Disponible en: <http://www.conduces.com.ar/escenarios-completos.pdf>

[2] Ibidem.

[3] Tobar, Federico. Análisis de Tendencias y Construcción de Escenarios. Obtenido en línea el 6 de abril de 2010. Disponible en: <http://www.federicotobar.com.ar/pdf/Metodologiadelainvestigacion/analisis-de-tendencias%20y%20construccion%20de%20escenarios.pdf>

[4] Buenas Tareas: Escenarios Catastróficos. Obtenido en línea el 6 de abril de 2010. Disponible en: <http://www.buenastareas.com/ensayos/Escenario-Catastrofico/139162.html>

[5] Sin autor. Cómo diseñar un escenario futuro. Obtenido en línea el 4 de mayo de 2010. Disponible en <http://winred.com/management/como-disenar-un-escenario-de-futuro/gmx-niv116-con1727.htm>

[6] GROSS, Manuel. La planificación por escenarios como estrategia contra la incertidumbre. Obtenido en línea el 4 de mayo de 2010. Disponible en <http://manuelgross.bligoo.com/content/view/570258/La-Planificacion-por-Escenarios-como-estrategia-contra-la-incertidumbre.html>

[7] Varios Autores. Manual de escenarios. Bélgica. 2004. Obtenido en línea el 4 de mayo de 2010. Disponible en <http://www.cedefop.europa.eu/EN/Files/6009_es.pdf>

