2

我想为 50x30 矩阵生成多个正交多项式。

结果应该有 30 + 30 + 30C2 = 30 + 30 + 435 = 505 列和 50 行。我厌倦polyR基本包,即使是第一次订购,它也耗尽了内存。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
4

1 回答 1

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="")
       ) )
于 2013-04-23T02:05:10.203 回答