一次相互作用を行うglmnetの方法はありますか?
たとえば、私の X 行列が次の場合:
V1 V2 V3
0 1 0
1 0 1
1 0 0
...
列を手動で作成せずに、「y~ V1 + V2 + V3 + V1*V2 + V2 *V3 + V1*V3」の行に沿って何かを行うように指定する方法はありますか? 私の実際の行列はより大きく、すべての一次クロス積を手動で作成するのは面倒です。
一次相互作用を行うglmnetの方法はありますか?
たとえば、私の X 行列が次の場合:
V1 V2 V3
0 1 0
1 0 1
1 0 0
...
列を手動で作成せずに、「y~ V1 + V2 + V3 + V1*V2 + V2 *V3 + V1*V3」の行に沿って何かを行うように指定する方法はありますか? 私の実際の行列はより大きく、すべての一次クロス積を手動で作成するのは面倒です。
このような式の適切な R 構文は次のとおりです。
y~(V1+V2+V3)^2
例えば
set.seed(15)
dd <- data.frame(V1=runif(50), V2=runif(50), V3=runif(50), y=runif(50))
lm(y~(V1+V2+V3)^2, dd)
Call:
lm(formula = y ~ (V1 + V2 + V3)^2, data = dd)
Coefficients:
(Intercept) V1 V2 V3 V1:V2 V1:V3 V2:V3
0.54169 -0.10030 -0.01226 -0.10150 0.38521 -0.03159 0.01200
または、 以外のすべての変数をモデル化する場合はy
、
lm(y~(.)^2, dd)
Call:
lm(formula = y ~ (.)^2, data = dd)
Coefficients:
(Intercept) V1 V2 V3 V1:V2 V1:V3 V2:V3
0.54169 -0.10030 -0.01226 -0.10150 0.38521 -0.03159 0.01200
どちらも同じです
lm(y~V1+V2+V3+V1:V2+V1:V3+V2:V3, dd)
Call:
lm(formula = y ~ V1 + V2 + V3 + V1:V2 + V1:V3 + V2:V3, data = dd)
Coefficients:
(Intercept) V1 V2 V3 V1:V2 V1:V3 V2:V3
0.54169 -0.10030 -0.01226 -0.10150 0.38521 -0.03159 0.01200
これらの式を使用model.matrix
して、マトリックスを作成できます
model.matrix(y~(V1+V2+V3)^2,dd)