├── .DS_Store ├── .gitignore ├── AIC.Rmd ├── Central Limit Theorem.ipynb ├── Demo_model.ipynb ├── EM algorithm.ipynb ├── GLM.ipynb ├── LKJ prior.ipynb ├── MCMC ├── MCMC-blog.ipynb ├── MCMC-poisson.ipynb ├── MCMC.ipynb └── MCMC_HMC.ipynb ├── PoissonRegression.ipynb ├── ProbabilityDistribution.ipynb ├── PyMC3_practice.ipynb ├── README.md ├── TFP_LKJ.ipynb ├── WishartDistribution.ipynb ├── approx_prob_dist.ipynb └── data.RData /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kidaufo/StatisticalModeling/68007e022846355148102f1fcbe118ffdcb99268/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | fig/ 2 | .ipynb_checkpoints/ 3 | .png 4 | -------------------------------------------------------------------------------- /AIC.Rmd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kidaufo/StatisticalModeling/68007e022846355148102f1fcbe118ffdcb99268/AIC.Rmd -------------------------------------------------------------------------------- /Central Limit Theorem.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## 中心極限定理\n", 8 | "平均$\\mu$、分散$\\sigma^2$の任意の確率分布に従う母集団から抽出した標本において、サンプルサイズが大きくなるにつれて標本平均の分布は平均$\\mu$、分散$\\sigma^2/n$の正規分布に近づく。  \n", 9 | "\n", 10 | "sample from aribitrary probability distribution, sample mean" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "%matplotlib inline\n", 20 | "\n", 21 | "import numpy as np\n", 22 | "import scipy as sp\n", 23 | "import pandas as pd\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "from matplotlib import cm\n", 26 | "import seaborn as sns\n", 27 | "from tqdm import tqdm_notebook\n", 28 | "from scipy.stats import norm, poisson, gamma, uniform\n", 29 | "\n", 30 | "sns.set_style('white')\n", 31 | "sns.set_context('talk')\n", 32 | "\n", 33 | "np.random.seed(123)" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 25, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "from scipy import stats" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 26, 48 | "metadata": {}, 49 | "outputs": [], 50 | "source": [ 51 | "mu = 3.0\n", 52 | "n_sample = 100\n", 53 | "\n", 54 | "def poisson_means(n_sample):\n", 55 | " means = []\n", 56 | " for _ in range(1000):\n", 57 | " data = poisson.rvs(mu=mu, size=n_sample)\n", 58 | " means.append(data.mean())\n", 59 | "\n", 60 | " means = np.array(means)\n", 61 | " plt.figure()\n", 62 | " plt.hist(means)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 28, 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "data": { 72 | "image/png": "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\n", 73 | "text/plain": [ 74 | "
" 75 | ] 76 | }, 77 | "metadata": { 78 | "needs_background": "light" 79 | }, 80 | "output_type": "display_data" 81 | }, 82 | { 83 | "data": { 84 | "image/png": "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\n", 85 | "text/plain": [ 86 | "
" 87 | ] 88 | }, 89 | "metadata": { 90 | "needs_background": "light" 91 | }, 92 | "output_type": "display_data" 93 | }, 94 | { 95 | "data": { 96 | "image/png": "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\n", 97 | "text/plain": [ 98 | "
" 99 | ] 100 | }, 101 | "metadata": { 102 | "needs_background": "light" 103 | }, 104 | "output_type": "display_data" 105 | }, 106 | { 107 | "data": { 108 | "image/png": "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\n", 109 | "text/plain": [ 110 | "
" 111 | ] 112 | }, 113 | "metadata": { 114 | "needs_background": "light" 115 | }, 116 | "output_type": "display_data" 117 | } 118 | ], 119 | "source": [ 120 | "for i in [2, 10, 100, 1000]:\n", 121 | " poisson_means(i)" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": null, 127 | "metadata": {}, 128 | "outputs": [], 129 | "source": [] 130 | } 131 | ], 132 | "metadata": { 133 | "kernelspec": { 134 | "display_name": "Python 3", 135 | "language": "python", 136 | "name": "python3" 137 | }, 138 | "language_info": { 139 | "codemirror_mode": { 140 | "name": "ipython", 141 | "version": 3 142 | }, 143 | "file_extension": ".py", 144 | "mimetype": "text/x-python", 145 | "name": "python", 146 | "nbconvert_exporter": "python", 147 | "pygments_lexer": "ipython3", 148 | "version": "3.7.1" 149 | } 150 | }, 151 | "nbformat": 4, 152 | "nbformat_minor": 2 153 | } 154 | -------------------------------------------------------------------------------- /MCMC/MCMC_HMC.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline\n", 10 | "import numpy as np\n", 11 | "import scipy as sp\n", 12 | "import pandas as pd\n", 13 | "import matplotlib.pyplot as plt\n", 14 | "from matplotlib import cm\n", 15 | "import seaborn as sns\n", 16 | "from tqdm import tqdm_notebook\n", 17 | "from scipy.stats import norm, poisson, gamma, uniform\n", 18 | "sns.set(style=\"white\")" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "正規分布の母数を推定する。ただし、事前分布は(0, 1000)の一様分布とする。" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 6, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "data": { 35 | "text/plain": [ 36 | "" 37 | ] 38 | }, 39 | "execution_count": 6, 40 | "metadata": {}, 41 | "output_type": "execute_result" 42 | }, 43 | { 44 | "data": { 45 | "image/png": "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\n", 46 | "text/plain": [ 47 | "
" 48 | ] 49 | }, 50 | "metadata": { 51 | "needs_background": "light" 52 | }, 53 | "output_type": "display_data" 54 | } 55 | ], 56 | "source": [ 57 | "mu_true = 170\n", 58 | "sigma_true = 7\n", 59 | "n_sample = 1000\n", 60 | "\n", 61 | "prior_min = 0\n", 62 | "prior_max = 1000\n", 63 | "\n", 64 | "np.random.seed(7)\n", 65 | "data = norm.rvs(mu_true, sigma_true, n_sample)\n", 66 | "sns.distplot(data)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 7, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "prior = uniform(prior_min, prior_max)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "ハミルトニアンは位置エネルギーと運動エネルギーの和である。理想状態では物体はハミルトニアンが一定になるように運動する。ハミルトニアンが保存されることを用いて、物体の運動の軌跡を予測することができる。 \n", 83 | "\n", 84 | "ハミルトニアンを微分し。0と置くことでハミルトンの運動方程式を得る。これをleap frog法により解くことで、奇跡が予測できる。運動量と位置を交互に更新していくことで、ハミルトニアンを高い精度で保存する方法。 \n", 85 | "\n", 86 | "質量m=1、重力加速度g=1とすると、位置エネルギーはhで表される。HMC法では、hはパラメータ$\\theta$の関数であり、マイナスをとった対数事後分布を表す。つまり、事後確率が高いところは高さが低いところに相当し、物体が通ることが多くなる。また、運動エネルギーは$\\frac{1}{2m}p^2$である。pは標準正規分布からのサンプルである。 \n", 87 | "\n", 88 | "事後分布と標準正規分布の同時分布のカーネルがハミルトニアンになる。このとき、新しい候補の受容確率はハミルトニアンの差の指数となり、ハミルトニアンの差は近似誤差のみで、0に近い値をとるので、受容確率は1に近くなる。" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 46, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [ 97 | "# x[0]: mu, x[1]: sigma\n", 98 | "def log_posterior_kernel(x, mu, sigma):\n", 99 | " return n_sample * np.log(sigma ** 2) / 2 + np.square(x - mu).sum() / (2 * sigma ** 2)\n", 100 | "\n", 101 | "# それぞれのパラメータによる微分を並べる\n", 102 | "def log_posterior_kernel_diff(x, mu, sigma):\n", 103 | " dmu = -(x - mu).sum() / sigma ** 2\n", 104 | " dsigma = n_sample / (2 * sigma ** 2) - np.square(x - mu).sum() / (2 * sigma ** 4)\n", 105 | " return np.array([dmu, dsigma])" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 82, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/latex": [ 116 | "$\\displaystyle \\frac{x \\log{\\left(sig^{2} \\right)}}{2}$" 117 | ], 118 | "text/plain": [ 119 | "x*log(sig**2)/2" 120 | ] 121 | }, 122 | "execution_count": 82, 123 | "metadata": {}, 124 | "output_type": "execute_result" 125 | } 126 | ], 127 | "source": [ 128 | "import sympy\n", 129 | "from sympy import symbols\n", 130 | "\n", 131 | "n, x, mu, sig = symbols('x y mu sig' )\n", 132 | "n * sympy.log(sig ** 2) / 2 " 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 50, 138 | "metadata": {}, 139 | "outputs": [ 140 | { 141 | "data": { 142 | "text/plain": [ 143 | "" 144 | ] 145 | }, 146 | "execution_count": 50, 147 | "metadata": {}, 148 | "output_type": "execute_result" 149 | }, 150 | { 151 | "data": { 152 | "image/png": "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\n", 153 | "text/plain": [ 154 | "
" 155 | ] 156 | }, 157 | "metadata": { 158 | "needs_background": "light" 159 | }, 160 | "output_type": "display_data" 161 | } 162 | ], 163 | "source": [ 164 | "# パラメータと対数事後確率のカーネルの contour plot\n", 165 | "# vectorizeするのは難しそう。。\n", 166 | "x1 = np.linspace(150, 200)\n", 167 | "x2 = np.linspace(5, 10)\n", 168 | "X1, X2 = np.meshgrid(x1, x2)\n", 169 | "Z = np.array([log_posterior_kernel(data, a, b) for a, b in zip(X1.flatten(), X2.flatten())])\n", 170 | "Z = Z.reshape(X1.shape)\n", 171 | "\n", 172 | "plt.contour(X1, X2, Z, cmap=cm.Blues)\n", 173 | "plt.xlabel(\"mu\")\n", 174 | "plt.ylabel(\"s\")\n", 175 | "plt.colorbar()" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 51, 181 | "metadata": {}, 182 | "outputs": [ 183 | { 184 | "data": { 185 | "text/plain": [ 186 | "array([-0.37088578, 0.16181131])" 187 | ] 188 | }, 189 | "execution_count": 51, 190 | "metadata": {}, 191 | "output_type": "execute_result" 192 | } 193 | ], 194 | "source": [ 195 | "np.random.randn(2)" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 22, 201 | "metadata": {}, 202 | "outputs": [ 203 | { 204 | "ename": "NameError", 205 | "evalue": "name 'T' is not defined", 206 | "output_type": "error", 207 | "traceback": [ 208 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 209 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 210 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0maccepted\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 211 | "\u001b[0;31mNameError\u001b[0m: name 'T' is not defined" 212 | ] 213 | } 214 | ], 215 | "source": [ 216 | "t = 1000\n", 217 | "l = 100\n", 218 | "eps = 0.01\n", 219 | "\n", 220 | "# initial parameter\n", 221 | "current_params = [150, 5]\n", 222 | "\n", 223 | "# generate random variables from standard normal\n", 224 | "p = np.random.randn(2)\n", 225 | "\n", 226 | "# leap frog\n", 227 | "\n", 228 | "\n", 229 | "# accept the proposal or not\n", 230 | "\n", 231 | "\n", 232 | "res = []\n", 233 | "for _ in range(T):\n", 234 | " accepted = False\n", 235 | " p = np.random.randn()\n", 236 | " theta_prop, p_prop = leap_frog_step(theta, p, L, eps)\n", 237 | " r = np.exp(hamiltonian(theta, p) - hamiltonian(theta_prop, p_prop))\n", 238 | "# print(r)\n", 239 | " if np.random.rand() < r:\n", 240 | " accepted = True\n", 241 | " theta= theta_prop\n", 242 | " p = p_prop\n", 243 | " res.append([theta_prop, p_prop, accepted])" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 52, 249 | "metadata": {}, 250 | "outputs": [], 251 | "source": [ 252 | "p = np.random.randn(2)\n", 253 | "theta = [150, 5]\n", 254 | "p -= eps * log_posterior_kernel_diff(data , theta[0], theta[1]) / 2\n", 255 | "theta += eps * p\n", 256 | "p -= eps * log_posterior_kernel_diff(data , theta[0], theta[1]) / 2" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 58, 262 | "metadata": {}, 263 | "outputs": [ 264 | { 265 | "data": { 266 | "text/plain": [ 267 | "14768.320956095447" 268 | ] 269 | }, 270 | "execution_count": 58, 271 | "metadata": {}, 272 | "output_type": "execute_result" 273 | } 274 | ], 275 | "source": [ 276 | "log_posterior_kernel(data, theta[0], theta[1]) + (p**2).sum() / 2" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 60, 282 | "metadata": {}, 283 | "outputs": [], 284 | "source": [ 285 | "def hamiltonian(theta, p):\n", 286 | " return log_posterior_kernel(data, theta[0], theta[1]) + (p**2).sum() / 2\n", 287 | "\n", 288 | "def leap_frog(theta, p, L, eps):\n", 289 | " \"\"\"\n", 290 | " x: parameter\n", 291 | " y: p\n", 292 | " \"\"\"\n", 293 | " res = [[theta, p, hamiltonian(theta, p)]]\n", 294 | " for _ in range(L):\n", 295 | " p -= eps * log_posterior_kernel_diff(data , theta[0], theta[1]) / 2\n", 296 | " theta += eps * p\n", 297 | " p -= eps * log_posterior_kernel_diff(data , theta[0], theta[1]) / 2\n", 298 | " res.append([theta, p, hamiltonian(theta, p)])\n", 299 | " return res\n", 300 | "\n", 301 | "\n", 302 | "\n", 303 | "# res = []\n", 304 | "# for _ in range(T):\n", 305 | "# accepted = False\n", 306 | "# p = np.random.randn()\n", 307 | "# theta_prop, p_prop = leap_frog_step(theta, p, L, eps)\n", 308 | "# r = np.exp(hamiltonian(theta, p) - hamiltonian(theta_prop, p_prop))\n", 309 | "# # print(r)\n", 310 | "# if np.random.rand() < r:\n", 311 | "# accepted = True\n", 312 | "# theta= theta_prop\n", 313 | "# p = p_prop\n", 314 | "# res.append([theta_prop, p_prop, accepted])" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 65, 320 | "metadata": {}, 321 | "outputs": [], 322 | "source": [ 323 | "p = np.random.randn(2)\n", 324 | "theta = [150, 5]\n", 325 | "res = leap_frog(theta, p, 100, 0.01)" 326 | ] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": 66, 331 | "metadata": {}, 332 | "outputs": [ 333 | { 334 | "data": { 335 | "text/plain": [ 336 | "[[[150, 5], array([45.78211507, 25.11116066]), 10359.26546501995],\n", 337 | " [array([220.41219201, 28.21704146]),\n", 338 | " array([45.78211507, 25.11116066]),\n", 339 | " 10342.784129513393],\n", 340 | " [array([220.41219201, 28.21704146]),\n", 341 | " array([45.78211507, 25.11116066]),\n", 342 | " 10231.562578343654],\n", 343 | " [array([220.41219201, 28.21704146]),\n", 344 | " array([45.78211507, 25.11116066]),\n", 345 | " 10038.746105992966],\n", 346 | " [array([220.41219201, 28.21704146]),\n", 347 | " array([45.78211507, 25.11116066]),\n", 348 | " 9784.734228510415],\n", 349 | " [array([220.41219201, 28.21704146]),\n", 350 | " array([45.78211507, 25.11116066]),\n", 351 | " 9492.861200732805],\n", 352 | " [array([220.41219201, 28.21704146]),\n", 353 | " array([45.78211507, 25.11116066]),\n", 354 | " 9185.407388982954],\n", 355 | " [array([220.41219201, 28.21704146]),\n", 356 | " array([45.78211507, 25.11116066]),\n", 357 | " 8880.913235514561],\n", 358 | " [array([220.41219201, 28.21704146]),\n", 359 | " array([45.78211507, 25.11116066]),\n", 360 | " 8593.01347049296],\n", 361 | " [array([220.41219201, 28.21704146]),\n", 362 | " array([45.78211507, 25.11116066]),\n", 363 | " 8330.474244009012],\n", 364 | " [array([220.41219201, 28.21704146]),\n", 365 | " array([45.78211507, 25.11116066]),\n", 366 | " 8097.930800267921],\n", 367 | " [array([220.41219201, 28.21704146]),\n", 368 | " array([45.78211507, 25.11116066]),\n", 369 | " 7896.885720508933],\n", 370 | " [array([220.41219201, 28.21704146]),\n", 371 | " array([45.78211507, 25.11116066]),\n", 372 | " 7726.68343116028],\n", 373 | " [array([220.41219201, 28.21704146]),\n", 374 | " array([45.78211507, 25.11116066]),\n", 375 | " 7585.323258417608],\n", 376 | " [array([220.41219201, 28.21704146]),\n", 377 | " array([45.78211507, 25.11116066]),\n", 378 | " 7470.072791662333],\n", 379 | " [array([220.41219201, 28.21704146]),\n", 380 | " array([45.78211507, 25.11116066]),\n", 381 | " 7377.896379377075],\n", 382 | " [array([220.41219201, 28.21704146]),\n", 383 | " array([45.78211507, 25.11116066]),\n", 384 | " 7305.734449088767],\n", 385 | " [array([220.41219201, 28.21704146]),\n", 386 | " array([45.78211507, 25.11116066]),\n", 387 | " 7250.672269884444],\n", 388 | " [array([220.41219201, 28.21704146]),\n", 389 | " array([45.78211507, 25.11116066]),\n", 390 | " 7210.031689471114],\n", 391 | " [array([220.41219201, 28.21704146]),\n", 392 | " array([45.78211507, 25.11116066]),\n", 393 | " 7181.411921069739],\n", 394 | " [array([220.41219201, 28.21704146]),\n", 395 | " array([45.78211507, 25.11116066]),\n", 396 | " 7162.698310592624],\n", 397 | " [array([220.41219201, 28.21704146]),\n", 398 | " array([45.78211507, 25.11116066]),\n", 399 | " 7152.0521682025665],\n", 400 | " [array([220.41219201, 28.21704146]),\n", 401 | " array([45.78211507, 25.11116066]),\n", 402 | " 7147.89035391228],\n", 403 | " [array([220.41219201, 28.21704146]),\n", 404 | " array([45.78211507, 25.11116066]),\n", 405 | " 7148.860177731191],\n", 406 | " [array([220.41219201, 28.21704146]),\n", 407 | " array([45.78211507, 25.11116066]),\n", 408 | " 7153.813031375219],\n", 409 | " [array([220.41219201, 28.21704146]),\n", 410 | " array([45.78211507, 25.11116066]),\n", 411 | " 7161.778745021877],\n", 412 | " [array([220.41219201, 28.21704146]),\n", 413 | " array([45.78211507, 25.11116066]),\n", 414 | " 7171.941743250148],\n", 415 | " [array([220.41219201, 28.21704146]),\n", 416 | " array([45.78211507, 25.11116066]),\n", 417 | " 7183.619497474319],\n", 418 | " [array([220.41219201, 28.21704146]),\n", 419 | " array([45.78211507, 25.11116066]),\n", 420 | " 7196.243422476495],\n", 421 | " [array([220.41219201, 28.21704146]),\n", 422 | " array([45.78211507, 25.11116066]),\n", 423 | " 7209.342162362122],\n", 424 | " [array([220.41219201, 28.21704146]),\n", 425 | " array([45.78211507, 25.11116066]),\n", 426 | " 7222.52710264967],\n", 427 | " [array([220.41219201, 28.21704146]),\n", 428 | " array([45.78211507, 25.11116066]),\n", 429 | " 7235.479894681125],\n", 430 | " [array([220.41219201, 28.21704146]),\n", 431 | " array([45.78211507, 25.11116066]),\n", 432 | " 7247.94176294267],\n", 433 | " [array([220.41219201, 28.21704146]),\n", 434 | " array([45.78211507, 25.11116066]),\n", 435 | " 7259.704370378891],\n", 436 | " [array([220.41219201, 28.21704146]),\n", 437 | " array([45.78211507, 25.11116066]),\n", 438 | " 7270.60203203222],\n", 439 | " [array([220.41219201, 28.21704146]),\n", 440 | " array([45.78211507, 25.11116066]),\n", 441 | " 7280.50508759225],\n", 442 | " [array([220.41219201, 28.21704146]),\n", 443 | " array([45.78211507, 25.11116066]),\n", 444 | " 7289.314265257241],\n", 445 | " [array([220.41219201, 28.21704146]),\n", 446 | " array([45.78211507, 25.11116066]),\n", 447 | " 7296.955890721801],\n", 448 | " [array([220.41219201, 28.21704146]),\n", 449 | " array([45.78211507, 25.11116066]),\n", 450 | " 7303.377815057891],\n", 451 | " [array([220.41219201, 28.21704146]),\n", 452 | " array([45.78211507, 25.11116066]),\n", 453 | " 7308.545953263418],\n", 454 | " [array([220.41219201, 28.21704146]),\n", 455 | " array([45.78211507, 25.11116066]),\n", 456 | " 7312.441341160674],\n", 457 | " [array([220.41219201, 28.21704146]),\n", 458 | " array([45.78211507, 25.11116066]),\n", 459 | " 7315.057632176335],\n", 460 | " [array([220.41219201, 28.21704146]),\n", 461 | " array([45.78211507, 25.11116066]),\n", 462 | " 7316.398967467017],\n", 463 | " [array([220.41219201, 28.21704146]),\n", 464 | " array([45.78211507, 25.11116066]),\n", 465 | " 7316.478163059148],\n", 466 | " [array([220.41219201, 28.21704146]),\n", 467 | " array([45.78211507, 25.11116066]),\n", 468 | " 7315.315166352646],\n", 469 | " [array([220.41219201, 28.21704146]),\n", 470 | " array([45.78211507, 25.11116066]),\n", 471 | " 7312.935741694299],\n", 472 | " [array([220.41219201, 28.21704146]),\n", 473 | " array([45.78211507, 25.11116066]),\n", 474 | " 7309.3703509443785],\n", 475 | " [array([220.41219201, 28.21704146]),\n", 476 | " array([45.78211507, 25.11116066]),\n", 477 | " 7304.65320020603],\n", 478 | " [array([220.41219201, 28.21704146]),\n", 479 | " array([45.78211507, 25.11116066]),\n", 480 | " 7298.82142830832],\n", 481 | " [array([220.41219201, 28.21704146]),\n", 482 | " array([45.78211507, 25.11116066]),\n", 483 | " 7291.91441635837],\n", 484 | " [array([220.41219201, 28.21704146]),\n", 485 | " array([45.78211507, 25.11116066]),\n", 486 | " 7283.973200815119],\n", 487 | " [array([220.41219201, 28.21704146]),\n", 488 | " array([45.78211507, 25.11116066]),\n", 489 | " 7275.039975180385],\n", 490 | " [array([220.41219201, 28.21704146]),\n", 491 | " array([45.78211507, 25.11116066]),\n", 492 | " 7265.157667630994],\n", 493 | " [array([220.41219201, 28.21704146]),\n", 494 | " array([45.78211507, 25.11116066]),\n", 495 | " 7254.369583795529],\n", 496 | " [array([220.41219201, 28.21704146]),\n", 497 | " array([45.78211507, 25.11116066]),\n", 498 | " 7242.71910546662],\n", 499 | " [array([220.41219201, 28.21704146]),\n", 500 | " array([45.78211507, 25.11116066]),\n", 501 | " 7230.249437381737],\n", 502 | " [array([220.41219201, 28.21704146]),\n", 503 | " array([45.78211507, 25.11116066]),\n", 504 | " 7217.003395341594],\n", 505 | " [array([220.41219201, 28.21704146]),\n", 506 | " array([45.78211507, 25.11116066]),\n", 507 | " 7203.0232298982955],\n", 508 | " [array([220.41219201, 28.21704146]),\n", 509 | " array([45.78211507, 25.11116066]),\n", 510 | " 7188.350480662992],\n", 511 | " [array([220.41219201, 28.21704146]),\n", 512 | " array([45.78211507, 25.11116066]),\n", 513 | " 7173.025856978032],\n", 514 | " [array([220.41219201, 28.21704146]),\n", 515 | " array([45.78211507, 25.11116066]),\n", 516 | " 7157.089141290713],\n", 517 | " [array([220.41219201, 28.21704146]),\n", 518 | " array([45.78211507, 25.11116066]),\n", 519 | " 7140.5791120709055],\n", 520 | " [array([220.41219201, 28.21704146]),\n", 521 | " array([45.78211507, 25.11116066]),\n", 522 | " 7123.533483546439],\n", 523 | " [array([220.41219201, 28.21704146]),\n", 524 | " array([45.78211507, 25.11116066]),\n", 525 | " 7105.988859899791],\n", 526 | " [array([220.41219201, 28.21704146]),\n", 527 | " array([45.78211507, 25.11116066]),\n", 528 | " 7087.980701886488],\n", 529 | " [array([220.41219201, 28.21704146]),\n", 530 | " array([45.78211507, 25.11116066]),\n", 531 | " 7069.5433041079195],\n", 532 | " [array([220.41219201, 28.21704146]),\n", 533 | " array([45.78211507, 25.11116066]),\n", 534 | " 7050.709781405603],\n", 535 | " [array([220.41219201, 28.21704146]),\n", 536 | " array([45.78211507, 25.11116066]),\n", 537 | " 7031.512063045906],\n", 538 | " [array([220.41219201, 28.21704146]),\n", 539 | " array([45.78211507, 25.11116066]),\n", 540 | " 7011.980893538743],\n", 541 | " [array([220.41219201, 28.21704146]),\n", 542 | " array([45.78211507, 25.11116066]),\n", 543 | " 6992.14583908463],\n", 544 | " [array([220.41219201, 28.21704146]),\n", 545 | " array([45.78211507, 25.11116066]),\n", 546 | " 6972.035298775282],\n", 547 | " [array([220.41219201, 28.21704146]),\n", 548 | " array([45.78211507, 25.11116066]),\n", 549 | " 6951.676519786365],\n", 550 | " [array([220.41219201, 28.21704146]),\n", 551 | " array([45.78211507, 25.11116066]),\n", 552 | " 6931.095615899708],\n", 553 | " [array([220.41219201, 28.21704146]),\n", 554 | " array([45.78211507, 25.11116066]),\n", 555 | " 6910.317588778097],\n", 556 | " [array([220.41219201, 28.21704146]),\n", 557 | " array([45.78211507, 25.11116066]),\n", 558 | " 6889.36635149062],\n", 559 | " [array([220.41219201, 28.21704146]),\n", 560 | " array([45.78211507, 25.11116066]),\n", 561 | " 6868.264753851827],\n", 562 | " [array([220.41219201, 28.21704146]),\n", 563 | " array([45.78211507, 25.11116066]),\n", 564 | " 6847.034609195096],\n", 565 | " [array([220.41219201, 28.21704146]),\n", 566 | " array([45.78211507, 25.11116066]),\n", 567 | " 6825.696722250436],\n", 568 | " [array([220.41219201, 28.21704146]),\n", 569 | " array([45.78211507, 25.11116066]),\n", 570 | " 6804.270917840771],\n", 571 | " [array([220.41219201, 28.21704146]),\n", 572 | " array([45.78211507, 25.11116066]),\n", 573 | " 6782.776070148968],\n", 574 | " [array([220.41219201, 28.21704146]),\n", 575 | " array([45.78211507, 25.11116066]),\n", 576 | " 6761.230132341609],\n", 577 | " [array([220.41219201, 28.21704146]),\n", 578 | " array([45.78211507, 25.11116066]),\n", 579 | " 6739.650166364838],\n", 580 | " [array([220.41219201, 28.21704146]),\n", 581 | " array([45.78211507, 25.11116066]),\n", 582 | " 6718.052372753682],\n", 583 | " [array([220.41219201, 28.21704146]),\n", 584 | " array([45.78211507, 25.11116066]),\n", 585 | " 6696.452120318897],\n", 586 | " [array([220.41219201, 28.21704146]),\n", 587 | " array([45.78211507, 25.11116066]),\n", 588 | " 6674.863975595403],\n", 589 | " [array([220.41219201, 28.21704146]),\n", 590 | " array([45.78211507, 25.11116066]),\n", 591 | " 6653.301731953971],\n", 592 | " [array([220.41219201, 28.21704146]),\n", 593 | " array([45.78211507, 25.11116066]),\n", 594 | " 6631.7784382932505],\n", 595 | " [array([220.41219201, 28.21704146]),\n", 596 | " array([45.78211507, 25.11116066]),\n", 597 | " 6610.30642724274],\n", 598 | " [array([220.41219201, 28.21704146]),\n", 599 | " array([45.78211507, 25.11116066]),\n", 600 | " 6588.8973428193],\n", 601 | " [array([220.41219201, 28.21704146]),\n", 602 | " array([45.78211507, 25.11116066]),\n", 603 | " 6567.562167490172],\n", 604 | " [array([220.41219201, 28.21704146]),\n", 605 | " array([45.78211507, 25.11116066]),\n", 606 | " 6546.311248604663],\n", 607 | " [array([220.41219201, 28.21704146]),\n", 608 | " array([45.78211507, 25.11116066]),\n", 609 | " 6525.154324164687],\n", 610 | " [array([220.41219201, 28.21704146]),\n", 611 | " array([45.78211507, 25.11116066]),\n", 612 | " 6504.100547911346],\n", 613 | " [array([220.41219201, 28.21704146]),\n", 614 | " array([45.78211507, 25.11116066]),\n", 615 | " 6483.158513710863],\n", 616 | " [array([220.41219201, 28.21704146]),\n", 617 | " array([45.78211507, 25.11116066]),\n", 618 | " 6462.336279228525],\n", 619 | " [array([220.41219201, 28.21704146]),\n", 620 | " array([45.78211507, 25.11116066]),\n", 621 | " 6441.641388883937],\n", 622 | " [array([220.41219201, 28.21704146]),\n", 623 | " array([45.78211507, 25.11116066]),\n", 624 | " 6421.080896084891],\n", 625 | " [array([220.41219201, 28.21704146]),\n", 626 | " array([45.78211507, 25.11116066]),\n", 627 | " 6400.661384740626],\n", 628 | " [array([220.41219201, 28.21704146]),\n", 629 | " array([45.78211507, 25.11116066]),\n", 630 | " 6380.388990058293],\n", 631 | " [array([220.41219201, 28.21704146]),\n", 632 | " array([45.78211507, 25.11116066]),\n", 633 | " 6360.269418628925],\n", 634 | " [array([220.41219201, 28.21704146]),\n", 635 | " array([45.78211507, 25.11116066]),\n", 636 | " 6340.307967811467]]" 637 | ] 638 | }, 639 | "execution_count": 66, 640 | "metadata": {}, 641 | "output_type": "execute_result" 642 | } 643 | ], 644 | "source": [ 645 | "res" 646 | ] 647 | }, 648 | { 649 | "cell_type": "code", 650 | "execution_count": null, 651 | "metadata": {}, 652 | "outputs": [], 653 | "source": [] 654 | } 655 | ], 656 | "metadata": { 657 | "kernelspec": { 658 | "display_name": "Python 3", 659 | "language": "python", 660 | "name": "python3" 661 | }, 662 | "language_info": { 663 | "codemirror_mode": { 664 | "name": "ipython", 665 | "version": 3 666 | }, 667 | "file_extension": ".py", 668 | "mimetype": "text/x-python", 669 | "name": "python", 670 | "nbconvert_exporter": "python", 671 | "pygments_lexer": "ipython3", 672 | "version": "3.7.1" 673 | } 674 | }, 675 | "nbformat": 4, 676 | "nbformat_minor": 2 677 | } 678 | -------------------------------------------------------------------------------- /PyMC3_practice.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline\n", 10 | "\n", 11 | "from warnings import filterwarnings\n", 12 | "\n", 13 | "from matplotlib.patches import Ellipse\n", 14 | "from matplotlib import pyplot as plt\n", 15 | "import numpy as np\n", 16 | "import pymc3 as pm\n", 17 | "import seaborn as sns" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "with pm.Model() as model:\n", 27 | " mu = pm.Normal('mu', mu=0, sd=1)\n", 28 | " obs = pm.Normal('obs', mu=mu, sd=1, observed=np.random.randn(100))" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "モデルはrandom variables (RVs) への参照をもち、logpやその勾配を計算する。" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 12, 41 | "metadata": {}, 42 | "outputs": [ 43 | { 44 | "data": { 45 | "text/plain": [ 46 | "([mu, obs], [mu], [obs])" 47 | ] 48 | }, 49 | "execution_count": 12, 50 | "metadata": {}, 51 | "output_type": "execute_result" 52 | } 53 | ], 54 | "source": [ 55 | "model.basic_RVs, model.free_RVs, model.observed_RVs" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 13, 61 | "metadata": {}, 62 | "outputs": [ 63 | { 64 | "data": { 65 | "text/plain": [ 66 | "array(-155.78695688)" 67 | ] 68 | }, 69 | "execution_count": 13, 70 | "metadata": {}, 71 | "output_type": "execute_result" 72 | } 73 | ], 74 | "source": [ 75 | "# log probability density function\n", 76 | "model.logp({'mu': 0})" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 23, 82 | "metadata": {}, 83 | "outputs": [ 84 | { 85 | "data": { 86 | "text/plain": [ 87 | "array(-0.91893853)" 88 | ] 89 | }, 90 | "execution_count": 23, 91 | "metadata": {}, 92 | "output_type": "execute_result" 93 | } 94 | ], 95 | "source": [ 96 | "with pm.Model():\n", 97 | " x = pm.Normal('x', mu=0, sd=1)\n", 98 | "\n", 99 | "x.logp({'x': 0})" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "PyMC3では制約ありのRVsは制約なしになるように自動的に変換される。 \n", 107 | "include_transformed=Trueを引数に与えることで、変換後のパラメータの結果も表示されるようになる。" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 11, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "data": { 117 | "text/plain": [ 118 | "[x_log__, y_interval__]" 119 | ] 120 | }, 121 | "execution_count": 11, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "with pm.Model() as model:\n", 128 | " x = pm.Gamma('x', mu=1, sd=1)\n", 129 | " y = pm.Uniform('y', lower=-1, upper=2)\n", 130 | " z = pm.Deterministic('z', x + y)\n", 131 | " \n", 132 | "model.free_RVs" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 15, 138 | "metadata": {}, 139 | "outputs": [ 140 | { 141 | "data": { 142 | "text/plain": [ 143 | "[x, y, z]" 144 | ] 145 | }, 146 | "execution_count": 15, 147 | "metadata": {}, 148 | "output_type": "execute_result" 149 | } 150 | ], 151 | "source": [ 152 | "model.deterministics" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "### 初期値の設定 \n", 160 | "基本的に初期値は自動的に設定されるが、手動で変更することも可能。" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 17, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "text/plain": [ 171 | "array([1., 1., 1., 1., 1.])" 172 | ] 173 | }, 174 | "execution_count": 17, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "# initial values\n", 181 | "with pm.Model():\n", 182 | " x = pm.Normal('x', mu=1, sd=2, shape=5)\n", 183 | "\n", 184 | "x.tag.test_value" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 27, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "data": { 194 | "text/plain": [ 195 | "array([ 0.89674484, 0.3252694 , -0.24739399, 0.77750987, 0.30550593])" 196 | ] 197 | }, 198 | "execution_count": 27, 199 | "metadata": {}, 200 | "output_type": "execute_result" 201 | } 202 | ], 203 | "source": [ 204 | "with pm.Model():\n", 205 | " x = pm.Normal('x', mu=0, sd=1, shape=5, testval=np.random.randn(5))\n", 206 | "\n", 207 | "x.tag.test_value" 208 | ] 209 | }, 210 | { 211 | "cell_type": "markdown", 212 | "metadata": {}, 213 | "source": [ 214 | "### サンプリング\n", 215 | "NUTSでは良い初期値を探索するために、変分推論などを用いる。 \n", 216 | "NUTSでのサンプリングが難しい場合、メトロポリス法を使っても改善することは少なく、初期値やパラメータを調整する方が良い。" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": 18, 222 | "metadata": {}, 223 | "outputs": [ 224 | { 225 | "data": { 226 | "text/plain": [ 227 | "['BinaryGibbsMetropolis',\n", 228 | " 'BinaryMetropolis',\n", 229 | " 'CSG',\n", 230 | " 'CategoricalGibbsMetropolis',\n", 231 | " 'CauchyProposal',\n", 232 | " 'CompoundStep',\n", 233 | " 'DEMetropolis',\n", 234 | " 'ElemwiseCategorical',\n", 235 | " 'EllipticalSlice',\n", 236 | " 'HamiltonianMC',\n", 237 | " 'LaplaceProposal',\n", 238 | " 'Metropolis',\n", 239 | " 'MultivariateNormalProposal',\n", 240 | " 'NUTS',\n", 241 | " 'NormalProposal',\n", 242 | " 'PoissonProposal',\n", 243 | " 'SGFS',\n", 244 | " 'SMC',\n", 245 | " 'Slice']" 246 | ] 247 | }, 248 | "execution_count": 18, 249 | "metadata": {}, 250 | "output_type": "execute_result" 251 | } 252 | ], 253 | "source": [ 254 | "list(filter(lambda x: x[0].isupper(), dir(pm.step_methods)))" 255 | ] 256 | }, 257 | { 258 | "cell_type": "markdown", 259 | "metadata": {}, 260 | "source": [ 261 | "### 変分推論" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 21, 267 | "metadata": {}, 268 | "outputs": [ 269 | { 270 | "name": "stderr", 271 | "output_type": "stream", 272 | "text": [ 273 | "100%|██████████| 10000/10000 [00:54<00:00, 184.92it/s]\n" 274 | ] 275 | } 276 | ], 277 | "source": [ 278 | "w = pm.floatX([.2, .8])\n", 279 | "mu = pm.floatX([-.3, .5])\n", 280 | "sd = pm.floatX([.1, .1])\n", 281 | "with pm.Model() as model:\n", 282 | " pm.NormalMixture('x', w=w, mu=mu, sd=sd)\n", 283 | " approx = pm.fit(method=pm.SVGD(n_particles=200, jitter=1.))" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 22, 289 | "metadata": {}, 290 | "outputs": [ 291 | { 292 | "data": { 293 | "image/png": "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\n", 294 | "text/plain": [ 295 | "
" 296 | ] 297 | }, 298 | "metadata": { 299 | "needs_background": "light" 300 | }, 301 | "output_type": "display_data" 302 | } 303 | ], 304 | "source": [ 305 | "plt.figure()\n", 306 | "trace = approx.sample(10000)\n", 307 | "sns.distplot(trace['x']);" 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "metadata": {}, 313 | "source": [ 314 | "### デバッグ\n", 315 | "theanoのprinting.Printを用いる。" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 24, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "name": "stderr", 325 | "output_type": "stream", 326 | "text": [ 327 | "Only 5 samples in chain.\n", 328 | "Sequential sampling (1 chains in 1 job)\n", 329 | "CompoundStep\n", 330 | ">Metropolis: [sd]\n", 331 | ">Metropolis: [mu]\n", 332 | "/Users/yuho.kida/python_DS/lib/python3.7/site-packages/pymc3/sampling.py:476: UserWarning: The number of samples is too small to check convergence reliably.\n", 333 | " warnings.warn(\"The number of samples is too small to check convergence reliably.\")\n" 334 | ] 335 | }, 336 | { 337 | "data": { 338 | "image/png": "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\n", 339 | "text/plain": [ 340 | "
" 341 | ] 342 | }, 343 | "metadata": { 344 | "needs_background": "light" 345 | }, 346 | "output_type": "display_data" 347 | } 348 | ], 349 | "source": [ 350 | "from io import StringIO\n", 351 | "import theano.tensor as tt\n", 352 | "import sys\n", 353 | "\n", 354 | "x = np.random.randn(100)\n", 355 | "\n", 356 | "old_stdout = sys.stdout\n", 357 | "mystdout = sys.stdout = StringIO()\n", 358 | "\n", 359 | "with pm.Model() as model:\n", 360 | " mu = pm.Normal('mu', mu=0, sd=1)\n", 361 | " sd = pm.Normal('sd', mu=0, sd=1)\n", 362 | "\n", 363 | " mu_print = tt.printing.Print('mu')(mu)\n", 364 | " sd_print = tt.printing.Print('sd')(sd)\n", 365 | "\n", 366 | " obs = pm.Normal('obs', mu=mu_print, sd=sd_print, observed=x)\n", 367 | " step = pm.Metropolis()\n", 368 | " trace = pm.sample(5, step, tune=0, chains=1, progressbar=False) # Make sure not to draw too many samples\n", 369 | "\n", 370 | "sys.stdout = old_stdout\n", 371 | "\n", 372 | "output = mystdout.getvalue().split('\\n')\n", 373 | "mulines = [s for s in output if 'mu' in s]\n", 374 | "\n", 375 | "muvals = [line.split()[-1] for line in mulines]\n", 376 | "plt.plot(np.arange(0, len(muvals)), muvals)\n", 377 | "plt.xlabel('proposal iteration')\n", 378 | "plt.ylabel('mu value');" 379 | ] 380 | }, 381 | { 382 | "cell_type": "markdown", 383 | "metadata": {}, 384 | "source": [ 385 | "### Mass matrix\n", 386 | "\n", 387 | "HMC法のパラメータは3つ。\n", 388 | "\n", 389 | "1. discretization time ϵ\n", 390 | "2. mass matrix Σ−1\n", 391 | "3. number of steps taken L\n", 392 | "\n" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": null, 398 | "metadata": {}, 399 | "outputs": [], 400 | "source": [] 401 | } 402 | ], 403 | "metadata": { 404 | "kernelspec": { 405 | "display_name": "Python 3", 406 | "language": "python", 407 | "name": "python3" 408 | }, 409 | "language_info": { 410 | "codemirror_mode": { 411 | "name": "ipython", 412 | "version": 3 413 | }, 414 | "file_extension": ".py", 415 | "mimetype": "text/x-python", 416 | "name": "python", 417 | "nbconvert_exporter": "python", 418 | "pygments_lexer": "ipython3", 419 | "version": "3.7.1" 420 | } 421 | }, 422 | "nbformat": 4, 423 | "nbformat_minor": 2 424 | } 425 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # StatisticalModeling 2 | This repository incluldes Python/R sciripts for statistical modeling. This is mostly for personal use. 3 | -------------------------------------------------------------------------------- /data.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kidaufo/StatisticalModeling/68007e022846355148102f1fcbe118ffdcb99268/data.RData --------------------------------------------------------------------------------