3

現在、glmnet パッケージを使用してなげなわ回帰を実行しています (以下の例では、「fits」変数に保存されています。その後、fits 変数をプロットすると、適切に表示されますが、係数ラベルは非常に小さいです。方法のアイデアはありますか?これらのサイズを大きくすることはできますか?

以下の再現可能な例...

require(glmnet)

#setup sample DF with 5 variables
set.seed(123)
sampleDF <- data.frame("V1"=rnorm(100,mean=0,sd=.10),"V2"=rnorm(100,mean=0,sd=.10),"V3"=rnorm(100,mean=0,sd=.10),"V4"=rnorm(100,mean=0,sd=.10),"V5"=rnorm(100,mean=0,sd=.10))

#break data into yVector & xMatrix to put into glmnet
yVector <- sampleDF[,1]
xMatrix <- as.matrix(sampleDF[,2:ncol(sampleDF)])

#use k-fold cross validation to find the min lambda
cv.glmmod <- cv.glmnet(xMatrix,yVector,alpha=1,nfolds=nrow(xMatrix),grouped=FALSE)
best_lambda <- cv.glmmod$lambda.min

#run glmnet
fits <- glmnet(xMatrix, yVector, family="gaussian", alpha=1, nlambda=100)

#plot results
plot(fits,label=TRUE,xvar="lambda")
4

1 に答える 1

4

ラベルのサイズがハードコードされているように見えるので(そしてグローバルなcex変更は他のプロット機能を変更します)、変更できますplot.glmnet

# copy the plot function
myPlot <- plotCoef

# replace relevant part
body(myPlot)[[14]] <- quote(if (label) {
  nnz = length(which)
  xpos = max(index)
  pos = 4
  if (xvar == "lambda") {
    xpos = min(index)
    pos = 2
  }
  xpos = rep(xpos, nnz)
  ypos = beta[, ncol(beta)]
  text(xpos, ypos, paste(which), pos = pos, ...) # only changed this with ...
})

# copy first level of plot and replace plotCoef  with myPlot
newplotter <- plot.glmnet

body(newplotter)[[3]] <- quote(myPlot(x$beta, lambda = x$lambda, 
                                     df = x$df, dev = x$dev.ratio, 
                                        label = label, xvar = xvar, ...))

これにより、テキストが増加するはずです(プロットは十分に広くする必要があることに注意してください)

newplotter(fits,label=TRUE,xvar="lambda", cex=1.2)

ここに画像の説明を入力

于 2015-05-26T15:37:44.320 に答える