r - 从 GAM 预测 R 中分组数据帧的值

标签 r apply purrr gam

我有一个不同年份不同纬度的年平均温度值数据集。我想用它来预测在给定年份可以找到给定温度的纬度;即,“在 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
    

    我试过各种purrrsplit-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两者都有 yeartemp列。

    关于r - 从 GAM 预测 R 中分组数据帧的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530619/

    相关文章:

    在 R 循环中重新分配值

    r - 在 nlme 或 lme4 中获得固定效应的广义最小二乘均值

    windows - 如何在 Windows 上安装 cran 软件包?

    Javascript 调用和应用函数只在第一个参数上调用?

    python - 如何为 Pandas 数据框的每一行的列分配一个值?

    r - 识别 R 中多个数据表类别中特定因素的存在

    r - 如何使用矩阵的列作为索引来更改其值?

    r - 如何使用 map_dbl 创建两个变量和过滤器

    r - 使用数据框的列作为使用 pmap 的函数的参数

    r - purrr::map 返回长数据帧的变体