見出し画像

「入門はじめての統計解析」をPythonで写経 Vol.14 ~ 5章「はじめてのノンパラメトリック検定」①ウィルコクスンの順位和検定

5章「はじめてのノンパラメトリック検定」

書籍の著者 石村貞夫 先生


この記事は、書籍「入門はじめての統計解析」5章「はじめてのノンパラメトリック検定」の Python写経活動 を取り扱います。

書籍の図・表・計算を淡々とPython化する写経シリーズです。
5章の統計的検定は「ノンパラメトリック」。
母集団の確率分布を仮定しない統計的検定です。

この記事は ウィルコクスンの順位和検定 に取り組みます。
ChatGPTの活用も継続してまいります!

では書籍を開いて統計解析の旅に出発です🚀

ノンアルコール飲料のイラスト:「いらすとや」さんより

はじめに


このブログシリーズは、書籍「入門はじめての統計解析」(東京図書、「テキスト」と呼びます)の Python 写経を通じて得た「統計解析の楽しさ」をご紹介します。

書籍の紹介と引用表記はリンク先の記事に掲載しています。

5章 はじめてのノンパラメトリック検定


この記事は5章の以下のSectionを取り扱います。

5.2 ウィルコクスンの順位和検定

記事に用いるデータは、テキストに掲載されたデータそのものを引用しています。
データ件数の少ないものはコード上でデータを登録し、データ件数の多いものはCSVファイル化してデータを読み込みしています。

5章で用いるライブラリをインポートします。

### インポート

# 数値計算
import collections      # python標準ライブラリ
import itertools        # python標準ライブラリ
import math             # python標準ライブラリ
import numpy as np
import pandas as pd

# 統計
import scipy.stats as stats
import pingouin as pg
from statsmodels.stats.descriptivestats import sign_test  # 符号検定

# 描画
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family'] = 'Meiryo'

イントロダクション~ノンパラメトリック検定とは

ChatGPTと相談して作り上げた「やさしいイントロ」です。


🔷 分析したい。でも、このデータで本当にいいの?

「このデータ、なんか正規分布っぽくないんだよな…」
「外れ値があるけど、これって無視していいのかな?」
「そもそもこの値、平均とか計算してよかったっけ?」

統計を使ってデータを比べたい、調べたい──そう思ったとき、
ときどきふと、「このデータって本当に“あの検定”でいいの?」と立ち止まってしまうことがあります。
そんなときに助けになってくれるのが、ノンパラメトリック検定です。

🔷 ノンパラメトリック検定とは?

ノンパラメトリック検定は、文字通り「パラメトリック(=母集団分布のパラメータを前提とする)」ではない検定の総称です。

$${t}$$ 検定などの「パラメトリック検定」では、「データが正規分布に従っている」「分散が等しい」などの仮定が必要になります。
これらの仮定が成り立つことで、検定統計量が理論的な分布に従い、$${p}$$ 値も正しく解釈できます。

🔷 でも現実のデータって、そんなに都合よくできてない

たとえば──

  • 社内アンケートで「働きやすさ」を5段階評価してもらったけど、平均スコアで比較していいのか迷う

  • 少人数の研修前後で自己評価の変化を分析したいけど、正規性が怪しい

  • 新旧2つの広告バナーの反応を◯✖で集計したけど、どちらが目立ったかはどう判断する?

このように、「何かしら比べたい」「傾向を見たい」と思っても、
データのかたちがきれいな“正規分布”から外れていることはよくあります。

🔷 ノンパラメトリック検定の強み

そんなときに頼りになるのがノンパラメトリック検定です。
この検定では、平均や分散といったパラメータを直接使うのではなく、データの大小関係や順位情報に注目して、差や関係を検証します。

  • 正規性を仮定しない

  • 外れ値に強い

  • 順序やカテゴリといった情報だけでも使える

つまり、データの性質に無理をさせず、“そのまま受け止めて”検定できるというスタンスです。

🔷 弱点もあるけど、それを補って余りある柔らかさ

もちろん、ノンパラメトリック検定にも弱点はあります。
たとえば、パラメトリック検定と比べて“検出力”(差を見つける敏感さ)がやや劣ることもあります。
でもだからこそ、
「仮定に頼りすぎず、柔らかく、でもたしかに判断したい」
というときには、ノンパラメトリック検定がとても心強い味方になります。

🔷 これから始まる“やさしく確かめる”検定の世界へ

これからの記事では、ノンパラメトリック検定の代表的な方法たちを、ひとつひとつ、紹介していきます。
データと向き合う視点を少しゆるやかに、でも確かにしてくれる──
“やさしく、でもしっかり確かめる”検定の世界へ、一緒に踏み出していきましょう。

🍀 ノンパラメトリック検定の特徴まとめ

$$
\begin{array}{l:l}
良いところ & 使えるシーン \\
\hline
\\
分布の仮定が不要 & 正規性が怪しいとき \\
外れ値に強い & 極端な値に振り回されたくないとき \\
順位・○×でもOK & 平均では語れないデータのとき \\
\end{array}
$$


Section 5.2 ウィルコクスンの順位和検定

■ ウォーミングアップ
ウィルコクスンの順位和検定のイントロもChatGPTと一緒に創りました!


パラメトリックな検定にちょっと不安を感じるとき──
「分布はどうなってるんだろう?」「このデータ、平均を比べてよかったっけ?」

そんなときに使えるノンパラメトリック検定のひとつが、ウィルコクスンの順位和検定です。

この検定では、数値そのものではなく“順位”に注目して、2つのグループを比べます。
どちらのグループが“より大きい傾向にあるか”を、分布に依存せずやさしく確かめる方法です。

たとえば、2つの研修プログラムの効果を5段階評価で比べたいとき。
点数の平均ではなく、「どちらのほうが全体として評価が高いか」を見たいときにぴったりです。

平均値では見えにくい傾向を、やさしくすくい取る。
それが、ウィルコクスンの順位和検定です。


■ ウィルコクスンの順位和検定の仕組み
ウィルコクスンの順位和検定はざっくり、パラメトリック検定「2つの母平均の差の検定」と対応するノンパラメトリック検定です。

ウィルコクスンの順位和検定は次の3点の特徴を持っています。

  • 2つのグループの分布の位置「中央値」にズレがあるかどうかを検定します。

  • 2つのグループ全体でデータの値の「順位」を設定し、1つのグループの順位の和(合計)を検定統計量にします。

  • 「順位和の分布」に基づいて棄却域を定めます。
    順位和の分布は、1つのグループが取り得る順位の組み合わせに基づく「順位和の度数分布」です。

1点目の「中央値のズレ」のイメージです。
グループ1 $${G_1}$$ の中央値はグループ2 $${G_2}$$ の中央値より下側(左側)にズレています。

続いて「順位和の仕組み」を見てみましょう。
2つのグループが次のようなデータであるとします。

2つのグループ全体で順位付けしましょう。
データを小さい順に並べて順位を付与します。

2つのグループに分かれている元の表に順位列を付け足しましょう。
そして1つのグループの順位の和をとります。

グループ1の順位の和は $${14}$$ です。
順位和が検定統計量 $${W}$$ ですので、検定統計量 $${W=14}$$ です。

3点目の順位和の分布は後段でご説明します!

■ ウィルコクスンの順位和検定:検定統計量の公式 p.219
検定統計量の公式をテキストを一部改変してお借りします。

ウィルコクソンの順位和の検定統計量 $${W}$$は、グループ $${G_1}$$ の標本サイズ $${N_1}$$ がグループ $${G_2}$$ の標本サイズ $${N_2}$$ より小さいとして、

$${G_1}$$の順位和 $${W = r_{11} + r_{12} + \cdots + r_{1N_{1}}}$$

とします。

$${r_{1n}}$$ は グループ $${G_1}$$ の $${N_1}$$ 個のデータ $${x_{1n}}$$($${n=1, \ldots, N_1}$$)の順位です。

留意事項があります。
データに同じ値が存在する場合、同順位(タイ)が発生します。
テキストの公式はこのタイに対応していません。
テキストは「同順位があるときは計算が複雑になってしまうので、SPSSのような統計解析ソフトを使うと便利です」としています。

この記事も「タイは未対応」で進めます。

仮説は次のとおりです。

帰無仮説 $${H_0}$$:
 2つのグループ $${G_1, G_2}$$ の分布の位置は同じ
対立仮説 $${H_1}$$:
① 両側検定
 $${G_1}$$ の分布の位置は $${G_2}$$ の分布の位置とずれている
② 片側検定(下側)
 $${G_1}$$ の分布の位置は $${G_2}$$ の分布の位置より下側(左側)にずれている
③ 片側検定(上側)
 $${G_1}$$ の分布の位置は $${G_2}$$ の分布の位置より上側(右側)にずれている

テキストの記述を一部改変して引用

なお棄却域は「ウィルコクスンの順位和検定(両側検定)の数表」より求めます(テキスト p.293 の数表 6 参照)。
検定の都度、「数表」をめくって棄却域を取得するのは大変だと感じ…
自作関数で算出するようにしました。

■ ウィルコクスンの順位和検定関数の実装

公式やWebサイトの情報に基づいて「ウィルコクスンの順位和検定関数」を定義します。
一部の計算に scipy.stats を利用します。
あわせて順位和の分布の描画関数を定義します。

### ウィルコクソンの順位和検定関数 p.219~227 ★タイ未対応

# ウィルコクソンの順位和検定関数
def wilcoxon_ranksum_test(list1, list2, alpha=0.05, alternative='two-sided'):

    ### データの前処理
    # 標本サイズの小さい方をG1に割り当てる ※テキストの計算方法に従っている
    if len(list1) <= len(list2):
        G1, G2 = list1, list2
    else:
        G1, G2 = list2, list1
    # G1, G2の標本サイズの算出
    G1_n, G2_n = len(G1), len(G2)

    ### G1のW検定統計量の算出 ※順位算出はscipy.stats利用
    W = sum(stats.rankdata([*G1, *G2]).tolist()[:len(G1)])
    
    ### 順位和の度数と確率の算出
    # G1が取りうる順位の組み合わせを作成して、各組み合わせの順位和をリスト化
    rank_sum_list = [
        sum(x) for x in
        list(itertools.combinations(list(range(1, G1_n + G2_n + 1)), G1_n))]
    # 順位和の度数をカウントした辞書の作成
    rank_dict = collections.Counter(rank_sum_list)
    # 順位和の取り出し
    rank_sum_keys = [key for key in rank_dict.keys()]
    # 順位和の度数の取り出し
    rank_sum_values = [value for value in rank_dict.values()]
    # 順位和の確率の算出
    rank_sum_dist = [value / sum(rank_sum_values) for value in rank_sum_values]

    ### W検定統計量の確率とp値の算出
    # 下側の確率の算出
    prob_forward = sum(rank_sum_dist[:rank_sum_keys.index(W) + 1])
    # 上側の確率の算出
    prob_reverse = sum(rank_sum_dist[::-1][:rank_sum_keys[::-1].index(W) + 1])
    # 下側の確率と上側の確率のうち小さい方を確率とする
    prob = prob_forward if prob_forward < prob_reverse else prob_reverse
    # p値の算出: 両側検定のときに2倍する
    p_val = prob * 2 if alternative=='two-sided' else prob

    ### 有意水準に対応する数表=棄却限界値の算出
    # 順位和の確率の個数の取得
    length = len(rank_sum_dist)
    # 棄却域のしきい値の設定:両側検定のとき α/2、片側検定のとき α
    thres = alpha/2 if alternative=='two-sided' else alpha
    # 下側の累積確率の算出
    cumsum_forward = [sum(rank_sum_dist[:i+1]) for i in range(length)]
    # 下側の数表上の値の取得
    num_lower = rank_sum_keys[
        cumsum_forward.index(max([x for x in cumsum_forward if x <= thres]))]
    # 上側の累積確率の算出
    cumsum_reverse = [sum(rank_sum_dist[:i+1]) for i in range(length)]
    # 上側の数表の値の取得
    num_upper = rank_sum_keys[::-1][
        cumsum_reverse.index(max([x for x in cumsum_reverse if x <= thres]))]
    # 有意水準に対応する数表=棄却限界値の格納
    match alternative:
        case 'two-sided':  # 両側検定の場合
            num_table = (num_lower, num_upper)
        case 'less':       # 片側検定(下側)の場合
            num_table = num_lower
        case 'greater':    # 片側検定(上側)の場合
            num_table = num_upper

    ## 戻り値:辞書型
    # W:検定統計量W、p_value:p値、alpha:α、probability:検定統計量Wの確率、
    # num_table:数表の値=棄却限界値、alternative:両側検定等、
    # dist_table:順位和の分布(辞書型)
    return {'W': W, 'p_value': p_val, 'alpha': alpha, 'probability': prob,
            'num_table': num_table, 'alternative': alternative,
            'dist_table': {'順位和': rank_sum_keys,
                           '度数'  : rank_sum_values,
                           '確率'  : rank_sum_dist}}


# ウィルコクソンの順位和検定の可視化関数 ※pandas利用
def plot_wilcoxon_ranksum_test(result):
    
    ## ウィルコクソンの順位和検定関数の結果を取り出し
    dist_table = pd.DataFrame(result['dist_table'])  # 順位和の確率分布
    alternative = result['alternative']              # 両側検定・片側検定
    alpha = result['alpha']                          # 有意水準
    p_val = result['p_value']                        # p値
    
    ## 両側検定・片側検定ごとに棄却域をhueに設定
    match alternative:
        case 'less':       # 片側検定(下側)
            hue = dist_table['確率'].cumsum() <= alpha
        case 'greater':    # 片側検定(上側)
            hue = (dist_table['確率'][::-1].cumsum() <= alpha)[::-1]
        case 'two-sided':  # 両側検定
            hue_left = (dist_table['確率'].cumsum() <= alpha/2)
            hue_right = (dist_table['確率'][::-1].cumsum() <= alpha/2)[::-1]
            hue = hue_left | hue_right

    ## 描画処理
    # 描画領域の設定
    plt.figure(figsize=(10, 3))
    # 順位和と確率の棒グラフ(青)の描画
    sns.barplot(data=dist_table, x='順位和', y='確率', width=1,
                color='tab:blue', ec='white', alpha=0.5, legend=False)
    # 棄却域の棒グラフ(赤)の描画
    sns.barplot(data=dist_table[hue], x='順位和', y='確率', width=1, 
                color='tomato', ec='white', legend=False)
    # Wの確率の垂直点線(赤)の描画
    plt.axvline(dist_table[dist_table['順位和']==result['W']].index[0],
                color='tab:red', ls='--',
                label=f"W={result['W']}, 確率={result['probability']:.4f}")
    # 修飾: タイトル(有意水準とp値を表示)
    plt.title(f'ウィルコクソンの順位和検定\n{alternative}, '
              f'α={alpha}, p値={p_val:.4f}')
    # 修飾: x軸目盛りを調整(目盛りが30超のとき間引き表示する)
    plt.xticks(list(range(0, len(dist_table)+1, int(len(dist_table)/30)+1)))
    # 修飾: 凡例表示
    plt.legend()
    plt.show()

ウィルコクソンの順位和検定関数の戻り値を簡単に説明します。

  • W:検定統計量 $${W}$$

  • p_value:$${p}$$ 値
    帰無仮説のもとで検定統計量が実現値になる確率
    $${p}$$ 値が有意水準以下(または未満)のとき、帰無仮説を棄却できる

  • alpha:有意水準 $${\alpha}$$

  • probability:検定統計量 $${W}$$ の確率

  • num_table:数表の値=棄却限界値
    帰無仮説を棄却できる検定統計量 $${W}$$ のしきい値
    $${W}$$ の実現値が棄却限界値の外のとき、帰無仮説を棄却できる

  • alternative:
    両側検定 two-sided、片側検定(下側) less、片側検定(上側) greater

  • dist_table:順位和の分布(辞書型)

■ ウィルコクスンの順位和の検定(片側検定)例題 p.223
p.223 例)の2つのグループの赤血球の数について、グループ1の方が少ないかどうかをウィルコクスンの順位和検定で調べます。

仮説は次のとおりです。

  • 帰無仮説 $${H_0}$$
    $${G_1}$$ と $${G_2}$$ の分布の位置は同じ

  • 対立仮説 $${H_1}$$
    $${G_1}$$ の分布の位置は $${G_2}$$ の分布の位置より下側(左側)にずれている

① 自作関数で検定実行
データを設定して箱ひげ図で可視化します。

### ウィルコクソンの順位和検定 赤血球の数 p.223

# データ
list1 = [4.86, 4.72, 5.17, 4.62]
list2 = [5.01, 4.94, 5.23, 5.18, 5.29]

# 箱ひげ図の描画
sns.boxplot(dict(病気=list1, 健康=list2), fill=False)
plt.ylabel('赤血球の数');

【実行結果】
箱ひげ図で比べると、グループ1(病気)の方が少ないように見えます。

有意水準 $${5\%}$$、片側検定(下側)でウィルコクスンの順位和検定を実行します。

# ウィルコクソンの順位和検定 関数利用

# 検定の実行
result = wilcoxon_ranksum_test(list1, list2, alternative='less')

# 結果の表示
print(f"W: {result['W']}, p_value: {result['p_value']:.5f}")
print(f"有意水準{result['alpha']:.2%}の棄却限界値 {result['num_table']}")

【実行結果】
検定統計量 $${W=12}$$ は、棄却限界値$${12}$$ と同じである(テキストによると棄却域に入る)ので、有意水準 $${5\%}$$ で帰無仮説は棄却されます。

つまり、グループ1の分布はグループ2の分布より下側(左側)にずれていると言える、グループ1の方が赤血球の数は少ないと言える、です。

② 順位和の分布の確認

# ウィルコクソンの順位和の分布 p.226 表5.2.7
dist_table = pd.DataFrame(result['dist_table'])
dist_table.round(3).astype(str).T

【実行結果】

分布表の見方です。

◆ 順位和

インデックス0の順位和 $${10}$$ は、グループ1の順位が最も小さい組み合わせ $${[1, 2, 3, 4]}$$ の和です。
インデックス20(末尾)の順位和 $${30}$$ は、グループ1とグループ2を合算した標本サイズ $${9}$$ で取りうる順位が最も大きい組み合わせ $${[6, 7, 8, 9]}$$ の和です。

◆ 度数

グループ1とグループ2を合算して取りうる順位は $${1, 2, \ldots, 8, 9}$$ です。
この取りうる順位からグループ1の標本サイズ $${4}$$ 個の組み合わせを全て洗い出して順位和を計算します。
順位和の値で度数をとったものが表に掲載されています。
例えば、順位和が $${16}$$ になる組み合わせは $${8}$$ 個です。

◆ 確率

度数の割合です。
例えば、順位和が $${16}$$ になる確率(割合)は $${6.3\%}$$ です。

両端の確率の累積値(累積確率)が棄却域の計算に用いられます。

③ 順位和の分布の可視化
順位和の分布を可視化して棄却される様子を見てみましょう。

# ウィルコクソンの順位和の分布と片側検定の棄却域 p.225 図5.2.10
plot_wilcoxon_ranksum_test(result)

【実行結果】
順位和の分布は左右対称になっていました!
左側の赤い領域が有意水準 $${5\%}$$ の棄却域です。
赤い点線が検定統計量 $${W}$$ です。

$${W}$$ が棄却域に入っているので、帰無仮説は棄却されます。

④ scipy.stats でウィルコクスンの順位和検定を
scipy.stats の ranksums() でウィルコクスンの順位和検定を行えます。
計算の前提として、標本が大きいものとして「正規分布近似」を用いていることに留意しましょう。

# scipy.stats利用 ※正規分布近似を用いているので結果は異なる
stats.ranksums(list1, list2, alternative='less')

【実行結果】
検定統計量 $${W}$$ と $${p}$$ 値です。
先の自作関数と計算方法が異なるため、検定統計量も $${p}$$ 値も異なる結果になっています。
$${p}$$ 値が $${<0.05}$$ なので、有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。

理解度チェック ウィルコクスンの順位和検定 p.228

2つの職種の時給が異なっているかどうかをウィルコクスンの順位和検定で確かめます。

有意水準 $${5\%}$$、両側検定で、コードを淡々と書きます。
データを設定して箱ひげ図で可視化します。

### ウィルコクソンの順位和検定 時給 p.228

# データ
list1 = [1400, 1500, 2200, 2000, 2500, 2300, 1600]
list2 = [850, 1000, 1100, 950, 1200, 900, 1050, 800]

# 箱ひげ図
sns.boxplot(dict(コンパニオン=list1, ウェイトレス=list2), fill=False)
plt.ylabel('時給 [円]');

【実行結果】
グループ1(コンパニオン)の全データがグループ2(ウェイトレス)を上回っているように見えます…

では自作関数で検定を実行します。

# ウィルコクソンの順位和検定 関数利用

# 検定の実行
result = wilcoxon_ranksum_test(list1, list2, alternative='two-sided')

# 結果の表示
print(f"W: {result['W']}, p_value: {result['p_value']:.5f}")
print(f"有意水準{result['alpha']:.2%}の棄却限界値 {result['num_table']}")

【実行結果】
検定統計量 $${W}$$ は棄却限界値(上側)$${74}$$ より大きいので、有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。

順位和の分布表を見ましょう。

# ウィルコクソンの順位和の分布
dist_table = pd.DataFrame(result['dist_table'])
dist_table.round(6).astype(str).T

【実行結果】
検定統計量 $${W=84}$$ はもっとも順位が大きいときの値です。
グループ1の値が上位を占めているということです。

順位和の分布を可視化して棄却される様子を見てみましょう。

# ウィルコクソンの順位和の分布と片側検定の棄却域
plot_wilcoxon_ranksum_test(result)

【実行結果】
上側(右側)の赤い棄却域に検定統計量が位置しています。
帰無仮説は棄却されるのです。

ちなみに scipy.stats (標本が大きい場合用)の結果をみてみましょう。

# scipy.stats利用 ※正規分布近似を用いているので結果は異なる
stats.ranksums(list1, list2)

【実行結果】
$${p}$$ 値は $${<0.05}$$ であり、有意水準 $${5\%}$$ で有意です。

SPSSによる2つの母平均の差の検定 p.229

テキストはノンパラメトリック検定であるウィルコクスンの順位和検定と比較できるように、パラメトリック検定の「2つの母平均の差の検定」の結果を掲載しています。
検定結果には 統計用ソフト SPSS の出力を用いています。

ということで、理解度チェックのデータを用いて、以下の3点を pingouin ライブラリで実践します。

  • 2つの母平均の差の検定・等分散を仮定する場合

  • 2つの母平均の差の検定・等分散を仮定しない場合(ウェルチの検定)

  • 等分散性のためのルビーンの検定

■ 2つの母平均の差の検定・等分散を仮定する場合

### 2つの母平均の差の検定 pingouin利用

# 等分散を仮定する
pg.ttest(x=list1, y=list2, correction=False)

【実行結果】
SPSSの出力結果と合っています!
有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。
2つの母平均に差がある(2つの母平均は異なる)と言える、です。

■ 2つの母平均の差の検定・等分散を仮定しない場合(ウェルチの検定)

# 等分散を仮定しない(ウェルチの検定)
pg.ttest(x=list1, y=list2, correction=True)

【実行結果】
SPSSの出力結果と合っています!
有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。
2つの母平均に差がある(2つの母平均は異なる)と言える、です。

■ 等分散性のためのルビーンの検定

### 等分散性のためのルビーンの検定

# pingouin利用
pg.homoscedasticity([list1, list2], alpha=0.05, method='levene', center='mean')

【実行結果】
SPSSの出力結果と合っています!
有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。
2つの分散は等しくない(等分散ではない)と言える、です。

ルビーンの検定結果「等分差ではない」から、ウェルチの検定を使うのがよいと判断できます。


記事の最後をChatGPTに締めくくってもらいましょう!

📘 ChatGPTのひとこと:

平均じゃなくても、ひとつひとつの順位を合計することで、見えてくる違いがあります。
データを比べる方法がひとつ増えたことで、あなたの分析の世界も、きっと少し広がったはずです。
順位の積み重ねから読み取る傾向の違い──
今日の学びが、これからの気づきにつながりますように。

今回の写経は以上です。


シリーズの記事

次の記事

前の記事

目次

ブログの紹介


note で7つのシリーズ記事を書いています。
ぜひ覗いていってくださいね!

1.のんびり統計

統計検定2級の問題集を手がかりにして、確率・統計をざっくり掘り下げるブログです。
雑談感覚で大丈夫です。ぜひ覗いていってくださいね。
統計検定2級公式問題集CBT対応版に対応しています。
Python、EXCELのサンプルコードの配布もあります。

2.実験!たのしいベイズモデリング1&2をPyMC Ver.5で

書籍「たのしいベイズモデリング」・「たのしいベイズモデリング2」の心理学研究に用いられたベイズモデルを PyMC Ver.5で描いて分析します。
この書籍をはじめ、多くのベイズモデルは R言語+Stanで書かれています。
PyMCの可能性を探り出し、手軽にベイズモデリングを実践できるように努めます。
身近なテーマ、イメージしやすいテーマですので、ぜひぜひPyMCで動かして、一緒に楽しみましょう!

3.実験!岩波データサイエンス1のベイズモデリングをPyMC Ver.5で

書籍「実験!岩波データサイエンスvol.1」の4人のベイジアンによるベイズモデルを PyMC Ver.5で描いて分析します。
この書籍はベイズプログラミングのイロハをざっくりと学ぶことができる良書です。
楽しくPyMCモデルを動かして、ベイズと仲良しになれた気がします。
みなさんもぜひぜひPyMCで動かして、一緒に遊んで学びましょう!

4.楽しい写経 ベイズ・Python等

ベイズ、Python、その他の「書籍の写経活動」の成果をブログにします。
主にPythonへの翻訳に取り組んでいます。
写経に取り組むお仲間さんのサンプルコードになれば幸いです🍀

5.RとStanではじめる心理学のための時系列分析入門 を PythonとPyMC Ver.5 で

書籍「RとStanではじめる心理学のための時系列分析入門」の時系列分析をPythonとPyMC Ver.5 で実践します。
この書籍には時系列分析のテーマが盛りだくさん!
時系列分析の懐の深さを実感いたしました。
大好きなPythonで楽しく時系列分析を学びます。

6.データサイエンスっぽいことを綴る

統計、データ分析、AI、機械学習、Pythonのコラムを不定期に綴っています。
統計・データサイエンス書籍にまつわる記事が多いです。
「統計」「Python」「数学とPython」「R」のシリーズが生まれています。

7.Python機械学習プログラミング実践記

書籍「Python機械学習プログラミング PyTorch & scikit-learn編」を学んだときのさまざまな思いを記事にしました。
この書籍は、scikit-learnとPyTorchの教科書です。
よかったらぜひ、お試しくださいませ。

最後までお読みいただきまして、ありがとうございました。

いいなと思ったら応援しよう!

ネイピア DS 応援ありがとうございます。これからもがんばって記事を作成します!

この記事が参加している募集