Skip to content

Instantly share code, notes, and snippets.

@shotahorii
Last active February 25, 2019 20:30
Show Gist options
  • Save shotahorii/cc2508accc0b2e6815663b0531b1edb9 to your computer and use it in GitHub Desktop.
Save shotahorii/cc2508accc0b2e6815663b0531b1edb9 to your computer and use it in GitHub Desktop.
GLM
Display the source blob
Display the rendered blob
Raw
{
"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