這是個複雜的問題,沒有完美的答案,
對於給定的數據,有兩種設置概率分佈函數參數的方法:
在我的經驗中,最近幾年最大似然是首選的,儘管這可能不是每個領域的情況。
這是如何估算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
克服參數估計中一些問題的一個技巧是生成大量數據,並將某些數據留給交叉驗證。