Comment générer des échantillons corrélés?
La variation du prix moyen d'un produit sur une période plus longue est généralement inférieure à une période plus courte. Je suis intéressé à capturer les deux incertitudes quant à l'entrée du problème de programmation stochastique. Disons que le prix moyen du pétrole en une semaine a une moyenne de$\overline{\lambda}_{w}$ et std de $\sigma_{w}$. Ainsi, les N échantillons représentant le prix faiblement moyen du pétrole peuvent être représentés par$\lambda_{wi}, \ wi=1...N$.
D'un autre côté, représentons les variations quotidiennes du prix du pétrole concernant chaque échantillon généré mentionné ci-dessus avec M autres échantillons, par exemple $\lambda_{wi}^{dj},\ j=1:M$. Plus précisément, pour chaque$wi$, l'incertitude autour du prix journalier, malgré la même moyenne que l'échantillon hebdomadaire, soit $\overline{\lambda_{wi}}^{dj=1:M} = \lambda_{wi}$, a un écart type plus grand, $\text{i.e } \sigma_{d}$.
Pour mieux illustrer, disons que nous avons des N=2échantillons concernant le prix moyen du pétrole pendant une semaine avec la moyenne de$\overline{\lambda}_{w} = 100 \\\$$ et $\sigma_{w} = 20 \\\$$. Aussi, pour chaque échantillon faiblement, nous avons des M=3échantillons décelant la variation quotidienne du prix avec$\overline{\lambda_{wi}}^{dj=1:M} = \lambda_{wi}$ et $ \sigma_{d} = 30$.
$\text{for } \lambda_{w1} = 80, \ \lambda_{d1}^{w1} = 50,\lambda_{d1}^{w1} =80,\lambda_{d1}^{w1}=110 \\ \text{for } \lambda_{w2} = 120, \ \lambda_{d1}^{w2} = 90,\lambda_{d1}^{w2} = 120,\lambda_{d1}^{w2}=150$
Supposons que l'incertitude des deux périodes puisse être modélisée comme une fonction de distribution gaussienne.
Q1) Comment puis-je générer des Néchantillons avec une moyenne de$\overline{\lambda}_{w}$ et std de $\sigma_{w}$ainsi que d' Mautres échantillons avec une moyenne de$\overline{\lambda_{wi}}^{dj=1:M} = \lambda_{wi}$ et $\sigma_{d} $
Q2) Comment puis-je générer les échantillons ci-dessus tout en considérant la std des variations de prix quotidiennes en fonction de l'échantillon moyen hebdomadaire: par exemple $\sigma_{di} = \lambda_{wi}/10$
Si possible, veuillez donner quelques conseils pour l'implémentation Matlab ou Python d'une telle méthode d'échantillonnage.
Réponses
Le problème que vous décrivez a à voir avec la nécessité de tenir compte de la dynamique à court et à long terme dans un problème de décision dans l'incertitude, ou dans l'incertitude générale à différents niveaux de résolution. Il y a deux problèmes ici.
La mise en œuvre pratique d'un programme stochastique vit sur un arbre de scénario. Le premier problème est donc de savoir comment organiser des données aléatoires dans une arborescence de scénarios tenant compte de différentes résolutions temporelles. Les auteurs de ce travail proposent un arbre de scénario dit «multi-horizon», qui vous permet de modéliser exactement le problème que vous décrivez, c'est-à-dire l'incertitude à différents niveaux de résolution. En pratique, lorsque vous remplissez votre arbre de scénario, vous échantillonnez des prix journaliers conditionnés à la réalisation des prix hebdomadaires.
Comment échantillonner concrètement à partir d'une gaussienne multivariée afin de peupler votre arbre de scénario (et votre programme stochastique) avec des données. En Python, vous pouvez utiliser numpy pour échantillonner à partir d'une gaussienne multivariée. C'est expliqué ici . Par example:
Importez les éléments nécessaires
from scipy.stats import multivariate_normal
Exemple de données que vous devrez remplir en fonction de votre cas
n_random_vars = 5
means = [10 for i in range(n_random_vars)]
covs = [[0 for x in range(n_random_vars))] for y in range(n_random_vars)]
Créer un multivariate_normalobjet
mn = multivariate_normal(mean = means, cov = covs)
Tirez des échantillons aléatoires
mn.rvs()
Comment générer une gaussienne multivariée? Il doit être répondu quelque part sur Cross Validated, mais je ne le trouve pas maintenant, quelques commentaires àhttps://stats.stackexchange.com/questions/341805/are-mvrnorm-in-mass-r-package-and-rmvn-in-mgcv-r-package-equivalent/341808#341808.
Laisser $X \sim \mathcal{N}(\mu, \Sigma)$ et $\epsilon \sim \mathcal{N}(0,I)$. Ensuite, nous pouvons décomposer la matrice de covariance de différentes manières, disons la décomposition de Cholesky$\Sigma= C C^T$ ou par le théorème spectral $\Sigma=U \Lambda U^T = (U\Lambda^{1/2}) (U\Lambda^{1/2})^T$ et puis soit $$ \mu + C\epsilon$$ ou alors $$ \mu + U \Lambda^{1/2} \epsilon$$ fait l'affaire.