惩罚回归:“正”的长度不匹配

时间:2019-10-02 09:54:43

标签: r constraints regression

我正在尝试使用惩罚回归使用预测器的月份和时间来预测数据列y。我想在一个预测变量上包括一个正约束,而在另一个预测变量上不包含。如果我使用Positive = TRUE或Positive = FALSE,一切都很好,但是如果我使用Positive = c(T,T)或Positive = c(T,F),则会出现以下错误:

.checkinput(match.call(),parent.frame())中的错误:   “正”的长度与“罚分”的列数不匹配

尽管约束的长度和预测变量的长度匹配。

当数字为数字时,月预测变量是一个因素。但是,将month更改为数字变量也无济于事。这是我的代码:

library(penalized)
df<-data.frame(date=seq(as.Date("2018-01-01"), as.Date("2018-10-01"), by="days"))
df$month<-format(as.Date(df$date), "%m")
df$y<-runif(nrow(df),1,100)
df$time<- -floor(nrow(df)/2):(ceiling(nrow(df)/2)-1)/1000
df$month<-as.factor(df$month)

training<-df[1:200,]
test<-df[201,]

ens<-penalized(y, ~ month+time, ~ 0,lambda1=1, lambda2=1, positive =c(F,T), data=training)

pred<-predict(ens,~ month + time, ~0,data=test)

有人能发现这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

month是分类的,因此在幕后您将获得一个包含11列的设计矩阵(一月到十月+时间变量)。解决了这个问题:

ens<-penalized(y, ~ month+time, ~ 0,lambda1=1, lambda2=1, positive =c(rep(F,10),T), data=training)