使用 glmnetUtils 进行预测的问题
issue with predict with glmnetUtils
尝试将 GitHub 中的 glmnetUtils
包用于 glmnet 的公式接口,但预测未估计足够的值
library(nycflights13) # from GitHub
library(modelr)
library(dplyr)
library(glmnet)
library(glmnetUtils)
library(purrr)
fitfun=function(dF){
cv.glmnet(arr_delay~distance+air_time+dep_time,data=dF)
}
gnetr2=function(model,datavals){
yvar=all.vars(formula(model)[[2]])
print(paste('y variable:',yvar))
print('observations')
print(str(as.data.frame(datavals)[[yvar]]))
print('predictions')
print(str(predict(object=model,newdata=datavals)))
stats::cor(stats::predict(object=model, newdata=datavals), as.data.frame(datavals)[[yvar]], use='complete.obs')^2
}
flights %>%
group_by(carrier) %>%
do({
crossv_mc(.,4) %>%
mutate(mdl=map(train,fitfun),
r2=map2_dbl(mdl,test,gnetr2))
})
gnetr2()的输出:
[1] "y variable: arr_delay"
[1] "observations"
num [1:3693] -33 -6 47 4 15 -5 45 16 0 NA ...
NULL
[1] "predictions"
num [1:3476, 1] 8.22 21.75 24.31 -7.96 -7.27 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:3476] "1" "2" "3" "4" ...
..$ : chr "1"
NULL
Error: incompatible dimensions
有什么想法吗?非常感谢您的帮助!
原来它的发生是因为预测变量中有 NA,所以 predict()
导致比 na.action=na.exclude
更短的向量。
通常一个解决方案是使用 predict(object,newdata,na.action=na.pass)
但 predict.cv.glmnet
does not accept predict
.
的其他参数
因此解决方案是在开始之前过滤完整的案例
flights=flights %>% filter(complete.cases(.))
这是底层 glmnet 包的问题,但没有理由不能在 glmnetUtils 中处理。我只是 pushed an update 应该允许您将 na.action
参数与 predict
方法一起用于基于公式的调用。
- 设置
na.action=na.pass
(默认值)将填充预测以包含缺失值行的 NA
na.action=na.omit
或 na.exclude
将删除这些行
请注意,给定行的缺失可能会根据进行的正则化程度而变化:如果 NA 用于从模型中删除的变量,则该行将被视为完整案例。
还借此机会修复了公式的 LHS 包含表达式的错误。
试一试 install_github("Hong-Revo/glmnetUtils")
如果有任何问题请告诉我。
尝试将 GitHub 中的 glmnetUtils
包用于 glmnet 的公式接口,但预测未估计足够的值
library(nycflights13) # from GitHub
library(modelr)
library(dplyr)
library(glmnet)
library(glmnetUtils)
library(purrr)
fitfun=function(dF){
cv.glmnet(arr_delay~distance+air_time+dep_time,data=dF)
}
gnetr2=function(model,datavals){
yvar=all.vars(formula(model)[[2]])
print(paste('y variable:',yvar))
print('observations')
print(str(as.data.frame(datavals)[[yvar]]))
print('predictions')
print(str(predict(object=model,newdata=datavals)))
stats::cor(stats::predict(object=model, newdata=datavals), as.data.frame(datavals)[[yvar]], use='complete.obs')^2
}
flights %>%
group_by(carrier) %>%
do({
crossv_mc(.,4) %>%
mutate(mdl=map(train,fitfun),
r2=map2_dbl(mdl,test,gnetr2))
})
gnetr2()的输出:
[1] "y variable: arr_delay"
[1] "observations"
num [1:3693] -33 -6 47 4 15 -5 45 16 0 NA ...
NULL
[1] "predictions"
num [1:3476, 1] 8.22 21.75 24.31 -7.96 -7.27 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:3476] "1" "2" "3" "4" ...
..$ : chr "1"
NULL
Error: incompatible dimensions
有什么想法吗?非常感谢您的帮助!
原来它的发生是因为预测变量中有 NA,所以 predict()
导致比 na.action=na.exclude
更短的向量。
通常一个解决方案是使用 predict(object,newdata,na.action=na.pass)
但 predict.cv.glmnet
does not accept predict
.
因此解决方案是在开始之前过滤完整的案例
flights=flights %>% filter(complete.cases(.))
这是底层 glmnet 包的问题,但没有理由不能在 glmnetUtils 中处理。我只是 pushed an update 应该允许您将 na.action
参数与 predict
方法一起用于基于公式的调用。
- 设置
na.action=na.pass
(默认值)将填充预测以包含缺失值行的 NA na.action=na.omit
或na.exclude
将删除这些行
请注意,给定行的缺失可能会根据进行的正则化程度而变化:如果 NA 用于从模型中删除的变量,则该行将被视为完整案例。
还借此机会修复了公式的 LHS 包含表达式的错误。
试一试 install_github("Hong-Revo/glmnetUtils")
如果有任何问题请告诉我。