如何在R中生成给定分布、均值、SD、偏斜和峰度?
是否有可能在R中生成均值、SD、偏斜和峰度已知的分布?到目前为止,最好的方法似乎是创建随机数并相应地进行变换。 如果有一个包专门用来生成可以修改的特定发行版,我还没有找到它。如何在R中生成给定分布、均值、SD、偏斜和峰度?,r,statistics,skew,frequency-distribution,R,Statistics,Skew,Frequency Distribution,是否有可能在R中生成均值、SD、偏斜和峰度已知的分布?到目前为止,最好的方法似乎是创建随机数并相应地进行变换。 如果有一个包专门用来生成可以修改的特定发行版,我还没有找到它。 谢谢,这些参数实际上并没有完全定义一个分布。为此,您需要一个密度或等效的分布函数。正如@David和@Carl在上面所写的,有几个包专门用于生成不同的分布,例如 如果您对该理论感兴趣(如何使用给定参数绘制适合特定分布的数字样本),则只需寻找适当的公式,例如,参见,并使用提供的参数组成一个简单的质量体系,以计算比例和形状 请
谢谢,这些参数实际上并没有完全定义一个分布。为此,您需要一个密度或等效的分布函数。正如@David和@Carl在上面所写的,有几个包专门用于生成不同的分布,例如 如果您对该理论感兴趣(如何使用给定参数绘制适合特定分布的数字样本),则只需寻找适当的公式,例如,参见,并使用提供的参数组成一个简单的质量体系,以计算比例和形状
请参阅一个具体示例,其中我根据平均值和标准偏差计算了所需beta分布的alpha和beta参数。SuppDists包中有一个Johnson分布。Johnson会给你一个匹配矩或分位数的分布。其他人的评论是正确的,4分钟并不是一个分配。但约翰逊肯定会尝试 下面是一个将Johnson拟合到某些样本数据的示例:
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")
这将产生以下结果:
有人知道为什么约翰逊在使用瞬间健身时似乎有偏见吗 这是一个有趣的问题,并没有很好的解决方案。我认为,即使你不知道其他时刻,你也知道分布应该是什么样子。例如,它是单峰的 解决这个问题有几种不同的方法:
我同意你需要密度估计来复制任何分布。然而,如果你有数百个变量,就像蒙特卡罗模拟中的典型情况一样,你需要一个折衷方案 一种建议的方法如下:
这个问题是三年多前提出来的,所以我希望我的回答不会太晚 当知道某些时刻时,有一种方法可以唯一地识别分布。这就是最大熵法。这种方法产生的分布是一种分布,在已知的情况下,它最大限度地提高了您对分布结构的无知。任何其他也具有您指定的矩但不是MaxEnt分布的分布都会隐式地假定比您输入的结构更多的结构。最大化的函数是香农的信息熵,$s[p(x)]=-\int p(x)log p(x)dx$。知道平均值、sd、偏度和峰度,分别转化为分布的第一、第二、第三和第四矩上的约束 然后,问题是根据约束条件最大化S: 1) $\int x p(x)dx=“第一时刻”$, 2) $\int x^2 p(x)dx=“第二时刻”$, 3) ... 等等 我推荐《Harte,J.,最大熵和生态学:丰度、分布和能量学理论》(牛津大学出版社,纽约,2011年)一书 以下是试图在R中实现此功能的链接:
一个解决方案可能是PearsonDS库。它允许您结合使用前四个矩和峰度>偏度^2+1的限制 要从该分布生成10个随机值,请尝试:
library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
库(“PearsonDS”)
矩熵方法是一个好主意,但是如果你有数据样本,与仅使用矩相比,你使用了更多的信息!因此,瞬间拟合通常不太稳定。如果你没有关于分布的更多信息,那么熵是一个好概念,但是如果你有更多信息,例如关于支持,那么就使用它!如果您的数据是倾斜的和正的,那么使用对数正态模型是一个好主意。如果你也知道上尾翼是有限的,那么不要使用对数正态分布,但可能使用4参数贝塔分布。如果对支撑或尾部特征一无所知,那么可能可以使用缩放和移位对数正态模型。如果您需要更多关于峰度的灵活性,例如,带有缩放+移位的logT通常是好的。如果您知道拟合应接近正常值,这也会有所帮助,如果是这种情况,请使用包含nor的模型
library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)