2016-02-25 54 views
1

我正在執行多個OLS迴歸。我已經使用了以下功能LM:來自多個多元迴歸輸出的彙總數據幀

GroupNetReturnsStockPickers <- read.csv("GroupNetReturnsStockPickers.csv", header=TRUE, sep=",", dec=".") 
ModelGroupNetReturnsStockPickers <- lm(StockPickersNet ~ Mkt.RF+SMB+HML+WML, data=GroupNetReturnsStockPickers) 
names(GroupNetReturnsStockPickers) 
summary(ModelGroupNetReturnsStockPickers) 

這給了我的摘要輸出:

Call: 
    lm(formula = StockPickersNet ~ Mkt.RF + SMB + HML + WML, data = GroupNetReturnsStockPickers) 

Residuals: 
    Min  1Q Median  3Q  Max 
-0.029698 -0.005069 -0.000328 0.004546 0.041948 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept) 4.655e-05 5.981e-04 0.078 0.938 
Mkt.RF  -1.713e-03 1.202e-02 -0.142 0.887 
SMB   3.006e-02 2.545e-02 1.181 0.239 
HML   1.970e-02 2.350e-02 0.838 0.403 
WML   1.107e-02 1.444e-02 0.766 0.444 

Residual standard error: 0.009029 on 251 degrees of freedom 
Multiple R-squared: 0.01033, Adjusted R-squared: -0.005445 
F-statistic: 0.6548 on 4 and 251 DF, p-value: 0.624 

這是完美的。但是,我總共執行了10次多重OLS迴歸,並且我希望在數據框中創建自己的彙總輸出,其中我將所有10次分析中的截距估計值,t值估計值和p值提取出來。因此,它將是一個10x3,其中列名稱爲Model1,Model2,...,Model10和行名稱:值,t值和p值。

我很感激任何幫助。

+0

*只是爲了澄清LM只是一個例子滿分10分。 – Oden

回答

2

有幾個軟件包可以做到這一點(stargazer和texreg)以及outreg的此代碼。

在任何情況下,如果你只在這裏攔截感興趣的是一種方法:

# Estimate a bunch of different models, stored in a list 
fits <- list() # Create empty list to store models 
fits$model1 <- lm(Ozone ~ Solar.R, data = airquality) 
fits$model2 <- lm(Ozone ~ Solar.R + Wind, data = airquality) 
fits$model3 <- lm(Ozone ~ Solar.R + Wind + Temp, data = airquality) 

# Combine the results for the intercept 
do.call(cbind, lapply(fits, function(z) summary(z)$coefficients["(Intercept)", ])) 


# RESULT: 
#     model1  model2  model3 
# Estimate 18.598727772 7.724604e+01 -64.342078929 
# Std. Error 6.747904163 9.067507e+00 23.054724347 
# t value  2.756222869 8.518995e+00 -2.790841389 
# Pr(>|t|) 0.006856021 1.052118e-13 0.006226638 
+0

這正是我所需要的。謝謝 – Oden

0

看那broom包,這是爲了你問什麼了。唯一的區別是它會將模型放入行中,並將不同的統計數據放入列中,並且我明白,您會更喜歡相反的方式,但如果真的有必要,可以事後解決。

舉一個例子,函數tidy()將模型輸出轉換爲數據框。

model <- lm(mpg ~ cyl, data=mtcars) 
summary(model) 

Call: 
lm(formula = mpg ~ cyl, data = mtcars) 

Residuals: 
    Min  1Q Median  3Q  Max 
-4.9814 -2.1185 0.2217 1.0717 7.5186 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 37.8846  2.0738 18.27 < 2e-16 *** 
cyl   -2.8758  0.3224 -8.92 6.11e-10 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 3.206 on 30 degrees of freedom 
Multiple R-squared: 0.7262, Adjusted R-squared: 0.7171 
F-statistic: 79.56 on 1 and 30 DF, p-value: 6.113e-10 

而且

library(broom) 
tidy(model) 

得到以下數據幀:

  term estimate std.error statistic  p.value 
1 (Intercept) 37.88458 2.0738436 18.267808 8.369155e-18 
2   cyl -2.87579 0.3224089 -8.919699 6.112687e-10 

?tidy.lm看到更多的選項,例如用於置信區間等

要結合你的十個模型輸出到一個數據幀中,你可以使用

library(dplyr) 
bind_rows(one, two, three, ... , .id="models") 

或者,如果你的不同型號使用相同的數據幀都來自迴歸,您可以用dplyr結合起來:

models <- mtcars %>% group_by(gear) %>% do(data.frame(tidy(lm(mpg~cyl, data=.), conf.int=T))) 

Source: local data frame [6 x 8] 
Groups: gear 

    gear  term estimate std.error statistic  p.value conf.low conf.high 
1 3 (Intercept) 29.783784 4.5468925 6.550360 1.852532e-05 19.960820 39.6067478 
2 3   cyl -1.831757 0.6018987 -3.043297 9.420695e-03 -3.132080 -0.5314336 
3 4 (Intercept) 41.275000 5.9927925 6.887440 4.259099e-05 27.922226 54.6277739 
4 4   cyl -3.587500 1.2587382 -2.850076 1.724783e-02 -6.392144 -0.7828565 
5 5 (Intercept) 40.580000 3.3238331 12.208796 1.183209e-03 30.002080 51.1579205 
6 5   cyl -3.200000 0.5308798 -6.027730 9.153118e-03 -4.889496 -1.5105036 
+0

這太好了。我也會使用它。謝謝你,coffeinjunky。 – Oden