r - 在 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"))
解决方案
我认为问题在于,即使是数字,日期也会从 1970-01-01 转换为天数。将一个很大的数字放入 exp 将返回无穷大。您可以首先将您的日期转换为较新来源的天数(例如,您在数据中的最小日期)
推荐阅读
- azure-devops - 从像变量一样的数组解析管道中的值
- python - 具有前一行值的新列
- c# - IIS 某些应用程序无法访问并继续加载
- asp.net - 如何:从 MVC .NET 网站重定向到 MVC .NET Core 子站点,而无需用户“重新登录”
- javascript - 从javascript / typescript中的另一个函数访问函数的参数
- r - 异常化函数的问题
- java - URLEncoder - 用于空白空间而不是 %20 或 + 的字符集
- php - 使用 GD 调整 PHP 图像大小到许多 CPU 时间
- postgresql - 直接从 json 更新表
- angular - 从另一个组件Angular 7中获取价值