プロビット回帰分析を行うためのライブラリを紹介していただけますでしょうか。

言語はRubyまたはPHPでお願いします。

<参考サイト>
http://software.ssri.co.jp/ex2015/function/probit.html
http://hnami.or.tv/d/index.php?%A5%ED%A5%B8%A5%C3%A5%C8%CA%AC%C0%CF%A4%C8%A5%D7%A5%ED%A5%D3%A5%C3%A5%C8%CA%AC%C0%CF

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/04/27 22:05:10
  • 終了:2015/04/29 21:30:44

ベストアンサー

id:dilutionist No.3

dilutionist回答回数154ベストアンサー獲得回数512015/04/28 18:43:53

ポイント50pt

gemでstatsampleを探せば気づくかと思いますが、statsample-glmというエクステンションがあります。
https://rubygems.org/gems/statsample-glm/

チュートリアルに従って同じデータでやるとこんな感じです。

require 'statsample-glm'
data_set = Statsample::CSV.read "logistic_mle.csv"
glm = Statsample::GLM.compute data_set, :y, :probit, {constant: 1, algorithm: :mle}

puts glm.coefficients
# =>
# 0.17626387151069672
# 0.44820871924236927
# -0.22399172305216722
# -3.0669209258136503

puts glm.standard_error
# =>
# 0.23849905071293545
# 0.2333719187111209
# 0.2149769013786397
# 1.0547761637565858

puts glm.log_likelihood
# => -38.315586790948004

[code]Generalized Linear Models: Introduction and Implementation in Ruby. - Travel <code> Music

ちなみに同じデータをRで扱うとこんな感じになります。
glm()はRにデフォルトで入っている関数です。

data_set <- read.csv("logistic_mle.csv")
attach(data_set)
model <- glm(formula = y ~ a + b + c, family = binomial(probit))
summary(model)

出力

Call:
glm(formula = y ~ a + b + c, family = binomial(probit))

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.97570  -0.09687  -0.00083   0.11941   2.23066  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)  -3.0670     1.0556  -2.906  0.00367 **
a             0.1763     0.2387   0.739  0.46005   
b             0.4483     0.2335   1.920  0.05492 . 
c            -0.2240     0.2151  -1.041  0.29767   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 277.079  on 199  degrees of freedom
Residual deviance:  76.631  on 196  degrees of freedom
AIC: 84.631

Number of Fisher Scoring iterations: 8
id:yoshi-ken

実例コードとともに紹介して頂き、大変感謝しております。
まさにこれが求めていた物でした。ありがとうございます。
説明変数などを調整して試行錯誤してみようと思います。

2015/04/29 21:28:54

その他の回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4523ベストアンサー獲得回数18802015/04/27 23:54:26

ポイント30pt

Ruby のライブラリは、これだと思います。

Statsample

http://ruby-statsample.rubyforge.org/
https://www.ruby-forum.com/topic/204692


ちらっと探した感じでは、API ドキュメント以外の情報が少ないなあ、という感じ。
多分、こんな感じで使うのだと思いますけど。

ds = ...
lr=Statsample::Regression.probit(ds,'y')
puts lr.summary

http://ruby-statsample.rubyforge.org/statsample/Statsample/Regression.html
http://ruby-statsample.rubyforge.org/statsample/Statsample/Regression/Multiple.html
http://ruby-statsample.rubyforge.org/statsample/Statsample/Regression.html#method-c-probit

id:yoshi-ken

いち早いご回答ありがとうございます!
Statsampleにあるのですね、参考になりました。

2015/04/29 21:21:26
id:fatena No.2

suinger回答回数126ベストアンサー獲得回数262015/04/27 23:58:33

ポイント20pt

PHPですと統計関数あるけど公式でもドキュメント未整備の状態なので、非公式でもPHP単体でのプロット回帰分析のライブラリはなさそうです。
http://jp2.php.net/manual/ja/ref.stats.php

解決方法としては、Rで書かれたプログラムをPHPのproc_open関数/exec関数で外部コマンドとして利用すると言う手が現実的かと思います。
以下を参考にPHPからRを実行してみてはいかがでしょうか。

▽PHPとRの基本的な連携
http://mi2yo4.blog136.fc2.com/blog-entry-80.html
▽phpからRを使う
http://kokukuma.blogspot.jp/2011/11/phpr.html

▽R言語: logit法,probit法を用いてLD50等を求める
http://d.hatena.ne.jp/Rion778/20100612/1276358244

id:yoshi-ken

PHP版はメンテナンスもあまりされていないですし厳しそうですね。
https://pecl.php.net/package/stats

PHPからRを呼び出す方法、参考になりました。
ありがとうございます。

2015/04/29 21:26:07
id:dilutionist No.3

dilutionist回答回数154ベストアンサー獲得回数512015/04/28 18:43:53ここでベストアンサー

ポイント50pt

gemでstatsampleを探せば気づくかと思いますが、statsample-glmというエクステンションがあります。
https://rubygems.org/gems/statsample-glm/

チュートリアルに従って同じデータでやるとこんな感じです。

require 'statsample-glm'
data_set = Statsample::CSV.read "logistic_mle.csv"
glm = Statsample::GLM.compute data_set, :y, :probit, {constant: 1, algorithm: :mle}

puts glm.coefficients
# =>
# 0.17626387151069672
# 0.44820871924236927
# -0.22399172305216722
# -3.0669209258136503

puts glm.standard_error
# =>
# 0.23849905071293545
# 0.2333719187111209
# 0.2149769013786397
# 1.0547761637565858

puts glm.log_likelihood
# => -38.315586790948004

[code]Generalized Linear Models: Introduction and Implementation in Ruby. - Travel <code> Music

ちなみに同じデータをRで扱うとこんな感じになります。
glm()はRにデフォルトで入っている関数です。

data_set <- read.csv("logistic_mle.csv")
attach(data_set)
model <- glm(formula = y ~ a + b + c, family = binomial(probit))
summary(model)

出力

Call:
glm(formula = y ~ a + b + c, family = binomial(probit))

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.97570  -0.09687  -0.00083   0.11941   2.23066  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)  -3.0670     1.0556  -2.906  0.00367 **
a             0.1763     0.2387   0.739  0.46005   
b             0.4483     0.2335   1.920  0.05492 . 
c            -0.2240     0.2151  -1.041  0.29767   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 277.079  on 199  degrees of freedom
Residual deviance:  76.631  on 196  degrees of freedom
AIC: 84.631

Number of Fisher Scoring iterations: 8
id:yoshi-ken

実例コードとともに紹介して頂き、大変感謝しております。
まさにこれが求めていた物でした。ありがとうございます。
説明変数などを調整して試行錯誤してみようと思います。

2015/04/29 21:28:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません