2016-10-22 3 views
0

Рассмотрим следующий сценарий для построения импульсной функции отклика:R: Черчение IRF вручную

library(vars) 
Canada <- Canada * 999 
var <- VAR(Canada, p = 2, type = "both") 
plot(irf(var, impulse = "rw", response = "U", boot = T, cumulative = FALSE,  n.ahead = 20)) 
plot(irf(var, impulse = "rw", response = "U", boot = T, cumulative = TRUE,  n.ahead = 20)) 

Я удивляюсь, как я мог бы получить доступ к данным на участке (и 95% интервалов)?

Было бы здорово напечатать график с заполненной цветом доверительной полосой, зеленой импульсной откликой и различными описаниями осей. Решение с характеристиками построения встроенных R было бы предпочтительнее, чем ggplot.

Спасибо!

ответ

2

Вы можете просмотреть данные, возвращаемые МАФ:

library("vars") 

# generate some dummy data 
df <- data.frame(n=rnorm(100), p=rpois(100, 2)) 

var <- VAR(df, p = 2, type = "both") 
irf <- irf(var, impulse = "n", response = "p", boot = T, 
      cumulative = FALSE, n.ahead = 20) 

# inspect coefficients object 
str(irf) 

Все данные, необходимые доступна здесь (например, проверить irf$Lower и irf$Upper).

Один из способов, чтобы настроить график по умолчанию будет смотреть на источник функции вызывается при запуске plot(irf):

vars:::plot.varirf 

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

Обновлено:

Вот отправная точка для доверительных полос:

# set up the base plot 
plot(irf$irf$n, type="n", ylim = c(-.3, .5), 
    ylab = "Your label", xlab = "Another label") 
abline(h=0) 

# draw the filled polygon for confidence intervals 
polygon(
    c(1:length(irf$Upper$n), length(irf$Lower$n):1), 
    c(irf$Upper$n, rev(irf$Lower$n)), 
    col = "grey80", border = NA) 

# add coefficient estimate line 
lines(irf$irf$n, col = "darkgreen") 

example plot

+0

Любая идея, как я мог бы нарисовать доверительную группу вместо двух строк? Мне нужно заполнить комнату в пределах более низкого и более высокого доверительного интервала. – RPacker

+0

Добавлен пример сюжета – blmoore

0

У меня была аналогичная проблема, поэтому я смоделировал сам. Я не продвинутый пользователь R, поэтому, возможно, кто-то может включить это в функцию. Этот метод создает график всех IRF с вертикалью при y = 0, именами импульсов по оси x и ответами по оси y. IRF-графики также регулируются по размеру.

"VAR_BS_9016_5VAR" является моим "самым большим" объектом. Я использовал 5 переменных, но этот метод можно легко сократить или расширить.

par(mfrow=c(5,5), oma = c(0,0,0,0) + 0.1, mar = c(5,5,0,0) + 0.1) 
for (i in 1:5){ 
for (j in 1:5){ 
var_plot=irf(VAR_BS_9016_5VAR, impulse = paste(colnames(VAR_BS_9016_5VAR$y)[i]), response=paste(colnames(VAR_BS_9016_5VAR$y)[j]), n.ahead = 20, ortho=TRUE, boot=TRUE, runs=1000, ci=0.9) 
plot(x=c(1:21), y=unlist(var_plot$Lower), type="l", lwd = 3, lty=2,col="red", ylab=paste(colnames(VAR_BS_9016_5VAR$y)[j]), xlab=paste(var_plot$impulse), ylim=range(c(unlist(var_plot$Lower),unlist(var_plot$Upper)))) 
lines(x=c(1:21),y=unlist(var_plot$Upper),type="l",lwd = 3, lty=2,col="red") 
lines(x=c(1:21),y=unlist(var_plot$irf),type="l", lwd = 3) 
abline(a = NULL, h = 0) 
} 
} 
Смежные вопросы