Я пытаюсь использовать пакет penalized для калибровки штрафа за линейную регрессию так, чтобы коэффициенты подмножества переменных являются положительными. Мне удалось откалибровать модель, но я не использую ее для создания новых прогнозов.R пакет «наказан»: ошибка при использовании функции прогнозирования() с матричным вводом для «оштрафованных» и «непрозрачных»
Вот игрушка пример:
require(dplyr)
require(penalized)
require(ggplot2)
head(diamonds)
# A tibble: 6 x 10
# carat cut color clarity depth table price x y z
# <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
#2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
#3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
#4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
#5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
#6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
response = diamonds$price
penalized_vars = "x"
unpenalized_vars = "depth"
fit_penalized = penalized(response=as.matrix(response),
penalized = model.matrix(~., select_(diamonds, .dots = penalized_vars)),
unpenalized = model.matrix(~., select_(diamonds, .dots = unpenalized_vars)),
model="linear",
positive=TRUE,
maxiter=25)
# nonzero coefficients: 3
show(fit_penalized)
#Penalized linear regression object
#4 regression coefficients of which 3 are non-zero
#Loglikelihood = -482648.2
head(fitted(fit_penalized))
# 1 2 3 4 5 6
#-1679.6983 -1924.0012 -1515.2681 -863.6912 -393.7956 -1668.7105
До сих пор так хорошо. Как я могу использовать это для прогнозирования значений на основе новой информации? Я попытался
predict(fit_penalized,
penalized = model.matrix(~., select_(vars, .dots = penalized_vars)),
unpenalized = model.matrix(~., select_(vars, .dots = unpenalized_vars)))
# Error in terms.default([email protected]$unpenalized) :
# no terms component nor attribute
Интересно, переход на формулы работал! Благодаря! – phildeutsch