我想为50x30矩阵生成多个正交多项式。
结果应该有30 + 30 + 30C2 = 30 + 30 + 435 = 505列和50行。
我在poly
基础软件包中累了R
,即使是第一个订单,它也会耗尽内存。 R中有任何函数可以做多个正交多项式吗?(试过orthopolynom
,但它只适用于单变量)或者这样做太难了?感谢
这是我的代码
n=50
k=30
x=matrix(rnorm(n*k),nrow=n,ncol=k)
poly(x,degree=1)
Error in rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : cannot allocate vector of length 1073741824
答案 0 :(得分:3)
对于30C2术语,您不需要正交多项式,而是所有双向交互项:
paste( combn( paste0("X", 1:30), 2, FUN=paste, collapse="*"), collapse="+")
对于2阶正交多项式,您可能需要:
paste( "poly(", paste0("X", 1:30), ", degree=2)", collapse="+")
如果您想要将其用于回归,则需要使用as.formula
构建R公式。
我不确定这是否会给出正交多项式,但它会给出一个所需复杂度的公式表达式:
as.formula( paste(" ~ (", paste0("X", 1:30 , collapse="+"), ")^2", collapse=""))
#--------------
~(X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 +
X13 + X14 + X15 + X16 + X17 + X18 + X19 + X20 + X21 + X22 +
X23 + X24 + X25 + X26 + X27 + X28 + X29 + X30)^2
这将扩展到所有线性项,所有平方项和所有双向组合。见help(formula)
。并查看扩展使用的内容:
terms( as.formula(
paste(" ~ (", paste0("X", 1:30 , collapse="+"), ")^2", collapse="")
) )