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

Given two variables, x and y , I run a dynlm regression for the variables and would like to build the constructed model using one of the variables and the residual below, showing how the actual data row differs from the predictive line. I saw it before, and I did it before, but for my life I don’t remember how to do it or find something that explains it.

This leads me to the stage where I have a model and two variables, but I can’t get the type of graph that I want.

 library(dynlm) x <- rnorm(100) y <- rnorm(100) model <- dynlm(x ~ y) plot(x, type="l", col="red") lines(y, type="l", col="blue") 

I want to create a graph that looks like this when you see a model and real data overlapping each other, and residuals plotted as a separate graph below, showing how real data and the model are rejected. The objective

+7
source share
2 answers

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

+9
source

what you are looking for is resid(model) . Try the following:

 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

+7
source

All Articles