• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

最尤推定

date: 2017-04-23 excerpt: 最尤推定量(法)について

tag: 統計最尤推定statistics


最尤推定量(法)について

概要

  • 最尤推定量とは頻度論的手法で観測したデータから確率を求める方法である

尤度関数を用いた導出

  • 確率密度関数の求めたいパラメータを\(\theta\)としてこれを対数を取る
  • 対数をとった後に微分して鞍点を計算し\(\theta\)を求める

母集団のパラメータを\(\theta\)とすると、パラメータ\(\theta\)である確率は以下のようになる \(\begin{equation*} \Pr(x_1, \ldots, x_n \,|\, \theta) = f(x_1, \ldots, x_n \,|\, \theta) \end{equation*}\)

この時、パラメータ\(\theta\)の尤度関数は以下のように定義できる \(\begin{equation*} L(\theta) = f(x_1, \ldots, x_n \,|\, \theta) \end{equation*}\)

対数をとり、\(\theta\)について微分した式の解により最大となる点がわかる \(\begin{equation*} \frac{d}{d \theta} \ln L(\theta) = 0 \end{equation*}\)

サンプルの質と尤度

  • サンプル数が大きければ\(\theta\)の信頼度が高くなる
  • 例えば、コインを10回投げて2回表が出る信頼度と、100回投げて20回表が出る信頼度は異なる
from scipy.special import comb 
import numpy as np
import matplotlib.pyplot as plt
from functools import reduce
 
def binom(n: int, k: int, p: np.array) -> np.array:
    return int(comb(n, k)) * p**k * (1 - p)**(n - k)
 
ns = [10, 100]
ks = [np.array([2, 5, 8]), np.array([20, 50, 80])]

p = np.linspace(0, 1, 100) 
fig, axs = plt.subplots(1, 2, figsize=(9.6, 3.6))

for ax, n, k in zip(axs, ns, ks):
    ax.set_title("n={}".format(n))
 
    for t in k:
        p_mle = t / n
        prob = binom(n, t, p) # 二項分布でN回中、t回表が出るが、確率がpの時
        ax.plot(p, prob, c='navy')
        ax.plot((p_mle, p_mle), (0, binom(n, t, p_mle)), c='gray', linestyle='dashed')
 
        ax.set_xlim(0, 1)
        ax.set_xticks(np.arange(0, 1.1, 0.1))
 
plt.show()

Google Colab

  • 最尤推定-サンプルの質と尤度-example

参考

  • 尤度・最尤推定/TauStation
  • 最尤推定量とは?初めての人にもわかる解説


統計最尤推定statistics Share Tweet