2012-10-02 18 views
7

Dadas dos variables, x y y, ejecuto una regresión dinámica en las variables y me gustaría representar el modelo ajustado contra una de las variables y el residuo en la parte inferior que muestra cómo la línea de datos real difiere de la línea de predicción. Lo he visto antes y lo he hecho antes, pero por mi vida no puedo recordar cómo hacerlo o encontrar algo que lo explique.Cómo crear un gráfico que muestre el modelo predictivo, los datos y los residuos en R

Esto me lleva al estadio donde tengo un modelo y dos variables, pero no puedo obtener el tipo de gráfico que quiero.

library(dynlm) 
x <- rnorm(100) 
y <- rnorm(100) 
model <- dynlm(x ~ y) 

plot(x, type="l", col="red") 
lines(y, type="l", col="blue") 

Quiero generar un gráfico que tiene este aspecto donde se ve el modelo y los datos reales superponer entre sí y el restante representa como un gráfico separado en la parte inferior que muestra cómo los datos reales y el modelo se desvían. The Objective

+0

Ojalá pudiera elegir ambas como respuestas. Ambos logran lo que necesito que hagan. Voy a ir con la respuesta de Ricardo únicamente porque agrega los cuadros de límites de confianza. – FloppyDisk

Respuesta

9

Esto debería hacer el truco:

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' 

y este es el código para 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

7

lo que estás buscando es resid(model). Prueba esto:

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

Cuestiones relacionadas