这是个复杂的问题,没有完美的答案,
对于给定的数据,有两种设置概率分布函数参数的方法:
在我的经验中,最近几年最大似然是首选的,尽管这可能不是每个领域的情况。
这是如何估算R中参数的具体示例。考虑从高斯分布生成的一组随机点,它均值为0,标准差为1:x = rnorm( n = 100, mean = 0, sd = 1 )
在R中,有一个标准库使这非常简单:library(MASS)
params = fitdistr( x,"normal" )
print( params )
这给了我以下输出:mean sd
-0.17922360 1.01636446
( 0.10163645) ( 0.07186782)
从你的参数中提取日志可能性,如下所示:print( params$loglik )
[1] -139.5772
当对数可能性接近0时,可能性最大,因此负数越多,数据拟合效果越差。
使用这样的计算工具,可以很容易地估计分布的参数,请考虑以下示例:x = x[ x >= 0 ]
distributions = c("normal","exponential")
for ( dist in distributions ) {
print( paste("fitting parameters for", dist ) )
params = fitdistr( x, dist )
print( params )
print( summary( params ) )
print( params$loglik )
}
指数分布不产生负数,所以我在第一行中删除了它们,输出(这是随机)如下所示:[1]"fitting parameters for normal"
mean sd
0.72021836 0.54079027
(0.07647929) (0.05407903)
Length Class Mode
estimate 2 -none- numeric
sd 2 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -40.21074
[1]"fitting parameters for exponential"
rate
1.388468
(0.196359)
Length Class Mode
estimate 1 -none- numeric
sd 1 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -33.58996
克服参数估计中一些问题的一个技巧是生成大量数据,并将某些数据留给交叉验证。