2

データフレームtrain(21 個の予測子、1 つの応答、1012 個の観測値) があり、応答は予測子の非線形関数であると思われます。したがって、すべての予測変数に対して応答の多変量多項式回帰を実行し、最も重要な項を理解しようとします。標準の多変量多項式回帰の共線性の問題を回避するために、多変量直交多項式を で使用したいと思いpolym()ます。しかし、私は非常に多くの予測因子を持っており、それらの名前は単純な規則に従っていません。たとえば、train私は 、および という名前の予測子を持っていますがX2X3およびではありX5ません。応答はです。式の書き方はありますかX1X4X14lmすべての予測子の名前を明示的に記述する必要はありませんか? 書き込み

OrthoModel=lm(X14~polym(.,2),data=train)

エラーを返します

Error in polym(., 2) : object '.' not found

編集: 私が当てはめたかったモデルには約 35 億の用語が含まれているため、役に立ちません。主効果、交互作用、および 2 次項のみで項を当てはめたほうがよい -> 231 項。標準 (非直交) 2 次多項式の式を書きました。

`as.formula(paste(" X14 ~ (", paste0(names(Xtrain), collapse="+"), ")^2", collapse=""))` 

ここで、応答列を削除することXtrainによって取得されます。ただし、直交基底で多項式を表現しようとすると、テキストの解析エラーが発生します。trainX14

    as.formula( 
         paste(" X14 ~ (", paste0(names(Xtrain), collapse="+"), ")^2", "+", 
               paste( "poly(", paste0(names(Xtrain), ", degree=2)", 
                      collapse="+"), 
               collapse="")
     )
     
 )
4

1 に答える 1

2

このアプローチにはいくつかの問題があります。そのうちの 1 つは既に確認されていますが、ドットを内部で展開できたとしても、「ドット」の後のパラメータであるため、評価するpolymときにエラーが発生する可能性があります。 "引数リストにあるため、単に位置的に提供するのではなく、名前付きパラメーターとして提供する必要があります。2degreepolym

使用するアプローチはas.formula成功します (pkg:nlme の「Orthodont」データフレームを使用します (従属変数として「性別」を使用することは統計的にナンセンスですが)。データから「件名」列を取り出し、「性別」も取り出しました)。に渡される名前paste:

data(Orthodont, package="nlme")
lm(   as.formula( paste("Sex~polym(" ,
                        paste(names(Orthodont[-(3:4)]), collapse=","),",degree=2)")), 
      data=Orthodont[-3])

Call:
lm(formula = as.formula(paste("Sex~polym(", paste(names(Orthodont[-(3:4)]), 
    collapse = ","), ",degree=2)")), data = Orthodont[-3])

Coefficients:
                        (Intercept)  polym(distance, age, degree = 2)1.0  
                             1.4433                              -2.5849  
polym(distance, age, degree = 2)2.0  polym(distance, age, degree = 2)0.1  
                             0.4651                               1.3353  
polym(distance, age, degree = 2)1.1  polym(distance, age, degree = 2)0.2  
                            -7.6514      

数式オブジェクトは、 を使用してテキスト入力から作成できますas.formula。これは基本的に、 の最後の例のアプリケーションです?as.formula

于 2015-08-25T17:31:36.573 に答える