2016-10-19 21 views
0

このデータフレームの列を複数の列に置き換える方法

X <- matrix(rexp(30, rate=.1), ncol=5) 
Y <- matrix(rexp(6, rate=.1), ncol=1) 
mydata <- data.frame(cbind(Y,X)) 

は、今私はXmの

Xm <- matrix(rexp(60, rate=.1), ncol=10) 

の列のそれぞれにXの3番目の列を変更し、線形回帰を行うとのSDを保存するように私は、データフレームを持っていますX3。私はそれを手動で行いたい場合は、私は

X[ , 3] <- Xm[ , 1] 
mydata <- data.frame(cbind(Y,X)) 
fit1 = lm(Y~.,data=mydata) 

を行い、その後

X[ , 3] <- Xm[ , 2] 
mydata <- data.frame(cbind(Y,X)) 
fit2 = lm(Y~.,data=mydata) 

その後、

X[ , 3] <- Xm[ , 3] 
mydata <- data.frame(cbind(Y,X)) 
fit3 = lm(Y~.,data=mydata) 

. 
. 
. 

etc. 

私はそれを手動で行う場合ただし、それは効率的でそれほど長くなくなります。より自動化できるように手伝ってくれる人はいますか?

+0

私はそれが良いことだと思います質問を編集して、X3の係数の標準誤差のみが必要であることを明確にしてください。 –

+0

@Johannes Rankeあなたのコメントのおかげで、私はそれをしました – nik

+0

多分あなたの質問でX3のSDを計算する方法を示していますか?あなたのコメントのために –

答えて

1

あなたは

res=lapply(1:ncol(Xm),function(i){ 
mydata[[3]] <- Xm[ , i] # change 3-rd column of mydata om i-th colomn of Xm 
lm(Y~.,data=mydata) 
}) 

resのようなループ

でそれを行うことができます - あなたのLMモデル

のリストをあなたは、このような方法でそれを行うことができます のみX3のSTDを保存したい場合

res2=lapply(1:ncol(Xm),function(i){ 
mydata[[3]] <- Xm[ , i] 
summary(lm(Y~.,data=mydata))$coefficients["X3","Std. Error"] 
}) 

ただし、すべての例では0です

+0

ありがとうございました。すべてのループのX3の出力にエラーがありますか?そうであれば、私はあなたの答えを受け入れる – nik

+0

追加されましたが、それについては何もありません – Batanichek

+0

私はあなたの答えを好きで受け入れました – nik

1

多分サプリですか?

X <- matrix(rexp(30, rate=.1), ncol=5) 
Y <- matrix(rexp(6, rate=.1), ncol=1) 
mydata <- data.frame(cbind(Y,X)) 

Xm <- matrix(rexp(60, rate=.1), ncol=10) 

sapply(1:ncol(Xm), function(mycol) { 
    X[ , 3] <- Xm[ , mycol] 
    mydata <- data.frame(cbind(Y,X)) 
    fit = lm(Y~.,data=mydata) 
    return(sqrt(diag(vcov(fit)))) 
}, USE.NAMES = F) 

UPDATE 1:標準誤差を抽出するために修正 、 https://stats.stackexchange.com/questions/17571/how-to-store-the-standard-errors-with-the-lm-function-in-r

+0

ありがとう、あなたは答えを修正してStdだけを維持してください。すべてのループでX3のエラー?要約(fit1) – nik

+0

を修正してください、あなたが意図したものかどうか教えてください。 –

+0

hmmm ... 'sqrt(diag(vcov(fit)))'とすることができますか?これは私にエラーを与えます。クラス 'c(' double '、' numeric ') "のオブジェクトに適用される' vcov 'の適用可能なメソッドはありません。 – Batanichek

1

によると、私はplyrパッケージが好き、そしてあなたは、係数を求めていました:

myfun = function(x) { 
    mydata[[3]] <- x 
    coef(lm(Y ~ ., data = mydata)) 
} 

ldply(as.data.frame(Xm), myfun) 
+0

あなたはどんな解決策を与える場合、この質問を見て、私はそれを受け入れるだろうhttp://stackoverflow.com/questions/40129153/how-to-randomly-exchange-a-column-within-機能 – nik

関連する問題