繁体   English   中英

线性回归[R]:如何根据分类变量的出现为同一预测变量计算多个系数

[英]Linear regression [R]: how to calculate multiple coefficients for the same predictor based on the occurrence of a categorical variable

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

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的许多系数作为因子变量的值数量。 可能吗? 任何解决方法?

也许我错过了一些东西,但是在我看来,您是在要求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)

您要避免自己创建二进制项。 实际上, 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)

您必须付出更多的努力才能获得每天的估计收入。 对带有newdatagam()模型使用predict()和每天一行, type = 'terms'然后可以将截距添加到day贡献(效果)中。 对于lm()模型,您可以使用multcomp包最轻松地做到这一点。

您也可以放下截距(在模型公式中添加+ 0 )。 还有其他方法可以对模型进行参数化以轻松建模,从而为您提供所需的估计。

您的模型是否合适,是因为R在内部正在降低某些效果; 您不能使用截距和所有当日条款,因为单独的日期变量之一线性依赖于截距,因此无法唯一标识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM