Juliaで多項回帰を行う必要があります。RI で次の結果を取得します。
library(nnet)
data <- read.table("Dropbox/scripts/timeseries.txt",header=TRUE)
multinom(y~X1+X2,data)
# weights: 12 (6 variable)
initial value 10985.024274
iter 10 value 10438.503738
final value 10438.503529
converged
Call:
multinom(formula = y ~ X1 + X2, data = data)
Coefficients:
(Intercept) X1 X2
2 0.4877087 0.2588725 0.2762119
3 0.4421524 0.5305649 0.3895339
Residual Deviance: 20877.01
AIC: 20889.01
ここに私のデータがあります
私の最初の試みはRegression.jlを使用することでした。このパッケージのドキュメントは非常にまばらなので、どのカテゴリがベースラインとして使用されているか、結果の出力がどのパラメーターに対応しているかなどはわかりません。
using DataFrames
using Regression
import Regression: solve, Options, predict
dat = readtable("timeseries.txt", separator='\t')
X = convert(Matrix{Float64},dat[:,2:3])
y = convert(Vector{Int64},dat[:,1])
ret = solve(mlogisticreg(X',y,3), reg=ZeroReg(), options=Options(verbosity=:iter))
結果は
julia> ret.sol
3x2 Array{Float64,2}:
-0.573027 -0.531819
0.173453 0.232029
0.399575 0.29979
繰り返しますが、これが何に対応するのかわかりません。
次に、Python の SciKitLearn に対する Julia ラッパーを試しました。
using ScikitLearn
@sk_import linear_model: LogisticRegression
model = ScikitLearn.fit!(LogisticRegression(multi_class="multinomial", solver = "lbfgs"), X, y)
model[:coef_]
3x2 Array{Float64,2}:
-0.261902 -0.220771
-0.00453731 0.0540354
0.266439 0.166735
しかし、このモデルから係数を抽出する方法がわかりません。係数を更新しました。これらも R の結果とは異なります。
Rの結果を再現しようとする助けがあれば幸いです(どのパッケージを使用しても!)
応答変数は離散化されたタイムラグ応答であることに注意してください。
julia> dat[1:3,:]
3x3 DataFrames.DataFrame
| Row | y | X1 | X2 |
|-----|---|----|----|
| 1 | 3 | 1 | 0 |
| 2 | 3 | 0 | 1 |
| 3 | 1 | 0 | 1 |
行 2 では、応答 (0, 1) は前の観測が 3 だったことを意味します。同様に、(1,0) は前の観測が 2 だったことを意味し、(0,0) は前の観測が 1 だったことを意味します。
更新: Regression.jl の場合、デフォルトでは切片に適合しないようです (切片ではなく「バイアス」と呼ばれます)。この用語を追加することで、Python と非常によく似た結果が得られます (ただし、3 番目の列が何であるかはわかりません..)
julia> ret = solve(mlogisticreg(X',y,3, bias=1.0), reg=ZeroReg(), options=Options(verbosity=:iter))
julia> ret.sol
3x3 Array{Float64,2}:
-0.263149 -0.221923 -0.309949
-0.00427033 0.0543008 0.177753
0.267419 0.167622 0.132196
更新: モデル係数は識別できないため、これらの異なる実装全体で同じであるとは思わないでください。ただし、予測される確率は同じである必要があり、実際には同じです (R、Regression.jl、または ScikitLearn を使用)。