predict.glmnet()为type =" link"提供相同的预测。和#34;回应"使用family ="二项式"

时间:2016-04-25 12:22:52

标签: r regression glmnet

以此案例(逻辑回归的经典螃蟹数据):

> library(glmnet)
> X <- read.table("http://www.da.ugent.be/datasets/crab.dat", header=T)[1:10,]
> Y <- factor(ifelse(X$Sa > 0, 1, 0))
> Xnew <- data.frame('W'=20,'Wt'=2000)
> fit.glmnet <- glmnet(x = data.matrix(X[,c('W','Wt')]), y = Y, family = "binomial")

现在我想预测来自Xnew的新值:

根据docs,我可以使用predict.glmnet

  

输入

     

需要的预测类型。输入&#34;链接&#34;给出线性预测变量   for&#34; binomial&#34;,&#34; multinomial&#34;,&#34; poisson&#34;或&#34;考克斯&#34;楷模;对于   &#34;高斯&#34;它给出了拟合值的模型。输入&#34;响应&#34;给   &#34;二项式&#34;的拟合概率或&#34; multinomial&#34;,[...]

所以这就是我的所作所为:

> predict.glmnet(object = fit.glmnet, type="response", newx = as.matrix(Xnew))[,1:5]
        s0         s1         s2         s3         s4 
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386 
> predict.glmnet(object = fit.glmnet, type="link", newx = as.matrix(Xnew))[,1:5]
        s0         s1         s2         s3         s4 
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386 

link作为response预测的值相同,这不是我所期望的。使用predict似乎给了我正确的值:

> predict(object = fit.glmnet, type="response", newx = as.matrix(Xnew))[,1:5]
       s0        s1        s2        s3        s4 
0.3000000 0.2835386 0.2678146 0.2528080 0.2384968 
> predict(object = fit.glmnet, type="link", newx = as.matrix(Xnew))[,1:5] 
        s0         s1         s2         s3         s4 
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386 

这是一个错误,还是我以错误的方式使用predict.glmnet

1 个答案:

答案 0 :(得分:1)

在数据包glmnet中,您的对象属于lognet类:

> class(object)
[1] "lognet" "glmnet"

这就是为什么你没有使用predict.glmnet得到正确的结果,而type="response"在内部不支持predict.lognet,但如果你使用> predict.lognet(object = fit.glmnet, newx = as.matrix(Xnew), type="response")[,1:5] s0 s1 s2 s3 s4 0.3000000 0.2835386 0.2678146 0.2528080 0.2384968 > predict.lognet(object = fit.glmnet, newx = as.matrix(Xnew), type="link")[,1:5] s0 s1 s2 s3 s4 -0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386 ,你会得到它:

predict

无论如何,我建议您使用java -Djetty.port=9999 -jar start.jar ,并让R在内部解决使用哪个功能。

希望它有所帮助。