在 R 的套索中添加分类变量之间的所有交互
Add all interactions among categorical variables in lasso in R
我想添加八个变量之间所有可能的交互作用,它们都是分类变量。我的数据集如下所示
enter image description here
我使用 as.formula
来包括所有互动。我的代码如下
f = as.formula(y ~ .^8)
x = model.matrix(f, data)[, -1]
y = data$y
然而,我的x
变成了以下
enter image description here
总共有6560列。我不知道为什么会变成这样。 x
变量中不应该还是1, 2, 3
吗?请问我应该如何解决这个问题或解释这个问题?
谢谢!
您有八个变量,每个变量具有三个水平。您希望包括所有可能的交互作用,即八个因素的所有可能组合。
您的预测值有 3^8 种不同的可能组合。所以在你的设计矩阵中有 3^8=6561 种可能的主效应和交互作用(包括截距)。
要查看它们的编码方式,请考虑单个 3 级预测器:
> model.matrix(lm(y ~ x1))
(Intercept) x12 x13
1 1 0 0
2 1 1 0
3 1 0 1
单个 3 水平因子被编码为 3 列,一个截距加上两个虚拟变量。
现在添加第二个 3 级预测变量及其交互作用:
> model.matrix(lm(y ~ (x1+x2)^2))
(Intercept) x12 x13 x22 x23 x12:x22 x13:x22 x12:x23 x13:x23
1 1 0 0 0 1 0 0 0 0
2 1 1 0 1 0 1 0 0 0
3 1 0 1 0 0 0 0 0 0
所以这里有 9 种允许的二进制变量组合。当您获得多达 8 个变量时,您的 6561 种可能的预测变量组合中的每一种都由这些二元变量的允许组合表示。 (显然你不能同时拥有 x12
和 x13
正数)。
我想添加八个变量之间所有可能的交互作用,它们都是分类变量。我的数据集如下所示 enter image description here
我使用 as.formula
来包括所有互动。我的代码如下
f = as.formula(y ~ .^8)
x = model.matrix(f, data)[, -1]
y = data$y
然而,我的x
变成了以下
enter image description here
总共有6560列。我不知道为什么会变成这样。 x
变量中不应该还是1, 2, 3
吗?请问我应该如何解决这个问题或解释这个问题?
谢谢!
您有八个变量,每个变量具有三个水平。您希望包括所有可能的交互作用,即八个因素的所有可能组合。
您的预测值有 3^8 种不同的可能组合。所以在你的设计矩阵中有 3^8=6561 种可能的主效应和交互作用(包括截距)。
要查看它们的编码方式,请考虑单个 3 级预测器:
> model.matrix(lm(y ~ x1))
(Intercept) x12 x13
1 1 0 0
2 1 1 0
3 1 0 1
单个 3 水平因子被编码为 3 列,一个截距加上两个虚拟变量。
现在添加第二个 3 级预测变量及其交互作用:
> model.matrix(lm(y ~ (x1+x2)^2))
(Intercept) x12 x13 x22 x23 x12:x22 x13:x22 x12:x23 x13:x23
1 1 0 0 0 1 0 0 0 0
2 1 1 0 1 0 1 0 0 0
3 1 0 1 0 0 0 0 0 0
所以这里有 9 种允许的二进制变量组合。当您获得多达 8 个变量时,您的 6561 种可能的预测变量组合中的每一种都由这些二元变量的允许组合表示。 (显然你不能同时拥有 x12
和 x13
正数)。