朱莉娅:多项式回归,时间序列滞后值

时间:2016-04-06 21:57:01

标签: python r regression julia multinomial

我需要在朱莉娅做一些多项回归。在R中我得到以下结果:

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 

这是我的data

我的第一次尝试是使用Regression.jl。这个包的文档非常稀疏,所以我不确定哪个类别用作基线,结果输出对应的参数等等。我提出了一个问题来询问这些事情here

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 

但同样,我不确定这对应于什么。

接下来,我尝试了Julia包装器到Python的SciKitLearn:

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非常相似(不确定第三列是什么......)

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)。

0 个答案:

没有答案