/ / ggplot i przedziały ufności dla funkcji przewidywania Holta-Wintersa - r, ggplot2, przewidywanie, przedział ufności, holtwinters

ggplot i przedziały ufności dla funkcji prognozowania Holt-Winters - r, ggplot2, przewidywanie, przedział ufności, holtintery

Korzystanie z danych UKDriverDeaths

Próba użycia funkcji przewidywania Holt-Winters i ggplot().

Zasadniczo odtwarzaj dane w ggplot (1) z przedziałami ufności (2).

To są dane:

data("UKDriverDeaths")
past <- window(UKDriverDeaths, end = c(1982, 12))
hw <- HoltWinters(past)
pred <- predict(hw, n.ahead = 10)
plot(hw, pred, ylim = range(UKDriverDeaths))
lines(UKDriverDeaths)

To jest rozwiązanie (1) do tworzenia ggplot():

library(xts)
ts_pred <- ts(c(hw$fitted[, 1], pred), start = 1970, frequency = 12)
df <- merge(as.xts(ts_pred), as.xts(UKDriverDeaths))
names(df) <- c("predicted", "actual")
ggplot(df, aes(x=as.POSIXct(index(df)))) +
geom_line(aes(y=predicted), col="red") +
geom_line(aes(y=actual), col="black") +
theme_bw() +
geom_vline(xintercept=as.numeric(as.POSIXct("1982-12-01")), linetype="dashed") +
labs(title="Holt-Winters filteringn", x="Time", y="Observed / Fitted") +
theme(plot.title = element_text(size=18, face="bold"))

Szukam przedziałów ufności (2) dla predykcji zimowych holtów.

Odpowiedzi:

2 dla odpowiedzi № 1

Zazwyczaj przedziały ufności są wywoływane dla prognoz „przedziałów predykcji”. The predict.HoltWinters funkcja da ci, jeśli o nie poprosisz prediction.interval=T. Więc możesz to zrobić

pred <- predict(hw, n.ahead = 10, prediction.interval = TRUE)

Teraz zmieni to kształt zwracanych wartości. Zamiast prostego wektora otrzymujesz macierz, więc będziesz musiał dostosować niektóre z innych kodów transformacji, aby sobie z tym poradzić. Spróbuj

ts_pred <- ts(rbind(cbind(hw$fitted[, 1],upr=NA,lwr=NA), pred),
start = 1970, frequency = 12)
df <- merge(as.xts(UKDriverDeaths), as.xts(ts_pred))
names(df)[1:2] <- c("actual", "predicted")

Ma to na celu upewnienie się, że wszystkie kolumny są poprawnie wyrównane i oznaczone między obserwowanymi wartościami a przewidywanymi wartościami.

Teraz możemy po prostu dodać dwie linie do wykresów

ggplot(df, aes(x=as.POSIXct(index(df)))) +
geom_line(aes(y=predicted), col="red") +
geom_line(aes(y=actual), col="black") +
geom_line(aes(y=upr), col="blue") +
geom_line(aes(y=lwr), col="blue") +
theme_bw() +
geom_vline(xintercept=as.numeric(as.POSIXct("1982-12-01")),
linetype="dashed") +
labs(title="Holt-Winters filteringn", x="Time", y="Observed / Fitted") +
theme(plot.title = element_text(size=18, face="bold"))

holt winters gg2 plot