2

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
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 に答える