gpt4 book ai didi

r - ts(x) : 'ts' object must have one or more observations 错误

转载 作者:行者123 更新时间:2023-12-04 12:48:15 25 4
gpt4 key购买 nike

当我使用 forecast 库进行预测时,我注意到以下代码没有按预期运行:

library(forecast)
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))

get <- function (df1){
ts1 <- ts((df1%>%filter(gp==2))$dt)
as.numeric(forecast(ar(ts1),15)$mean)
}

print(get(df1))

错误返回为:

Error in ts(x) : 'ts' object must have one or more observations

可能是arar.burg函数引起的。因为如果您将函数更改为 ets 或其他函数,则该函数运行良好。

更奇怪的是,如果你把代码改成:

library(forecast)
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)

get <- function (ts1){
as.numeric(forecast(ar(ts1),15)$mean)
}


print(get(ts1))

代码也能正常运行。我认为这可能是 ar 函数中的错误,并且该问题在某种程度上与范围有关。对此有什么想法吗?

最佳答案

问题与范围界定有关。 forecast() 尝试找到用于拟合模型的时间序列。 forecast 包中的函数(例如 ets)将此信息存储在模型对象中,因此 forecast() 很容易找到它。但是 ar() 来自 stats 包,它不存储用于拟合模型的时间序列。所以 forecast() 去寻找它。如果您在 get() 函数之外运行代码,它可以正常工作,因为 forecast() 设法在本地找到 ts1 对象环境。但是在 get() 函数中它会导致错误。

一个简单的修复方法是在调用 forecast 之前将信息添加到拟合模型中:

library(forecast)
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)

get <- function (ts1){
fit <- ar(ts1)
fit$x <- ts1
as.numeric(forecast(fit,15)$mean)
}

print(get(ts1))

或者,使用predict代替forecast:

library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)

get <- function (ts1){
fit <- ar(ts1)
as.numeric(predict(fit,n.ahead=15)$pred)
}

print(get(ts1))

关于r - ts(x) : 'ts' object must have one or more observations 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42432595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com