Comment générer des distributions données, moyennes, SD, skew et kurtosis dans R?
Est-il possible de générer des distributions dans R pour lesquelles la moyenne, SD, skew et kurtosis sont connues? Jusqu'à présent, il semble que la meilleure voie serait de créer des nombres aléatoires et de les transformer en conséquence. S'il existe un paquet adapté à la génération de distributions spécifiques qui pourraient être adaptées, Je ne l'ai pas encore trouvé. Merci
6 réponses
Il y a une distribution Johnson dans le paquet SuppDists. Johnson vous donnera une distribution qui correspond à des moments ou quantiles. D'autres commentaires sont corrects que 4 moments ne fait pas une distribution. Mais Johnson va certainement essayer.
Voici un exemple d'ajustement D'un Johnson à certains exemples de données:
require(SuppDists)
## make a weird dist with Kurtosis and Skew
a <- rnorm( 5000, 0, 2 )
b <- rnorm( 1000, -2, 4 )
c <- rnorm( 3000, 4, 4 )
babyGotKurtosis <- c( a, b, c )
hist( babyGotKurtosis , freq=FALSE)
## Fit a Johnson distribution to the data
## TODO: Insert Johnson joke here
parms<-JohnsonFit(babyGotKurtosis, moment="find")
## Print out the parameters
sJohnson(parms)
## add the Johnson function to the histogram
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
Le tracé final ressemble à ceci:
Vous pouvez voir un peu du problème que d'autres soulignent sur la façon dont 4 moments ne capturent pas complètement un distribution.
Bonne chance!
Modifier
Comme Hadley l'a souligné dans les commentaires, L'ajustement Johnson semble éteint. J'ai fait un test rapide et j'ai ajusté la distribution Johnson en utilisant moment="quant"
qui correspond à la distribution Johnson en utilisant 5 quantiles au lieu des 4 moments. Les résultats semblent beaucoup mieux:
parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
Qui produit ce qui suit:
Quelqu'un a des idées pourquoi Johnson semble biaisé quand ajustement en utilisant des moments?
C'est une question intéressante, qui n'a pas vraiment de bonne solution. Je suppose que même si vous ne connaissez pas les autres moments, vous avez une idée de ce que la distribution devrait ressembler. Par exemple, c'est unimodal.
Il y a quelques façons différentes d'aborder ce problème:
Supposons une distribution sous-jacente et des moments de correspondance. Il existe de nombreux paquets R standard pour ce faire. Un inconvénient est que la généralisation multivariée peut être clair.
-
Approximations Saddlepoint. Dans cet article:
Gillespie, C. S. et Renshaw, E. Une amélioration de la saddlepoint rapprochement. Mathématiques Biosciences, 2007.
Nous examinons la récupération d'un pdf / pmf lorsqu'il n'est donné que les premiers instants. Nous avons constaté que cette approche fonctionne lorsque l'asymétrie n'est pas trop grand.
-
Extensions de Laguerre:
Mustapha, H. et Dimitrakopoulosa, R. expansions généralisées de Laguerre densités de probabilité multivariées avec des moments . Ordinateurs et mathématiques avec Applications, 2010.
Les résultats de cet article semblent plus prometteurs, mais je ne les ai pas codés.
Cette question a été posée il y a plus de 3 ans, alors j'espère que ma réponse ne viendra pas trop tard.
Il y a un moyen d'identifier de manière unique une distribution en connaissant certains des moments. C'est la méthode de entropie maximale. La distribution qui résulte de cette méthode est la distribution qui maximise votre ignorance sur la structure de la distribution, étant donné ce que vous savez . Toute autre distribution qui a également les moments que vous avez spécifiés mais N'est-ce pas la distribution MaxEnt qui suppose implicitement plus de structure que ce que vous entrez. La fonctionnalité à maximiser est L'entropie D'Information de Shannon, $s [p(x)] = - \int p(x)log p (x) dx$. Connaître la moyenne, sd, l'asymétrie et la kurtose, se traduisent par des contraintes sur les premier, deuxième, troisième et quatrième moments de la distribution, respectivement.
Le problème est alors de maximiser S sous réserve des contraintes: 1) $\int x p(x) dx = "premiers instants"$, 2) $\int x^2 p (x) dx = " seconde moment"$, 3) ... et ainsi de suite
Je vous recommande le livre "Harte, J., Maximum d'Entropie et de l'Écologie: Une Théorie de l'Abondance, la Distribution et l'Énergétique (Oxford University Press, New York, 2011)."
Voici un lien qui tente de l'implémenter dans R: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r
Je suis d'accord que vous avez besoin d'une estimation de densité pour répliquer n'importe quelle distribution. Cependant, si vous avez des centaines de variables, comme c'est typique dans une simulation de Monte Carlo, vous devez avoir un compromis.
Une approche suggérée est la suivante:
- Utilisez la transformation Fleishman pour obtenir le coefficient pour l'inclinaison et la kurtose données. Fleishman prend le skew et le kurtosis et vous donne les coefficients
- générer N variables normales (moyenne = 0, std = 1)
- transformer les données dans (2) avec les coefficients de Fleishman pour transformer les données normales en biais et kurtosis donnés
- dans cette étape, utilisez les données de l'étape (3) et transformez-les en moyenne et écart-type souhaités (std) en utilisant new_data = moyenne désirée + (données de l'étape 3)* std désiré
Les données résultantes de L'Étape 4 auront la moyenne désirée, la MST, l'asymétrie et la kurtose.
Mises en garde:
- Fleishman ne fonctionnera pas pour toutes les combinaisons de biais et kurtois
- les étapes ci-dessus supposent des variables non corrélées. Si vous voulez générer des données corrélées, vous aurez besoin d'une étape avant la transformation Fleishman
Ces paramètres ne définissent pas complètement une distribution. Pour cela, vous avez besoin d'une densité ou d'une fonction de distribution équivalente.
Comme @David et @ Carl l'ont écrit ci-dessus, il existe plusieurs paquets dédiés à la génération de distributions différentes, voir par exemple la vue des tâches de distributions de probabilité sur CRAN.
Si vous êtes intéressé par la théorie (comment dessiner un échantillon de nombres correspondant à une distribution spécifique avec les paramètres donnés), il suffit de chercher les formules appropriées, par exemple voir la distribution gamma sur Wiki , et constituer un système de qualité simple avec les paramètres fournis pour calculer l'échelle et la forme.
Voir un exemple concret ici , où j'ai calculé les paramètres alpha et bêta d'une distribution bêta requise basée sur la moyenne et l'écart-type.