已知单值计数的二项分布样本中p的极大似然估计求解
没问题,咱们来一步步拆解这个场景下的极大似然估计推导过程——当你没法拿到全部样本的具体取值,只知道M个独立样本里有m个恰好取到k值,而每个样本都服从参数为N(已知)、p(未知)的二项分布时,怎么求p的极大似然估计量。
步骤1:明确单个样本的概率
首先,对于服从Binomial(N, p)的随机变量X,它取到k值的概率是:
P(X=k) = \binom{N}{k} p^k (1-p)^{N-k}
这里\binom{N}{k}是组合数(从N个元素里选k个的组合数),咱们把这个概率简记为q(p),也就是q(p) = \binom{N}{k} p^k (1-p)^{N-k}。
步骤2:构造似然函数
现在我们有M个独立样本,其中恰好m个样本的取值是k,剩下的M-m个样本取值不是k。这个事件的似然函数(也就是给定p时,观测到这个结果的概率)是:
L(p) = \binom{M}{m} [q(p)]^m [1 - q(p)]^{M - m}
这里的\binom{M}{m}是从M个样本里选m个作为取值为k的样本的组合数,它是一个与p无关的常数,所以在求极大值的时候可以忽略,不影响最终的估计结果。
步骤3:取对数似然并求导
为了简化计算,我们对似然函数取自然对数(对数变换不会改变函数的极值点位置):
\ln L(p) = \ln\binom{M}{m} + m \ln q(p) + (M - m) \ln(1 - q(p))
接下来对p求导,并令导数等于0(极大似然估计的核心就是找到让似然函数最大的p值,此时导数为0):
先计算q(p)对p的导数:
\frac{d q(p)}{dp} = q(p) \left( \frac{k}{p} - \frac{N - k}{1 - p} \right)
把这个代入对数似然的导数,整理后可以得到关键方程:
\frac{m}{q(p)} = \frac{M - m}{1 - q(p)}
进一步化简后得到:
q(p) = \frac{m}{M}
步骤4:求解p的估计量
把q(p)的定义代回这个等式,就得到关于\hat{p}(p的极大似然估计量)的方程:
\binom{N}{k} \hat{p}^k (1-\hat{p})^{N-k} = \frac{m}{M}
遗憾的是,这个方程没有解析解(除非是一些极端情况,比如k=0或k=N),所以我们需要用数值方法来求解,比如常用的牛顿-拉夫逊法(Newton-Raphson Method):
- 先给p一个初始猜测值(比如
\hat{p}_0 = k/N,也就是二项分布的均值对应的p) - 然后迭代更新
\hat{p}_{t+1} = \hat{p}_t - \frac{f(\hat{p}_t)}{f'(\hat{p}_t)},其中f(p) = \binom{N}{k} p^k (1-p)^{N-k} - m/M,f'(p)是f(p)的导数 - 直到迭代结果收敛到足够精确的数值为止
举个实际例子
比如已知N=10,M=100个样本里有m=20个取到k=3,那么方程就是:
120 \hat{p}^3 (1-\hat{p})^7 = 0.2
通过数值迭代,我们可以求出\hat{p}的近似值(大概在0.3左右,你可以用Python的scipy.optimize.root函数来快速计算)。
内容的提问来源于stack exchange,提问作者Cindy Almighty

