見出し画像

「入門はじめての統計解析」をPythonで写経 Vol.15 ~ 5章「はじめてのノンパラメトリック検定」②マン・ホイットニーの検定、符号検定

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

書籍の著者 石村貞夫 先生


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

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

この記事は マン・ホイットニーの検定 と 符号検定 に取り組みます。
そしてシークレットな検定の実践もあります!(目次でバレバレ)

今回もChatGPTの活用も継続してまいります!
では書籍を開いて統計解析の旅に出発です🚀

ノンシリコンシャンプーのイラスト:「いらすとや」さんより

はじめに


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

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

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


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

5.3 マン・ホイットニーの検定
5.4 符号検定

記事に用いるデータは、テキストに掲載されたデータそのものを引用しています。
データ件数の少ないものはコード上でデータを登録し、データ件数の多いものは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と相談して作り上げた「やさしいイントロ」です。


「2つのグループに差があるかどうか、比べたい。でも平均だけでいいの?」
→ そんなとき、ノンパラメトリック検定が頼りになります。

「ウィルコクスン検定はやってみたけど、他にもあるの?」
→ あります。今日はその中から、
📊 マン・ホイットニーの検定(U検定)
📊 符号検定
の2つを取り上げます。

「どんなときに使えるの?」
→ 正規分布の仮定ができないとき、データ数が少ないとき、順序尺度しかないとき
それでも「違いを知りたい」と思ったら出番です。

今回も、自作関数+Pythonライブラリでやさしく動きを見ながら、
平均に頼らない“比べ方”を学んでいきましょう。


Section 5.3 マン・ホイットニーの検定

■ ウォーミングアップ
ChatGPTがマン・ホイットニーの検定のサマリーを作ってくれました。


🧪 マン・ホイットニーの検定(U検定)とは?

「2つのグループのデータに差があるかどうかを、平均に頼らず調べたい」
そんなときに使えるのが、マン・ホイットニーの検定です。

この検定では、数値の大小関係(どっちが大きいか)をもとに、2つのグループを比較します。
データをすべてまとめて順位をつけ
、その順位の偏り(どちらに大きい値が集まっているか)を見ていきます。

正規分布などの前提を必要としないので、データの数が少ないときや、外れ値が気になるときにも安心して使える検定です。
実は、前回紹介したウィルコクスンの順位和検定と本質的に同じ検定で、視点や計算方法が少し異なるだけ。
書籍やツールによって呼び方が違うこともありますが、どちらも「2群間の“傾向の差”を確かめる」ノンパラメトリック検定です。


■ マン・ホイットニーの検定の仕組み
マン・ホイットニーの検定はざっくり、パラメトリック検定「2つの母平均の差の検定」と対応するノンパラメトリック検定です。

マン・ホイットニーの検定は次の3点の特徴を持っています。

  • 2つのグループの分布の位置「中央値」にズレがあるかどうかを検定します(ウィルコクスンの順位和検定と同様です)。

  • グループ1のデータがグループ2のデータより大きい組み合わせの個数を足し上げて、検定統計量にします(ウィルコクスンの順位和検定と異なる統計量です)。
    【注意】Webサイトでよく見かける計算方法と異なっています。

  • 検定統計量の分布は省略します…
    テキストに掲載無く、Webサイトで理解可能な情報を見つけられませんでした。

続いて「大きい組み合わせの個数を足し上げる」を見てみましょう。
2つのグループが次のようなデータであるとします。

グループ1とグループ2の値の大小を調べます。

グループ1の方が大きい組み合わせの個数は $${8}$$ です。
つまり、検定統計量は $${8}$$ です。

■ マン・ホイットニーの検定:検定統計量の公式 p.230
検定統計量の公式をテキストを一部改変してお借りします。

マン・ホイットニーの検定の検定統計量 $${M}$$ は、
$${x_{1i}}$$ と $${x_{2j}}$$ のすべての組み合わせ $${(x_{1i}, x_{2j})}$$ に対して

$$
M = x_{1i} > x_{2j} となる組み合わせ (x_{1i}, x_{2j}) の総数
$$

テキストの数式を引用

とします。

仮説は次のとおりです。

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

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

なお棄却域に関する数表はテキストに掲載されていません。

■ ウィルコクスンの順位和検定との関係
ウィルコクスンの順位和検定の検定統計量 $${W}$$ とマン・ホイットニーの検定の検定統計量 $${M}$$ は次の関係式で示されます。

$$
M = W - \cfrac{1}{2}\ N (N+1)
$$

テキストの数式を引用

$${N}$$ はウィルコクスンの順位和検定で順位和の対象になったグループの標本サイズです。
テキストは「ウィルコクスンとマン・ホイットニーの2つの検定は本質的に同じものと考えられています」としています。

■ マン・ホイットニーの検定の検定統計量算出関数の実装

公式に基づいて「マン・ホイットニーの検定の検定統計量算出関数」を定義します。
棄却限界値と $${p}$$ 値を計算していない点をご留意下さい。

### マン・ホイットニーの検定統計量M算出関数
def mann_whitney_M(list1, list2):
    N1, N2 = len(list1), len(list2)
    return sum([list1[i] > list2[j] for i in range(N1) for j in range(N2)])

【実行結果】
検定統計量 $${M=8}$$ です。

scipy.stats で検算します。

# scipy.statsで答え合わせ
stats.mannwhitneyu(list1, list2, method='exact')

【実行結果】
検定統計量と $${p}$$ 値が表示されました。
検定統計量 $${M=8}$$ となり、検算結果は一致しました。

■ マン・ホイットニー検定 例題 p.231
p.231 例)のウィルコクスンの順位和検定で用いたデータで、マン・ホイットニーの検定の検定統計量を算出します。

① 自作関数で検定実行
データを設定して検定を実行します。

### マン・ホイットニーの検定 検定統計量Mを求める p.231

# データ ※ウィルコクソンの順位和のときの例題(赤血球の数)と同じ
list1 = [4.86, 4.72, 5.17, 4.62]
list2 = [5.01, 4.94, 5.23, 5.18, 5.29]

# 検定統計量の算出
mann_whitney_M(list1, list2)

【実行結果】
検定統計量 $${M=2}$$ となりました。

② ウィルコクスンの順位和検定の検定統計量 $${W}$$ との整合性
関係式を用いて、ウィルコクスンの順位和検定の検定統計量 $${W}$$ からマン・ホイットニーの検定の検定統計量 $${M}$$ を導出します。

前回記事でご紹介したウィルコクソンの順位和検定関数を定義します。

# ウィルコクソンの順位和検定関数
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}}

ウィルコクスンの順位和検定の検定統計量 $${W}$$ からマン・ホイットニーの検定の検定統計量 $${M}$$ を導出します。

# ウィルコクソンの順位和のWとの整合性確認 p.231
N = len(list1)
result = wilcoxon_ranksum_test(list1, list2)
M = result['W'] - 1/2 * N * (N + 1)
M

【実行結果】
無事に導出できました!

③ Python ライブラリで検定実行
Python ライブラリを使って $${p}$$ 値をGETしましょう!
ここでは、scipy.stats と pingouin を利用します。
いずれも引数に2つのサンプルデータを渡しています。

🖲️scipy.stats

### マン・ホイットニーの検定の実行

# scipy.stats利用
stats.mannwhitneyu(list1, list2, alternative='less')

【実行結果】
検定統計量は自作関数と一致しました!
$${p}$$ 値は $${<0.05}$$ であり、有意水準 $${5\%}$$ で帰無仮説は棄却されます。
グループ1の分布はグループ2の分布より下側(左側)にずれていると言える、グループ1の方が赤血球の数は少ないと言える、です。

🖲️pingouin

# pingouin利用
pg.mwu(list1, list2, alternative='less')

【実行結果】
検定統計量 U_val は自作関数と一致しました!
$${p}$$ 値は $${<0.05}$$ であり、有意水準 $${5\%}$$ で帰無仮説は棄却されます。

Section 5.4 符号検定

■ ウォーミングアップ
ChatGPTが符号検定のサマリーを作ってくれました。


✍️ 符号検定とは?

対応のある2つのデータ(たとえば前後比較など)を比べたいときに使える、もっともシンプルなノンパラメトリック検定です。

比較のしかたはとても直感的。
ひとつひとつのペアを見て、「前の値より後の値が大きいか、小さいか、それとも変わらないか」を数えるだけ。

平均値も分布も必要ありません。
必要なのは、「どっちが大きいか」という符号(プラスかマイナスか)の情報だけ。

たとえば研修前後の評価や、施策のビフォーアフターなど、変化の方向性をざっくりつかみたいときにとても便利です。
計算もシンプルで手軽に使える検定なので、「ノンパラの第一歩」にぴったりの手法です。


■ 符号検定の仕組み
符号検定はざっくり、パラメトリック検定「対応のある2つの母平均の差の検定」と対応するノンパラメトリック検定です。

符号検定は次の3点の特徴を持っています。

  • 対応関係のある2つのグループ間に差があるかどうかを検定します。

  • 対応するグループ1とグループ2のペアについて、グループ1の方が大きいペアの個数を足し上げて、検定統計量にします(テキストの公式より)。

    • 2つのペアを差し引いて「+」と「-」の符号の数をカウントする方法もあります(自作関数で用いた方法)。

  • 検定統計量の分布は次のとおりです(たぶん)。

    • 標本サイズが小さい場合:二項分布

    • 標本サイズが大きい場合:標準正規分布近似

■ 符号検定:検定統計量の公式 p.232
検定統計量の公式をテキストを一部改変してお借りします。

符号検定の検定統計量 $${S}$$ は、各 $${(x_{1i}, x_{2j})}$$ に対して

$$
x_{1i} > x_{2j} となる組 (x_{1i}, x_{2j}) の総数
$$

テキストの数式を引用

とします。

仮説は次のとおりです。

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

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

なお棄却域は「符号検定の数表」より求めます(テキスト p.296 の数表 10 参照)。
検定の都度、「数表」をめくって棄却域を取得するのは大変だと感じ…
自作関数で算出するようにしました。

■ 符号検定関数の実装

公式やWebサイトの情報に基づいて「符号検定関数」を定義します。
特に次の2つのWebサイトにお世話になっています。
テストデータもお借りしました。
ありがとうございます!

【小標本のケース:統計WEB】

【大標本のケース:専門薬学】

なお、一部の計算に scipy.stats を利用します。

### 符号検定 p.232 ※標本サイズ n > 5 だそうです。
# 参考サイト 統計WEB : https://bellcurve.jp/statistics/course/26159.html
#           専門薬学: https://kusuri-jouhou.com/statistics/fugou.html
# ペアが同じ値(タイ)の場合、「データが無かったものとする」取り扱いにしています。

# 二項分布の確率算出関数
def binom_prob(x, n, p):
    # 組み合わせnCxの計算
    c = math.factorial(n) / (math.factorial(x) * math.factorial(n - x))
    # 戻り値: 確率の算出
    return c * p**x * (1 - p)**(n - x)

# 符号検定関数
def paired_sign_test(list1, list2, threshold=25, alternative='two-sided'):
    
    ## 検定統計量mの算出
    # 標本サイズ: 2つの標本サイズは同じ
    N1 = len(list1)
    # 符号の数え上げ
    plus = sum([list1[i] > list2[i] for i in range(N1)])
    minus = sum([list1[i] < list2[i] for i in range(N1)])
    # 検定統計量mの算出
    m = plus if plus <= minus else minus
    # 標本サイズの算出
    n = plus + minus

    ## 有意確率の算出
    # 小標本の場合: 二項分布で確率計算 ※統計Webを参考にして作成
    if n <= threshold:
        # 確率の算出
        prob = sum([binom_prob(x, n, 0.5) for x in range(m+1)])
    # 大標本の場合: 正規分布で確率計算 ※専門薬学を参考にして作成
    else:
        # 計算要素の算出
        mean = n / 2                         # 期待値
        std = n**(1/2) / 2                   # 標本偏差
        adjust = 0.5 if m < n / 2 else -0.5  # 近似をよりよくするための調整
        # z値の算出(絶対値)
        z = abs((m + adjust - mean) / std)
        # 上側確率の算出 scipy.stats利用
        prob = stats.norm.sf(x=z, loc=0, scale=1)
    # p値の算出: 両側検定の場合に2倍する
    p_val = prob * 2 if alternative=='two-sided' else prob
    
    ## 戻り値
    return {'m_stat': m, 'p_value': p_val, 'alternative': alternative,
            'n': n, 'plus': plus, 'minus': minus, 'probability': prob}

テストデータで自作関数の確認を行います。

◆ 小標本のケース(統計WEBさんより引用)
片側検定(下側)です。
なお小標本の標本サイズは、自作関数のデフォルトで 25 未満としています。
引数 threshold で指定することもできます。

# テスト データ引用元: 統計WEB https://bellcurve.jp/statistics/course/26159.html

list1 = [10.0, 8.5, 7.0, 9.5, 6.5, 7.5]
list2 = [9.0, 8.0, 9.0, 7.0, 6.5, 7.0]

paired_sign_test(list1, list2, alternative='less')

【実行結果】
$${p}$$ 値が $${>0.05}$$ なので、有意水準 $${5\%}$$ で有意でなく、帰無仮説を棄却できません。

出力内容を簡単に説明します。

  • m_stat:符号検定の検定統計量 $${S}$$

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

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

  • n:標本サイズ(タイデータを除く)

  • plus:符号が「+」($${x_{1i} > x_{2j}}$$)のデータの個数

  • minus:符号が「-」($${x_{1i} < x_{2j}}$$)のデータの個数

  • probabolity:検定統計量 $${S}$$ の確率

◆ 大標本のケース(専門薬学さんより引用)
両側検定です。

# テスト データ引用元: 専門薬学 https://kusuri-jouhou.com/statistics/fugou.html

list1 = [5, 3, 4, 4, 3, 4, 4, 1, 3, 3, 5, 3, 2, 3, 5,
         4, 2, 3, 5, 4, 1, 2, 3, 2, 3 ,5, 2, 3, 3, 5]
list2 = [3, 5, 3, 3, 5, 2, 2, 1, 4, 2, 2, 3, 4, 3, 2,
         3 ,5, 2, 3, 3, 3, 2, 2, 4, 1, 4, 4, 5, 4, 4]

paired_sign_test(list1, list2, alternative='two-sided')

【実行結果】
$${p}$$ 値が $${>0.05}$$ なので、有意水準 $${5\%}$$ で有意でなく、帰無仮説を棄却できません。

■ 符号検定(両側検定)例題 p.234
p.234 例)同一の人に対する2つの薬の痛みがおさまるまでの時間が異なるか(ずれがあるか)どうかを符号検定で調べます。

仮説は次のとおりです。
・帰無仮説 $${H_0}$$ 「$${G_1}$$ と $${G_2}$$ の時間は同じ」
・対立仮説 $${H_1}$$ 「$${G_1}$$ と $${G_2}$$ の時間にずれがある」

① 自作関数で検定実行
データを設定してヒストグラムで可視化します。

### 符号検定 片頭痛 p.234

# データ
list1 = [28, 25, 29, 28, 30, 20, 31, 27, 24, 26, 35, 23, 27, 32]
list2 = [32, 30, 31, 27, 35, 25, 40, 30, 45, 28, 32, 30, 30, 38]

# ヒストグラムの描画
sns.histplot(dict(薬A=list1, 薬B=list2), ec='white')
plt.xlabel('頭痛がおさまるまでの時間 [分]', fontsize=12)
plt.ylabel('人数', fontsize=12);

【実行結果】
グループ1(薬A)の方が時間が短いように見えます。

有意水準 $${5\%}$$、両側検定で符号検定を実行します。

### 符号検定

# 関数利用
paired_sign_test(list1, list2, alternative='two-sided')

【実行結果】
検定統計量 $${S=2}$$ の $${p}$$ 値は $${< 0.05}$$ であり、有意水準 $${5\%}$$ で帰無仮説は棄却されます。

つまり、グループ1とグループ2の時間は ずれていると言える、です。

② Python ライブラリで検定実行
ここでは、statsmodels を利用します。
引数に「対応するペアを差し引いたデータ」と「符号(±)の基準値(今回は0)」を渡しています。

🖲️statsmodels

### 参考: statsmodelsの符号検定 (検定統計量M, p値)
# 検定統計量M = (N(+) - N(-))/2, p値は二項分布Bin(min(M(+), M(-), n, 0.5)で計算

sign_test([x - y for x, y in zip(list1, list2)], mu0=0)

【実行結果】
検定統計量と $${p}$$ 値が表示されました。
有意水準 $${5\%}$$ で帰無仮説は棄却されます。

検定統計量は +の符号の個数と-の符号の個数の差の1/2、$${p}$$ 値は二項分布で求められています。

ウィルコクスンの符号順位検定 p.232

テキスト p.232 で袴のキャラクターが一言。
「”ウィルコクスンの符号付順位検定”というのもあるぞ」

ウィルコクスンの符号順位検定は、対応のある2つのグループの差の中央値がゼロかどうかを検定するノンパラメトリック検定です。
帰無仮説は「2つのグループの差の中央値はゼロである(差がない)」です。

やってみましょう。
WEBサイトを探すと多くで「ウィルコクソンの符号順位検定」の用語を使っていました。

例題(薬が効きはじめるまでの時間)を用いて、scipy.stats と pingouin で実践します。
引数はともに2つのペアデータを渡し、scipy.stats は追加的に correction で検定統計量の補正を行います(pingouin と合わせています)。

🖲️scipy.stats

# scipy.stats利用 correction=True:検定統計量を0.5補正
stats.wilcoxon(list1, list2, correction=True)

【実行結果】
検定統計量と $${p}$$ 値が表示されました。
有意水準 $${5\%}$$ で帰無仮説は棄却されます。

🖲️pingouin

# pingouin利用
pg.wilcoxon(list1, list2)

【実行結果】
検定統計量は W_val、 $${p}$$ 値は p_val です。
有意水準 $${5\%}$$ で帰無仮説は棄却されます。


記事の最後を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 応援ありがとうございます。これからもがんばって記事を作成します!

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