求R中线性二次项和相互作用项的公式

求R中线性二次项和相互作用项的公式,r,statistics,svm,R,Statistics,Svm,我需要在R中拟合一个线性SVM,该SVM有一个特征作为响应,模型中其他每个特征的线性二次项和交互项作为预测项。 是否有一个函数可以帮助计算其余预测因子(约15个单独预测因子)的线性、二次和交互项。y~。:此处被解释为模型拟合所用数据框中除y以外的所有变量。它相当于预测变量的线性组合。例如y~var1+var2+var3+…+var15 y~。^2将给出数据框中变量的所有线性(主效应)和二阶交互项。它相当于y~var1+var2+…+var15+var1:var2+var1:var3+var1:v

我需要在R中拟合一个线性SVM,该SVM有一个特征作为响应,模型中其他每个特征的线性二次项和交互项作为预测项。
是否有一个函数可以帮助计算其余预测因子(约15个单独预测因子)的线性、二次和交互项。

y~。
:此处
被解释为模型拟合所用数据框中除
y
以外的所有变量。它相当于预测变量的线性组合。例如
y~var1+var2+var3+…+var15

y~。^2
将给出数据框中变量的所有线性(主效应)和二阶交互项。它相当于
y~var1+var2+…+var15+var1:var2+var1:var3+var1:var4…等等

y~var1+var2+…+var15+I(var1^2)+I(var2^2)+I(var3^2)…+I(var15^2)
:这里I(var^2)表示数据帧中一个变量的二次多项式

y~多边形(var1,度=2)+多边形(var2,度=2)+…多边形(var15,度=2)

y~poly(var1,var2,var3,.var15,度=2)
将等效于上述表达式

poly(var1,度=2)
相当于
var1+I(var1^2)

要获得三次多项式,请在
poly()
I(var1^3)
中使用
degree=3

使用
poly
I(var,2)
相比有一个警告,即在拟合模型后,它们将产生不同的系数,但拟合值是等效的,因为它们代表同一模型的不同参数化。建议在
poly()
上使用
I(var,2)
以避免在
poly()
中看到的汇总效应

总之,要得到线性、二次和二阶相互作用项,您将有一个表达式,如

y~.^2+I(var1^2)+I(var2^2)+…I(var15^2)

四个变量的演示:

old <- reformulate( 'y ~ x1+x2+x3+x4' )
new <- reformulate( " y ~ .^2 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) ")
tmp <- .Call(stats:::C_updateform, old, new)
tmp
# ~y ~ (x1 + x2 + x3 + x4)^2 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2)
# attr(,".Environment")
# <environment: R_GlobalEnv>

terms.formula(tmp, simplify = TRUE )

# ~y ~ x1 + x2 + x3 + x4 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) + 
#   x1:x2 + x1:x3 + x1:x4 + x2:x3 + x2:x4 + x3:x4
# attr(,"variables")
# list(~y, x1, x2, x3, x4, I(x1^2), I(x2^2), I(x3^2), I(x4^2))
# attr(,"factors")
#         x1 x2 x3 x4 I(x1^2) I(x2^2) I(x3^2) I(x4^2) x1:x2 x1:x3 x1:x4 x2:x3 x2:x4 x3:x4
# ~y       0  0  0  0       0       0       0       0     0     0     0     0     0     0
# x1       1  0  0  0       0       0       0       0     1     1     1     0     0     0
# x2       0  1  0  0       0       0       0       0     1     0     0     1     1     0
# x3       0  0  1  0       0       0       0       0     0     1     0     1     0     1
# x4       0  0  0  1       0       0       0       0     0     0     1     0     1     1
# I(x1^2)  0  0  0  0       1       0       0       0     0     0     0     0     0     0
# I(x2^2)  0  0  0  0       0       1       0       0     0     0     0     0     0     0
# I(x3^2)  0  0  0  0       0       0       1       0     0     0     0     0     0     0
# I(x4^2)  0  0  0  0       0       0       0       1     0     0     0     0     0     0
# attr(,"term.labels")
# [1] "x1"      "x2"      "x3"      "x4"      "I(x1^2)" "I(x2^2)" "I(x3^2)" "I(x4^2)"
# [9] "x1:x2"   "x1:x3"   "x1:x4"   "x2:x3"   "x2:x4"   "x3:x4"  
# attr(,"order")
# [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2
# attr(,"intercept")
# [1] 1
# attr(,"response")
# [1] 1
# attr(,".Environment")
# <environment: R_GlobalEnv>

老萨提斯,谢谢你。我想这就是原因