2

ループ関数を使用して複数のプールされた回帰を実行し、回帰出力をリスト (myregression) に保存しました。ここでやりたいことは、すべての回帰 (つまり、myregression リスト) に対して lmtest パッケージの coeftest 関数を効率的に実行して、標準誤差と t 統計を調整することです。最後に、係数、標準誤差、および t 値の平均を取得したいと思います。

これが私がこれまでに思いついたものです:

library(plm)
data("Grunfeld", package="plm")

# Store each subset regression in myregression
myregression <- list()

count <- 1

# Regression on six-year subsets of Grunfeld
for(t in 1940:1950){

  myregression[[count]] <- plm(inv ~ value + capital, 
                              subset(Grunfeld, year<=t & year>=t-5),
                              index=c("firm","year"))

# Name each regression based on the year range included in the data subset
names(myregression)[[count]] = paste0("Year_",t)
count <- count+1
}

ここで問題が発生します。リストの個々のコンポーネントに対して coeftest 関数を実行することはできますが、それに応じて lapply 関数をコーディングすることはできません。

## Apply coeftest function to all plm-objects
library(lmtest)

coeftest(myregression$Year_1940, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4))
coeftest(myregression$Year_1941, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4))

COEFTEST<-lapply(myregression, coeftest(x, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4)))

## obtaining average coefficients, se's,and t values over all regressions
lapply(COEFTEST, mean)

私が見ることができない小さな間違いがあることを願っています。さらに、plm 回帰出力が通常の lm 出力よりも小さいことに気付きました。平均 adj を取得する別の方法があります。R^2?

4

2 に答える 2

1

試す

 COEFTEST<-lapply(myregression, function(x) coeftest(x, vcov=vcovSCC(x, type="HC3", maxlag=4)))

Thsi は、各回帰の coeftest-outputs のリストを提供し、それを任意の方法で使用できます。

補足として、この出力で何をするにしても意味があることを確認してください。coeftest-output の平均を取ることは、私にとって明らかに賢明ではありません。すべての係数の平均が必要な場合は、次のようなものを試してください

 mean(sapply(COEFTEST, function(x)  x["capital", "Estimate"]))

ここでは、出力からsapply変数のすべての推定値を取得し、それらをベクトルに入れます。capitalCOEFTEST

他の要素にアクセスするには、 を使用してオブジェクトの構造を調べると役立ちますstr()。たとえばstr(summary(myregression[[1]]))、r-2 乗が という名前で保存されていることがわかりますr.squaredsummary(myregression[[1]])$r.squaredこれらには、たとえば最初の回帰出力などを使用してアクセスできます。これを自動化すると、上記の構造を再び使用できます。

 sapply(myregression, function(x) summary(x)$r.squared)
于 2014-07-18T08:54:38.430 に答える
0

pmg()inを使用して平均係数 (技術的には平均グループ推定量として知られている) を取得するより良い方法がありplmます。そして、その外観から、Fama-MacBeth 回帰と SE を推定しようとしています。

require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")
fpmg <- pmg(y~x, test, index=c("year","firmid")) ##Fama-MacBeth

> ##Fama-MacBeth
> coeftest(fpmg)

t test of coefficients:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.031278   0.023356  1.3392   0.1806    
x           1.035586   0.033342 31.0599   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

詳細については、Fama-MacBeth および Cluster-Robust (by Firm and Time) Standard Errors in Rを参照してください。

以下も参照してください。

于 2014-08-15T07:37:48.583 に答える