2012-11-19 35 views
3

可能重复:
how to succinctly write a formula with many variables from a data frame?
omit some coefficients from mtable/outreg-type table排除来自汇总表任意变量R中

我使用write.mtable()从memisc包来显示几个结果(制表符分隔)表格中的回归,可以很容易地粘贴到Word/Excel /等。

因为这些表往往会变得非常快,所以有时候我想将输出限制为包含在回归中的任意子集。

是否有简单的方法来而不是在回归表中包含某些解释变量的结果而不实际从回归本身中移除这些变量?简单的方法是删除行,当他们被粘贴到Word/Excel /等,当然,但也许有一个更优雅的解决方案。


例如,首先从mtable文档的例子:

lm0 <- lm(sr ~ pop15 + pop75,    data = LifeCycleSavings) 
lm1 <- lm(sr ~     dpi + ddpi, data = LifeCycleSavings) 
lm2 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings) 
mtable123 <- mtable("Model 1"=lm0,"Model 2"=lm1,"Model 3"=lm2, summary.stats=c("sigma","R-squared","F","p","N")) 
mtable123 

是否有可能从输出如下删除,也就是说,pop75(不是说有任何理由这样做这里,但作为我试图实现的输出类型的示例):

Calls: 
Model 1: lm(formula = sr ~ pop15 + pop75, data = LifeCycleSavings) 
Model 2: lm(formula = sr ~ dpi + ddpi, data = LifeCycleSavings) 
Model 3: lm(formula = sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings) 

========================================== 
       Model 1 Model 2 Model 3 
------------------------------------------ 
(Intercept) 30.628*** 6.360*** 28.566*** 
      (7.409) (1.252) (7.355) 
pop15  -0.471**   -0.461** 
      (0.147)    (0.145) 
dpi      0.001 -0.000 
         (0.001) (0.001) 
ddpi     0.529* 0.410* 
         (0.210) (0.196) 
------------------------------------------ 
sigma   3.931  4.189  3.803 
R-squared  0.262  0.162  0.338 
F    8.332  4.528  5.756 
p    0.001  0.016  0.001 
N    50  50  50  
========================================== 

谢谢!

+4

你可以给一个小的可重现的数据集,说明你想看到什么? – Dason

+1

好的 - 我刚刚做到了。 –

+0

建议:'mtable'似乎通过'getSummary'收集所有的模型信息。如果您查看该函数的文档,它会详细地指定自定义方法应返回的内容。你可以编写自己的'getSummary'版本来省略某些变量,并将该函数传递给'mtable'。 – joran

回答

2

据我所知,你不能直接从mtable做到这一点。

但是,您可以从模型本身中移除系数。例如,使用lm0

lm0$coefficients 

将列出模型的各个部分。要删除“pop75”,你可以这样做:

lm0$coefficients <- lm0$coefficients[names(lm0$coefficients) != "pop75"] 

而你很好去。要删除大量的系数:

lm0$coefficients <- lm0$coefficients[!names(lm0$coefficients) %in% c("pop75","pop15")] 

如果你有一大堆的模型,你可以写一个循环或使用by/apply,使其更加高效。

*注意:lm0$coefficients[names(lm0$coefficients)=="pop75"] <- NULL(即试图删除list中的一个元素)将不起作用。

+0

嗯......这段代码似乎对summary()工作正常,但是当我运行mtable()时,我得到了“eval(expr,envir,enclos)中的错误:下标越界”。虽然知道有用! –

+0

有趣的 - 那么我会假设'mtable'收集数据的方式('getSummary')正在做一些奇怪的事情 - 正如古兰经所暗示的那样直接观察它可能会有所帮助? –

+0

如果你执行'lm0 [1:13]'(或者检查'lm'帮助页面),它会显示lm0存储大量关于通常不显示的模型的信息。 'getSummary(lm0)'为每个系数返回了很多'测试',所以它大概会使用很多隐藏的数据。不幸的是,我认为最简单的解决方案就是创建你自己的'mtable'函数,在这里你可以省略系数。 –

0

确定的基础上,由Josh奥布莱恩评价和从阅兵式澳代码链接的问题,我认为这是做我想做的最简单,最灵活的方式:

excluded_vars <- c("pop75") 
mtable123$coefficients <- mtable123$coefficients[,,!dimnames(mtable123$coefficients)[[3]] %in% excluded_vars,,drop=F] 
mtable123 

这个解决方案还应该使添加到要在显示中排除的变量列表非常容易。

谢谢大家!