【问题标题】:Plot fitted line within certain range R绘制一定范围内的拟合线 R
【发布时间】:2012-04-19 15:45:13
【问题描述】:

使用 R,我想绘制两个变量之间的线性关系,但我希望拟合线仅存在于数据范围内。

例如,如果我有以下代码,我希望这条线只存在于 1:10 的 x 和 y 值(使用默认参数,这条线超出了数据点的范围)。

x <- 1:10
y <- 1:10
plot(x,y)
abline(lm(y~x))

【问题讨论】:

    标签: r plot lm par


    【解决方案1】:

    不使用abline(),(a) 保存拟合模型,(b) 使用predict.lm() 找到对应于x=1 和x=10 的拟合y 值,然后(c) 使用@987654323 @ 在两点之间添加一条线:

    f <- lm(y~x)
    X <- c(1, 10)
    Y <- predict(f, newdata=data.frame(x=X))
    
    plot(x,y)
    lines(x=X, y=Y)
    

    【讨论】:

      【解决方案2】:

      您可以使用 predict 来做到这一点。

      您可以预测 x 的特定值(请参阅 ?predict)

      x<-1:10
      y<-1:10
      plot(x,y)
      new <- data.frame(x = seq(1, 5, 0.5))
      lines(new$x, predict(lm(y~x), new))
      

      【讨论】:

        【解决方案3】:

        除了将predictlinessegments 一起使用之外,您还可以将clip 函数与abline 一起使用:

        x <- 1:10
        y <- 1:10
        plot(x,y)
        clip(1,10, -100, 100)
        abline(lm(y~x))
        

        【讨论】:

        • +1,因为它适用于任何行,也适用于 abline(),而无需使用带有 predict() 的 hack。这样,例如,还可以修剪延伸到绘图边缘的 ablines,但只能修剪到一侧,例如向右,而不是向左。
        • 这是一个比公认的更好的答案。简单得多,并且实际上可以根据需要对视觉表示进行操作,而不是使用 predict 制作一些奇怪的新行表示
        【解决方案4】:

        plotrix 库有 ablineclip() 函数用于此目的:

        x <- 1:10
        y <- 1:10
        plot(x,y)
        ablineclip(lm(y~x),x1=1,x2=5)
        

        【讨论】:

          【解决方案5】:

          另一种方法是使用segments 函数(文档here)。

          假设你估计了这条线,你得到了a 的截距和b 的斜率。因此,您的拟合函数是y = a + bx

          现在,假设您想在 x0x1 之间显示 x 的线。然后,以下代码绘制您的行:

          # inputs
          
          a <- 0.5
          b <- 2
          
          x0 <- 1
          x1 <- 5
          
          # graph
          
          plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
          segments(x0, a+b*x0, x1, a+b*x1)
          

          只需将 a, b, x0, x1 的值替换为您选择的值


          对于像我这样想为任意一对数字(而不是适合给定回归的数字)绘制一条线的人来说,您需要以下代码:

          plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
          segments(x0, yo, x1, y1)
          

          只需将 x0, y0, x1, y1 的值替换为您选择的值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-11-02
            • 1970-01-01
            • 2020-08-04
            • 2017-10-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多