是否有可能在R中生成均值,SD,偏斜和峰度的分布?到目前为止,似乎最好的方法是创建随机数并相应地转换它们。 如果有一个专门用于生成可以调整的特定分布的包,我还没有找到它。 感谢
答案 0 :(得分: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")
最终情节如下:
您可以看到其他人指出的有关4个时刻如何无法完全捕获分布的问题。
祝你好运! 修改强>
正如哈德利在评论中所指出的那样,约翰逊适合看起来。我做了一个快速测试并使用moment="quant"
拟合约翰逊分布,该分布符合Johnson分布,使用5个分位数而不是4个矩。结果看起来好多了:
parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")
产生以下内容:
任何人都有任何想法为什么约翰逊在使用时刻看起来有偏见?
答案 1 :(得分:12)
这是一个有趣的问题,实际上没有一个好的解决方案。我认为,即使你不了解其他时刻,你也知道分布应该是什么样子。例如,它是单峰的。
有几种不同的方法可以解决这个问题:
假设潜在的分布和匹配时刻。这样做有许多标准的R包。一个缺点是多变量概括可能不清楚。
鞍点近似。在本文中:
Gillespie,C.S。和Renshaw,E。An improved saddlepoint approximation. 数学生物科学,2007。
我们看一下仅在最初的几分钟内恢复pdf / pmf。我们发现这种方法在偏斜度不太大时起作用。
Laguerre扩展:
Mustapha,H。和Dimitrakopoulosa,R。Generalized Laguerre expansions of multivariate probability densities with moments。 计算机&amp;数学与应用,2010。
本文的结果似乎更有希望,但我没有对它们进行编码。
答案 2 :(得分:7)
这个问题是在3年多前被问到的,所以我希望我的回答不会太晚。
是 一种在了解某些时刻时唯一标识分布的方法。这种方法是最大熵的方法。此方法产生的分布是最大化您对分布结构的无知的分布,给出您所知道的。任何其他分布也具有您指定但不是MaxEnt分布的时刻隐含地假设结构比您输入的更多。要最大化的函数是Shannon的信息熵,$ S [p(x)] = - \ int p(x)log p(x)dx $。了解均值,sd,偏度和峰度,分别作为分布的第一,第二,第三和第四时刻的约束。
问题在于根据约束最大化 S : 1)$ \ int x p(x)dx =&#34;第一时刻&#34; $, 2)$ \ int x ^ 2 p(x)dx =&#34;第二个时刻&#34; $, 3)......等等
我推荐这本书&#34; Harte,J.,Maximum Entropy and Ecology:A Theory of Abundance,Distribution,and Energetics(Oxford University Press,New York,2011)。&#34;
这是一个尝试在R中实现此功能的链接: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r
答案 3 :(得分:3)
我同意您需要密度估算来复制任何分布。但是,如果您有数百个变量(如蒙特卡罗模拟中的典型变量),则需要进行折衷。
一种建议的方法如下:
步骤4的结果数据将具有所需的均值,标准,偏度和峰度。
注意事项:
答案 4 :(得分:3)
一个适合您的解决方案是PearsonDS库。它允许您使用前四个时刻的组合,并具有峰度>偏度^ 2 + 1的限制。
要从该分布中生成10个随机值,请尝试:
library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
答案 5 :(得分:2)
这些参数实际上并未完全定义分布。为此,您需要密度或等效的分布函数。
答案 6 :(得分:1)
熵方法是一个好主意,但是如果您有数据样本,则与仅使用矩相比,使用的信息更多!因此,片刻健身通常不太稳定。如果您没有更多有关分布看起来的信息,那么熵是个好主意,但是如果您有更多信息,例如关于支持,然后使用它!如果您的数据偏斜且为正,那么使用对数正态模型是个好主意。如果您也知道上尾是有限的,则不要使用对数正态,而应使用4参数Beta分布。如果对支撑或尾巴特性一无所知,那么按比例缩放并移动的对数正态模型可能很好。如果您需要有关峰度的更多灵活性,那么例如具有缩放+移位的logT通常很好。如果您知道拟合度应该接近正态分布,也可以提供帮助,如果是这种情况,请使用包含正态分布的模型(无论如何通常都是这种情况),否则,例如使用广义割割双曲分布。如果要执行所有这些操作,则模型在某些时候会有一些不同的情况,并且应确保没有间隙或不良的过渡效果。
答案 7 :(得分:0)
正如@David和@Carl在上面写的那样,有几个专用于生成不同发行版的包,参见例如the Probability distributions Task View on CRAN
如果您对该理论感兴趣(如何使用给定参数绘制适合特定分布的数字样本),那么只需查找适当的公式,例如:请参阅gamma distribution on Wiki,并使用提供的参数构建一个简单的质量系统来计算比例和形状。
参见具体示例here,其中我根据平均值和标准差计算了所需β分布的alpha和beta参数。