Наказанная регрессия: длина «положительного» не совпадает - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь использовать штрафованную регрессию для прогнозирования столбца данных y с использованием предикторов месяца и времени. Я хотел бы включить ограничение позитивности для одного из предикторов, но не для другого. Все работает нормально, если я использую положительный = ИСТИНА или положительный = ЛОЖЬ, но если я использую положительный = с (Т, Т) или положительный = с (Т, F), я получаю следующую ошибку:

Ошибка в .checkinput (match.call (), parent.frame ()): длина «Positive» не соответствует количеству столбцов «наказано»

, хотя длина ограничения и длинаПредсказатели совпадают.

Предсказатель месяца является фактором, а время числовым. Однако, изменение месяца на числовую переменную тоже не поможет. Вот мой код:

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 голосов
/ 15 октября 2019

month категорически, поэтому в итоге вы получите матрицу дизайна с 11 столбцами (с января по октябрь + переменная времени). Это решает проблему:

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