我有一个不同年份不同纬度的年平均温度值数据集。我想用它来预测在给定年份可以找到给定温度的纬度;即,“在 1980 年,在哪个纬度,年平均气温为 20C?”
我需要为此使用特定年份的模型,因为纬度和温度之间的关系随着时间的推移而变化(尽管下面的样本数据中没有,它是随机生成的)。这将涉及:
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
应该编码为一个因子。另一种选择是允许纬度/温度关系逐年平滑变化,如果这种关系随着时间的推移逐渐变化,这是一个合理的模型。在这种情况下,您将需要使用平滑的张量积 (
te()
) 来指示不同尺度(度、年)上的变量之间的双向交互:gam(lat ~ te(temp, year), data = dat)
在这两种情况下,您都可以使用
predict.gam(model, newdata = new_dat)
进行预测。 ,其中 new_dat
两者都有 year
和 temp
列。
关于r - 从 GAM 预测 R 中分组数据帧的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530619/