r - 从 GAM 预测 R 中分组数据帧的值
问题描述
我有一个不同年份不同纬度的年平均温度值数据集。我想用它来预测在给定年份可以找到给定温度的纬度;即,“在 1980 年,年平均温度在 20C 的纬度是多少?”
我需要为此使用特定年份的模型,因为纬度和温度之间的关系随时间而变化(尽管在下面的示例数据中没有,它是随机生成的)。这将涉及:
- 将 GAM 拟合到按年份分组/拆分的数据集。
- 对于每个不同的 GAM(即每年),用于
predict.gam
计算温度列表中每个元素的预测值。 - 重新组合这些以获得一个数据框,其中的列表示
year
、newdata_value
(用于预测的温度值)和predicted_value
(将每个newdata_value
输入特定年份的 GAM 的纬度)。
这是一个玩具数据集:
years <- seq(1968, 2018, 1)
lat <- seq(34.5, 44.5, 1)
dat <- expand.grid(years, lat)
names(dat) <- c("years","lat")
dat$temp <- runif(dim(dat)[1], 5, 20) # add random temperature data points
newdata_values <- seq(2, 16, 2) # temperature values to use for prediction
我尝试了各种解决方案purrr
,split-apply-combine
但没有弄清楚任何事情。有什么建议么?
解决方案
另一种选择是拟合允许纬度/温度关系随年份变化的模型。有几种选择。以下拟合每年都有独立关系的模型:
gam(lat ~ year + s(temp, by = year), data = dat)
请注意,对于此公式,year
应将其编码为一个因素。
另一种方法是允许纬度/温度关系逐年平稳变化,如果这种关系随时间逐渐变化,这是一个合理的模型。在这种情况下,您将需要使用张量积 smooth ( te()
) 来指示不同尺度(度、年)上的变量之间的双向交互:
gam(lat ~ te(temp, year), data = dat)
在这两种情况下,您都可以使用 进行预测predict.gam(model, newdata = new_dat)
,其中new_dat
同时具有year
和temp
列。
推荐阅读
- java - 相当于 Java android 中的 CryptoStream .NET?
- c++ - 如何在 MFC 中以编程方式创建 Rich Edit
- laravel-5 - Laravel 的 Backpack 上的一个看似错误
- r - R根据股票投资组合的买卖日期提取最高价和最低价
- sql - SQL - 从表中查询每个匹配项的最新值
- pandas - 连接多行熊猫中多列的字符串?
- javascript - 来自 AJAX 调用的对象仅在客户端的服务器上未定义
- powershell - 将带有嵌套数组的 .txt 文件导入 powershell
- c# - 在编译期间使用源中的 Foreach 文件填充字典?
- jhipster - 错误!这个 JHipster 子生成器不适合独立使用