「入門はじめての統計解析」をPythonで写経 Vol.19 ~ 6章「はじめての回帰分析」②決定係数、回帰の分散分析表
6章「はじめての回帰分析」
書籍の著者 石村貞夫 先生
この記事は、書籍「入門はじめての統計解析」6章「はじめての回帰分析」の Python写経活動 を取り扱います。
書籍の図・表・計算を淡々とPython化する写経シリーズです。
6章は 単回帰分析 に取り組みます。
この記事は回帰分析に関わる 決定係数 と 分散分析表 を実践します。
ChatGPTの活用も継続してまいります!
では書籍を開いて統計解析の旅に出発です🚀

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

6章 はじめての回帰分析
この記事は6章の以下のSectionを取り扱います。
6.2 決定係数
6.3 回帰の分散分析表
記事に用いるデータは、テキストに掲載されたデータそのものを引用しています。
データ件数の少ないものはコード上でデータを登録し、データ件数の多いものはCSVファイル化してデータを読み込みしています。
6章で用いるライブラリをインポートします。
### インポート
# 数値計算
import numpy as np
import pandas as pd
import sympy
# 統計、回帰分析
import scipy.stats as stats
import pingouin as pg
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
import statsmodels.formula.api as smf
import lmdiag
# 描画
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family'] = 'Meiryo'
イントロダクション
ChatGPTが「線の物語」を続けます。
✅ 信頼を結ぶ線の物語
前回、回帰直線という一本の線を引いて、データの中にある関係の“かたち”を見つけました。
では、その線はどれくらいデータをうまく説明できているのでしょう?
その問いに答えてくれるのが、今回取り上げる 決定係数($${\boldsymbol{R^2}}$$) です。
さらに、回帰直線が本当に意味ある線なのか?
それを統計的に確かめる方法が、回帰の分散分析(ANOVA)。
回帰分析は、「線を引く」だけの技術ではありません。
データとのあいだに、信頼できる関係が結べるかどうかを見極めることでもあります。
線の物語は、ただ未来を予測するためだけでなくデータと対話し、確かなつながりを築くために続いていきます。
今回も、丁寧に、やさしく進めていきます。
一緒に、線の先にある“信頼”を見つけにいきましょう。

➡️ Section 6.2 決定係数
決定係数は「回帰直線がデータにどの程度当てはまっているか」をはかる指標です。
いつものようにChatGPTが決定係数の紹介文を作ってくれました。
変動たちと仲良くなるバージョンです。
✅ 決定係数
回帰直線を引いたあと、ふと気になるのは、
「この線、どれくらいデータに合ってるの?」ということ。
そんな疑問に答えてくれるのが 決定係数($${\boldsymbol{R^2}}$$) です。
決定係数は、回帰直線がデータのばらつきをどれだけうまく説明できているかを表す指標。
値は 0 〜1 の範囲で、1 に近いほど “この線、いい感じ!” というサインになります。
決定係数が教えてくれるのは、
「実際の値」「予測された値」「予測しきれなかったズレ」――
この3つの“変動たち”のバランス。
どこまで線が追いつけているのか、どれくらいデータと呼吸が合っているのか。
そんなことを、そっと教えてくれるのが、$${R^2}$$ というやさしい数の役割です。

決定係数の定義
■ 決定係数のイメージ
決定係数に関するテキストの文章をお借りします。
決定係数 $${R^2}$$ は「求めた回帰直線の当てはまりの良さ」を評価する統計量です。
「当てはまり」は分析データへの当てはまりを指します。
回帰直線の当てはまりの程度を可視化してみましょう。

決定係数は通常 $${0}$$ から $${1}$$ の値をとります。
左側が「当てはまりが悪い」ケース。
青いデータ点の多くは赤い回帰直線から離れており、$${R^2}$$ は $${0}$$ に近いです。
右側が「当てはまりが良い」ケース。
データ点が赤い回帰直線にほぼピッタリと近づいており、$${R^2}$$ は $${1}$$ に近いです。
■ 決定係数の定義
テキスト p.254 の計算式($${R^2}$$ の定義)をお借りします。
式中の $${y, Y}$$ は目的変数であり、$${y_i}$$ は実測値、$${\bar{y}}$$ は実測値の平均、$${Y_i}$$ は回帰直線による予測値です。
$$
\begin{align*}
決定係数\ R^2 &= \cfrac{予測値の変動}{実測値の変動} = \cfrac{S_R}{S_{y^2}} \\
実測値の変動\ S_{y^2} &= \sum_{i=1}^N (y_i - \bar{y})^2 \\
予測値の変動\ S_R &= \sum_{i=1}^N (Y_i - \bar{y})^2 \\
残差の変動\ S_E &= \sum_{i=1}^N (y_i - Y_i)^2 \\
S_{y^2} &= S_R + S_E
\end{align*}
$$
他の書籍で用いられる用語とマッピングします。
・実測値の変動 ⇒ 総変動 $${S_T, SST}$$
・予測値の変動 ⇒ 回帰変動 $${S_R, SSR}$$
・残差の変動 ⇒ 残差変動 $${S_E, SSE}$$
各変動は、次の図で示す青い点線(予測値の変動に対応)やオレンジの線(残差の変動に対応)の二乗を足し合わせたものになります。
残差の変動の値が小さいほど、決定係数 $${R^2}$$ は $${1}$$ に近づきます。

◆
宣伝広告費 $${x}$$ と売上高 $${y}$$ の実測値のデータを用いて、「残差」を計算しましょう。
テキストの表 6.2.1 「実測値-予測値=残差」に相当します。
なお、切片・傾き計算時の「小数端数処理」がテキストと異なるため、表の予測値・残差の値はテキストと若干異なる結果になっています。
### 予測値と残差 p.255 表6.2.1
# ※テキストの係数の小数処理と異なるため、テキストの結果と異なる
# データフレームの登録(前回記事と同じ)
data1 = pd.DataFrame(
{'会社名': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
'宣伝広告費': [107, 336, 233, 82, 61, 378, 129, 313, 142, 428],
'売上高': [286, 851, 589, 389, 158, 1037, 463, 563, 372, 1020]},
index=range(1, 11))
data1.index.name = 'No.'
# データフレームの作成 x:宣伝広告費、実測値y:売上高
data3 = data1[['宣伝広告費', '売上高']].copy()
data3.columns = ['x', '実測値y']
data3.index.name = 'No.'
# 予測値の算出 statsmodels利用
result = smf.ols(formula='実測値y ~ x', data=data3).fit()
data3['予測値Y'] = result.fittedvalues
# 残差の算出
data3['残差y-Y'] = data3['実測値y'] - data3['予測値Y']
data3.round(2)【実行結果】
単純に差し引きした「残差」には +の値と -の値が混在しています。

決定係数を算出する前に、前回記事で定義した切片・傾き算出関数を読み込んでおきます。
### 回帰直線の傾きと切片の公式
# 単回帰モデルの切片と傾きを算出する関数
def simple_linear_regerssion(X, Y):
# 標本サイズの算出
N = len(X)
# 各種Σの算出
sum_x = sum(X)
sum_x2 = sum([x**2 for x in X])
sum_y = sum(Y)
sum_xy = sum([x * y for x, y in zip(X, Y)])
# 傾きb, 切片aの算出
b = (N * sum_xy - sum_x * sum_y) / (N * sum_x2 - sum_x**2)
a = (sum_x2 * sum_y - sum_xy * sum_x) / (N * sum_x2 - sum_x**2)
# 戻り値: 切片a, 傾きb
return a, b
決定係数の求め方 例題 p.257
テキスト p.254 の決定係数の定義を用いて、決定係数算出関数を定義します。
### 決定係数の公式 p.254の定義で関数を作成
def calc_r2(list_x, list_y):
## 計算要素の算出
# 標本サイズ
N = len(list_x)
# yの標本平均
y_bar = sum(list_y) / N
# 単回帰分析の実行、切片αと傾きβの取得
alpha, beta = simple_linear_regerssion(list_x, list_y)
# yの予測値y_hatの算出
y_hat = [alpha + beta * x for x in list_x]
## 3つの変動の算出
SSR = sum([(Y - y_bar)**2 for Y in y_hat]) # 回帰変動 SSR
SSE = sum([(y - Y)**2 for y, Y in zip(list_y, y_hat)]) # 残差変動 SSE
SST = SSR + SSE # 全変動 SST
## 決定係数の算出
R2 = SSR / SST
## 戻り値
return {'R2': R2, 'SSR': SSR, 'SSE': SSE, 'SST': SST,
'alpha': alpha, 'beta': beta}宣伝広告費と売上高のデータの決定係数を算出しましょう。
### 決定係数の求め方 p.257
# ※テキストと小数処理が異なるため、テキストと結果は異なる
# 関数利用
calc_r2(data1['宣伝広告費'], data1['売上高'])【実行結果】
決定係数 R2 は $${0.893}$$ です!
当てはまりがよいモデルと言えそうです。

出力結果は…
SSR:回帰変動(予測値の変動)、SSE:残差変動、SST:総変動(実測値の変動)、alpha:切片、beta:傾き です。
Python のさまざまなライブラリで決定係数を計算しましょう。
🖲️scipy.stats の linregress()
回帰分析の結果の「rvalue」(相関係数)を二乗して決定係数を求めます。
単回帰(説明変数が1つ)の場合、相関係数の二乗は決定係数と等しいです。
# scipy.stats利用 ※単回帰の相関係数rvalueの二乗は決定係数と等しい
result3_stats = stats.linregress(data1['宣伝広告費'], data1['売上高'])
result3_stats.rvalue**2【実行結果】

🖲️scikit-learn の LinearRegression()
学習済みモデルから決定係数「score」を取り出します。
# scikit-learn利用
reg3 = LinearRegression()
reg3.fit(X=data1[['宣伝広告費']], y=data1['売上高'])
reg3.score(data1[['宣伝広告費']], data1['売上高'])【実行結果】

🖲️pingouin の linear_regression()
回帰分析の結果から決定係数「r2」を取り出します。
# pingouin利用
result3_pg2 = pg.linear_regression(X=data1[['宣伝広告費']], y=data1['売上高'],
as_dataframe=False)
result3_pg2['r2']【実行結果】

🖲️statsmodels の ols()
回帰分析の結果から決定係数「rsquared」を取り出します。
合わせて回帰変動 ess、残差変動 ssr も取得します。
# statsmodels利用
result3_sm = smf.ols(formula='活動時間 ~ 海水温度', data=data2).fit()
print('R2 : ', result1_sm.rsquared)
print('SSR: ', result1_sm.ess)
print('SSE: ', result1_sm.ssr)【実行結果】


➡️ Section 6.3 回帰の分散分析表
回帰の分散分析表は「回帰の有意性の検定」につながる大切な表です。
いつものようにChatGPTが回帰の分散分析表の紹介文を作ってくれました。
✅ 回帰の分散分析表の紹介($${\boldsymbol{F}}$$値を中心に)
回帰直線がデータをどれくらい説明できるかを教えてくれるのが、決定係数 $${R^2}$$。
でも、「この説明、たまたまうまくいっただけじゃないの?」
そんな疑問に答えてくれるのが、回帰の分散分析表です。
データのばらつきを
回帰によって説明できた部分
説明しきれなかった部分(残差)
に分けて、それぞれの分散を比較します。
そして、その比較から導かれるのが $${F}$$ 値。
この $${F}$$ 値をもとに、「回帰直線が本当に意味あるものか?」を統計的に検定します。
ばらつきから“信頼”を測る――
回帰の分散分析は、線の物語の確かさを試す試金石なのです。

回帰の分散分析表と回帰の有意性の検定
回帰の分散分析表を用いて回帰の有意性の検定を行います。
テキストによると帰無仮説 $${H_0}$$ 「回帰直線は予測に役立たない」です。
すべての回帰係数が0である、という意味合いです。
分散分析表を見てみましょう。
テキスト p.258 の表 6.3.1「分散分析表」を一部改変しています。
$${N}$$ は標本サイズ、$${p}$$ は説明変数の数です。
$$
\begin{array}{c:c:c:c:c}
変動 & 平方和 & 自由度 & 平均平方 & F値 \\
\hline
\\
回帰変動 & SSR & p & V_R=\cfrac{SSR}{p - 1} & F = \cfrac{V_R}{V_E} \\
\\
残差変動 & SSE & N - p - 1 & V_E = \cfrac{SSE}{N - p - 1} & - \\
\\
全変動 & SST & - & - & - \\
\end{array}
$$
回帰の有意性の検定では表の最右列の統計量 $${F}$$ 値(検定統計量 $${F_0}$$)を用います。
$${F}$$ 値は 自由度 $${(p,\ N-p-1)}$$ の $${F}$$ 分布に従います。
分散分析表の計算式を用いて、分散分析表関数を定義しましょう。
合わせて結果を表にまとめたり可視化する関数も作ります。
### 分散分析関数 p.258
# 分散分析表の各要素の作成関数
def simple_linear_regerssion_anova(X, y, alpha=0.05):
# SSR, SSE, SSTの算出
result = calc_r2(X, y)
SSR, SSE, SST = result['SSR'], result['SSE'], result['SST']
# SSRとSSEの自由度の算出
N = len(X)
df_SSR, df_SSE = 1, N - 2
# 平均平方VR, VEの算出
VR, VE = SSR / df_SSR, SSE / df_SSE
# F値の算出
F = VR / VE
# 棄却限界値c_val, p値p_valの算出 ※scipy.stats利用
f_dist = stats.f(dfn=df_SSR, dfd=df_SSE)
c_val = f_dist.isf(q=alpha)
p_val = f_dist.sf(x=F)
# 戻り値
return {'SSR': SSR, 'SSE': SSE, 'SST': SST,
'df_SSR': df_SSR, 'df_SSE': df_SSE, 'VR': VR, 'VE': VE,
'F_value': F, 'c_value': c_val, 'p_value': p_val}
# 分散分析表データフレーム作成関数
def simple_linear_regerssion_anova_df(X, y, alpha=0.05):
# 欠損値の定義
nan = float('nan')
# 分散分析の実行
res = simple_linear_regerssion_anova(X, y, alpha)
# データフレーム化
df = pd.DataFrame(
{'平方和': [res['SSR'], res['SSE'], res['SST']],
'自由度': [res['df_SSR'], res['df_SSE'], nan],
'平均平方': [res['VR'], res['VE'], nan],
'F値': [res['F_value'], nan, nan],
'p値': [res['p_value'], nan, nan]},
index=['回帰による変動', '残差による変動', '全変動'])
df.index.name = '変動'
# 戻り値: 分散分析表データフレーム
return df
# 棄却域と有意水準の可視化
def plot_simple_linear_regerssion_anova(X, y, alpha=0.05):
# 分散分析の実行
res = simple_linear_regerssion_anova(X, y, alpha)
dfn, dfd = res['df_SSR'], res['df_SSE']
f_value, c_value, p_value = res['F_value'], res['c_value'], res['p_value']
f_dist = stats.f(dfn=dfn, dfd=dfd) # ※scipy.stats利用
color = 'tab:blue'
top = f_value * 1.1
x_val1 = np.linspace(0, top, 1001)
x_val2 = np.linspace(c_value, top, 101)
plt.plot(x_val1, f_dist.pdf(x_val1), color=color,
label=f'自由度{dfn, dfd}の$F$分布')
plt.fill_between(x_val2, 0, f_dist.pdf(x_val2), color=color, alpha=0.3,
label=f'有意水準{alpha:.1%}の棄却域')
plt.axvline(f_value, color='tab:red', ls='--',
label=f"$F$値={f_value:.3f}")
plt.xticks([c_value])
plt.title(f'棄却限界値={c_value:.3f}, $F$値={f_value:.3f}, '
f'有意水準:{alpha:.0%}, $p$値:{p_value:.3f}')
plt.legend(loc='upper right')
plt.show()
回帰直線の分散分析表 例題 p.260
宣伝広告費と売上高のデータの回帰直線に関する分散分析表を作成して、回帰の有意性の検定を実行しましょう。
# 回帰直線の分散分析表 p.260
# 関数利用
simple_linear_regerssion_anova_df(data1['宣伝広告費'], data1['売上高']).round(3)【実行結果】
$${F}$$ 値は $${67.042}$$、$${F}$$ 値の $${p}$$ 値は $${0.000 < 0.05}$$ です。
回帰直線は有意水準 $${5\%}$$ で有意であり、帰無仮説「回帰直線は予測に役立たない」は棄却されます。

$${F}$$ 分布を可視化して、棄却域や $${F}$$ 値の位置を確認しましょう。
# F分布と棄却域、p値 p.261 図6.3.2, 図6.3.3
plot_simple_linear_regerssion_anova(data1['宣伝広告費'], data1['売上高'])【実行結果】
$${F}$$ 値が棄却域に位置することが分かりました。

Python のライブラリで回帰の分散分析表を行いましょう。
statsmodels を利用します。
🖲️statsmodels
回帰分析 ols(最小二乗法)の結果を anova_lm 関数に渡して、回帰の分散分析表を得ます。
# statsmodels利用 一元配置分散分析より
result1_sm = smf.ols(formula='売上高 ~ 宣伝広告費', data=data1).fit()
sm.stats.anova_lm(result1_sm).round(3)【実行結果】

$${F}$$ 値と $${p}$$ 値を取り出します。
# statsmodels利用 回帰分析結果より
print(f'F値:{result1_sm.fvalue:.3f}, p値:{result1_sm.f_pvalue:.4f}')【実行結果】


理解度チェック 回帰分析 p.262
10 社の営業担当者数と契約高データの回帰分析です。
テキストのデータをお借りして、pandas のデータフレームに登録します。
### 回帰分析 保険新契約高 p.262 表6.3.3
# データの登録
data4 = pd.DataFrame(
{'営業職員数': [43, 42, 38, 37, 36, 34, 33, 31, 30, 27],
'保険新契約高': [157, 158, 154, 148, 143, 135, 124, 116, 109, 105]},
index=range(1, 11))
data4.index.name = 'No.'
data4【実行結果】
テキストの表 6.3.3「営業職員数と保険新契約高」に相当します。

データの要約統計量を確認します。
pandas のデータフレームに対して describe() を行います。
# 要約統計量の表示
data4.describe().round(2)【実行結果】
2つの変数の最小値、四分位数、最大値を比べると、営業職員数の値が大きくなると契約高も大きくなる傾向が見られます。

散布図で2つの変数の関係を直感的に確認しましょう。
seaborn の scatterplot を利用します。
### 散布図で可視化
plt.figure(figsize=(7, 4))
sns.scatterplot(data=data4, x='営業職員数', y='保険新契約高', s=70)
plt.xlim(25, 46)
plt.ylim(90, 170)
plt.xticks(range(26, 47, 2));【実行結果】
直線的な右上がりの傾向が見られます。
ただし、営業担当者数が 40 を超えると契約高の増加が頭打ちになっているようにも見えます。

相関係数で2つの変数の相関の強さを確認しましょう。
pandas のデータフレームに対して corr() を行います。
# 相関係数の確認
data4.corr().round(3)【実行結果】
相関係数 $${0.962}$$ ですので、強い正の相関があると言えそうです。

では回帰直線(切片・傾き)を推定しましょう。
### 回帰直線の切片と傾き、決定係数の算出 p.263
# 関数利用
result4 = calc_r2(data4['営業職員数'], data4['保険新契約高'])
print(f"切片:{result4['alpha']:.6f}, 傾き:{result4['beta']:.6f}")
print(f"R² :{result4['R2']:.6f}")【実行結果】
決定係数 $${R^2=0.9249}$$ ですので、回帰直線の当てはまりはとても良いと言えそうです。

データの散布図に回帰直線を重ねて描きましょう。
### 散布図と回帰直線を可視化
# 単回帰を用いた予測を実行する関数の定義
a, b = result4['alpha'], result4['beta']
f = lambda x: a + b * x
# 描画領域の設定
plt.figure(figsize=(7, 4))
# 実測値の散布図の描画
sns.scatterplot(data=data4, x='営業職員数', y='保険新契約高', s=70)
# 回帰直線の描画
plt.plot([25, 46], [f(25), f(46)], color='tab:red', ls='--', label='回帰直線')
# 修飾
plt.xlim(25, 46)
plt.ylim(90, 170)
plt.xticks(range(26, 47, 2))
plt.legend();【実行結果】
青いデータ点に対して回帰直線がよく当てはまっているように見えます。


Python のライブラリで回帰分析を実践しましょう。
🖲️scipy.stats の linregress()
# scipy.stats利用
result4_stats = stats.linregress(data4['営業職員数'], data4['保険新契約高'])
print(f'切片:{result4_stats[1]:.6f}, 傾き:{result4_stats[0]:.6f}')
print(f'R² :{result4_stats[2]**2:.6f}')【実行結果】

🖲️scikit-learn の LinearRegression()
# scikit-learn利用
reg4 = LinearRegression()
reg4.fit(X=data4[['営業職員数']], y=data4['保険新契約高'])
print(f'切片:{reg4.intercept_:.6f}, 傾き:{reg4.coef_[0]:.6f}')
print(f"R² :{reg4.score(X=data4[['営業職員数']], y=data4['保険新契約高']):.6f}")【実行結果】

🖲️pingouin の linear_regression()
# pingouin利用
result4_pg = pg.linear_regression(X=data4['営業職員数'], y=data4['保険新契約高'])
result4_pg【実行結果】

🖲️statsmodels の ols()
# statsmodels利用
result4_sm = smf.ols(formula='保険新契約高 ~ 営業職員数', data=data4).fit()
print(f'切片:{result4_sm.params.iloc[0]:.6f},'
f'傾き:{result4_sm.params.iloc[1]:.6f}')
print(f'R² :{result4_stats[2]**2:.6f}')【実行結果】

statsmodels ついでに残差プロットを確認しましょう。
# 残差プロット
plt.figure(figsize=(10, 6))
lmdiag.plot(result4_sm);【実行結果】
特段の問題はなさそうです。


続いて分散分析表で、回帰直線が予測に役立つかどうかの検定を行います。
### 分散分析表 p.263
# 関数利用
simple_linear_regerssion_anova_df(
X=data4['営業職員数'], y=data4['保険新契約高']).round(3)【実行結果】
$${F}$$ 値は $${98.497}$$、$${F}$$ 値の $${p}$$ 値は $${0.000 < 0.05}$$ です。
有意水準 $${5\%}$$ で有意であり、帰無仮説は棄却されます。
「回帰直線は予測に役立つ」と言えそうです。

statsmodels で分散分析表を作成しましょう。
🖲️statsmodels の anova_lm()
# statsmodels利用
sm.stats.anova_lm(result4_sm).round(3)【実行結果】

最後は $${F}$$ 分布のチャートで棄却域と $${F}$$ 値を可視化します。
# F分布と棄却域
plot_simple_linear_regerssion_anova(X=data4['営業職員数'], y=data4['保険新契約高'])【実行結果】
棄却限界値が $${5.3}$$ 、$${F}$$ 値が $${98.497}$$。
$${F}$$ 値がかなり大きな値になっていて、棄却域に含まれています。


回帰分析の「その先」を学べる書籍の紹介
📗 入門はじめての多変量解析
「入門はじめての~」シリーズの姉妹書です。
テキストは「単回帰」と呼ばれるシンプルな回帰分析を対象としていました。
回帰分析には複数の説明変数を用いる「重回帰」があります。
回帰分析の目的変数は「量的変数」だけでなく、「質的変数」を扱う分析もあります。
回帰分析の学びを進めたい方におすすめしたいです。
重回帰に加えて、主成分分析、因子分析、判別分析、クラスター分析、数量化理論といった多変量解析(多数の変数を扱うデータ分析)の手法を学べます。
ぜひ、こちらの写経ブログシリーズをご覧ください!

記事の最後を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の教科書です。
よかったらぜひ、お試しくださいませ。
最後までお読みいただきまして、ありがとうございました。
いいなと思ったら応援しよう!
応援ありがとうございます。これからもがんばって記事を作成します!