gpt4 book ai didi

在预测中收到 "Variable Lengths Differ"错误

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

我在尝试测试我的模型的准确性时收到了上述消息。计划是预测最后 15 个时间点并将它们与实际数据进行比较以获得误差值,但由于某种原因我收到了“可变长度不同”错误消息。

这是使用 astsa 包中的 johnson 和 johnson 数据 (data(jj))。这是代码和相关错误-

> ##set up JJ data and time because its quarterly data
> X.all<-jj[1:84]
> t<-time(jj)
>
> values<-length(t)-15
> ts<-t[1:values]
> tsq<-ts^2/factorial(2)
> X<-X.all[1:values]
> year.first<-values+1
> year.last<-length(t)
> ##setting t for 15 values using quarterly idea
> new<-data.frame(ts=t[year.first:year.last])
> X.true<-X.all[(values+1):length(t)]
> fit1<-lm(X~ts+tsq)
> Xhat<-predict(fit1,new,se.fit=TRUE)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
variable lengths differ (found for 'tsq')
In addition: Warning message:
'newdata' had 15 rows but variables found have 69 rows

> X.hat<-round(Xhat$fit,2)
> error<-X.true-X.hat

最佳答案

问题是您尝试使用不包含模型中使用的所有变量的 newdata 参数调用 predictnew 只包含ts,不包含tsq。您可以通过以下方式解决此问题:

  1. 创建一个包含 tstsq 的 data.frame new,或者
  2. 更好的解决方案是在模型规范中使用 I() 符号定义 tsq,例如:lm(X ~ ts + I(ts^2/阶乘(2)))I() 符号会自动生成转换,因此您无需手动创建幂项等,只需将它们包含在您的 lm 规范中即可。

例如,您可以使用 iris 数据集进行尝试,看看它如何比您当前的方法更好地工作:

fit1 <- lm(Sepal.Length ~ Sepal.Width + I(Sepal.Width^2/factorial(2)), data = iris)
new <- data.frame(Sepal.Width = seq(1,5,by = 0.25))
predict(fit1, new)

我们可以将此与您的方法进行比较,并观察您遇到的错误:

s2 <- I(iris$Sepal.Width^2/factorial(2))
fit1 <- lm(Sepal.Length ~ Sepal.Width + s2, data = iris)
new <- data.frame(Sepal.Width = seq(1,5,by = 0.25))
predict(fit1, new)
# Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
# variable lengths differ (found for 's2')
# In addition: Warning message:
# 'newdata' had 17 rows but variables found have 150 rows

关于在预测中收到 "Variable Lengths Differ"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29439307/

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