2017-07-14 9 views
0
library(zoo) 
library(glmnet) 

に私は、線形回帰の転がり係数を取得することができます:Rはrollapply glmnet

seat <- as.zoo(log(UKDriverDeaths)) 
time(seat) <- as.yearmon(time(seat)) 
seat <- merge(y = seat, y1 = lag(seat, k = -1), 
y12 = lag(seat, k = -12), all = FALSE) 



tail(seat) 
fm <- rollapply(seat, width = 50, 
FUN = function(z) coef(lm(y ~ y1 + y12, data = as.data.frame(z))), 
by.column = FALSE, align = "right") 

が、私はトラブルglmnetのためのローリング係数を得るが生じています:

fm <- rollapply(seat, width = 50, 
FUN = function(z) coef(cv.glmnet(z[,c(2,3)],z[,1],alpha=1, data = 
as.data.frame(z))), by.column = FALSE, align = "right") 

をいただき、ありがとうございます任意のヘルプ

+0

例を再現可能にし、問題の原因を明確にしてください。それはエラーを出すのですか?エラーが含まれている場合は... – Dason

答えて

2

まず、cv.glmnetには、data引数がありません。これは、それぞれ予測子行列と応答ベクトルであるxy引数を持ちます。

第2に、seatデータセットの最初の行に値がありません(遅れ操作のために避けられない)。これはglmnetを駄目にしてしまいます。glmnetは、最小限のチェックを行うむしろ裸のインターフェースを持っています。

第3に、glmnet/cv.glmnetオブジェクトのcoefは、疎な行列を返します。rollapplyは、何をするべきかわかりません。これらのすべてを修正

が与える:

fm2 <- rollapply(seat, width=50, FUN=function(z) 
{ 
    z <- na.omit(z) 
    as.numeric(coef(cv.glmnet(z[, c(2, 3)], z[, 1], alpha=1))) 
}, by.column=FALSE, align="right") 

またglmnetに式/データ・フレーム・インタフェースを実装して、私のglmnetUtilsパッケージを、使用することができます。これは上記の最初の2つの問題を扱います。

library(glmnetUtils) 
fm3 <- rollapply(seat, width=50, FUN=function(z) 
{ 
    as.numeric(coef(cv.glmnet(y ~ y1 + y12, data=as.data.frame(z), alpha=1))) 
}, by.column=FALSE, align="right") 
+0

ありがとうございました。 –

関連する問題