統計コンサルの議事メモ

統計や機械学習の話題を中心に、思うがままに

R

glmnetをもう少し理解したい④

それでは前回の記事に続いてelnet1の紹介です。過去の記事はこちらです。 ushi-goroshi.hatenablog.com ushi-goroshi.hatenablog.com ushi-goroshi.hatenablog.com elnet1の実装 前処理 ループ①(almの更新) ループ②(罰則の定義) elnet1の実装 前回の記事…

glmnetをもう少し理解したい③

前回の記事では R の関数 elnet の中で elnet という Fortran のサブルーチンが呼ばれ(やっぱりややこしいですね)、さらに type.gaussian の値( covariance と naive )によって elnetu と elnetn のいずれかが呼ばれるところまで確認しました。 今回は e…

glmnetをもう少し理解したい②

前回の記事では glmnet の中身を確認し、引数の family によって呼び出す関数を変えていることがわかりました。 今回はそのなかでも gaussian が指定された場合の関数である elnet を見ていきましょう。 なお前回の記事はこちらです。 ushi-goroshi.hatenabl…

glmnetをもう少し理解したい①

久しぶりの更新です(いつも言っています)。 背景 glmnet の実行結果 glmnet の実装 1. パラメータの設定、前処理、エラーチェック 2. フィッティング 3. 後処理 背景 データサイエンス入門シリーズの「スパース回帰分析とパターン認識」を読んでいたら大変…

GAMをもう少し理解したい④

前回の続きです。過去記事はこちらから。 ushi-goroshi.hatenablog.com ushi-goroshi.hatenablog.com ushi-goroshi.hatenablog.com GAMの実装 bakfit backf1 1. 前処理 2. バックフィッティング 3. eta の再定義 gam.fit gam 終わりに GAMの実装 bakfit さて…

GAMをもう少し理解したい③

前回の続きです。過去記事はこちらから。 ushi-goroshi.hatenablog.com ushi-goroshi.hatenablog.com GAMの実装 s.wam 1. 平滑化の対象変数について元のデータを順位に置き換え、smooth.frameを再定義する 2. 後でFortranに渡すために必要な指定を行う 3. Fo…

GAMをもう少し理解したい②

前回の続きです。 gam.fit() から。 前回記事はこちら。 ushi-goroshi.hatenablog.com GAMの実装 gam.fit() それでは gam.fit の中身を覗いてみましょう。 ### gam.fit は x, y に加えて smooth.frame を受け取る。これは gam で作った mf で、中身は平滑化…

GAMをもう少し理解したい

とても久しぶりの更新です。 背景 GAMの実行結果 GAMの実装 gam() 背景 業務でモデリングを行うとき、私は大抵の場合GLMから始めます。目的変数に合わせて柔軟に分布を選択することが可能で、回帰係数という極めて解釈性の高い結果を得ることができるという…

「ガウス過程と機械学習」第3章のグラフ(一部)を作図する④

前回の記事の続きです。 ushi-goroshi.hatenablog.com 今回は図3.23に挑戦します。データはこちらから該当する部分を取ってきました。 まずはプロットしてみます。一部のデータは除外しました。 dat <- read.table("./Data/World_Record.dat", sep = "\t", c…

「ガウス過程と機械学習」第3章のグラフ(一部)を作図する③

前回の記事の続きです。 ushi-goroshi.hatenablog.com 今回は図3.16と3.20に挑戦します。データはサポートサイト(http://chasen.org/~daiti-m/gpbook/data/gpr.dat)から取得しました。 dat <- read.table("http://chasen.org/~daiti-m/gpbook/data/gpr.dat",…

「ガウス過程と機械学習」第3章のグラフ(一部)を作図する②

前回の記事の続きです。 ushi-goroshi.hatenablog.com 今回は図3.9と3.11(P71と75)を作成してみます。generate_vectorはそのままですが、図3.9は二次元平面なのでget_cov_matはx2を考慮できるように修正しました。またapplyについてですが、この書き方なら…

「ガウス過程と機械学習」第3章のグラフ(一部)を作図する

※ 3/13 一部修正 いま「ガウス過程と機械学習」を読んでいるのですが、第3章のグラフが非常に面白かったので自分でも作図してみたところちょっと腹落ちするものがありました。せっかくなので記事にしておきます。今回グラフを作成したのは図3.7と3.8(P69、7…

データを小集団に分割しながら線形回帰の解を推定する

背景 手順 実装 1. 共通処理 1. X、yをそれぞれ小集団に分割する 2. 各小集団のXをQR分解する 2. R^{-1}を計算する 1. 各小集団からのRを統合する 2. 再度QR分解してRを得る 3. Rの逆行列を求める(R^{-1}) 3. Q'を計算する 1. 1-2で得られたQを2-2で得たQ…

過小分散なカウントデータを扱いたい

背景 doublepoissonを触ってみる 切片を推定してみる glmで推定してみる dglmで推定してみる 回帰係数を推定してみる glm、dglmで推定してみる optimで推定してみる 終わりに 背景 カウントデータをモデリングしようと思ったとき、まず思い浮かべる分布とい…

FindBestSplitを書いてみる

背景 実装 1. データ、説明変数を与えると閾値の候補を返す関数 2. データ、目的変数、説明変数、閾値を与えるとGini係数を返す関数 3. 現在のGini係数との差分が最大となる(最良な)閾値を返す関数 終わりに 背景 前回、前々回の記事でrandomForestを使っ…

randomForestで有効な交互作用を発見したい

背景 概要 実装 1. Random Forestでモデルを作る 2. 各決定木から分岐に用いられた変数ペアを得る 3. 出現回数のカウントを取る 4. 交互作用効果を確かめてみる 終わりに 背景 GLMは発想がわかりやすく解釈性も高くて良いアルゴリズム1なのですが、線形の仮…

randomForestではCharacterは使わないようにしよう

RのrandomForestを使っていてはまったのでメモしておきます。 ①目的変数がcharacterだと分類として扱ってくれない ②説明変数がcharacterだとダミー化してくれない 終わりに ①目的変数がcharacterだと分類として扱ってくれない 最初にはまったのがこちらでし…

GLMをもう少し理解したい④

R glm

前回の記事では、結局GLMというのは以下の方程式: を用いて、を反復的に求めることであると説明しました(IRLS)。 ushi-goroshi.hatenablog.com そのために必要なパーツとしてはとであり、これらは(を除けば)、とそれらのそれぞれに対する微分です。 で…

GLMをもう少し理解したい③

R glm

前回の記事において、GLMでは以下の方程式を用いてパラメータベクトルを推定するという話をしました:ushi-goroshi.hatenablog.com 今回はその続きです。※ 1/25 記事を修正しました 最尤推定 上の式には情報行列の逆行列が入っているので、前から情報行列を…

GLMをもう少し理解したい②

R glm

前回の記事からだいぶ間が空いてしまいましたが続きを書いてみます。なおこの記事は主にDobsonの「一般化線形モデル入門」の第3・4章を参考にしていますので、そちらも合わせてご確認ください。良書です。 ushi-goroshi.hatenablog.com 一般化線形モデル入門…

GLMをもう少し理解したい①

R glm

背景 glm glm.fit C_Cdqrls F77_CALL 背景 一般化線形モデル(GLM)は、一般に線形回帰モデルを正規分布を含む指数分布族に拡張したものだと捉えられています。アイディアとしてはシンプルである割に非常に有用で、GLMによって 整数値(ポアソン回帰) 二値(…

ロジスティック回帰の小ネタ

小ネタ①:ロジスティック回帰は集計値を用いても同じ結果となる tmp <- epitools::expand.table(Titanic) library(tidyverse) dat_table <- tmp %>% group_by(Class, Sex, Age) %>% summarise("Yes" = sum(Survived == "Yes"), "No" = sum(Survived == "No")…

RとPythonの結果を一致させたい

背景 RからPythonを呼び出す 線形回帰 ロジスティック回帰 終わりに 背景 通常、私はデータを分析する際には主にRを使用します。しかし分析結果を既存のシステムに投入するなど実装を考えた場合には、Rではなく別の言語を求められることもあると思います。 …

Stanを使って変数選択したい

背景 データ準備 ライブラリの読み込み シミュレーションデータの作成 フィッティング stan_glmによるフィッティング 結果の確認 追試 終わりに 背景 Stanを使ってモデリングをしている時に不満を感じる点として、変数選択が難しいということが挙げられます…

Ad-Stock効果を推定しつつ回帰を回したい⑤

背景 しつこいようですが、Marketing Mix Modeling(MMM)の話題です。 先日、こんな面白い論文を見つけました。 GoogleのResearcherによるMMMの論文(彼らはMedia Mix Modelingと呼んでいます)なのですが、ヒルの式を用いて広告のShape効果(Carveture効果…

RでWebスクレイピングしたい

背景 ちょっとした用事によりリコール情報について調査する機会がありました。これまでWebスクレイピングは経験がなかったのですが、便利なライブラリ({rvest})もあることだし、挑戦してみた結果を紹介します。 内容としては、国交省のサイトにある「リコ…

階層ベイズと状態空間モデルで広告効果を推定したい

背景 これまでMarketing Mix Modeling(MMM)におけるAdStock効果の推定について色々と記事を書いてきましたが、その他にも試したいと思っているモデルがいくつかあります。その一つが階層ベイズモデルと状態空間モデルを同時に取り扱うものです。 例えば「…

スタイン推定量を確かめてみる

いきなりですが、最近購入したベイズモデリングの世界を読んでいて非常に面白い話題を発見しました。 ベイズモデリングの世界作者: 伊庭幸人出版社/メーカー: 岩波書店発売日: 2018/01/18メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る…

Bayesian GLMで過適合を避ける

長らく知人に貸していた「みんなのR」が手元に戻ってきたのでパラパラと見ていたら、見逃していた面白いトピックを見つけたので紹介します。内容としてはこちらの記事とほぼ同じで、基本的には書籍の該当部分を再現しているだけですが、{purrr}のmapを使った…

ベイジアンネットワークで変数間の関連性を見る

実務でデータ分析を行うときにしばしば変数間の因果関係の有無およびその強さについて問われることがあるのですが、その回答としてベイジアンネットワークを使いたいと思っていたので調べてみました。 この記事ではベイジアンネットワークを扱うためのパッケ…