2016-04-25 142 views
1

拿這個情況下(logistic迴歸經典蟹數據)相同的預測:predict.glmnet()給出了適用於type =「鏈接」和「響應」使用家庭=「二項式」

> 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

需要的預測類型。類型「鏈接」給出了「二項式」,「多項式」,「泊松」或「cox」模型的線性預測變量 ;對於 「高斯」模型,它給出了擬合值。鍵入「響應」給出 爲「二項」或「多項」擬合概率,[...]

所以這是我做的:

> 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 

相同的值都爲linkresponse預測,這不是我所期望的。使用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

+0

檢查您的模型的類,然後閱讀'predict.lognet'的代碼。 – Scortchi

回答

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,令R決心間最終使用哪些功能。

希望它有幫助。