首页 > 解决方案 > 在 exp() 中使用日期作为参数?

问题描述

努力最终对某些数据进行指数拟合,但在 Date 对象的数据类型上遇到错误。如何将日期向量转换为 exp() 函数可以读取的格式?很大程度上,我试图让这个例子为我工作,但得到错误:

Error in Math.Date(date) : exp not defined for "Date" objects

我尝试使用 as.numeric() 进行转换,但出现错误

 Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'x'

将日期对象转换为较小的数字(即距第一个日期的天数,距第一个日期的周数)解决了该问题。以下是使示例工作的更新代码:

weight <- c(1000, 100, 10, 1)
date <- as.Date(c('2010-11-1','2010-3-25','2010-2-2','2010-1-14'))
df <- data.frame(date, weight)

df$doy_str <- strftime(df$date, format = "%j")
df$doy <- as.numeric(df$doy_str)


linear.model <-lm(weight ~ doy, df)
log.model <-lm(log(weight) ~ doy, df)
exp.model <-lm(weight ~ exp(doy), df)

log.model.df <- data.frame(x = df$doy,
                           y = exp(fitted(log.model)))

ggplot(df, aes(x=doy, y=weight)) + 
  geom_point() +
  geom_smooth(method="lm", aes(color="Exp Model"), formula= (y ~ exp(x)), se=FALSE, linetype = 1) +
  geom_line(data = log.model.df, aes(x,y, color = "Log Model"), size = 1, linetype = 2) + 
  guides(color = guide_legend("Model Type"))

标签: r

解决方案


我认为问题在于,即使是数字,日期也会从 1970-01-01 转换为天数。将一个很大的数字放入 exp 将返回无穷大。您可以首先将您的日期转换为较新来源的天数(例如,您在数据中的最小日期)


推荐阅读