ホーム » コードあり » 2015 Q4(1)

投稿一覧

2015 Q4(1)

観測度数と確率の分割表から、そうなり得る確率を求めました。

 

コード

与えられた観測度数表から仮にセル確率を計算し、その観測度数が多項分布に基づいて得られる確率を計算をします。

# 2015 Q4(1)  2024.12.17

import numpy as np
import pandas as pd
from scipy.stats import multinomial

# 観測度数表 (与えられたデータ)
observed_counts = np.array([[1520, 266, 124, 66],
                            [234, 1512, 432, 78],
                            [117, 362, 1772, 205],
                            [36, 82, 179, 492]])

# 総サンプルサイズ N の計算
N = observed_counts.sum()

# セル確率 pij の計算 (観測度数を総数で割る)
p_ij = observed_counts / N

# 観測度数とセル確率
row_labels = ["Highest", "Second", "Third", "Lowest"]
col_labels = ["Highest", "Second", "Third", "Lowest"]

# 観測度数
df_counts = pd.DataFrame(observed_counts, columns=col_labels, index=row_labels)
# セル確率
df_probs = pd.DataFrame(np.round(p_ij, 6), columns=col_labels, index=row_labels)

print("観測度数表 (x_ij):")
print(df_counts)

print("\nセル確率表 (p_ij):")
print(df_probs)

# 観測度数が得られる確率を計算
x_flat = observed_counts.flatten()
p_flat = p_ij.flatten()

# 多項分布の確率を計算
prob = multinomial.pmf(x_flat, n=N, p=p_flat)
print(f"\nこの観測度数表が得られる確率: {prob:.10e}")
観測度数表 (x_ij):
         Highest  Second  Third  Lowest
Highest     1520     266    124      66
Second       234    1512    432      78
Third        117     362   1772     205
Lowest        36      82    179     492

セル確率表 (p_ij):
          Highest    Second     Third    Lowest
Highest  0.203290  0.035576  0.016584  0.008827
Second   0.031296  0.202220  0.057777  0.010432
Third    0.015648  0.048415  0.236993  0.027417
Lowest   0.004815  0.010967  0.023940  0.065802

この観測度数表が得られる確率: 7.0375704386e-24

得られた確率はとても小さな数字になりました。これは、特定の具体的な度数の組み合わせが発生する確率であるため小さくなります。