GLM(.jl)
GLMとは
応答変数 $ yと説明変数$ x_1, x_2, \cdotsが、
$ f(y) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \epsilon
のモデル
$ f(y)はリンク関数, 右辺は線形予測子と呼ばれる
$ y = g(x)なら、$ g^{-1}(y) = x = 線形予測子なのでリンク関数($ 線形予測子=f(y)は$ yが従う分布の逆関数
ex. 単純な正規分布に従うとすると、リンク関数はそのまま(Identity)
ex. 二項分布に従うものにはロジスティック回帰、リンク関数はlogit
ex. ポアソン分布に従うものはポアソン回帰、リンク関数はlog
GLM.jlでは...
glm(formula, data, family, link)
formulaはStatsModels.jlのもの
@formula(Y ~ X1 + X2)のように記述
ここで、@formulaの引数はdata::DataFrameのコラム名になってるSymbol型のもの
単純に:symbol_nameで記述できない場合は、Symbol("string with space")のようにすれば行けるはず
names(df)で確認?
dataはtable(Tables.jl)
たぶんDataFrameでも行ける(subset?)
family: 分布
link: リンク関数
glm(X::Matrix, y::Vector, family, link)もある
普通のlm
lm(formula, data)
引数
formula: @formula(Y ~ X)
data: table(DataFrame?)
返り値(仮にregとして)
型:StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Vector{N}}, GLM.DensePredChol{N, LinearAlgebra.CholeskyPivoted{N, Matrix{N}, Vector{N}}}}, Matrix{N}}
reg.mf::ModelFrame
.data: もと
.f : リンク関数と線形予測子
.model : 種類
.schema : 変数の割当(?)
reg.mm::ModelMatrix
.assign
.m
reg.model::LinearModel{ ... }
regの型で中に入ってるもの全て
coef, stderror, t, Pなどなど
返り値を取るmethods
coef係数
stderror coefs'
r2 $ R^2
predict 予測
? predict
代表的なの?はpredict(mm::LinearModel, newx::AbstractMatrix; interval = nothing, level = 0.95)
newxは少なくともmmがDataFrameに対してlmした結果なら、DataFrameであり、かつコラムのシンボル名が一致している必要がある
1変数の場合でVectorがだめだったので、もしかしたら、$ 1\times nのMatrixなら行けるかも
interval = :confidenceで95%信頼区間(回帰直線が通る場所、くびれる)
interval = :predictoinで95%予測区間(データが分布する場所、くびれない)
$ p値のとり方
lmの返り値regに対して、coeftable(reg) |> x -> x.cols[x.pvalcol]でリストを得られる。
coeftable(reg)::StatsBase.CoefTable
coeftable(reg)のフィールドはcolnms(結果の列名)、cols(実際の数値、中身)、pvalcol($ p値が入ってる列番号)、rownms(行名、つまり係数の名前((intercept)とか)、teststatcol($ t値が入ってる列番号)
特定の係数の$ p値がほしいときは、x.coefs[x.pvalcol][x.rownms .== "coef_name"]でできる
尤度 : もっともらしさ、分布のパラメータ$ \left\{\theta \right\}のもとで$ yを取る確率が$ P(y; \left\{\theta \right\})のとき、尤度$ L(\left\{\theta \right\})は、
$ L\left (\left\{\theta \right\} \right) = \prod_{i} P(y_i ; \left\{\theta \right\})
そのままだと扱いづらいので、対数尤度 を考える
$ \log L(\left\{\theta \right\}) = \sum_i \log P\left( y_i; \left\{\theta \right\} \right)
連続ならたぶん
$ \log L(\left\{\theta \right\}) = \int \mathrm{d} y \log P(y; \left\{\theta \right\})
$ Lが最小のとき、$ \log Lも最小、対数尤度が最小となる$ \left\{\theta \right\}を求めれば良い(最尤推定, 最尤法)
停留点なので、
$ \frac{\partial \log L(\left\{\theta \right\})}{\partial \theta} = \mathbb{0}
の解を求めれば良い
つまり$ \dim \left\{\theta \right\}個の連立方程式?
「Rで学ぶ統計学入門」参照
感想
なんかJuliaStatsよくわからん(SciMLどうなんだろう)