2015-05-31 9 views
5

मैं पैकेज glmnet उपयोग कर रहा हूँ पर लेबल जोड़ना mtcars डाटासेट से ग्राफ निम्नलिखित (अन्य चर पर एमपीजी की प्रतिगमन) प्राप्त करने के लिए प्रत्येक वक्र के चर, या तो प्रत्येक वक्र की शुरुआत में या इसके अधिकतम वाई बिंदु (एक्स-अक्ष से अधिकतम) पर? मैंने कोशिश की और मैं सामान्य रूप से किंवदंती जोड़ सकता हूं लेकिन प्रत्येक वक्र पर या इसकी शुरुआत में लेबल नहीं। आपकी सहायता के लिए धन्यवाद.आर में glmnet साजिश में घटता

+0

लेबल के रूप में यह कठिन है। http://stackoverflow.com/questions/30460410/plot-glmnet-increase-size-of-variable-labels/30463022 – user2957945

उत्तर

3

जैसे लेबल हार्ड कोड किए गए हैं, एक त्वरित कार्य लिखना शायद आसान है। यह सिर्फ एक त्वरित शॉट है, इसलिए इसे और अधिक व्यापक रूप से बदला जा सकता है। मैं यह भी ध्यान रखें होता है कि जब लैसो का उपयोग कर वहाँ सामान्य रूप से चर का एक बहुत हैं तो वहाँ लेबल की ओवरलैप (अपने छोटे उदाहरण में दर्शाए गए) का एक बहुत हो जाएगा

lbs_fun <- function(fit, ...) { 
     L <- length(fit$lambda) 
     x <- log(fit$lambda[L]) 
     y <- fit$beta[, L] 
     labs <- names(y) 
     text(x, y, labels=labs, ...) 
} 

# plot 
plot(fit, xvar="lambda") 

# label 
lbs_fun(fit) 

enter image description here

+0

यह वही है जो मैंने पूछा था। धन्यवाद। – rnso

+0

कृपया इस साजिश में किंवदंती जोड़ने पर मेरा अनुवर्ती प्रश्न देखें: http://stackoverflow.com/questions/30566788/legend-label-errors-with-glmnet-plot-in-r – rnso

1

एक वैकल्पिक है plot_glmnet plotmo पैकेज में फ़ंक्शन। यह स्वचालित रूप से परिवर्तनीय नाम को स्थान देता है और इसमें कुछ अन्य घंटियाँ और सीटी होती है। उदाहरण के लिए, निम्नलिखित कोड

library(glmnet) 
mod <- glmnet(as.matrix(mtcars[-1]), mtcars[,1]) 
library(plotmo) # for plot_glmnet 
plot_glmnet(mod) 

देता

plot http://www.milbo.org/doc/plot-glmnet-mtcars.png

चर नाम फैला दिया जाता overplotting को रोकने के लिए है, लेकिन हम अभी भी जो वक्र जो चर साथ जुड़ा हुआ है बाहर कर सकते हैं। आगे के उदाहरण अध्याय 6 में plotres vignette में पाया जा सकता है जो plotmo पैकेज में शामिल है।

0

यहां वक्रों को सीधे ऊपर ले जाने वाले पाठ लेबल के बजाय लाइन सेगमेंट का उपयोग करके सबसे अच्छा जवाब में संशोधन किया गया है। यह विशेष रूप से उपयोगी होता है जब बहुत सारे चर होते हैं और आप केवल उन लोगों को प्रिंट करना चाहते हैं जिनके पास पूर्ण गुणांक मान शून्य से अधिक होते हैं:

#note: the argument 'lra' is a cv.glmnet object 


lbs_fun <- function(lra, ...) { 

    fit <- lra$glmnet.fit 

    L=which(fit$lambda==lra$lambda.min) 

    ystart <- sort(fit$beta[abs(fit$beta[,L])>0,L]) 
    labs <- names(ystart) 
    r <- range(fit$beta[,100]) # max gap between biggest and smallest coefs at smallest lambda i.e., 100th lambda 
    yfin <- seq(r[1],r[2],length=length(ystart)) 

    xstart<- log(lra$lambda.min) 
    xfin <- xstart+1 


    text(xfin+0.3,yfin,labels=labs,...) 
    segments(xstart,ystart,xfin,yfin) 


} 

plot(lra$glmnet.fit,label=F, xvar="lambda", xlim=c(-5.2,0), lwd=2) #xlim, lwd is optional 
संबंधित मुद्दे