【问题标题】:Linear regression [R]: how to calculate multiple coefficients for the same predictor based on the occurrence of a categorical variable线性回归 [R]:如何根据分类变量的出现计算同一预测变量的多个系数
【发布时间】:2019-06-27 01:58:45
【问题描述】:

我有一个线性回归问题的预测。在这个问题中,星期几很重要。目前我使用:

lm.mod <- lm(y ~ x + monday + tuesday + thursday + friday + saturday + sunday, data=train)

其中 y 和 x 是连续变量,星期几是虚拟变量(它们可以是 0 或 1)。这样,周依赖性由不同的截距(假人前面的系数)给出。但是,我想为一周中的每一天计算不同的 x 系数。

当我在样条函数中使用 GAM(库:mgcv)时,我可以执行此操作,其中“day”是包含星期几名称的分类变量

gam.mod <- mgcv::gam(y ~ s(x, bs='cs', by=day) + monday + tuesday + thursday + friday + saturday + sunday, data = train, method="REML", select=TRUE)

我展示了几行数据帧火车

Date        | y          | x          | day       | Monday | Tuesday | Wednesday |
---------------------------------------------------------------------------------
2013-01-01  | 0.87604858 | 0.07339450 | Tuesday   | 0      | 1       | 0         |
2013-01-02  | 0.90190414 | 0.16513761 | Wednesday | 0      | 0       | 1         |

使用 mgcv 我为一周中的每一天(因子变量“day”的每个值)获得不同的样条曲线,使用线性模型我想获得 x 的许多系数作为因子变量的值的数量。 可能吗?任何解决方法?

【问题讨论】:

    标签: r linear-regression gam


    【解决方案1】:

    也许我遗漏了一些东西,但在我看来你是在询问 x 和工作日之间的交互?

    即稍微简化一下,如下所示:

    # Toy data
    n <- 100
    train <- data.frame(replicate(5, rnorm(n)))
    names(train) <- c("x", "y", "mon", "tue", "wed")
    
    lm.mod <- lm(y ~ x*(mon + tue + wed), data=train)
    

    【讨论】:

      【解决方案2】:

      您希望避免自己创建二进制术语。事实上,mgcv 表示法暗示day 的样条曲线的方式,您需要将day 作为模型中的一个因素,而不是所有这些单独的术语。

      因此,gam 模型将是:

      gam(y ~ s(x, bs='cs', by=day) + day, data = train, method="REML", select=TRUE)
      

      其中day 是c('Monday','Tuesday', ....) 级别的因子。

      那么线性模型就变成了:

      lm(y ~ x * day, data = train)
      

      您必须更加努力地获得每天的估计收入;将predict() 用于gam() 模型与newdata 和每天一行和type = 'terms',您可以将截距添加到day 贡献(效果)。对于 lm() 模型,您可以使用 multcomp 包最轻松地做到这一点。

      您也可以只删除截距(将+ 0 添加到模型公式中)。还有其他方法可以对模型进行潜在的参数化,以便轻松地为您提供您可能想要的估计值。

      你的模型甚至是合适的,因为 R 内部正在放弃一些效果;您无法拟合截距和所有这些天项,因为单独的日期变量之一线性依赖于截距,因此无法唯一识别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2021-08-21
        • 2018-07-13
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 2018-09-24
        相关资源
        最近更新 更多