How to create a graph showing the predictive model, data and residuals in R

前端 未结 2 796
再見小時候
再見小時候 2021-01-12 14:26

Given two variables, x and y, I run a dynlm regression on the variables and would like to plot the fitted model against one of the variables and th

相关标签:
2条回答
  • 2021-01-12 15:14

    This should do the trick:

    library(dynlm)
    set.seed(771104)
    x <- 5 + seq(1, 10, len=100) + rnorm(100)
    y <- x + rnorm(100)
    model <- dynlm(x ~ y)
    
    par(oma=c(1,1,1,2))
    plotModel(x, model) # works with models which accept 'predict' and 'residuals'
    

    and this is the code for plotModel,

    plotModel =  function(x, model) {
      ymodel1 = range(x, fitted(model), na.rm=TRUE)
      ymodel2 = c(2*ymodel1[1]-ymodel1[2], ymodel1[2])
      yres1   = range(residuals(model), na.rm=TRUE)
      yres2   = c(yres1[1], 2*yres1[2]-yres1[1])
      plot(x, type="l", col="red", lwd=2, ylim=ymodel2, axes=FALSE,
           ylab="", xlab="")
      axis(1)
      mtext("residuals", 1, adj=0.5, line=2.5)
      axis(2, at=pretty(ymodel1))
      mtext("observed/modeled", 2, adj=0.75, line=2.5)
      lines(fitted(model), col="green", lwd=2)
      par(new=TRUE)
      plot(residuals(model), col="blue", type="l", ylim=yres2, axes=FALSE, 
           ylab="", xlab="")
      axis(4, at=pretty(yres1))
      mtext("residuals", 4, adj=0.25, line=2.5)
      abline(h=quantile(residuals(model), probs=c(0.1,0.9)), lty=2, col="gray")
      abline(h=0)
      box()  
    }
    

    enter image description here

    0 讨论(0)
  • 2021-01-12 15:19

    what you're looking for is resid(model). Try this:

    library(dynlm)
    x <- 10+rnorm(100)
    y <- 10+rnorm(100)
    model <- dynlm(x ~ y)
    
    plot(x, type="l", col="red", ylim=c(min(c(x,y,resid(model))), max(c(x,y,resid(model)))))
    lines(y, type="l", col="green")
    lines(resid(model), type="l", col="blue")
    

    enter image description here

    0 讨论(0)
提交回复
热议问题