Est-il possible de générer des distributions en R pour lesquelles la moyenne, l'écart-type et le kurtosis sont connus? Jusqu'à présent, il semble que la meilleure solution serait de créer des nombres aléatoires et de les transformer en conséquence . S'il existe un package conçu pour générer des distributions spécifiques qui pourraient être adaptées, je ne l'ai pas encore trouvé . Merci.
Il y a une distribution Johnson dans le paquet SuppDists. Johnson vous donnera une distribution qui correspond aux moments ou aux quantiles. D'autres commentaires sont corrects que 4 moments ne font pas une distribution. Mais Johnson va certainement essayer.
Voici un exemple d’ajustement d’un Johnson à des 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")
L'intrigue finale ressemble à ceci:
Vous pouvez voir un peu de la question que d'autres soulignent sur la façon dont 4 moments ne capturent pas complètement une distribution.
Bonne chance!
EDIT Comme le soulignait Hadley dans les commentaires, l’ajustement Johnson semble aller à l’écart. J'ai fait un test rapide et ajusté la distribution Johnson en utilisant moment="quant"
qui correspond à la distribution Johnson en utilisant 5 quantiles au lieu de 4 moments. Les résultats sont bien meilleurs:
parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
Qui produit les éléments suivants:
Quelqu'un a une idée pourquoi Johnson semble biaisé lorsqu'il est en forme en utilisant des moments?
C'est une question intéressante, qui n'a pas vraiment de bonne solution. Je présume que même si vous ne connaissez pas les autres moments, vous avez une idée de ce à quoi devrait ressembler la distribution. Par exemple, c'est unimodal.
Il existe différentes manières de résoudre ce problème:
Supposons une distribution sous-jacente et des moments de match. Il existe de nombreux packages R standard pour cela. Un inconvénient est que la généralisation multivariée peut ne pas être claire.
Approximations de point de selle. Dans cet article:
Gillespie, C.S. et Renshaw, E. Une approximation améliorée du point de selle.Biosciences mathématiques, 2007.
Nous cherchons à récupérer un fichier pdf/pmf lorsque nous ne disposons que des premiers instants. Nous avons constaté que cette approche fonctionne lorsque l'asymétrie n'est pas trop grande.
Expansion Laguerre:
Mustapha, H. et Dimitrakopoulosa, R. Expansions de Laguerre généralisées des densités de probabilité multivariées avec des moments . Informatique 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. J'espère donc que ma réponse ne viendra pas trop tard.
Il est un moyen d'identifier de manière unique une distribution lorsque vous connaissez certains moments. De cette façon est la méthode de Maximum Entropy. La distribution qui résulte de cette méthode est la distribution qui maximise votre ignorance sur la structure de la distribution, compte tenu de ce que vous savez. Toute autre distribution comportant également les moments que vous avez spécifiés, mais non la distribution MaxEnt, suppose implicitement plus de structure que ce que vous avez entré. La fonction à maximiser est l’entropie d’information de Shannon, $ S [p (x)] = -\int p (x) log p(x) dx $. Connaître la moyenne, SD, asymétrie et kurtosis, se traduit 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 suivantes: 1) $\int x p(x) dx = "premier moment" $, 2) $\int x ^ 2 p(x) dx = "second moment" $, 3) ... et ainsi de suite
Je recommande le livre "Harte, J., Maximum d'entropie et d'écologie: une théorie de l'abondance, de la distribution et de l'énergétique (Oxford University Press, New York, 2011)".
Voici un lien qui tente d'implémenter cela dans R: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r -
Je conviens que vous avez besoin d'une estimation de la densité pour reproduire toute distribution. Cependant, si vous avez des centaines de variables, comme cela est typique dans une simulation de Monte Carlo, vous devrez faire un compromis.
Une approche suggérée est la suivante:
Les données résultantes de l'étape 4 auront la moyenne, la std, l'asymétrie et le kurtosis souhaités.
Mises en garde:
Une solution pour vous pourrait être la bibliothèque PearsonDS. Il vous permet d'utiliser une combinaison des quatre premiers moments avec la restriction que kurtosis> asymétrie ^ 2 + 1.
Pour générer 10 valeurs aléatoires à partir de cette distribution, essayez:
library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
Ces paramètres ne définissent pas réellement complètement une distribution. Pour cela, vous avez besoin d'une densité ou d'une fonction de distribution équivalente.
La méthode de l'entropie est une bonne idée, mais si vous avez les échantillons de données, vous utilisez plus d'informations que l'utilisation des moments! Ainsi, un moment en forme est souvent moins stable. Si vous ne disposez pas de plus d'informations sur l'apparence de la distribution, alors l'entropie est un bon concept, mais si vous avez plus d'informations, par exemple, sur le support, alors utilisez-le! Si vos données sont asymétriques et positives, alors utilisez un modèle lognormal est une bonne idée. Si vous savez aussi que la queue supérieure est finie, n'utilisez pas la distribution log-normale, mais peut-être la distribution bêta à 4 paramètres. Si rien n’est connu sur les caractéristiques de l’assistance ou de l’aide, alors un modèle log-normal mis à l’échelle et décalé convient parfaitement. Si vous avez besoin de plus de flexibilité en ce qui concerne le kurtosis, alors par ex. un logT avec mise à l'échelle + décalage est souvent correct. Cela peut également vous aider si vous savez que l'ajustement doit être presque normal. Si c'est le cas, utilisez un modèle incluant la distribution normale (souvent le cas de toute façon), sinon vous pouvez par exemple. utilisez une distribution généralisée sécante-hyperbolique. Si vous voulez faire tout cela, le modèle présentera à un moment donné des cas différents, et vous devez vous assurer qu'il n'y a pas de lacunes ni d'effets de transition médiocres.
Comme @David et @Carl ont écrit ci-dessus, plusieurs packages sont dédiés à la génération de distributions différentes, voir par exemple. la vue des tâches de distributions de probabilités 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 vous suffit de rechercher les formules appropriées, par ex. voyez la distribution gamma sur Wiki , et créez un système 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 en fonction de la moyenne et de l’écart type.