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

问题描述 投票:0回答:2

我有一个线性回归问题的一种预测。在这个问题上的周事的日子。目前我使用:

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

其中y和x是连续变量和一周中的日子已经虚拟变量(它们可以是0或1)。以这种方式,周依赖性由不同截距(在假人的前面的系数)中给出。不过,我想计算X不同的系数为一周的每一天。

(:mgcv库)的样条函数,其中“天”是包含星期几的名称分类变量里面,当我使用GAM我能做到这一点的操作

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我获得用于周(因子变量“日”的各值)的每一天不同的样条曲线,用线性模型我想获得许多系数x作为因子变量值的个数。可能吗?任何解决方法吗?

r linear-regression gam
2个回答
2
投票

也许我失去了一些东西,但在我看来,你所要求的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)

1
投票

你要避免创建自己的二进制条款。事实上,顺便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内部正在下降有一定影响;因为独立日的一个变量是线性相关的拦截,因而不能被唯一标识,不能容纳拦截和所有那些日子条款。

© www.soinside.com 2019 - 2024. All rights reserved.