「回帰分析から学ぶ計量経済学」をPythonで写経 ~ 第5章「時系列分析」⑤ランダムウォーク、階差系列、グレンジャー因果性
第5章「時系列分析」
書籍の著者 山澤成康 先生
この記事は、書籍「回帰分析から学ぶ計量経済学」第5章「時系列分析」の Python写経活動 を取り扱います。
今回は第5章の課題に取り組みます。
為替レートの予測、グレンジャー因果性の検定、ドリフト付きランダムウォーク系列に関する課題です。
auto_arima や VARモデルにも挑戦しましょう!
では書籍を開いて回帰分析の旅に出発です🚀

はじめに
書籍「回帰分析から学ぶ計量経済学」のご紹介
このシリーズは書籍「回帰分析から学ぶ計量経済学: Excelで読み解く経済のしくみ」(オーム社、「テキスト」と呼びます)の Python 写経です。
テキストは、2023年11月に発売され、副題「Excelで読み解く経済のしくみ」のとおり、主に Excel を用いて、計量経済学を平易に学べる素晴らしい書籍です。
テキストの「はじめに」に著者の先生が執筆の動機を書かれています。
社会人の統計リテラシーの向上をテーマの1つとした科研費プロジェクトの最終年度で、広く社会人に向けてわかりやすい経済分析の本を書きたかったのです。
私にとって計量経済学は高嶺の花ですが、このテキストでさまざまな回帰分析のアプローチを知ることができました。
また、書籍の Excel 処理を Python に置き換える「寄り道写経」の実践を通じて、回帰分析のお気持ちに少し近づけた感じがいたします。
回帰分析に慣れ親しむのに丁度良いレベル感と内容ですので、これはぜひともブログにしたい!と思って現在に至ります。
計量経済学の色を薄め、データ分析の色を濃いめに書いてまいります!

引用表記
この記事は、出典に記載の書籍に掲載された文章と配布データを引用し、適宜、掲載文章・配布データを改変して書いています。
【出典】
「回帰分析から学ぶ計量経済学: Excelで読み解く経済のしくみ」
第1版第1刷、著者 山澤成康、オーム社
記事中のイラストは、「かわいいフリー素材集いらすとや」さんのイラストをお借りしています。
ありがとうございます!
第5章 時系列分析
この記事は第5章の以下の節を取り扱います。
課題1 為替レートの予測
課題2 日本の株価は米国の株価に影響を受けているか?
課題3 ランダムウォーク系列を作って回帰してみよう
記事に用いるデータは、オーム社の書籍紹介サイトからダウンロードできる Excel ファイル内のデータをもとにしてCSVファイルを作成し、data フォルダに格納しています。
第5章で用いるライブラリをインポートします。
### インポート
# 数値計算
import numpy as np
import pandas as pd
# 統計処理
import scipy.stats as stats
import statsmodels.formula.api as smf # フォーミュラ構文
import statsmodels.tsa.api as tsa # 時系列
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf # コレログラム等
import pmdarima as pm # ARIMA次数自動探索
import lmdiag # 残差プロット
# 描画
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
# ワーニング非表示
import warnings
warnings.simplefilter('ignore')あわせてコレログラム等を描画するヘルパー関数を定義します。
### コレログラムと偏自己相関関数プロットの描画関数
def plot_acf_pacf(x, lags):
# 描画領域の設定
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))
# コレログラムの描画
plot_acf(x, lags=lags, auto_ylims=True, zero=True, ax=ax1)
ax1.set(xlabel='lag', ylabel='ACF')
ax1.grid(lw=0.5)
# 偏自己相関関数プロットの描画
plot_pacf(x, lags=lags, auto_ylims=True, zero=True, ax=ax2)
ax2.set(xlabel='lag', ylabel='PACF')
ax2.grid(lw=0.5)
# 全体調整
plt.tight_layout()
plt.show()
課題1 為替レートの予測
為替レートはランダムウォークの可能性があるので、階差をとって推定します。
データを読み込みます。
### データの読み込み
# CSVファイルの読み込み
df8 = pd.read_csv('./data/05_ex1_exchange.csv', index_col=0, parse_dates=[0])
# データフレームの表示
print('df8.shape:', df8.shape)
display(df8.head())【実行結果】
118日間のドル円レートです。

自己相関係数と偏自己相関係数を可視化します。
### コレログラム・偏自己相関プロットで自己相関を確認 ※原系列
plot_acf_pacf(df8['対ドル円レート'], 30)【実行結果】
右の偏自己相関係数のグラフより、ラグ1に高い偏自己相関係数を確認できました。

1階階差をとってみましょう。
### データの前処理
# コピーの取得
df8reg = df8.copy()
# 1階階差列の追加
df8reg['対ドル円レート1階階差'] = df8reg['対ドル円レート'].diff(1)
# 1階階差のラグ1列を追加
df8reg['対ドル円レート1階階差1期前'] = df8reg['対ドル円レート1階階差'].shift(1)
# 欠損値を含む行を削除
df8reg = df8reg.dropna()
# 書籍のExcelにならって(理由は不明だが)最終月を回帰分析対象外にする
df8reg = df8reg.iloc[:-1]
# 結果の表示
print('df8reg.shape: ', df8reg.shape)
display(df8reg.head())【実行結果】
1階階差、1階階差のラグ1の列を追加しました。

1階階差を目的変数、1階階差のラグ1を説明変数にする回帰分析を実行します。
### 回帰分析の実行
result = smf.ols(formula='対ドル円レート1階階差 ~ 対ドル円レート1階階差1期前',
data=df8reg).fit()
display(result.summary())【実行結果】
ダービン・ワトソン比$${1.998}$$が2に近似しているので、残差に自己相関は無さそうです。
ただ、係数の$${p}$$値は$${0.745}$$であり、係数は有意とは言えそうにありません。

◆ ◆ ◆
ここからは別のPythonライブラリの紹介です!
pmdarima ライブラリを用いて、階差の次数の推定、ARMAの次数の推定を行います。
まずは階差の次数の推定です。
### 階差の次数の推定
d = pm.arima.ndiffs(df8['対ドル円レート'])
print('階差の次数:', d)【実行結果】
1階階差のようです。

1階階差のコレログラム等を描画します。
### コレログラム・偏自己相関プロットで自己相関を確認 ※1階階差系列
plot_acf_pacf(df8['対ドル円レート'].diff(d).dropna(), 30)【実行結果】
1階階差系列には自己相関、偏自己相関は見られません!

auto_arima で ARMAの次数を推定します。
I(和分)の次数 d は$${1}$$です。
### auto_arimaでARMAの最適次数の探索
result_arima = pm.auto_arima(df8['対ドル円レート'], d=d, trace=True)
display(result_arima.summary())【実行結果】
ベストモデルは ARの次数が0、MAの次数が0のARIMA(0, 1, 0)と出ました!
つまり、1階階差系列は AR系列でも MA系列でも無いってこと!?
なお、係数のsigma2は誤差の分散の推定値だそうです。

1階階差系列を可視化してみます。
### 1階階差系列の可視化
df8['対ドル円レート'].diff(1).plot(figsize=(10, 3))
plt.axhline(0, color='tab:red', ls='--');【実行結果】
自己相関は無いのでしょうか・・・


課題2 日本の株価は米国の株価に影響を受けているか?
グレンジャーの因果関係を使って調べます。
データを読み込みます。
### データの読み込み
# CSVファイルの読み込み
df9 = pd.read_csv('./data/05_ex2_stock.csv', index_col=0, parse_dates=[0])
# データフレームの表示
print('df9.shape:', df9.shape)
display(df9.head())【実行結果】
1176日間の米国の株価(S&P500)と日本の株価(日経平均)です。

時系列折れ線グラフで可視化してみます。
### 可視化
# 描画領域の設定
fig, ax = plt.subplots(figsize=(8, 3))
twinx = ax.twinx()
# 日経平均株価の描画
ax.plot(df9['日経平均'], label='日経平均')
# ランダムウォークの描画
twinx.plot(df9['S&P500'], color='tab:red', label='S&P500')
# 凡例処理 axとtwinxの凡例を結合して表示
handles1, labels1 = ax.get_legend_handles_labels()
handles2, labels2 = twinx.get_legend_handles_labels()
ax.legend(handles=handles1+handles2, labels=labels1+labels2)
# 修飾
ax.set(xlabel='日付', ylabel='日経平均株価 [円]', title='日経平均株価とS&P500')
twinx.set_ylabel('S&P500 [USD]')
ax.grid(lw=0.5)
plt.show()【実行結果】
日経平均とS&P500の動きの連動性はありそうですが、どちらが先に動いているのかは分かりません。

以下の数式を用いて、対数階差をとって推定します。
$$
\begin{align*}
日本の株価_t &= \alpha_1 + \beta_1 \times 米国の株価_{t-1} + \beta_2 \times 日本の株価_{t-1} \\
米国の株価_t &= \alpha_2 + \beta_3 \times 米国の株価_{t-1} + \beta_4 \times 日本の株価_t \\
\end{align*}
$$
データの前処理を行います。
### データの前処理
## 設定と準備
# データのコピー取得
df9reg = df9.copy()
df9reg.columns = ['米国株価', '日本株価']
## 対数階差系列の作成
# 対数列の作成
df9reg['米国株価_対数'] = df9reg['米国株価'].apply(np.log)
df9reg['日本株価_対数'] = df9reg['日本株価'].apply(np.log)
# 対数1階階差列の作成
df9reg['米国株価_対数1階階差'] = df9reg['米国株価_対数'].diff(1)
df9reg['日本株価_対数1階階差'] = df9reg['日本株価_対数'].diff(1)
# 対数1階階差のラグ1列の作成
df9reg['米国株価_対数1階階差1期前'] = df9reg['米国株価_対数1階階差'].shift(1)
df9reg['日本株価_対数1階階差1期前'] = df9reg['日本株価_対数1階階差'].shift(1)
# 欠損値を含む行の削除
df9reg = df9reg.dropna()
## 結果の表示
print('df9reg.shape: ', df9reg.shape)
display(df9reg)【実行結果】
上記数式に対応する列を追加しました。

対数1階階差系列を可視化してみます。
### 可視化
# 描画領域の設定
fig, ax = plt.subplots(figsize=(8, 3))
twinx = ax.twinx()
# 日経平均株価の描画
ax.plot(df9reg['日本株価_対数1階階差'], lw=0.5, label='日経平均(対数1階階差)')
# ランダムウォークの描画
twinx.plot(df9reg['米国株価_対数1階階差'], lw=0.5, color='tab:red',
label='S&P500(対数1階階差)')
# 凡例処理 axとtwinxの凡例を結合して表示
handles1, labels1 = ax.get_legend_handles_labels()
handles2, labels2 = twinx.get_legend_handles_labels()
ax.legend(handles=handles1+handles2, labels=labels1+labels2)
# 修飾
ax.set(xlabel='日付', ylabel='日経平均株価 [対数1階階差]',
title='日経平均株価とS&P500 ')
twinx.set_ylabel('S&P500 [対数1階階差]')
ax.grid(lw=0.5)
plt.show()【実行結果】
似たような動きですけども、日経平均がS&P500の影響を受けているかどうかは未だ分かりません。。。

グレンジャーの因果性を確認しましょう。
以下の手順で日本の株価が米国の株価の影響を受けているかを調べます。
・係数制約なしの回帰分析
・係数制約ありの回帰分析
・グレンジャー因果性の検定
では手順の1つめです。
### 日本の株価は米国の株価が原因? 1.回帰分析の実行(係数制約なし)
# 回帰分析の実行
formula = '''
日本株価_対数1階階差 ~ 米国株価_対数1階階差1期前 + 日本株価_対数1階階差1期前
'''
result = smf.ols(formula=formula, data=df9reg).fit()
# SSRと残差自由度の取得
SSR = result.ssr
df_resid = result.df_resid
# 結果表示
display(result.summary())
print('SSR: ', SSR)
print('残差の自由度: ', df_resid)【実行結果】

続いて手順の2つめです。
### 日本株価は米国株価が原因? 2.回帰分析の実行(係数制約あり)
# 回帰分析の実行
formula = '''
日本株価_対数1階階差 ~ 日本株価_対数1階階差1期前
'''
result = smf.ols(formula=formula, data=df9reg).fit()
# SSRと制約の数の取得
SSR_dash = result.ssr
num_constraints = result.df_model
# 結果表示
display(result.summary())
print("SSR': ", SSR_dash)
print('制約の数: ', num_constraints)【実行結果】

続いてグレンジャー因果性の検定です。
### 日本株価は米国株価が原因? 3.グレンジャー因果性の検定
# 帰無仮説「係数制約がある(グレンジャー因果性がない)」
# ⇒p値は極小・・・グレンジャー因果性がある
# 日本の株価は米国株価の影響を受けている
# F値の算出
F_val = ((SSR_dash - SSR) / num_constraints) / (SSR / df_resid)
# F値のp値の算出
p_val = stats.f.sf(x=F_val, dfn=num_constraints, dfd=df_resid)
# 結果の表示
print(f'F値: {F_val:.3f}')
print(f'p値: {p_val:.6f}')【実行結果】
$${p}$$値はとても小さな値であり、帰無仮説「グレンジャー因果性がない」は棄却され、グレンジャー因果性がある=日本の株価は米国の株価の影響を受けていると言えます。

米国の株価が日本の株価の影響を受けているかも調べてみましょう。
手順の1つめです。
### 米国株価は日本株価が原因? 1.回帰分析の実行(係数制約なし)
# 回帰分析の実行
formula = '''
米国株価_対数1階階差 ~ 米国株価_対数1階階差1期前 + 日本株価_対数1階階差
'''
result = smf.ols(formula=formula, data=df9reg).fit()
# SSRと残差自由度の取得
SSR = result.ssr
df_resid = result.df_resid
# 結果表示
display(result.summary())
print('SSR: ', SSR)
print('残差の自由度: ', df_resid)【実行結果】

手順の2つめです。
### 米国株価は日本株価が原因? 2.回帰分析の実行(係数制約あり)
# 回帰分析の実行
formula = '''
米国株価_対数1階階差 ~ 米国株価_対数1階階差1期前
'''
result = smf.ols(formula=formula, data=df9reg).fit()
# SSRと制約の数の取得
SSR_dash = result.ssr
num_constraints = result.df_model
# 結果表示
display(result.summary())
print("SSR': ", SSR_dash)
print('制約の数: ', num_constraints)【実行結果】

グレンジャー因果性の検定です。
### 米国株価は日本株価が原因? 3.グレンジャー因果性の検定
# 帰無仮説「係数制約がある(グレンジャー因果性がない)」
# ⇒p値は極小・・・グレンジャー因果性がある
# 米国の株価は日本株価の影響を受けている
# F値の算出
F_val = ((SSR_dash - SSR) / num_constraints) / (SSR / df_resid)
# F値のp値の算出
p_val = stats.f.sf(x=F_val, dfn=num_constraints, dfd=df_resid)
# 結果の表示
print(f'F値: {F_val:.3f}')
print(f'p値: {p_val:.6f}')【実行結果】
$${p}$$値はとても小さな値であり、帰無仮説「グレンジャー因果性がない」は棄却され、グレンジャー因果性がある=米国の株価は日本の株価の影響を受けていると言えます。
相互に影響しあっているようです。

◆ ◆ ◆
ここからは別のPythonライブラリの紹介です!
statsmodels の VAR(ベクトル自己回帰)モデルで、グレンジャー因果性の検定をしてみましょう。
まずはVARモデルの構築です。
### statsmodelsのVARモデルでグレンジャー因果性を推定
# VARモデルの定義
model = tsa.VAR(df9reg[['米国株価_対数1階階差', '日本株価_対数1階階差']])
# 最適ラグの推定
lag = model.select_order(maxlags=30).selected_orders
print('最適なラグ: ', lag['aic'])
# VARモデルの学習
result = model.fit(maxlags=lag['aic'])
# result = model.fit(maxlags=1) # ラグを固定値にしたい時
# 結果の表示
display(result.summary())【実行結果】



続いて、日本の株価が米国の株価の影響を受けているかのグレンジャー因果性の検定です。
### グレンジャー因果性の検定 米国の株価_対数1階階差⇒日本の株価_対数1階階差
# 帰無仮説「グレンジャー因果性は無い」
test_result = result.test_causality(causing=0, caused=1)
print(f'p値: {test_result.pvalue:.6f}')【実行結果】
$${p}$$値はとても小さな値であり、帰無仮説「グレンジャー因果性がない」は棄却され、グレンジャー因果性がある=日本の株価は米国の株価の影響を受けていると言えます。

続いて、米国の株価が日本の株価の影響を受けているかのグレンジャー因果性の検定です。
### グレンジャー因果性の検定 日本の株価_対数1階階差⇒米国の株価_対数1階階差
# 帰無仮説「グレンジャー因果性は無い」
test_result = result.test_causality(causing=1, caused=0)
print(f'p値: {test_result.pvalue:.6f}')【実行結果】
$${p}$$値は$${0.028}$$であり、$${5\%}$$水準で帰無仮説「グレンジャー因果性がない」は棄却され、グレンジャー因果性がある=米国の株価は日本の株価の影響を受けていると言えます。

直交化インパルス応答関数を可視化して、影響のタイミングを見てみます。
### 直行化インパルス応答関数の可視化
period = 10
irf = result.irf(period)
irf.plot(orth=True, figsize=(10, 7))
plt.tight_layout();【実行結果】

左下:日本の株価が米国の株価の影響を受ける図です。
ラグ1にピークがきています。
右上:米国の株価が日本の株価の影響を受ける図です。
ピークは少々曖昧な感じがいたしますが、ラグ1、ラグ3、ラグ9に少しずつありそうです。

課題3 ランダムウォーク系列を作って回帰してみよう
ドリフト付きランダムウォーク系列を2つ作って、回帰分析をします。
ではデータを作成しましょう。
### ドリフト付きランダムウォーク 1.データの作成
## 設定と準備
T = 100
## データx1の作成
# 設定
alpha1 = 0.1 # 切片
rng = np.random.default_rng(seed=0) # 乱数生成器
# xの作成
x = np.zeros(T)
x[0] = alpha1 + 0
for t in range(1, T):
x[t] = alpha1 + x[t-1] + rng.standard_normal()
## データyの作成
# 設定
alpha2 = 0.2 # 切片
rng = np.random.default_rng(seed=12) # 乱数生成器
# yの作成
y = np.zeros(T)
y[0] = alpha2 - 10
for t in range(1, T):
y[t] = alpha2 + y[t-1] + rng.standard_normal()
## データフレーム化
df10 = pd.DataFrame({'x': x, 'y': y})
print('df10.shape: ', df10.shape)
display(df10.head())
## 可視化
plt.figure(figsize=(10, 3))
plt.plot(x, label='x')
plt.plot(y, color='tab:red', label='y')
plt.xlabel('時間')
plt.ylabel('値')
plt.title('2つのランダムウォーク系列')
plt.grid(lw=0.5)
plt.legend();
plt.show()【実行結果】
$${x,y}$$を作成しました。

なんとなく2つのランダムウォーク系列は連動しているように見えます。

$${y}$$を目的変数、$${x}$$を説明変数にして回帰分析を実行します。
### ドリフト付きランダムウォーク 2.回帰分析の実行
# 係数のp値は極小、F値のp値も極小なので、回帰は有意に見える・・・見せかけの回帰
result = smf.ols(formula='y ~ x', data=df10).fit()
display(result.summary())【実行結果】
自由度調整済み決定係数は$${0.836}$$と当てはまりが良く、係数$${0.907}$$の$${p}$$値は$${5\%}$$水準で有意です、と言いたくなりますが、何の関係もない2つの変数なので「見せかけの回帰」なのでしょう。
ダービン・ワトソン比はほぼ0であり、残差に強い正の自己相関があることを示唆しています。

2つのドリフト付きランダムウォーク系列のADF検定(定常性の検定)を行います。
帰無仮説は「データは非定常である」です。
$${x}$$です。
### ドリフト付きランダムウォーク 3.ADF検定 系列1
# xは非定常である
result_adf = tsa.adfuller(x, maxlag=30, regression='c')
print('統計量:', result_adf[0])
print('p値 :', result_adf[1])
print('次数 :', result_adf[2])【実行結果】
帰無仮説を棄却できず、データは非定常でない、とは言えません。

$${y}$$です。
### ドリフト付きランダムウォーク 3.ADF検定 系列2
# yは非定常である
result_adf = tsa.adfuller(y, maxlag=30, regression='c')
print('統計量:', result_adf[0])
print('p値 :', result_adf[1])
print('次数 :', result_adf[2])【実行結果】
こちらも非定常です。

階差の次数を推定して、階差系列の回帰分析を行ってみます。
$${x}$$の階差の次数の推定です。
### ドリフト付きランダムウォーク 4.階差の次数の推定 系列1
d = pm.arima.ndiffs(x)
print('階差の次数:', d)【実行結果】

$${y}$$の階差の次数の推定です。
### ドリフト付きランダムウォーク 4.階差の次数の推定 系列2
d = pm.arima.ndiffs(y)
print('階差の次数:', d)【実行結果】

$${x,y}$$ともに1階階差をとってADF検定で定常性を確認しましょう。
### ドリフト付きランダムウォーク 5.1階階差のADF検定 系列1
# p値は極小・・・1階階差は定常性あり
# 1階階差データの作成
x_diff1 = np.diff(x, n=1)
# ADF検定
result_adf = tsa.adfuller(x_diff1, maxlag=30, regression='c')
print('統計量:', result_adf[0])
print('p値 :', result_adf[1])
print('次数 :', result_adf[2])【実行結果】

### ドリフト付きランダムウォーク 5.1階階差のADF検定 系列2
# p値は極小・・・1階階差は定常性あり
# 1階階差データの作成
y_diff1 = np.diff(y, n=1)
# ADF検定
result_adf = tsa.adfuller(y_diff1, maxlag=30, regression='c')
print('統計量:', result_adf[0])
print('p値 :', result_adf[1])
print('次数 :', result_adf[2])【実行結果】

$${x,y}$$ともに1階階差系列は「定常である」と言えそうです!
1階階差系列を可視化しましょう。
## 可視化
plt.figure(figsize=(10, 3))
plt.plot(x_diff1, lw=1, label='x_diff1')
plt.plot(y_diff1, lw=1, color='tab:red', label='y_diff1')
plt.xlabel('時間')
plt.ylabel('値')
plt.title('2つのランダムウォーク系列の1階階差')
plt.grid(lw=0.5)
plt.legend();
plt.show()【実行結果】
0を中心にして平均値に回帰する感じがいたします。

ではでは1階階差系列の回帰分析を行ってみます。
### ドリフト付きランダムウォーク 6.1階階差の回帰分析の実行
# F値のp値、係数のp値ともに有意ではない
result = smf.ols(formula='y_diff1 ~ x_diff1',
data=dict(y_diff1=y_diff1, x_diff1=x_diff1)).fit()
display(result.summary())【実行結果】
当てはまりはめっちゃ悪いですね!
係数の検定も帰無仮説を棄却できない感じです。
ただ、ダービン・ワトソン比は2に近似しており、残差の自己相関は無さそうです。

今回の写経は以上です。
シリーズの記事
次の記事
前の記事
目次
ブログの紹介
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の教科書です。
よかったらぜひ、お試しくださいませ。
最後までお読みいただきまして、ありがとうございました。
いいなと思ったら応援しよう!
応援ありがとうございます。これからもがんばって記事を作成します!