如何在R中生成给定的分布,均值,SD,偏斜和峰度?

Aar*_*n B 37 statistics r frequency-distribution skew

是否有可能在R中生成均值,SD,偏斜和峰度的分布?到目前为止,似乎最好的方法是创建随机数并相应地转换它们.如果有一个专门用于生成可以调整的特定分布的包,我还没有找到它.谢谢

JD *_*ong 33

在SuppDists包中有Johnson分发.约翰逊会给你一个匹配时刻或分位数的分布.其他评论是正确的,4分钟不是分布.但约翰逊肯定会尝试.

以下是将约翰逊拟合到一些样本数据的示例:

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")
Run Code Online (Sandbox Code Playgroud)

最终的情节看起来像这样:

在此输入图像描述

您可以看到其他人指出的有关4个时刻如何无法完全捕获分布的问题.

祝好运!

编辑 正如哈德利在评论中指出的那样,约翰逊适合看起来.我做了一个快速测试,并使用moment="quant"适合约翰逊分布的约翰逊分布,使用5个分位数而不是4个时刻.结果看起来好多了:

parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

在此输入图像描述

任何人都有任何想法为什么约翰逊在使用时刻看起来有偏见?

  • 这条曲线看起来有些不对劲 - 一个简单的位置偏移会使拟合更好 (2认同)

csg*_*pie 12

这是一个有趣的问题,实际上没有一个好的解决方案.我认为,即使你不了解其他时刻,你也知道分布应该是什么样子.例如,它是单峰的.

有几种不同的方法可以解决这个问题:

  1. 假设基础分布和匹配时刻.这样做有许多标准的R包.一个缺点是多变量概括可能不清楚.

  2. 鞍点近似.在本文中:

    Gillespie,CS和Renshaw,E .改进的鞍点近似. 数学生物科学,2007年.

    我们看一下仅在前几分钟时恢复pdf/pmf.我们发现这种方法在偏斜度不太大时起作用.

  3. Laguerre扩展:

    Mustapha,H.和Dimitrakopoulosa,R.广义Laguerre随时间推移的多变量概率密度.计算机与数学与应用,2010.

    本文的结果似乎更有希望,但我没有对它们进行编码.


小智 8

这个问题是在3年多前被问到的,所以我希望我的回答不会太晚.

这里一个办法知道某些时刻时唯一标识一个分布.这种方式是最大熵的方法.根据您所知道的,这种方法产生的分布是最大化您对分布结构的无知的分布.任何其他分布也具有您指定但不是MaxEnt分布的时刻隐含地假设结构比您输入的更多.最大化的函数是Shannon的信息熵,$ S [p(x)] = - \int p(x)log p(x)dx $.知道均值,sd,偏度和峰度,分别作为分布的第一,第二,第三和第四时刻的约束.

问题是最大化S受制约束:1)$\int xp(x)dx ="第一时刻"$,2)$\int x ^ 2 p(x)dx ="第二时刻"$,3 ) ... 等等

我推荐"Harte,J.,Maximum Entropy and Ecology:A Theory of Abundance,Distribution,and Energetics"(牛津大学出版社,纽约,2011).

这是一个试图在R中实现这一点的链接:https: //stats.stackexchange.com/questions/21173/max-entropy-solver-in-r


小智 7

您的一种解决方案可能是 PearsonDS 库。它允许您将前四个矩与峰度 > 偏度 ^ 2 + 1 的限制结合使用。

要从该分布生成 10 个随机值,请尝试:

library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
Run Code Online (Sandbox Code Playgroud)