【发布时间】:2018-12-24 04:50:39
【问题描述】:
我已经为我的数据拟合了一个多项式并将结果可视化。我正在尝试将我的情节扩展到未来并预测 y 低于 70 时的 x 值(日期)。我的数据是 HERE 进行复制。我当前的代码如下。
data <- read.table("data.txt", sep="\t", header=T)
data$date<- as.Date(data$date)
data$y <- as.numeric(data$y)
attach(data)
x <- 1:88 # vector for formula coordinates. I haven't found a way to plot polynomial formula with dates..
p <- qplot(date, y, data=data , geom="line", xlab="Time", ylab="y")
p+ geom_smooth(method = "lm", formula = y ~ poly(x, 3))
fit <- lm(y~poly(x,3))
summary(fit) #Fit is adequate
这个情节的结果:
三阶多项式是用数字 x 向量生成的,因为我不知道如何使用日期作为公式的“坐标”。我想要的是预测,即将这个图扩展到未来,并使用这个公式找出 y 低于 70 的日期。
【问题讨论】:
-
您需要在
ggolot之外调用lm(如您现在所示),然后将predict与“newdata”参数一起使用,该参数在您可能的范围内具有“x”值合理地预计预测在 70 左右。 -
是的,我试过了。我创建了新的数字向量,我认为它会覆盖
g <- 1:120的范围。然后我使用了predict(fit,newdata=g)。但我收到此错误:Error in eval(predvars, data, env) : numeric 'envir' arg not of length one。我也想在 x 中使用日期。因为现在我必须将整数更改为日期。 -
newdata 参数需要是一个列表,其中一个元素是“x”,并且具有适当构造的值。我非常怀疑
as.numeric(data$y)之后的下一个 4 个月将是 1:120。 (而日期是整数。) -
我认为我必须在 newdata 参数中使用数据框。我构造了
g<-1:200并运行了predict(fit, newdata= data.frame(x=g))。从结果来看,第 179 个指数低于 70,所以我在第一次观察as.Date("2014-04-06") + 179中添加了很多天。所以结果似乎是 2014-10-02。我所做的是否有效(不是优雅的想法......)?感谢帮助。如果您有更好的方法来解决这个问题,请随时发布答案,我会接受。 -
我想你可能想要
stat_smooth`fullrange=TRUE。