use*_*718 5 statistics r distribution
为了使实数值(x)的数据集与一个分布拟合,我们可以使用MASS,如下所示:gamma或Student t分布:
fitdistr(x, "gamma")
Run Code Online (Sandbox Code Playgroud)
要么
fitdistr(x2, "t")
Run Code Online (Sandbox Code Playgroud)
如果我认为我的数据集应该符合gamma和t分布的总和,该怎么办?
P(X) = Gamma(x) + t(x)
Run Code Online (Sandbox Code Playgroud)
我可以使用R中的最大似然拟合来拟合概率分布混合的参数吗?
对于某些参数,例如正态分布的均值或指数分布的比率,存在解析最大似然估计量。对于其他参数,没有分析估计器,但您可以使用数值分析来找到合理的参数估计值。
R 中的fitdistr ()函数通过调用optim()函数来使用对数似然函数的数值优化。如果您认为您的数据是 Gamma 和 t 分布的混合,那么只需创建一个描述这种混合的似然函数即可。然后,将这些参数值传递给 optim() 进行优化。以下是使用此方法拟合分布的示例:
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 )
Run Code Online (Sandbox Code Playgroud)
在 R 中运行该程序会产生以下输出:
[1] "mean: 0.0223766157516646"
[1] "sd: 0.991566611447471"
Run Code Online (Sandbox Code Playgroud)
这非常接近平均值 = 0 和 sd = 1 的初始值。
不要忘记,对于两种分布的混合,您有一个额外的参数来指定分布之间的相对权重。另外,一次拟合大量参数时要小心。由于有大量的自由参数,您需要担心过度拟合。