RstanでCVRの前後比較をするためのコード

目的

データサイエンス界隈の方がP値での意思決定に警鐘を鳴らしている昨今、施策実施に関するCVRの前後比較をχ2乗検定のP値を用いるのではなく、ベイズ統計学によるアプローチにチャレンジしてみたいと思いました。『基礎からのベイズ統計学』の8章で取り上げられていた比率データに対してのベイズ統計学的アプローチをもとに、stanを用いて事後分布から意思決定をするための進め方を紹介します。

進め方

・データの整形
・stanコード作成
・rstanでの引数の指定
・rでの可視化

データの特徴

Webマーケティング界隈では大変に多用するデータだと思いますが、実験を行ったユーザーに対しての開封・非開封、これまで通りのユーザーの開封・非開封の自然数からなるデータです。

スクリーンショット 2016-03-13 22.30.16

stanコード

stanコードは
・dataブロック
・parametersブロック
・transformed parametersブロック(今回は不使用)
・modelブロック
・generated quantitiesブロック
からなります。
今回は自然数のデータであることから、ディリクレ分布を事前分布に設定するために、parametersブロックにおいてsimplexを指定しています。(教科書の比率データのものをそのまま使っています。)
modelは二項データしか出てこないので、二項分布を用いています。generated quantitiesブロックでは各々の比率、比率の差、比率の差が0を超える確率・0.01を超える確率、リスク比、リスク比が1を超える確率、オッズ比などを出力するようにしています。

rコード

以下は、stanをrで実行し、ggplot2などで可視化するためのコードが記されています。

推定結果&可視化

今回の例では、実験を行ったユーザーのCVRの差が0以上の確率(delta_over)が1.0なので、ほぼ確実に差があると言えそうです。0.01以上差がある確率も1.0なので1%以上は差があると言えそうです。リスク比(RR)に関しては2.47と実験しない場合と比べて2.47倍程度CVを高めています。オッズ比(OR)は2.63とあるので、実験によるCV増大効果が2.63倍あると考えることができます。χ2乗検定では、二つの集団が独立かどうかを検定していますが、ベイズ統計学に従えば、「1%を超える確率」を算出することが容易なので、ディレクターなどに説明する際は圧倒的に理解を得られそうな気がします。

posterior_distribution_2

参考文献

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門
rstanでちょこちょこ

RのChannelAttributionパッケージでマルコフ連鎖モデルのアトリビューション分析にチャレンジ

【目次】
・アトリビューションモデルとは
・アトリビューションモデルにおける評価の種類
・均等配分モデルと数理モデル
・ChannelAttributionパッケージについて
・Rでの実行
・実行結果
・参考文献

アトリビューションモデルとは

コンバージョンに至った広告の貢献度を、コンバージョンした経路のタッチポイントにどのように割り振るかを決めるルール。直接コンバージョンに至らなかったが、コンバージョンに繋がる働きをした広告の評価ができるモデルです。

アトリビューションモデルにおける評価の種類

Googleアナリティクスに載っていたアトリビューションモデルの種類です。一例なので、これが全てだとは言えないです。

  • 終点アトリビューションモデル
  •  コンバージョンに繋がった最後の経路を評価

  • 最後の間接クリックアトリビューションモデル
  •  コンバージョンに至る経路の直前の経路を評価

  • 起点アトリビューションモデル
  •  最初に関わった経路を評価

  • 線形アトリビューションモデル
  •  コンバージョンに至るまでに関わった経路を均等に評価

  • 減衰アトリビューションモデル
  •  コンバージョンした際に、時間的に最も近いものを評価

  • 接点ベースアトリビューションモデル
  •  起点と終点それぞれに40%ずつ評価、残りの20%は中間点に対して均等に評価

    均等配分モデルと数理モデル

  • 均等配分モデル
  •  コンバージョンに至るまでに関わった経路を均等に評価。数学に明るくなくても実行でき、集計が比較的簡単かつ解釈から施策までが容易とされる。一方で、恣意的な判断が入り込みやすかったり、各広告が独立であるという過程があるため、任意の広告のIMPが変化したときに他の広告への影響が加味できないなど欠点も多い。他の評価方法との比較のためのベンチマークとして用いられる。

  • 数理モデル
  • マルコフ連鎖モデル
     ユーザーの2点間の行動のみに基づいて分析を行う。
     例えば、広告の経路が10通りある場合、広告1を踏んだユーザーは確率p11で広告1を次に触れる、確率p12で広告2を次に触れるというような確率で広告の接触確率が決まるモデルとなる。確率から接触したページの価値を計算することで、評価が可能となる。複雑怪奇なユーザー行動を2点間のデータに落とし込むことで、分析する際の情報量を制限することができる。

    ChannelAttributionパッケージについて

    Package ‘ChannelAttribution’
    ※Rのバージョンが古いとインストールできません。3.2以上にしましょう。

    今回はRのChannelAttributionパッケージを用いて、マルコフ連鎖モデルを実践してみます。
    このChannelAttributionパッケージにはデータセットがついているため、その用意されたデータを用います。

    実際、このようなデータを元に分析を進めます。
    customer_journey_data

    内訳としては以下の通りです。
    ・コンバージョンに至ったパス
    ・コンバージョン数
    ・コンバージョン価値(価値に関してはサイトによって異なってくると思います。)
    ・コンバージョンに至らなかったパスの数(計算上使っていないようです。除外しても結果が変わらなかったので。)

    Rでの実行

    実行結果

    ぱっと見ですが、alphaやtheta以外では均等配分モデルとマルコフ連鎖モデルに大きな差はなさそうです。データにもよるとは思いますが。自社のデータで実行して、違いがあるか見てみたいですね。

    こちらはコンバージョン数で評価したもの
    total_conversions

    こちらはコンバージョン価値で評価したもの
    total_value

    参考文献

    Markov model for the online multichannel attribution problem

    アトリビューション モデルの概要

    マルコフ連鎖モデルによるアトリビューション分析(インターネット広告への応用)

    Attribution models—数理モデリング入門

    マルコフ連鎖を説明してみる。

    LDA(潜在的ディリクレ配分法)まとめ 手法の概要と試行まで

    【目次】
    ・トピックモデルとは
    ・トピックモデルの歴史
    ・トピックモデルでできること
    ・トピックモデルを理解するために必要な知識
    ・トピックモデルの手法について
    ・トピックモデルの実行方法について(R言語)
    ・トピックモデルの評価方法について
    ・Correlated Topic Models (CTM)について
    ・PAM:Pachinko Allocation Modelについて
    ・Relational Topic Models(RTM)について
    ・参考文献

    トピックモデルとは

    ・一つの文書に複数の潜在的なトピック(話題・分野・文体・著者など)、文書ごとのトピック分布、トピックごとの単語分布を仮定して、テキストからトピックを推定するモデル。文書に限らず、様々な離散データに隠された潜在的なトピックを推定するベイジアンモデル。幅広いドメインでの離散データで有効とされている。

    トピックモデルの歴史

    1998年:pLSA(probabilistic Latent Semantic Analysis)
    2003年:LDA(Latent Dirichlet Allocation)
    2004年〜:拡張モデル
    2007年〜:大規模データのための高速化

    トピックモデルでできること

    ・人を介することなく、大量の文書集合から話題になっているトピックを抽出できる。
    ・文書データだけでなく、画像処理、推薦システム、ソーシャルネットワーク解析、バイオインフォマティクス、音楽情報処理などにも応用されている。
    ・確率過程を用いて、ノイズを取り除き、本質的な情報を抽出できる。

    トピックモデルを理解するために必要な知識

    ・確率
     -確率分布
      -ベルヌーイ分布
      -カテゴリ分布
      -ベータ分布・ガンマ分布
      -ディリクレ分布
    ・ラグランジュ未定乗数法
    ・ユニグラム
     -BOW(Bag of words)
     -ユニグラムモデル
    ・混合ユニグラムモデル
    ・混合モデル
    ・EMアルゴリズム
    ・最尤推定
    ・ベイズの定理
     -ベイズ推定
      -ベイズ予測分布
      -ハイパーパラメータ推定
      -モデル選択
      -変分ベイズ推定
      -ギブスサンプリング

    トピックモデルの手法について

    推定方法としては以下の三つが提案されている。
    ・最尤推定
    ・変分ベイズ推定
    ・ギブスサンプリング

  • ギブスサンプリングによる方法
  • 一部のパラメータを積分消去して、トピック集合の事後分布を推定

    文書集合とトピック集合の同時分布を導出

    単語ごとにトピックをサンプリングする

    サンプリングされたトピックからトピック分布と単語分布を推定

    周辺同時尤度を最大化させるハイパーパラメータαとβを推定する

    ※LDAのギブスサンプリングはLDAが共役性に基づいたモデリングであるため効率的な計算が可能とされる。

    ハイパーパラメータを適切にデータから学習すれば、MAP推定・変分ベイズ推定・ギブスサンプリングの性能の差は大きく出ないという研究結果があるらしい。(なお、MAP推定だと、クロスバリデーションを行い、尤度を最大化させるハイパーパラメータを見つけなければならない。)

    トピックモデルの実行方法について(R言語)

    以下のパッケージで実行可能だが、新しい手法などにはまだ対応していない。
    lda(CRANのPDF
    topicmodels(CRANのPDF

    以下はtopicmodelsパッケージの実行コードであるが、BOW形式のデータがあれば、実行はすぐにできる。
    ただし、パープレキシティなどを計算しながら、ハイパーパラメータのチューニングをする必要がある。

    時間があれば、ソースコードを見て自分で書けるようにしたい。
    ちなみに、HDP-LDAはPythonのgensimに用意されているようです。(gensimへのリンク)

    トピックモデルの評価方法について

  • パープレキシティ(Perplexity)
  • -確率モデルの性能を評価する尺度として、テストデータを用いて計算する。
    -負の対数尤度から計算できる。
    -低いパープレキシティはテストデータを高い精度で予測できる良い確率モデルであることを示す。
    -全ての語彙が一葉の確率で出現するモデルのパープレキシティは語彙数Vになり、性能が悪いと考えることができる。
    -このパープレキシティが小さくなるようなトピック数やパラメータの設定が必要。

    Correlated Topic Models (CTM)について

    トピックモデルは 「各トピック k の間には相関がない」という前提のもとに成り立つ手法ですが、本当にトピック間に相関はないのでしょうか。「本当は相関のあるトピック」を無理やり「相関のないトピック」に分割している可能性が高いので、相関を加味したモデルが必要です。そこで、トピックの生成割合を決める際に、トピック間の相関を持つように多次元の正規分布を用います。ただし、その代わりに共役的な分布を持たないため、従来のギブスサンプリングではサンプリングが非効率になることから変分ベイズを用いる必要があります。

    PAM:Pachinko Allocation Modelについて

    CTMは各トピックが同じレベルにあるため、トピック間の階層構造を表すことができません。
    自動車にとっての、セダンやトラック、あるいはお酒にとってのワインやビールのようにトピックに関しても階層構造があることは想像に難くありません。トピック間の関係・相関を一般的に表現するモデルで、トピック間の階層構造を基本として、パチンコ玉が落ちるように単語を生成します。パチンコ玉が落ちるというのは、向きが一方行の有向かつ非巡回ノードが連想されます。分布に関しても共役なので、ギブスサンプリングでサンプリングが可能です。
    2016/04/24の段階ではまだGensimでモデルの開発はなされていないようです。
    Pachinko Allocation Model
    ちなみに、論文はこちらです。
    Pachinko Allocation: DAG-Structured Mixture Models of Topic Correlations

    Relational Topic Models(RTM)について

    文書の中身だけでなく、文書間のリンクの生成過程も同時に確率モデル化する手法。論文や特許データに対して活用できる。過去の購買行動に応じた、顧客のセグメント解析や商品のレコメンデーションに活用できるかもしれない。

    参考文献

    トピックモデル (機械学習プロフェッショナルシリーズ)
    トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)
    Tokyo Webmining 46th 『トピックモデルことはじめ』
    machine_learning_python/topic.md

    統計数理研究所 H24年度公開講座 「確率的トピックモデル」サポートページ

    Rのleafletパッケージを使って蒙古タンメン中本をプロットしてみた

    Rのleafletパッケージで蒙古タンメン中本の店舗をマッピングしました。
    中本の全店舗地図は未だ観察できていないので、中本信者の方には嬉しい情報かもしれません。
    元となるデータは中本のホームページから収集し、GoogleMapのAPIで住所から緯度・経度を求めました。

    Rに読み込ませるデータはこんな感じになりました。
    中本データセット

    コードはこんな感じです。如何に簡単かがおわかりいただけると思います。

    参考情報

    embed R leaflet map in wordpress

    Japan.R 2015に参加して得た情報まとめ

    Japan.Rで私にとって使えそうなアイデアや手法だけを厳選して載せたいと思います。(結局、長くなった気がしますが。。)
    全てを見たい場合は、この方のブログがよいと思います。
    Japan.R 2015に参加してきた

    Spark Streaming

    Spark Streamingストリーミングを使って、挙動に応じて自動的にメールやSlackに送るとかでサイトの監視に使えるそうな。

    jupyter

    RでいうところのRStudioのような分析しやすいPython用のGUI
     

    rangerパッケージ

    RFなどができる。C++で実装されているので速いらしい。
    最近のRのランダムフォレストパッケージ -ranger/Rborist-

    RcppRollパッケージ

    移動平均とかの計算が楽になるらしい。
    インターネットの予約のステップの伸び率をモデリングし、ある一定速度だとしたら表示を出し分けるなどの施策に活かしているそうな。

    多腕バンディットアルゴリズム

    サイト内のバナーなどの出し分けの最適化に使っているらしい。Rでは重くてできないそうな。

    leafletパッケージ

    これを使えば地理データの可視化が簡単にできる。
    →デフォルトの地図がOpenStreetMapなので、サイトに載せる際も好都合。
    →「ぐりぐり動かせる・レイヤー構造・多機能・Shinyでアプリケーションも作れる」
    →Githubの方がバージョン上
    →データテーブルで読み込んで緯度経度を指定する。
     サークルや線の太さも指定でき、ポップアップも立てれる。
     地点間でのラインも引ける。addPolylines
     プロットでエクスポートでWebページにすれば図が作れる。
    leafletでMapbox(とかいろいろな地図)を使う

    purrrパッケージ

    →複数のモデルをリストにして、推定結果を一気に出すことができる。(都度、モデルを作る必要がない。)
    {purrr} による非テーブルデータの処理
    purrr 0.1.0を使ってみる(1) map

    ggfortifyパッケージ

    purrrで実行した分析結果のプロットなどが簡単にできるらしい。
    Concepts and Basics of ggfortify

    Shiny

    分析結果を可視化したりできるツールとしてはカジュアルにできていいかもしれない。
    無料版では複数のアクセスに弱いので社内用のツールとしてはいい。

    rApacheパッケージ

    rとアパッチでwebアプリケーションを作れる。

    deployR

    APIを作るためのフレームワーク

    Gradient Boosting Decision Tree

    モデルの性能が良くなるように特徴量の選択ができる手法らしいです。これは進捗が良くなる、イケメンな手法ですね。
    今度深掘ってみたいです。
    Gradient Boosting Decision Treeでの特徴選択 in R

    SparkRパッケージ

    Rからスパークの処理を実行できる。
    SparkRをEC2上で動かして分散処理してみる

    Parquet(パーケ)

    ビッグデータで一般的になってきているフォーマットのことらしい。
    10GBのデータが300MBになった。→これはすごい!!
    DMMゲームのログ解析~Parquetについて~

    TinySegmenter

    MeCabとかを入れてごにょごにょすることが許されていない方向け?
    TinySegmenter:Javascriptだけで書かれたコンパクトな分かち書きソフトウェア

    knitrパッケージ

    Rの分析結果をhtmlでレポーティングができる。
    R でレポートを作成するのに knitr が超便利

    R Presentation

    Studioでスライド作成できる。
    Rとウェブの融合(5)ーslidify、R Presentationー

    rvestパッケージ

    RでWebスクレイピングができてしまう。(私はPythonでやっていますが。)
    rvest でログインしてスクレイピング #rstatsj

    pforeachパッケージ

    デフォルトで並列計算するようにしたパッケージ
    R で超簡単に並列処理を書けるパッケージ pforeach を作った

    RstanでGoogleトレンドの推定

    rstanを用いて、Googleトレンドデータの予測モデルを推定してみます。

    ほとんど岩波データサイエンスのものですが、Googleトレンドのデータを月ごとの季節性を加味した状態空間モデルを用いて予測してみました。

    今回の分析では、
    ・modelのstanコード(stan)
    ・Rでstanを動かすためのコード(R)
    (・可視化のためのコード(R))←必須ではない
    を用意します。

    データですが、GoogleTrendのサイトで任意のキーワードで検索して、
    その時系列データをCSVでダウンロードすれば手に入ります。(ちょっと見つけにくい)

    データの形式はシンプルで、
    先頭にY
    とおいて後はトレンドの値を行ごとに置いていけばいけます。

    要はN行1列データをテキストファイルに保存すればOKです。(1行目はY)

    まずstanのコードですが、岩波データサイエンスのサンプルコードの季節を4から12に変えています。(たったこれだけ)
    Googleトレンドのデータは月単位でも結構値がふれることがあるので、月ごとに応じた潜在的な変数が必要だと思いました。

    Rでstanを動かすためのコードですが、ここはサンプルコードとほぼ一緒です。

    可視化のためのコードについてもサンプルコードとほぼ一緒です。

    以上を実行した結果、以下のような図が出てきます。

    fig2-top-left
    こちらは実際の時系列データのプロットです。

    fig2-top-right
    8期先までの予測です。

    fig2-bottom-left
    8期先までの予測範囲です。信頼区間90%までの範囲となっています。

    fig2-bottom-right
    推定した潜在的な季節性のデータをプロットしています。

    ついでに、4月までのデータを用いて、5~9月の予測を行い、その比較を行っています。

    prediction_trend

    5月が大きく外れましたが、その後はある程度当てれているように見えます。
    5月も当てれるようなモデルを作りたいものですね。

    参考文献

    推薦システムに関する参考情報

    推薦システムとは

    情報をフィルタリングするための技術の一種
    ユーザーが次に興味を持つ情報は何か?を科学する。

    推薦システムの種類

    ・協調フィルタリング
     同じような行動を行ったユーザーの行動に基づき、まだ見ていない情報を提示する。
     Explicit Feedback
     Implicit Feedback
     コールドスタート問題
     ユーザー理解、サービス理解も重要

    ・内容ベースフィルタリング
     自分の過去の行動に基づき、見た情報などに似た情報を提示する。
     距離を定義できれば提示できる。
     質の評価を組み込むことが重要。
     分類モデルを用いることもできる。→ラベル付けされたデータをもとに統計的な手法でラベル付けをする。
     (ナイーブベイズ、ロジスティック回帰、SVM)
     →ただし、定期的なチューニングが必要。
      性能を高めるためには、次元削減も重要。

     

    レコメンドの評価指標

     基準の設置
      一定以上のユーザーがアクションしているアイテムかどうか
      信頼できる情報かどうか
     
     多様性の導入
      同じカテゴリの商品がリストに提示される個数を制限する。
      同じカテゴリを提示した個数に応じて評価値を減衰させる。

     意外性の導入(セレンディピティ)
      システムが評価したものとは一致しない情報を推薦リストに載せる。
      →この際に一致しない情報は他のユーザーがよく見ているものを選ぶと良い。

     A/Bテスト
      一部はA/Bテストを行い、一部では同じアルゴリズムを提示し続ける。
      推薦システムの長期的影響と短期的影響の両方を考慮するべき。
      システム全体に悪影響を及ぼすことがあれば本末転倒である。

    レコメンドの最先端

    T.B.A

    Rで実行するには

    RecommendarLab
    ・レコメンデーションアルゴリズム
    ・レコメンデーションの評価
    ・レコメンド用データの整形
    ・サンプルデータセットもある(5000人分のジョークに対する評価)
    Using R package, recommenderlab, for predicting ratings for MovieLens data

    参考文献

    データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

    Sparkの仕組み・導入メリット・インストール方法など

    【目次】
    ・Sparkについて
    ・Sparkの歴史
    ・Sparkの仕組み
    ・データ分析におけるSpark導入のメリット
    ・Sparkの導入方法
    ・参考文献

    Sparkについて

    OSS(Open Source Software)のインメモリ処理の分散並列基盤
    ※インメモリ(メインメモリ上で処理するため、ディスクストレージを介するよりも高速かつ安定しているらしい。メモリに乗り切らないようなケースでも、ディスクを利用するなどしてアプリケーションが問題なく動作するように作られている。)
    ビッグデータ活用を支えるプラットフォームとして注目されている。
    比較の際はHadoopで言う所の、MapReduceが引き合いに出されます。MapReduceがバッチ処理に特化した仕組みになっているのに対して、Sparkはバッチ処理だけでなく、対話的な処理や繰り返し処理・ストリーミング処理といった多様なデータ処理のパターンに対応できる仕組みになっていることから、Sparkに注目が集まっています。

    分散処理エンジンとして、Apache Spark Coreがあり、以下の様な機能が用意されているようです。

    Spark SQL・・・SQL処理用
    Spark Streaming・・・ストリーミング処理
    MLib・・・機械学習処理用
     基本API
     ・統計情報の取得
     ・相関関係の算出
     ・層化抽出
     ・仮説検定
     ・ランダムデータ生成
     機械学習アルゴリズム
     ・分類回帰(SVM、ロジット、線形回帰、ナイーブベイズ、決定木、ランダムフォレスト、isotonic回帰)
     ・協調フィルタリング(ALS(Alternating Least Squares))
     ・クラスタリング(K平均法、混合ガウシアン、PIC、LDA、ストリーミングK平均法)
     ・次元削減(SVD、PCA)
     ・特徴抽出&変換(TF-IDF、Word2Vec、etc…)
     ・頻出パターンマイニング(FP-Groth、アソシエーションルール、PrefixSpan)
    GraphX・・・グラフの処理
    ※機械学習の機能があるのは嬉しいですね。スクラッチで作るのはペインフルなので。

    データソースとしては、HDFS(Hadoop Distributed File System)だけでなく、Hive、HBase、PodgreSQL、MySQL、CSVファイルなども対応している。

    Sparkの歴史

    2009年にUC BarkeleyのMatei Zaharia氏がScalaを用いて開発

    Google Trendで検索トレンドを見たところ、2014年頃から今に至るまで伸び続けています。
    GoogleTrend

    Sparkの仕組み

    RDD(Resilient Distributed Dataset)
    不変で並列実行可能な分割されたコレクションのことを指します。
    これによりユーザーが並列分散処理を意識しなくとも、それができる環境が提供されます。
    こちらのRDDを
    map,filter,union,flatMapなどのTransformations
    で生み出し、RDDのデータを
    reduce,countなどのActions
    を実行することで動かします。
    RDDを任意の時点でメモリやディスクに保存することもできるため、処理の再実行のみならず、同じデータを複数回利用するなど、複雑なデータ処理に関しても効率的に実行できます。
    SparkはScalaという言語で書かれていますが、Python・Java・Rなどに対してAPIが提供されているので、幅広いユーザーが扱うことが可能です。しかしながら、痒いところに手を届かせるためには、Scalaの勉強は避けられないのかもしれません。実際のところ、大体のデータマイニング系エンジニアの知り合いはScalaの勉強などをしていた印象があります。

    データ分析におけるSpark導入のメリット

    ・並列分散の手法を意識せずに大規模データの処理が可能になる。
    ・Rなどの苦手とする反復処理を高速化させることができる。
    ・データ取得、前処理、分析処理、レポーティングを一つのプラットフォームで実行できる。
    ・コマンドラインによるインタラクティブな試行錯誤がしやすいので、データ分析のタスクに向いている。(PythonやRのように)

    ※レコメンドエンジンとしてSparkを用いるケースも観察されているようです。
     Yahoo!台湾

    Sparkの導入方法

    ここでの導入はあくまでもプログラミングを学ぶためであって、ローカル環境での実行環境の構築ではSparkのメリットを感じることはできません。
    ※SparkはJava仮想マシン上で動作するため、事前にOracle JDKをインストールしておきましょう。
    Java SE Development Kit 8 Downloads

    ■Windowsの場合
    Apache Sparkで始めるお手軽リアルタイムウインドウ集計
    こちらで手順が詳しく書かれています。

    ■Macの場合
    Macの方が導入はシンプルです。
    Download Spark
    からダウンロードします。(SparkRはSparkのver1.4以降からサポートされているそうです。)
    HOW TO INSTALL APACHE SPARK ON MAC OS X YOSEMITE
    Apache Spark 1.6.0 setup on Mac OS X Yosemite
    そこで、

    build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

    を実行すればコンパイルできるようです。(10分ほどかかる。私は30分もかかったが。。)

    そのあと、パスを通します。
    PATH=/usr/local/share/spark/bin:$PATH; export PATH

    それから、pythonでsparkを動かしてみます。
    pyspark

    を実行して、試しにReadmeのテキスト行数をカウントさせるコマンドを入力します。これは、textFileメソッドを用いて、Readmeファイルを読み込み、linesという名前のRDDを生成していることを意味します。
    lines = sc.textFile(“/usr/local/share/spark/README.md”)

    そして、このコマンドで値が返されたら、うまく動いていることが確認できるでしょう。
    print lines.count()

    加えて、ワードカウントを行うコマンドを入力します。(スペース区切りで分解し、mapメソッドで(単語, 1)という組み合わせに変換したあと、最終的にreduceByKeyで同一の単語を足し上げるという処理をしています。)

    counts = lines.flatMap(lambda line: line.split(” “)) \
    .map(lambda word: (word, 1)) \
    .reduceByKey(lambda a, b: a + b)

    そして、これで結果を取得します。
    counts.collect()

    スクリーンショット 2016-05-02 12.21.50

    参考文献

    Spark を活用する:ビッグデータアプリケーション用の高速インメモリコンピューティング

    Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

    詳解 Apache Spark

    [Apache Spark]RDDについて簡単にまとめてみた

    Rユーザのためのspark入門

    Spark 1.4.0 の SparkR を動かす

    Spark Examples

    ロジスティック回帰分析に関する参考文献

    ロジスティック回帰分析に関する参考文献を載せています。
    限界効果についてや、多項ロジットなどについての文献もあります。

  • Rのパッケージ
  • Package ‘mfx’
    http://cran.r-project.org/web/packages/mfx/mfx.pdf
    限界効果を計算できるmfxパッケージ。

    Package ‘mlogit’
    http://cran.r-project.org/web/packages/mlogit/mlogit.pdf
    多項ロジットを計算できる。

  • 実行例
  • R Data Analysis Examples: Logit Regression
    http://www.ats.ucla.edu/stat/r/dae/logit.htm

    R Data Analysis Examples: Multinomial Logistic Regression
    http://www.ats.ucla.edu/stat/r/dae/mlogit.htm

    Rstanの参考文献(インストール・使い方・実践)

    Rstanに関する情報を集めたものです。
    ・インストール
    ・使い方
    ・実践
    について載せています。
    随時更新します。

  • インストール関連
  • Windows 7にRStanをインストールする
    http://cordea.hatenadiary.com/entry/2013/11/20/201209

    Building R for Windows
    https://cran.r-project.org/bin/windows/Rtools/index.html

    【R】OSXでRStanの導入と簡単な例題【MCMC】
    http://www.fisproject.jp/2015/04/rstan/

    MCMCの計算にStanを使ってみた(超基礎・導入編)
    http://tjo.hatenablog.com/entry/2013/11/06/201735

    R stan導入公開版
    http://www.slideshare.net/KojiKosugi/r-stan

  • 使い方
  • RStan Getting Started
    https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started

    Computation in R and Stan
    http://www.stat.columbia.edu/~gelman/book/software.pdf

    stan Documentation
    http://mc-stan.org/documentation/

    Stan: A Probabilistic Programming Language
    http://www.stat.columbia.edu/~gelman/research/published/stan-paper-revision-feb2015.pdf

    The Stan Modeling Language
    http://mlss2014.hiit.fi/mlss_files/2-stan.pdf

    Stanで統計モデリングを学ぶ(7): 時系列の「トレンド」を目視ではなくきちんと統計的に推定する
    http://tjo.hatenablog.com/entry/2014/12/05/190105

    Bayesian linear mixed models using Stan: A
    tutorial for psychologists, linguists, and cognitive
    scientists

    http://arxiv.org/pdf/1506.06201v1.pdf

  • 実践
  • R で 状態空間モデル: 状態空間時系列分析入門を {rstan} で再現したい
    http://sinhrks.hatenablog.com/entry/2015/05/28/071124

    書籍

    StanとRでベイズ統計モデリング (Wonderful R)

    基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門