这是一个复杂的问题,没有完美的答案。 我试着给你一个主要概念的概要,指出对你有用的阅读方向。
假设您有一组一维数据,并有一组有限的概率分布函数。 我觉得这些数据有可能是从那里产生的。 可以单独研究每个分布,并根据数据找到合适的参数。
对于特定数据的概率分布函数,有两种方法设置参数。
根据我的经验,近年来,最大似然法可能在任何领域都不是,但却是首选。
下面是如何估计r的参数的具体例子。 考虑从平均值为0、标准偏差为1的yxdlf分布中生成的一组随机点。 x=rnorm(n=100,mean=0,sd=1) )。
假设您知道数据是使用yxdlf流程生成的,然后忘记了(或者永远不知道! (yxdlf函数的参数。 我想使用这些数据合理估计平均值和标准偏差。 r有一个标准库使这一点变得简单。 库(mass )。
Params=fitdistr(x,' normal ' ) )。
是打印(参数)
这给了我以下输出: mean sd
-0.17922360 1.01636446
(0.10163645 ) ) 0.07186782 )。
它们非常接近正确答案,括号内的数字是参数周围的置信区间。 请记住,每次生成一组新点时,都会得到估计的新答案。
在数学上,这是利用最大似然估计yxdlf分布的平均和标准偏差。 似然是指“数据给出参数值的概率”。 最大似然是“使生成输入数据的概率最大化的参数值”。 最大似然估计是用于找出使生成输入数据的概率最大化的参数值的算法,根据分布的不同,numerical optimization算法也有可能相关。 在r中,大部分工作由fitdistr完成,有时会调用optim。
可以从参数中提取对数似然。 以下是print(Params$loglik )
[1] -139.5772
使用对数似然比使用似然来避免舍入误差更常见。 要估计合并数据的概率,必须乘以小于1的所有概率。 对于组数据,联合概率也很快接近0,加上数据的对数概率等于乘以概率。 对数似然接近0时,似然最大化,因此更多的负数不适合数据。
有了这样的计算工具,就可以很容易地推算出任何分布的参数。 举一个例子,x=x[ x=0 ]
distributions=c('normal ',' exponential ' ) )。
分散(for ) {
打印(paste (' fittingparametersfor ',dist ) )
Params=fitdistr(x,dist ) ) ) ) ) ) ) ) ) )。
是打印(参数)
打印(概要(params ) )
打印(params $ log lik ) )。
}
指数分布不会产生负数,所以我在第一行删除了它们。 输出(随机)如下所示。 (1) 1(fittingparametersfornormal。
最大SD
0.72021836 0.54079027
(0.07647929 ) ) 0.05407903 )。
长类模式
estimate 2 -none- numeric
sd 2 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -40.21074
[1] ' fittingparametersforexponential '
速率
1.388468
(0.196359 )
长类模式
estimate 1 -none- numeric
sd 1 -none- numeric
n 1 -none- numeric
loglik 1 -none- numeric
[1] -33.58996
指数分布不需要为负数分配概率密度,因此与正态分布相比,实际上生成这些数据的可能性稍高。
如果试图使数据适合更多的分布,所有这些估计问题都会恶化。 与具有较少参数的分布相比,具有更多参数的分布更适合数据,因为具有更多参数的分布更灵活。 另外,部分分布是其他分布的特例(例如,Exponential是伽马特例)。 因此,使用先验知识将选取模型约束到所有可能模型的子集是非常常见的。
解决参数估计若干问题的一个技巧是生成大量数据,并将一些数据保留在cross-validation中。 根据你的pa适用性参数交叉检查数据,在估计过程中保留一些数据,用泄露的数据测量每个模型的可能性。