5

Rの関数を使用して、多変数多項式を評価polyするにはどうすればよいですか?

  • この投稿には合計 4 つの質問があり、以下に強調表示されています。
  • poly()-output オブジェクト (直交または生の多項式)の出力を評価しようとしています。これにより、多項式を使用して、結果を評価するために使用できるモデル マトリックスの行と同様の行を生成することができます (つまり、多変量テスト データ値をpoly()呼び出しでプッシュして、次のように評価できるようにします)。私の回帰の方法行列の行)。
  • 私のバックグラウンド: R、R's poly()、および R の回帰ルーチンは比較的新しいものです。
  • 私はいくつかのアプローチを試しましたが、それぞれについて助けていただければ幸いです。

(A): 直接アプローチpredict

このメソッドは失敗しました。明らかに、予期しない入力クラスが原因です。predictこれらの特定の x1 と x2 の値は、共線的であるため、一般的な適合には理想的ではないことを認識しています (単に機械を稼働させようとしているだけです)。の使用は、このSO 投稿 predictに触発されました。(Q1)この多項式を評価するメソッドを直接呼び出すことはできますか?predict

> x1 = seq(1,  10,  by=0.2)
> x2 = seq(1.1,10.1,by=0.2)
> t = poly(cbind(x1,x2),degree=2,raw=T)
> predict(t,newdata=data.frame(x1=2.03,x2=2.03))
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('matrix', 'double', 'numeric')"

(B) 直接評価は、生の多項式 (直交ではない) に対してのみ機能します。

(A) のため、poly() を直接呼び出して回避策を試みました。生の多項式の場合、機能させることはできましたが、それぞれの変数ごとにデータを繰り返す必要がありました。以下は、(1 つ目) 単一のデータ ポイントでの失敗、(2 つ目) 値の繰り返しによる成功を示しています。 (Q2) rawpoly()を適切に評価するために、2 番目のリストでデータの冗長な繰り返しを回避する方法はありますか?

> poly(cbind(x1=c(2.03),x2=c(2.13)),degree=2,raw=T)
Error in `colnames<-`(`*tmp*`, value = apply(z, 1L, function(x) paste(x,  : 
  attempt to set 'colnames' on an object with less than two dimensions

> poly(cbind(x1=c(2.03,2.03),x2=c(2.13,2.13)),degree=3,raw=T)
      1.0    2.0      3.0  0.1    1.1      2.1    0.2      1.2      0.3
[1,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597
[2,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597
attr(,"degree")
[1] 1 2 3 1 2 3 2 3 3

直交多項式を使用して同様の冗長リスト データ アプローチを試みると、「おい、あなたのデータは冗長だ!」という結果になります。エラー(各変数の値を1回だけリストした場合にも発生します)。(Q3) を直接呼び出して多変量直交多項式を評価することは可能poly()ですか?

> poly(cbind(x1=c(2.03, 2.03),x2=c(2.13, 2.13)),degree=2)
Error in poly(dots[[1L]], degree, raw = raw) : 
  'degree' must be less than number of unique points

(C) 多変量直交多項式からアルファ係数とノルム係数を抽出できない 最後に、 へのcoefs入力変数があることを認識していますpredict.polycoefsは、直交多項式フィットから出力されるアルファ値とノルム値であることを理解しています。ただし、単変量多項式フィットからのみ抽出できます...多変量直交(または生)をフィットさせると、からの戻り値には係数がpolyありません。 (Q4)多変量データへの直交多項式フィットの呼び出しから係数抽出することは可能ですか?alphanormpoly()

> t = poly(cbind(x1),degree=2)   # univariate orthog poly --> WORKS
> attributes(t)$coefs
$alpha
[1] 5.5 5.5

$norm2
[1]    1.000   46.000  324.300 1826.458


> t = poly(cbind(x1,x2),degree=2)  # multivariate orthog poly --> DOES NOT WORK
> attributes(t)$coefs
NULL

明確にできるかどうか教えてください。どうぞよろしくお願いいたします。

4

2 に答える 2

0

ModelMatrixModel パッケージを使用します。ModelMatrixModel() in は model.matrix() に似ていますが、新しいデータを適用できる変換パラメーターを保存します。

library(ModelMatrixModel) 
traindf=data.frame(x1 = seq(1,  10,  by=0.2),
                   x2 = seq(1.1,10.1,by=0.2))

mm=ModelMatrixModel(~poly(x1,2)+poly(x2,3),traindf,sparse=F)
mm$x[1:2,] #output matrix
##   poly_x1__2_1 poly_x1__2_2 poly_x2__3_1 poly_x2__3_2 poly_x2__3_3
## 1   -0.2498843    0.3088653   -0.2498843    0.3088653   -0.3423492
## 2   -0.2387784    0.2676833   -0.2387784    0.2676833   -0.2510561
predict(mm,traindf[1:2,])$x
##   poly_x1__2_1 poly_x1__2_2 poly_x2__3_1 poly_x2__3_2 poly_x2__3_3
## 1   -0.2498843    0.3088653   -0.2498843    0.3088653   -0.3423492
## 2   -0.2387784    0.2676833   -0.2387784    0.2676833   -0.2510561
于 2021-08-23T16:47:27.810 に答える