今日も元気にみどり本を進めていきましょう。
前回の第2章の内容を一言でまとめると、「観測データをよく見て対応する真の確率分布を仮定し、そのパラメータを推定する」というお話でした。その流れは第3章も基本的に同じです。
ただし、第2章では平均種子数は全個体で共通だと仮定していましたが、第3章では個体ごとに(説明変数の影響で)が異なると仮定して話を進めていきます。
では早速、例題を見ていきましょう。今日は第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)
# 箱ひげ図 sns.boxplot(x='f', y='y', data=df)
# 相関の強さのヒートマップ sns.heatmap(df.corr(), square=True, annot=True)
ここまでで掴めた特徴
統計量から考えられること
- 種子数:
- 非負の整数(離散値)
- 区間[2, 15]
- 平均と分散がまあまあ近い
- 体サイズ:
- 正の実数(連続値)
- 区間[7.19, 12.4]
- 分散は小さい
- 施肥処理の有無 (Tが施肥処理有り):
- 因子(カテゴリ)
- 各カテゴリの要素数は均等
グラフから考えられること
- (散布図とヒートマップより)サイズが増加するにつれて種子数も増加する(弱い相関有り)
- (箱ひげ図より)肥料の効果は無さそう
こんなところでしょうか。
今日はここまでにしましょう。次回はここまでで掴めた特徴を考慮しながら統計モデルを作っていきます。
*1:肥料を施す処理
現象を数理モデルで表現・説明するのに慣れていない人のために、章ごとに異なる例題を解決していく過程を通して、統計モデルの基本となる考えかたを説明する。前半では、応用範囲のひろい統計モデルのひとつである一般化線形モデルの基礎を、後半では、実際のデータ解析に使えるように、それらをベイズ統計モデル化する方法を説明する。
コメント