2016-06-17 6 views
0

私は、独裁者のゲームで寄付を説明する回帰モデルに合っています。私は多くの変数を持っているので、 'for'ループを使ってプロセスを自動化したいと思います。今のところ私は単変量モデルから始まります。 フィッティングfit[1:24]を印刷/要約すると、切片と係数だけが表示されます。 p値が格納されていないようですね?forループにはp値が格納されていませんか? (in R)

sumres[i]=summary(fit[i]) 
pf(sumres[i]$fstatistic[1L], sumres[i]$fstatistic[2L],sumres[i]$fstatistic[3L], lower.tail = FALSE) 

pVal[i] <- (fit[i])$coefficients[,4] 

いつもはなって終わる:

predictor<-0 
fit<-0 
dictatorgame<-mydata$dictatorgame 
sumres<-0 
pVal<-0 

for(i in 1:24) #24 predictor variables stored in column 1-24 in mydata 
{ 
predictor<-mydata[i] 
unlist(predictor) 
fit[i]<-lm(dictatorgame~unlist(predictor)) 
} 

は、私はそれらの両方はオブジェクトがアトミックであることを考えるように見せかけ、私はSOにここで見つける二つの異なる解決策を試してみましたエラーメッセージ$ operator is invalid for atomic vectors

+0

'predictor <-m​​ydata [i]'が間違っているようです。 'mydata'がdata.frameなら' predictor <-m​​ydata [、i] 'でなければなりません。 – Alex

+0

ええ、それは私がやったことのよりクリーンな解決策です( 'unlist(predictor)')。私のコードでそれを変更した後、私はまだp値を見ません(インターセプトと係数は正しいと思われます)。 – YaeVo

答えて

2

複数の回帰を実行するためにデータを生成しました。最後に、出力リストの最初の3つの要素を見つけることができます。それはあなたが望むものですか?

dependent <- rnorm(1000) 
independent <- matrix(rnorm(10*1000), ncol = 10) 

result <- list() 
for (i in 1:10){ 
    result[[i]] <- lm(dependent ~ independent[ ,i]) 
} 

lapply(result, function(x) summary(x)$coefficients) 

[[1]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.02890665 0.03167108 -0.9127144 0.3616132 
independent[, i] -0.04605868 0.03138201 -1.4676776 0.1425069 

[[2]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03142412 0.03161656 -0.9939134 0.3205060 
independent[, i] -0.03874678 0.03251463 -1.1916723 0.2336731 

[[3]] 
        Estimate Std. Error t value Pr(>|t|) 
(Intercept)  -0.03208370 0.03162904 -1.0143749 0.3106497 
independent[, i] 0.02089094 0.03189098 0.6550737 0.5125713 
+0

それだけです、それは動作します!ありがとうございました。あなたは2つのことについて精巧に考えていますか? 1. 'result [[i]]'二重括弧はどのように解釈されるべきですか? は、原子ベクトル誤差を避けるための 'function(x)summary(x)$ coefficients'の回避策ですか? – YaeVo

+1

Yaevo:resultはリストであり、 '[[' '要素にアクセスする(ここでは番号i)' lapply'は各回帰の係数を抽出し、出力はまだリストです。あなたの原子的なエラーは何か他のものに起因していました。 p値のみを抽出したい場合は、 'lapply(result、function(x)summary(x)$ coefficients [、" Pr(> | t |) "]'を使うことができます。 'do.call(" cbind "、results)のようなものをすべて組み合わせることに興味があるかもしれないp値' –

+0

私はあなたのエラーメッセージの出所がわからないので、私の例では再現できませんでした。しかし、 'lm'オブジェクトをベクトルに格納することはできません。リストに格納する必要があります。Rのデータ構造について読むことをお勧めします。まだ明確ではないものがある場合は質問してください。 – Alex

関連する問題