Rに100個の変数がある線形モデル式を書く方法


22

Rに100個のパラメータを持つモデルで線形回帰を作成するRの簡単な方法はありますか?10個の値を持つベクトルYと10個の列と100個の行を持つデータフレームXがあるとしましょうY = X[[1]] + X[[2]] + ... + X[[100]]。R構文で似たようなものを書くにはどうすればよいですか?


1
100または1000がありますか?また、通常は列を変数にし、行を観測値にします(ここでは逆になっているように見えます)
マクロ

100余分な0はタイプミスでした
クリスチャン

2
本当に?これを実行してもよろしいですか?予測子の線形結合間の過剰適合と相関関係が心配です。それだけでなく、予測子が100個で、観測が10個しかない場合、なり、線形回帰はまったく機能しません。p>n
アーロン-モニカの復活

回答:


29

これを試して

df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)

4
たとえば、すべての2次相互作用が必要な場合は、と書くことができますy ~ . + .^2。等々。
ルッツプレシェルト

3
また、2次相互作用の一部だけが必要なy ~ . + .:x1場合は、などの各変数の相互作用を取得します(を除くx1x1。等々; あなたはアイデアを得る。
ルッツプレシェルト

21

素晴らしい答えです!

デフォルトではformula、a data.frameを呼び出すと、最初の列を他の列に回帰する加算式が作成されます。

だから@ danas.zuokasの答えの場合にはあなたもすることができます

lm(df)

これは正しく解釈されます。


それでも、相互作用の用語を混在させたい場合、この答えは機能しません。あなたのものは(+1)。
gui11aume

6
私は、ほとんどRのの演算子がどれほど過負荷であるかに絶えず驚いています:)
マクロ

19

YnXn×pp=100

Z = as.data.frame(cbind(Y,X))
lm(Y ~ .,data=Z)

予測変数として含めたくない他の列がある場合、Xこのトリックを使用する前、または-モデル式でそれらを除外する前にそれらを削除する必要があります。たとえば、67番目の予測子(対応する名前を持つx67)を除外する場合、次のように記述できます。

lm(Y ~ .-x67,data=Z)

また、インタラクションなどを含める場合は、(たとえば)手動で追加する必要があります

lm(Y ~ .+X[,1]*X[,2],data=Z)

または、の列として入力されていることを確認してくださいX


19

関数formulapaste関数を組み合わせて使用​​することもできます。

設定データ:予測変数x1to x100とその従属変数を含むdata.frame yがあるが、迷惑変数もあると想像してくださいasdfasdf。また、予測変数は、data.frame内ですべて連続しないように順序付けられています。

Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""), 
    "asdfasdf", "y", paste("x", 51:100, sep=""))

また、予測変数の名前を含む文字列があると想像してください。この場合、これはpaste関数を使用して簡単に作成できますが、他の状況では、grepこの文字列を取得するために他のアプローチが使用される場合があります。

PredictorVariables <- paste("x", 1:100, sep="")

アプローチの適用:次に、次のように式を作成できます。

Formula <- formula(paste("y ~ ", 
     paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
  • collapse引数の挿入+予測変数間の
  • formula文字列をlm関数に適したクラス式のオブジェクトに変換します。

より一般的には、変数名のベクトルとして予測変数を提供する場合、非常に定期的に次の関数を使用します。

regression <- function(dv, ivs, data) {
    # run a linear model with text arguments for dv and ivs
    iv_string <- paste(ivs, collapse=" + ")
    regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
    lm(regression_formula, data)

}

例えば、

regression("y", PredictorVariables, Data)

2
+1。私は常にこのテクニックを使用しています。ただし、変数に式を保存すると問題が発生する場合があります。を呼び出す前に式を評価する方法については、stackoverflow.com / a / 7668846/210673を参照してください。do.calllm
アーロン-モニカの復活
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.