2017-09-18 7 views
4

データフレームの選択された部分でいくつかの回帰を実行しようとしています。 22個の列があります。 1つは「DATE」、1つは「INDEX」、S1、S2、S3 ... S20です。データフレームの特定の部分について回帰を実行し、推定値+誤差を抽出します。

私は、回帰をこのように実行します。

Regression <- lm(as.matrix(df[c('S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'S9', 'S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S20')]) ~ df$INDEX) 
Regression$coefficients 

1)どのように私はコードを短くすることができますか?区間を使用してRに伝えるのと同じように、列S1〜S20を説明変数とし、従属変数INDEXを使用して回帰を実行します。

2)回帰式は次のとおりです。a + b * INDEX +誤差 回帰からすべての「b」推定値を抽出します。列には10行があるので、10個の見積もりが必要です。 また、すべてのエラーを抽出します。各列に10個のエラーがあり、合計で合計10 * 20 = 200個のエラーでなければなりません。

私はRの経験がないので、あらゆる種類の助けが歓迎です!ありがとうございました!

+0

申し訳ありませんが、私はそれを混在させました:S変数は依存しており、INDEXは説明です。 S = a + b * INDEX +エラー – Consti

答えて

2

あなたはpaste()を使用しての代わりに、手動ですべての列名を書き出すことで、実質的にあなたのコードを短縮できます。Regression$fitted.valuesを使用し、

Regression <- lm(as.matrix(df[paste0("S", 1:20)]) ~ df$INDEX) 

を回帰推定値にアクセスするには。エラーの場合は、Regression$residualsを使用してください。

data(iris) 
Regression <- lm(Sepal.Length + Sepal.Width ~ Petal.Length, data = iris) 

head(Regression$fitted.values) 
    Sepal.Length Sepal.Width 
1  4.879095 3.306775 
2  4.879095 3.306775 
3  4.838202 3.317354 
4  4.919987 3.296197 
5  4.879095 3.306775 
6  5.001771 3.275039 

head(Regression$residuals) 
    Sepal.Length Sepal.Width 
1 0.2209054 0.1932249 
2 0.0209054 -0.3067751 
3 -0.1382024 -0.1173536 
4 -0.3199868 -0.1961965 
5 0.1209054 0.2932249 
6 0.3982287 0.6249605 
+0

これはすばらしく見える! 数字がない別の名前のカラムが20個あれば、同じようにすることができます。例えば。 "sa"、 "Sb"、 "Sc"、 "Sd"など。そうすれば[paste0( "S"、1:20)]を使うことができませんでしたか? Rにデータフレームに入り、列番号1から始まり列番号20で終わるように指示し、その列を全長で取ることができます。たぶん私はあまりにもエクセルユーザーのように、私は計算を行う前に、列と行を選択できるように思う。 – Consti

+0

@ iraの回答を参照してください。データフレーム内の列の位置に数字を使用するだけで済みます。最初の20日間は 'df [1:20]'です。 – LAP

3

あなたは22列を持っている場合は、単にデータフレームの列の位置を使用します。irisデータを使用して

例。彼の答えでLAPと同じデータセットを使用して:あなたの従属変数は、列に3 22(1列にあると仮定すると、

# run the regression 
Regression <- lm(as.matrix(df[3:22]) ~ INDEX, data = df) 

# load iris dataset 
date(iris) 
# run regression 
Regression <- lm(as.matrix(iris[1:3]) ~ Petal.Width, data = iris) 

これは、あなたのケースでは、のようなものに変換するでしょう2番目のインデックス、またはそのようなもの)

関連する問題