Как разместить прогноз на линейном графике?

Я нахожусь в самом конце модели прогнозирования (Цены на жилье в Сиднее (интересуют только столбцы: Дата и цена продажи)), но я получаю сообщение об ошибке ниже;


**Code:**

Data_fit %>%
  forecast(h=5) %>%
  filter(.model=='search') %>%
  autoplot(data3group_ts)

(data3group_ts: фрейм данных)

**Сообщение об ошибке: **

Error in UseMethod("filter") : 
  no applicable method for 'filter' applied to an object of class "forecast"
In addition: Warning message:
In mean.default(x, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

Я новичок в этом и пробовал все и вся, я не понимаю, почему я не могу получить изображение, показывающее прогноз (следующие 5 лет для цен на жилье в Сиднее). Не могли бы вы помочь мне увидеть, где я делаю ошибку? (Также слежу за этой книгой по теме >>> https://otexts.com/fpp3/arima-r.html)

Полный сценарий ниже;


library(fpp3)

#Load the data
data <- read.csv("SydneyHousePrices.csv")

# Check null value

is.null(data)

#Selecting certain columns
data2 <- data %>%
select(Date, sellPrice)

#Timeseries dataframe Selection
data2ts >- data2[,c('Date','sellPrice')]
sum(is.na(data2ts))

#converting Date to a date column
data2ts$Date <- as.Date(data2ts$Date)

class(data2ts$Date)

#median Price

data3 <- data2ts %>%
group_by(Date) %>%
summarise(medPrice = median(sellPrice, na.rm = FALSE))

data3

#create a cloumn to show year
data3$Year <- as.Date(cut(data3$Date, breaks = 'year'))

#group the years
data3group <- data3 %>%
group_by(Year) %>%
summarise(sum(medPrice)) %>%
select(Year, "medPrice" = "sum(medPrice)")

#mplotting time series

data3group %>%
ggplot(aes(x = Year, y= medPrice)) +
geom_line(color = "blue", size = 1) +
scale_y_continuous(labels = comma)+
scale_x_date(date_labels = "%Y", breaks = "1 year")+
theme(axis.text.x = element_text(size = 10, angle = 90))+
labs(x= "Year", y= "Median House Prices")+
geom_point(color = "blue", size = 3)

#as_tsibble convert
data3group_ts <- data3group %>%
mutate(Year = year(as.character(Year))) %>%
as_tsibble(index = Year)

#plotting
data3group_ts %>%
autoplot(medPrice) +
labs(title =  "X",
y= "Y")

#Time plot and ACF and PACF plots
data3group_ts %>%
gg_tsdisplay(difference(medPrice), plot_type = 'partial')

#Use auto.arima and specify if the series has a mean=0 or not

auto.arima(auto.arima(data3group_ts, allowmean=FALSE, allowdrift=FALSE, trace=TRUE), allowmean=FALSE, allowdrift=FALSE, trace=TRUE)

#########Response;
ARIMA(2,1,2)                    : 744.7771
ARIMA(0,1,0)                    : 737.1418
ARIMA(1,1,0)                    : 736.0715
ARIMA(0,1,1)                    : 735.3772
ARIMA(1,1,1)                    : 738.17
ARIMA(0,1,2)                    : 738.1905
ARIMA(1,1,2)                    : 741.2703

Best model: ARIMA(0,1,1)  
##########

#ARIMA fitting
Data_fit <- data3group_ts %>%
model(arima011 = ARIMA(medPrice \~ pdq (0,1,1)),
stepwise = ARIMA(medPrice),
search = ARIMA (medPrice, stepwise = FALSE))

glance(Data_fit) %>% arrange(AICc) %>% select(.model:BIC)

###############Response;

# A tibble: 3 × 6

.model    sigma2 log_lik   AIC  AICc   BIC
<chr>      <dbl>   <dbl>   <dbl> <dbl> <dbl>
1 arima011 2.97e15   -365.  735.  735.  737.
2 stepwise 2.97e15   -365.  735.  735.  737.
3 search   2.97e15   -365.  735.  735.  737.

##################

#residuals
Data_fit %>%
select(search) %>%
gg_tsresiduals()

augment(Data_fit) %>%
filter(.model=='search') %>%
features(.innov, ljung_box, lag = 10, dof = 3)

#############Response;

# A tibble: 1 × 3

.model lb_stat lb_pvalue
<chr>    <dbl>     <dbl>
1 search    3.73     0.811
######################

#FORECASTING

Data_fit %>%
forecast(h=5) %>%
filter(.model=='search') %>%
autoplot(data3group_ts)

#Returns error as mentioned above.

Я пытался использовать другие коды прогнозирования, но они не сработали. Тот же результат.

tidyverse уже включает пакеты ggplot2, tidyr и dplyr, поэтому вам не нужно загружать их отдельно

Ricardo Semião e Castro 03.11.2022 13:44

(1) Сообщение об ошибке no applicable method for 'filter' applied to an object of class "forecast" понятно, в каком туториале предполагалось, что объект, возвращаемый из forecast, является «аккуратным» и может работать как рамка? (2) Не используйте require так, используйте library(scales); см. stackoverflow.com/a/51263513/3358272 , yihui.org/en/2014/07/library-vs-require и r-pkgs.org/namespace.html#search-path . (3) Что такое %\>%?

r2evans 03.11.2022 14:19

Без набора данных "SydneyHousePrices.csv" трудно сказать, хотя этот тип ошибки предполагает проблему со средой пакета. Я бы заменил все ваши вызовы библиотеки tidyverse и tidyverts на library(fpp3) и library(tidyverse). Когда я пытался использовать вызовы вашей библиотеки, я получил ошибки в примерах справки, но с приведенным выше все работало нормально. Таким образом, порядок загрузки пакетов может быть важен.

Isaiah 03.11.2022 14:55

Спасибо, я удалил эти команды и оставил tidyverse и fpp3, но все равно получаю ту же ошибку; «Ошибка в UseMethod («фильтр»): нет применимого метода для« фильтра », примененного к объекту класса« прогноз ». Кроме того: предупреждающее сообщение: In mean.default (x, na.rm = TRUE): аргумент не является числовым или логично: возвращение NA" Я думаю, что здесь все равно две ошибки, и я все еще не знаю, где ошибка. Набор данных о ценах на жилье в Сиднее: Столбцы: дата, идентификатор, пригород, почтовый индекс, цена продажи, кровать, ванна, машина, тип объекта. Меня интересует только дата и цена продажи этой практики.

Ezgi 07.11.2022 10:01

Хорошо, вы должны быть до library(tidyverse) library(plotly) library(hrbrthemes) library(fpp3). Есть несколько версий фильтра. Удобный способ узнать, где находятся конфликты, — это установить пакет «conflicted». Добавьте библиотеку (конфликтующую) в начало вызовов вашей библиотеки, затем запустите свой код. конфликтный: новый подход к разрешению двусмысленности имеет хорошее руководство.

Isaiah 07.11.2022 11:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
library(fpp3)
library(tidyverse)

data <- tibble(souvenirs) |>
  rename(Date = Month, sellPrice = Sales)

data <- data |>
  select(Date, sellPrice) |>
  group_by(Date) |>
  summarise(medPrice = median(sellPrice, na.rm = FALSE)) |>
  mutate(Date = as_date(Date)) |>
  mutate(Year = cut(Date, breaks = 'year')) |>
  group_by(Year) |>
  summarise(sum(medPrice)) |>
  select(Year, "medPrice" = "sum(medPrice)") |>
  mutate(Year = year(as.character(Year))) |>
  as_tsibble(index = Year)

# use fable method of auto arima
Data_fit <- data |>
  model(ARIMA(medPrice ~ Year, trace = TRUE))

Data_fit |>
  forecast(h = 5) |>
  autoplot(data)

Я попробовал использовать набор данных fpp3 «сувениры», используя ваш код. Первый канал данных преобразует сувениры в то, как, как я догадался, выглядит ваш фрейм данных. Второй канал данных — это ваши команды предварительной обработки, просто организованные в канал без каких-либо логических изменений. Канал data_fit — это переписанный вами код auto.arima с использованием метода fable. Было несколько проблем с кодом data_fit, обратная косая черта, которая казалась ошибкой, и код auto.arima был вложен в вызов auto.arima. Метод auto.arima взят из библиотеки прогнозов. С этим каналом data_fit вам не нужен фильтр. Возможна фильтрация прогноза, как вы сделали: объект прогноза относится к классу fable и наследуется от фрейма данных. Этот код работает с сувенирными данными. Надеюсь, это поможет Эзги :-)

Другие вопросы по теме