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)
产生以下内容:
任何人都有任何想法为什么约翰逊在使用时刻看起来有偏见?
csg*_*pie 12
这是一个有趣的问题,实际上没有一个好的解决方案.我认为,即使你不了解其他时刻,你也知道分布应该是什么样子.例如,它是单峰的.
有几种不同的方法可以解决这个问题:
假设基础分布和匹配时刻.这样做有许多标准的R包.一个缺点是多变量概括可能不清楚.
鞍点近似.在本文中:
Gillespie,CS和Renshaw,E .改进的鞍点近似. 数学生物科学,2007年.
我们看一下仅在前几分钟时恢复pdf/pmf.我们发现这种方法在偏斜度不太大时起作用.
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)