Как создать график, показывающий прогностическую модель, данные и остатки в R

Имея две переменные, x и y, я запускаю динамическую регрессию для переменных и хотел бы построить построенную модель по одной из переменных и остатку внизу, показывающему, как фактическая линия данных отличается от линии прогнозирования. Я видел, как это делается раньше, и я делал это раньше, но хоть убей, я не могу вспомнить, как это сделать, или найти что-нибудь, что это объясняет.

Это приводит меня к примерному положению, когда у меня есть модель и две переменные, но я не могу получить тот тип графика, который мне нужен.

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

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

Я хочу создать график, который выглядит так, где вы видите, как модель и реальные данные накладываются друг на друга, а остаток отображается в виде отдельного графика внизу, показывающего, как реальные данные и модель отклоняются. Цель


person FloppyDisk    schedule 02.10.2012    source источник
comment
Хотел бы я выбрать оба ответа. Они оба выполняют то, что мне нужно. Я собираюсь пойти с ответом Рикардо исключительно потому, что он добавляет ограничивающие рамки уверенности.   -  person FloppyDisk    schedule 10.10.2012


Ответы (2)


Это должно помочь:

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'

а это код для 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()  
}

введите здесь описание изображения

person Ricardo Oliveros-Ramos    schedule 02.10.2012

то, что вы ищете, это resid(model). Попробуй это:

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")

введите здесь описание изображения

person drammock    schedule 02.10.2012