Étant donné une matrice de covariance , comment générer des données telles qu'elles auraient l'échantillon de matrice de covariance ?
Plus généralement: nous sommes souvent intéressés à générer des données à partir d'une densité , avec des données x données à un vecteur de paramètre \ boldsymbol \ theta . Il en résulte un échantillon, à partir duquel nous pouvons alors à nouveau estimer une valeur \ boldsymbol {\ hat \ theta} . Ce qui m'intéresse, c'est le problème inverse: que se passe-t-il si on nous donne un ensemble de paramètres \ boldsymbol \ theta_ {s} , et que nous aimerions générer un échantillon x tel que \ boldsymbol {\ hat \ theta} = \ boldsymbol \ theta_ {s} .
Est-ce un problème connu? Une telle méthode est-elle utile? Des algorithmes sont-ils disponibles?
la source
Réponses:
Il existe deux situations types différentes pour ce type de problèmes:
i) vous souhaitez générer un échantillon à partir d'une distribution donnée dont les caractéristiques de population correspondent à celles spécifiées (mais en raison de la variation d'échantillonnage, vous n'avez pas les caractéristiques de l'échantillon correspondant exactement).
ii) vous souhaitez générer un échantillon dont les caractéristiques de l'échantillon correspondent à celles spécifiées (mais, en raison des contraintes de correspondance exacte des quantités d'échantillon à un ensemble de valeurs prédéfinies, ne proviennent pas vraiment de la distribution que vous souhaitez).
Vous voulez le deuxième cas - mais vous l'obtenez en suivant la même approche que le premier cas, avec une étape de standardisation supplémentaire.
Ainsi, pour les normales multivariées, l'une ou l'autre peut être effectuée de manière assez simple:
Dans le premier cas, vous pouvez utiliser des normales aléatoires sans la structure de la population (comme la norme standard iid qui a l'attente 0 et la matrice de covariance d'identité), puis l'imposer - transformer pour obtenir la matrice de covariance et dire ce que vous voulez. Si et sont la moyenne de la population et la covariance dont vous avez besoin et sont normaux normaux, vous calculez , pour certains où (par exemple, un approprié pourrait être obtenu via la décomposition de Cholesky) . Alors a les caractéristiques de population souhaitées.μ Σ z y=Lz+μ L LL′=Σ L y
Avec la seconde, vous devez d'abord transformer vos normales aléatoires pour éliminer même la variation aléatoire de la moyenne zéro et de la covariance d'identité (en faisant la moyenne de l'échantillon zéro et la covariance échantillon ), puis procédez comme précédemment. Mais cette étape initiale d'élimination de l'écart de l'échantillon de la moyenne exacte , la variance interfère avec la distribution. (Dans de petits échantillons, cela peut être assez grave.)In 0 I
Cela peut être fait en soustrayant la moyenne de l'échantillon de ( ) et en calculant la décomposition de Cholesky de . Si est le facteur de Cholesky gauche, alors devrait avoir la moyenne de l'échantillon 0 et la covariance de l'échantillon d'identité. Vous pouvez ensuite calculer et avoir un échantillon avec les moments d'échantillonnage souhaités. (Selon la façon dont vos quantités d'échantillons sont définies, il peut y avoir un petit violon supplémentaire impliqué dans la multiplication / division par des facteurs tels que , mais il est assez facile d'identifier ce besoin.)z z∗=z−z¯ z∗ L∗ z(0)=(L∗)−1z∗ y=Lz(0)+μ n−1n−−−√
la source
@Glen_b a donné une bonne réponse (+1), que je veux illustrer avec du code.
Comment générer échantillons à partir d'une distribution gaussienne multivariée d- dimensionnelle avec une matrice de covariance donnée Σ ? Ceci est facile à faire en générant des échantillons à partir d'une gaussienne standard et en les multipliant par une racine carrée de la matrice de covariance, par exemple par c h o l ( Σ ) . Ceci est couvert dans de nombreux threads sur CV, par exemple ici: Comment puis-je générer des données avec une matrice de corrélation prédéfinie? Voici une implémentation simple de Matlab:n d Σ chol(Σ)
L'échantillon de matrice de covariance des données résultantes ne sera bien sûr pas exactement ; par exemple dans l'exemple ci-dessus renvoieΣ
cov(X)
Comment générer des données avec un échantillon prédéfini matrice de corrélation ou de covariance d' ?
Voici la suite de mon exemple Matlab:
Maintenant
cov(X)
, comme requis, retournela source