R:如何将一个大型数据集与多个分布相结合?
为了将实值数字(R:如何将一个大型数据集与多个分布相结合?,r,statistics,distribution,R,Statistics,Distribution,为了将实值数字(x)数据集与一个分布相匹配,我们可以使用如下质量或分布: fitdistr(x, "gamma") library( MASS ) vals = rnorm( n = 10000, mean = 0, sd = 1 ) print( summary(x_vals) ) ll_func = function(params) { log_probs = log( dnorm( x = vals, mean = params[1], sd = params[2] ))
x
)数据集与一个分布相匹配,我们可以使用如下质量或分布:
fitdistr(x, "gamma")
library( MASS )
vals = rnorm( n = 10000, mean = 0, sd = 1 )
print( summary(x_vals) )
ll_func = function(params) {
log_probs = log( dnorm( x = vals, mean = params[1], sd = params[2] ))
tot = sum(log_probs)
return(-1 * tot)
}
params = c( 0.5, 10 )
print( ll_func(params) )
res = optim( params, ll_func )
print( res$par )
或
如果我认为我的数据集应该符合gamma和t分布的总和,该怎么办
P(X) = Gamma(x) + t(x)
我能用R中的最大似然拟合来拟合混合概率分布的参数吗 对于某些参数,例如a的平均值或a的速率,存在解析表达式。对于其他参数,没有分析估计器,但可以使用来找到合理的参数估计
R中的函数通过调用函数对对数似然函数进行数值优化。如果你认为你的数据是伽马分布和t分布的混合,那么简单地做一个似然函数来描述这种混合。然后,将这些参数值传递给optim()进行优化。以下是使用此方法拟合分布的示例:
fitdistr(x, "gamma")
library( MASS )
vals = rnorm( n = 10000, mean = 0, sd = 1 )
print( summary(x_vals) )
ll_func = function(params) {
log_probs = log( dnorm( x = vals, mean = params[1], sd = params[2] ))
tot = sum(log_probs)
return(-1 * tot)
}
params = c( 0.5, 10 )
print( ll_func(params) )
res = optim( params, ll_func )
print( res$par )
在R中运行此程序会产生以下输出:
[1] "mean: 0.0223766157516646"
[1] "sd: 0.991566611447471"
这与均值=0和sd=1的初始值非常接近
不要忘记,对于两个分布的混合,您有一个额外的参数指定分布之间的相对权重。此外,要注意一次拟合大量参数。有很多你需要担心的免费参数 试试mixdist。以下是三种分布的混合示例:
我假设您的意思是(正如其他海报也假设的那样),您的分布是Gamma和t的混合(即,每个单独的点都是从Gamma或t分布中绘制的)。另一个比较棘手的选择是(如果我逐字阅读你的问题,我会认为)单个值是Gamma和t变量的和,也就是说,分布是Gamma和t的卷积。请澄清。如果是后者,我可以建议使用
distr
包的解决方案……两年多后,而不是原始海报,但我对您建议的使用distr
包的卷积解决方案非常感兴趣。