【Python】緑本こと『データ解析のための統計モデリング入門』を実装していく【第3章その1】

今日も元気にみどり本を進めていきましょう。

前回の第2章の内容を一言でまとめると、「観測データをよく見て対応する真の確率分布を仮定し、そのパラメータを推定する」というお話でした。その流れは第3章も基本的に同じです。

ただし、第2章では平均種子数 \lambdaは全個体で共通だと仮定していましたが、第3章では個体ごとに(説明変数の影響で) \lambdaが異なると仮定して話を進めていきます。

では早速、例題を見ていきましょう。今日は第3章で扱うデータを眺めていきます。


例題:個体ごとに平均種子数が異なる場合の統計モデリング

目標:ある架空植物100個体それぞれの種子数を統計モデルで表す。

  • 各個体のサイズと種子数の関係
  • 施肥処理*1の有無の種子数の関係

を調べる

1. データ読み込み

import math
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from scipy.stats import poisson
%matplotlib inline

ある架空植物100個体についての種子数データ(http://hosho.ees.hokudai.ac.jp/~kubo/stat/iwanamibook/fig/poisson/data3a.csv

df = pd.read_csv('data/data3a.csv')
df.head()
y x f
0 6 8.31 C
1 6 9.44 C
2 6 9.50 C
3 12 9.07 C
4 10 10.16 C

2. データ可視化

# 統計量確認
df.describe()
y x
count 100.000000 100.000000
mean 7.830000 10.089100
std 2.624881 1.008049
min 2.000000 7.190000
25% 6.000000 9.427500
50% 8.000000 10.155000
75% 10.000000 10.685000
max 15.000000 12.400000
# 散布図
sns.scatterplot(x='x', y='y', hue='f', data=df)

f:id:mimosom:20190512161401p:plain

# 箱ひげ図
sns.boxplot(x='f', y='y', data=df)

f:id:mimosom:20190512161436p:plain

# 相関の強さのヒートマップ
sns.heatmap(df.corr(), square=True, annot=True)

f:id:mimosom:20190512161545p:plain

ここまでで掴めた特徴

統計量から考えられること

  • 種子数 y:
    • 非負の整数(離散値)
    • 区間[2, 15]
    • 平均と分散がまあまあ近い
  • 体サイズ x:
    • 正の実数(連続値)
    • 区間[7.19, 12.4]
    • 分散は小さい
  • 施肥処理の有無 f (Tが施肥処理有り):
    • 因子(カテゴリ)
    • 各カテゴリの要素数は均等

グラフから考えられること

  • (散布図とヒートマップより)サイズ xが増加するにつれて種子数 yも増加する(弱い相関有り)
  • (箱ひげ図より)肥料の効果は無さそう

こんなところでしょうか。

今日はここまでにしましょう。次回はここまでで掴めた特徴を考慮しながら統計モデルを作っていきます。

*1:肥料を施す処理

現象を数理モデルで表現・説明するのに慣れていない人のために、章ごとに異なる例題を解決していく過程を通して、統計モデルの基本となる考えかたを説明する。前半では、応用範囲のひろい統計モデルのひとつである一般化線形モデルの基礎を、後半では、実際のデータ解析に使えるように、それらをベイズ統計モデル化する方法を説明する。

コメント