2016-05-14 20 views
1

データフレームに従属変数を持つベクトルがあります。たとえば、次のようになります。R - 複数のlmsのリストからt値を抽出する

a <- rnorm(100,1,1) 
b <- rnorm(100,2,2) 
c <- rnorm(100,3,3) 
x <- rbind(a,b,c) 

y <- rnorm(100,5,10) 

ここで、すべての行に対して線形回帰を実行する必要があります。私はその後、各行の係数を得る

lm.list <- apply(x,1, function(x) lm(x ~ y)$coefficients) 

:私はこのような「$係数」を追加した係数を抽出するために管理

lm.list <- apply(x,1, function(x) lm(x ~ y)) 

:私はこのようにそれをやりました。今私はこれらの係数の重要性を知りたいと思います。ですから、私はt値、標準誤差、またはp値のいずれかを抽出する必要があります。私はそれを行う方法を知らないし、私は1行ごとにlm-functionを実行してt値をコピーしてコピーしたくない。これを行う方法はありますか?

また、各行の係数計算にNewey-West標準誤差を使用することは可能ですか?私はそれが単一のlmsのためにどのように動作するのか知っていますが、多くの行に対してapply関数を使用する方法を見つけることができませんでした。

ありがとうございます!

答えて

2

このような操作では、リストを扱う方が簡単で、したがってlapplyファミリです。 最初のノート:あなたのA、B、Cの変数ではなく、レコードです - >これはのように、それらを保持するデータセットを作成する代わりにCBINDのそれらをrbindか、実際には奇妙なアイデアです:

data=data.frame(a,b,c) 

。なお、 data.frameはリストです - >私たちはlapply呼び出すことができます。

lm.list=lapply(data,FUN=function(x) lm(x~y)) 

を(ところで、通常、1つをy〜xと逆ではないがあります)

だから我々はこれまでに何がありますか?クラスlmのオブジェクトを保持して各成分を持つリスト - コンポーネントの基本的リストでインスタンスを探し:このから値を抽出することができる

> names(lm.list[["a"]]) 
[1] "coefficients" "residuals"  "effects"  "rank"   "fitted.values" "assign"  "qr"   "df.residual" 
[9] "xlevels"  "call"   "terms"   "model" 

> (coeffs=sapply(lm.list, FUN=function(item){item$coefficients})) 
        a   b   c 

(インターセプト)1.36869810 1.759809965 3.16491826 Y -0.01885792 0.002648734 -0.02690408

あなたはt値を持っていると思ったとlmオブジェクトに関連付けられている場合は、それにsummaryを呼ぶだろう。さんはlapplyでリスト全体でこれをやってみましょう:

lm.list.summary = lapply(lm.list,summary) 

は、オブジェクト構造/内容を確認するstr機能を忘れてはいけない:

str(lm.list.summary[[1]]) 

そして、それはcorrecly何にパスを設定するだけです

y.tval = sapply(lm.list.summary, FUN=function(item){item$coefficients["y","t value"]}) 
y.tval 
     a   b   c 
-1.7599765 0.1366731 -0.7998487 
+0

このような良い説明をありがとうございます!それは私が欲しかったことです!ありがとうございました! – Zwaffel

関連する問題