2017-11-30 9 views
0

ループ回帰を試して実行します。私はセットアップできる限り最高に説明します。ループ回帰の場合

私は固定されているベクトルX1Aは(彼らは変更されません/更新を)言うことができます持って

私は5 data.frameがdf1, df2, df3, df4, df5呼ばれています。 col1, col2, col3, col4, col5で構成されています。

私がしようとしているのは、線に沿って何かを読む回帰モデルを実行することです。

Read in df(1), col(1) 
Compute Y: data(1) - A  # Or df1$col1 - A 
Run OLS regressed Y on X1 
Store results in new.data.frame 

Read in df(1), col(2) 
Compute Y: data(2) - A  # This time df1$col2 
Run OLS regressed Y on X1 
Store results in new.data.frame 

..... 

# Do until df(1), col(5) 

..... 

Then; 

Read in df(2), col(1) 
Compute Y: data(6) - A # Which will now be df2$col1 
Run OLS 
Store results in new.data.frame 

.....

Do this until df(2), col(5) as before 
Complete up until df(5), col(5). 

私は動作しません、私の小さなコードを貼り付けますが、あなたは私に、私は素晴らしいことだ、このループを実行することができますどのように任意のポインタを与えることができます。

data <- NULL 
    for(i in 1:5) { 
     data[i] <- df1$col1 
     Y <- data[i] - A 
     print(Y) 
     model <- lm(Y ~ X1) 
    } 

あなたはありませんが、必要なループDF

col1 = c(2, 3, 5, 6, 7, 2, 3) 
col2 = c(4, 8, 1, 3, 1, 4, 6) 
col3 = c(1, 9, 2, 4, 6, 7, 8) 
col4 = c(1, 9, 2, 4, 6, 7, 8) 
col5 = c(1, 9, 2, 4, 6, 7, 8) 
df1 = data.frame(col1, col2, col3, col4, col5) 

df1 

col1 = c(8, 5, 3, 2, 3, 5, 2) 
col2 = c(4, 8, 1, 3, 1, 4, 6) 
col3 = c(1, 9, 2, 4, 6, 7, 8) 
col4 = c(1, 9, 2, 4, 6, 7, 8) 
col2 = c(4, 8, 1, 3, 1, 4, 6) 
df2 = data.frame(col1, col2, col3, col4, col5) 

df2 

A <- c(9, 2, 3, 4, 6, 7, 6) 
X1 <- c(0.2, 0.1, 0.4, 0.2, 0.3, 0.6, 0.1) 
+0

'lm'を呼び出した結果、データフレームに保存しますか? – Steven

+0

ああ、申し訳ありません。現時点では、私はX1の係数値に興味がありました。後で結果を追加することができます。 – user113156

答えて

0

のstuctureのアイデアを得ることができるように私はいくつかのテストコードを提供しています。

あなたがデータフレームを維持するために必要な分離が、結果は同じデータフレームに入っているので、ちょうどすべてのデータをバインドする場合はわからないが、一緒フレーム:

df1 <- data.frame(col1 = c(2, 3, 5, 6, 7, 2, 3), 
       col2 = c(4, 8, 1, 3, 1, 4, 6), 
       col3 = c(1, 9, 2, 4, 6, 7, 8), 
       col4 = c(1, 9, 2, 4, 6, 7, 8), 
       col5 = c(1, 9, 2, 4, 6, 7, 8)) 

df2 <- data.frame(col1 = c(8, 5, 3, 2, 3, 5, 2), 
        col2 = c(4, 8, 1, 3, 1, 4, 6), 
        col3 = c(1, 9, 2, 4, 6, 7, 8), 
        col4 = c(1, 9, 2, 4, 6, 7, 8), 
        col5 = c(4, 8, 1, 3, 1, 4, 6)) 

A <- c(9, 2, 3, 4, 6, 7, 6) 
X1 <- c(0.2, 0.1, 0.4, 0.2, 0.3, 0.6, 0.1) 

all_dfs <- bind_cols(df1, df2) 

列をとる関数、計算をyは、回帰を実行し、X1係数を返します。

foo <- function(col){ 

    y <- col - A 
    mod <- lm(y~X1) 
    return(mod$coefficients[2]) 
} 

が大きなデータフレームのすべての列に関数を適用し、データフレームに変換し

sapply(all_dfs, foo) %>% as.data.frame() 

> sapply(all_dfs, foo) %>% as.data.frame() 
        . 
col1.X1 -3.382353 
col2.X1 -10.220588 
col3.X1 -5.661765 
col4.X1 -5.661765 
col5.X1 -5.661765 
col11.X1 -1.838235 
col21.X1 -10.220588 
col31.X1 -5.661765 
col41.X1 -5.661765 
col51.X1 -10.220588 
+0

解決していただきありがとうございます。本当にありがとうございます。私が現在取り組んでいるデータセットに適用しましたが、最初の回帰の係数を取得することしかできません。私は、col1 ... col11、...、col51の出力をすべて同じ数にします。私は大きなデータフレーム内のすべての列に関数を適用する方法について迷っています – user113156

+0

col1 1.43、col2 1.43、col3 1.43、col4 1.43、col5 1.43、col 11 1.43など – user113156

+0

どこが間違っているのか分かります。それは、Yの可変的な創造に関してです。私は持っています。 'var1 < - df1 $ col1'を実行すると、' Y < - var1 - A'は更新されず、 'df1 $ col2'に移動しません。 – user113156