R中的轮廓图

时间:2019-09-07 08:12:01

标签: r

我正在尝试重新创建那些漂亮的等高线图,以进行正则化回归。在此处查看示例:https://images.app.goo.gl/tq8xrKPPVFp2WBSg7

我在下面有一些示例代码。我不反对在ggplotplot_ly中这样做,但是我对这些图形参数的熟练程度甚至更低。

我的主要抱怨是,我似乎无法理解如何调整轮廓圆在图形上的移动距离,并且轮廓圆经常被切除。我本来以为xlim上的ylim / contour()参数控制了这一点,但是我似乎做得不好。

我的另一个问题是处理宽高比。当使用“ asp = 1”时,它会创建很多空白,我想避免,但是我不需要任何不必要的拉伸。

BETA = c(3,5)
X = matrix(rnorm(100*length(BETA)),nrow = 100, ncol = length(BETA))

Y = X%*%BETA + rnorm(nrow(X))

beta1 = seq(1,5,length.out = 100)
beta2 = seq(3,7,length.out = 100)
expand.grid(beta1,beta2)

z = function(X,Y,b1,b2){
  return = matrix(NA,nrow = length(b1), ncol = length(b2))
  for(i in 1:length(b1)){
    for(j in 1:length(b2)){
      return[i,j] = sum((Y-X%*%c(b1[i],b2[j]))^2)
    }
  }
  return
}
plot(0, type = "n", xlim = c(-2,8), ylim = c(-2,8),xlab = "B1", ylab = "B2",asp = 1)
abline(h = 0, v = 0)

lambda.mult = 2
segments(x0 = -lambda.mult, y0 = 0, x1 = 0, y1 = lambda.mult)
segments(x0 = 0, y0 = lambda.mult, x1 = lambda.mult, y1 = 0)
segments(x0 = -lambda.mult, y0 = 0, x1 = 0, y1 = -lambda.mult)
segments(x0 = 0, y0 = -lambda.mult, x1 = lambda.mult, y1 = 0)

points(t(BETA),pch = 20)
contour(x = beta1, y = beta2, z = z(X,Y,beta1,beta2),levels = seq(3,8, by = 2)*70,
        xlim = c(-100,100), ylim = c(-100,100),
        add = TRUE, drawlabels = FALSE)

0 个答案:

没有答案