2016-05-31 9 views
2

私はアンディ・フィールドでRを使用し、この一節に遭遇してきた自己勉強発見統計きた:モデルをRのデータに「強制」する? (線形回帰)

データ分割:このアプローチは、ランダムに計算し、 セットにデータを分割する必要がデータの両方の半分について回帰式を計算し、結果モデルを比較する。段階的な方法を使用する場合は、 のクロスバリデーションが良いアイデアです。あなたのケースの約80%を無作為に選択して段階的に 回帰を実行する必要があります。 このモデルを残りの20%のデータに適用します。 2つのサンプルでの値R2の とb値を比較することによって、あなたは(より 詳細は、Tabachnick & Fidell、2007を参照) 元のモデルがを一般どれだけ伝えることができます。

さてさて、私は(sample()を使用して)私のデータをサブセット化を理解し、そして私は線形モデル(using lm())を取り付けますが、ラインが 混乱「次に、データの残りの20%にこのモデルを強制」する方法を知っています私。

このテクニックは、この本の中で再び公開されることはありません。 Rにモデルを強制的にデータに載せて、その強制モデルを使ってR^2b-valuesを計算する関数がありますか?おそらく、傍受と勾配係数を入力して、summary(lm)のようなものを出力する関数がありますか?

また、この記事の内容を理解していないと思いますか?

+2

は 'predict()'関数 - '?predict'を見ています。 – Bulat

+0

私は「力」によって「使用」を意味すると信じています。基本的に、彼らはデータの元の80%の段階的回帰を提唱して以来(悪い提案ですが、私はそこに入りたくありません)、彼らはあなたが最終的に決定したどのモデルでも言っています。残りのデータ。モデルが元のデータのx1 + x2 + x5になると、もう一方の20%でモデルx1 + x2 + x5を使用します。 – Dason

+0

また、クロスバリデーションのために、予測パッケージの 'CV'関数を見てください。ここにはcvメトリックの詳細があります - http://robjhyndman.com/hyndsight/crossvalidation/ – Bulat

答えて

2

私はジェレミーによると2番目。以下は、あなたがそれを感じるために実行できるいくつかの構成データの例です:

set.seed(26) 

mydf = data.frame (a=1:20 , b = rnorm(20), c = 1:20 + runif(20), d = 1:20 + runif(1:20)*sin(1:20)) 

trainRows<-sample(1:20, 16) 
mydf.train<-mydf[trainRows,] 
mydf.test<-mydf[-trainRows,] 

myModel<-lm(a~., data = mydf.train) 
model1<-step(myModel) 

summary(model1) 

mydf.test$pred<-predict(model1, newdata = mydf.test) 

cor(mydf.test$pred, mydf.test$a)^2 
#[1] 0.9999522 
+0

私の答えよりずっと便利です! –

2

新しいデータで予測関数を使用します。

正確な例はわかりませんが、残りの20%のデータが 'holdout'というデータフレームで、回帰モデルが '

次に、予測スコアと元の結果スコアの間の相関関係を調べることで$ R^2 $を計算することができます。結果が「アウト」と呼ばれる場合は、

cor(holdout$pred, holdout$out)^2 

このトリックを行う必要があります。

+0

predict()関数をありがとう、しかし、私は "R^2とb値のcom値"をどうしたらいいですか?私が言う限り、predict()は私に統計的なテストや係数を与えません。 – user3547456

+1

@ user3547456予測を使用した後は、R^2計算をサポートする値があり、予測と実際を比較します。私は "b値"が "p値"のスペルミスであると推測しています。統計的なアドバイスが必要なので、これは実際はstats.stackexchange.comではなく、むしろstats.stackexchange.comの質問だと思います。 –

+0

@ user3547456 - 回答を編集します。 –