Last active
February 25, 2019 20:30
-
-
Save shotahorii/cc2508accc0b2e6815663b0531b1edb9 to your computer and use it in GitHub Desktop.
GLM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Generalized Linear Model (GLM)\n", | |
| "- https://logics-of-blue.com/%E7%B5%B1%E8%A8%88%E5%8B%89%E5%BC%B7%E4%BC%9A%E3%81%AE%E8%B3%87%E6%96%99%EF%BD%9E%E4%BA%8C%E6%97%A5%E7%9B%AE-%E4%B8%80%E8%88%AC%E5%8C%96%E7%B7%9A%E5%BD%A2%E3%83%A2%E3%83%87%E3%83%AB%E7%B7%A8%EF%BD%9E/\n", | |
| "- http://cogpsy.educ.kyoto-u.ac.jp/personal/Kusumi/datasem13/shrasuna1.pdf\n", | |
| "- https://stats.biopapyrus.jp/glm/def.html\n", | |
| "- https://www.hellocybernetics.tech/entry/2016/10/05/054435" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "from scipy import stats\n", | |
| "\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "%matplotlib inline\n", | |
| "\n", | |
| "import math\n", | |
| "import random\n", | |
| "import datetime\n", | |
| "\n", | |
| "pd.options.display.max_columns = 500\n", | |
| "pd.options.display.max_rows = 120" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "一般<b>化</b>線形モデル(GLM)の話に入る前に、まずは単純な(一般)線形モデルについて。<br>\n", | |
| "(一般)線形モデルは、以下の式で表される回帰モデル。<br><br>\n", | |
| "$$y = \\beta_0 + \\beta_1 x_1 + \\beta_2 x_2 + ... + \\beta_n x_n + \\epsilon $$<br>\n", | |
| "あるいは次のようにも書ける。<br>\n", | |
| "$$y = X\\beta + e$$<br><br>\n", | |
| "\n", | |
| "上記の式で、n=1の時単回帰分析で、n>1の時重回帰分析である。<br>\n", | |
| "重要な(かつ間違いやすい)点として、ここで<b>\"線形\"</b>モデルといっているのは、応答変数yとパラメータβとの間に線形関係があるという\n", | |
| "ことであって、yとxが線形関係である必要はない。つまり、xが二次以上の場合も線形回帰である。<br><br>\n", | |
| "ここ(https://gist.github.com/shotahorii/be3bda5e42eb11fe7b721254768408ab#file-mle_leastsquares-ipynb)\n", | |
| "で行っている、最尤推定による曲線フィッティングの、誤差を等分散正規分布で仮定した場合が(一般)線形回帰に該当する。\n", | |
| "(等分散というのは、xのどの時点においても分散は一定である、と仮定しているということ。)" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Latex object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%latex\n", | |
| "一般<b>化</b>線形モデル(GLM)の話に入る前に、まずは単純な(一般)線形モデルについて。<br>\n", | |
| "(一般)線形モデルは、以下の式で表される回帰モデル。<br><br>\n", | |
| "$$y = \\beta_0 + \\beta_1 x_1 + \\beta_2 x_2 + ... + \\beta_n x_n + \\epsilon $$<br>\n", | |
| "あるいは次のようにも書ける。<br>\n", | |
| "$$y = X\\beta + e$$<br><br>\n", | |
| "\n", | |
| "上記の式で、n=1の時単回帰分析で、n>1の時重回帰分析である。<br>\n", | |
| "重要な(かつ間違いやすい)点として、ここで<b>\"線形\"</b>モデルといっているのは、応答変数yとパラメータβとの間に線形関係があるという\n", | |
| "ことであって、yとxが線形関係である必要はない。つまり、xが二次以上の場合も線形回帰である。<br><br>\n", | |
| "ここ(https://gist.github.com/shotahorii/be3bda5e42eb11fe7b721254768408ab#file-mle_leastsquares-ipynb)\n", | |
| "で行っている、最尤推定による曲線フィッティングの、誤差を等分散正規分布で仮定した場合が(一般)線形回帰に該当する。\n", | |
| "(等分散というのは、xのどの時点においても分散は一定である、と仮定しているということ。)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/latex": [ | |
| "では、本題の一般<b>化</b>線形モデル(GLM)とは何か。これは上記の(一般)線形モデル=正規線形モデルを一般化したもの。\n", | |
| "正規分布以外の確率分布を扱うことができる。パラメータは最尤法で推定する。ただし、<b>\"線形\"</b>モデルであるので、\n", | |
| "必ず応答変数yとパラメータβとが線形関係であることが前提となる。\n", | |
| "<br><br>\n", | |
| "具体的には、一般化線形モデルは以下の三つの構成要素から成る。<br>\n", | |
| "- 線形予測子<br>\n", | |
| "- 誤差構造<br>\n", | |
| "- リンク関数<br><br>\n", | |
| "\n", | |
| "<b>線形予測子</b><br>\n", | |
| "線形予測子とは、どのような変数の線形結合によって予測を行うか、を規定する部分。すなわち、以下のような式。<br><br>\n", | |
| "$$y = \\beta_0 + \\beta_1 x_1 + \\beta_2 x_2 + ... + \\beta_n x_n$$<br><br>\n", | |
| "\n", | |
| "<b>誤差構造</b><br>\n", | |
| "誤差構造とは、誤差にどのような確率分布を想定するか、ということ。正規線形モデルでは正規分布を仮定したが、例えば\n", | |
| "コインの表裏のような2値データでは二項分布、カウントデータではポアソン分布、0以上の連続値ならガンマ分布、など適切な誤差構造を選定する。\n", | |
| "<br><br>\n", | |
| "\n", | |
| "<b>リンク関数</b><br>\n", | |
| "誤差構造に正規分布を仮定しない時、すなわち目的変数が正規分布に従わない時、\n", | |
| "線形予測子をそのままの形(identity)でモデルとすることができない。<br>\n", | |
| "そこで、目的変数の側をある関数Gで変換する。すなわち、$$y = X\\beta$$を関数Gによって、$$G(y)=X\\beta$$ と変換する。\n", | |
| "この時、この関数Gをリンク関数と呼ぶ。誤差構造が決まればリンク関数も自動的に決まる場合が多い。例えば以下。<br><br>\n", | |
| "正規分布(identity): $$G(y) = y$$<br>\n", | |
| "指数分布: $$G(y) = -y$$<br>\n", | |
| "ポアソン分布: $$G(y) = \\log y$$<br>\n", | |
| "二項分布(logit): $$G(y) = \\log \\frac{y}{1-y}$$<br>\n", | |
| "他にも、逆関数(inverse)をとったりするなど。<br><br>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Latex object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%%latex\n", | |
| "では、本題の一般<b>化</b>線形モデル(GLM)とは何か。これは上記の(一般)線形モデル=正規線形モデルを一般化したもの。\n", | |
| "正規分布以外の確率分布を扱うことができる。パラメータは最尤法で推定する。ただし、<b>\"線形\"</b>モデルであるので、\n", | |
| "必ず応答変数yとパラメータβとが線形関係であることが前提となる。\n", | |
| "<br><br>\n", | |
| "具体的には、一般化線形モデルは以下の三つの構成要素から成る。<br>\n", | |
| "- 線形予測子<br>\n", | |
| "- 誤差構造<br>\n", | |
| "- リンク関数<br><br>\n", | |
| "\n", | |
| "<b>線形予測子</b><br>\n", | |
| "線形予測子とは、どのような変数の線形結合によって予測を行うか、を規定する部分。すなわち、以下のような式。<br><br>\n", | |
| "$$y = \\beta_0 + \\beta_1 x_1 + \\beta_2 x_2 + ... + \\beta_n x_n$$<br><br>\n", | |
| "\n", | |
| "<b>誤差構造</b><br>\n", | |
| "誤差構造とは、誤差にどのような確率分布を想定するか、ということ。正規線形モデルでは正規分布を仮定したが、例えば\n", | |
| "コインの表裏のような2値データでは二項分布、カウントデータではポアソン分布、0以上の連続値ならガンマ分布、など適切な誤差構造を選定する。\n", | |
| "<br><br>\n", | |
| "\n", | |
| "<b>リンク関数</b><br>\n", | |
| "誤差構造に正規分布を仮定しない時、すなわち目的変数が正規分布に従わない時、\n", | |
| "線形予測子をそのままの形(identity)でモデルとすることができない。<br>\n", | |
| "そこで、目的変数の側をある関数Gで変換する。すなわち、$$y = X\\beta$$を関数Gによって、$$G(y)=X\\beta$$ と変換する。\n", | |
| "この時、この関数Gをリンク関数と呼ぶ。誤差構造が決まればリンク関数も自動的に決まる場合が多い。例えば以下。<br><br>\n", | |
| "正規分布(identity): $$G(y) = y$$<br>\n", | |
| "指数分布: $$G(y) = -y$$<br>\n", | |
| "ポアソン分布: $$G(y) = \\log y$$<br>\n", | |
| "二項分布(logit): $$G(y) = \\log \\frac{y}{1-y}$$<br>\n", | |
| "他にも、逆関数(inverse)をとったりするなど。<br><br>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.5.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment