Я нахожусь в самом конце модели прогнозирования (Цены на жилье в Сиднее (интересуют только столбцы: Дата и цена продажи)), но я получаю сообщение об ошибке ниже;
**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.
Я пытался использовать другие коды прогнозирования, но они не сработали. Тот же результат.
(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) Что такое %\>%
?
Без набора данных "SydneyHousePrices.csv" трудно сказать, хотя этот тип ошибки предполагает проблему со средой пакета. Я бы заменил все ваши вызовы библиотеки tidyverse и tidyverts на library(fpp3)
и library(tidyverse)
. Когда я пытался использовать вызовы вашей библиотеки, я получил ошибки в примерах справки, но с приведенным выше все работало нормально. Таким образом, порядок загрузки пакетов может быть важен.
Спасибо, я удалил эти команды и оставил tidyverse и fpp3, но все равно получаю ту же ошибку; «Ошибка в UseMethod («фильтр»): нет применимого метода для« фильтра », примененного к объекту класса« прогноз ». Кроме того: предупреждающее сообщение: In mean.default (x, na.rm = TRUE): аргумент не является числовым или логично: возвращение NA" Я думаю, что здесь все равно две ошибки, и я все еще не знаю, где ошибка. Набор данных о ценах на жилье в Сиднее: Столбцы: дата, идентификатор, пригород, почтовый индекс, цена продажи, кровать, ванна, машина, тип объекта. Меня интересует только дата и цена продажи этой практики.
Хорошо, вы должны быть до library(tidyverse) library(plotly) library(hrbrthemes) library(fpp3)
. Есть несколько версий фильтра. Удобный способ узнать, где находятся конфликты, — это установить пакет «conflicted». Добавьте библиотеку (конфликтующую) в начало вызовов вашей библиотеки, затем запустите свой код. конфликтный: новый подход к разрешению двусмысленности имеет хорошее руководство.
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 и наследуется от фрейма данных. Этот код работает с сувенирными данными. Надеюсь, это поможет Эзги :-)
tidyverse уже включает пакеты ggplot2, tidyr и dplyr, поэтому вам не нужно загружать их отдельно