隐藏回归摘要中的某些系数,同时仍返回调用、r平方和其他摘要输出

隐藏回归摘要中的某些系数,同时仍返回调用、r平方和其他摘要输出,r,output,regression,summary,dummy-variable,R,Output,Regression,Summary,Dummy Variable,我的问题与此类似,但我感兴趣的是返回所有其他输出,而不仅仅是系数。下面是示例代码,让我的问题更清楚 data=as.data.frame(matrix(rnorm(50*50),50,50)) summary(lm(data[,1]~.-data[,1],data=data)) 我只想输出前5个系数。我知道我可以和你一起做 summary(lm(data[,1]~-data[,1],data=data))$coeff[1:5,],但这将消除我想要的所有其他输出。我还知道我可以单独获得每个输出,

我的问题与此类似,但我感兴趣的是返回所有其他输出,而不仅仅是系数。下面是示例代码,让我的问题更清楚

data=as.data.frame(matrix(rnorm(50*50),50,50))
summary(lm(data[,1]~.-data[,1],data=data))
我只想输出前5个系数。我知道我可以和你一起做
summary(lm(data[,1]~-data[,1],data=data))$coeff[1:5,]
,但这将消除我想要的所有其他输出。我还知道我可以单独获得每个输出,我只想知道是否有一种成功的方法可以编写一行代码并删除我不希望报告的变量。

您可以选择您想要的系数,只需稍微修改
print.summary.lm
函数,这是R用来为
summary.lm
对象输出摘要结果的内部函数

首先,获取函数的代码,如下所示:

getAnywhere(print.summary.lm)
然后,我们需要找出提取系数表的位置,并将其子集到我们想要的行中。我们将向函数中添加一个新的
my.rows
参数,然后在提取系数表时向这些行添加子集。修改后的函数代码位于该答案的末尾

现在,将标准摘要与我们的新摘要进行比较。首先,我将使用真实数据创建一个模型(您提供的模型没有正确指定。看起来您想要的是
lm(V1~,data=data)
,但即使这样,也没有剩余的自由度,因此我想用真实的数据集进行演示。):

标准摘要:

summary(m1)
仅包含我们选择的系数的新摘要:

请注意,我们需要首先对模型调用
summary
,因为
my.summary.lm
需要的是summary对象,而不是模型对象本身

my.summary.lm(summary(m1), my.rows=2:4)
与其按索引选择系数,不如按名称选择:

my.summary.lm(summary(m1), my.rows=grep("wt|hp|cyl", names(coef(m1))))
这里是函数。我只对原始函数做了两次更改,都用内联注释进行了标记。第一个更改是附加的
my.rows
参数。第二个是从
coefs | t |开始的行)
日志(pc)0.2920069 0.02511967 11.62463 7.075069e-29
日志(emp)0.7681595 0.03009174 25.52725 2.021455e-104
剩余平方和:1.11

F-statistic:3064.81在4和764 DF上,p值:您可以通过稍微修改
print.summary.lm
函数来选择所需的系数,该函数是R用于输出
summary.lm
对象的摘要结果的内部函数

首先,获取函数的代码,如下所示:

getAnywhere(print.summary.lm)
然后,我们需要找出提取系数表的位置,并将其子集到我们想要的行中。我们将向函数中添加一个新的
my.rows
参数,然后在提取系数表时向这些行添加子集。修改后的函数代码位于该答案的末尾

现在,将标准摘要与我们的新摘要进行比较。首先,我将使用真实数据创建一个模型(您提供的模型没有正确指定。看起来您想要的是
lm(V1~,data=data)
,但即使这样,也没有剩余的自由度,因此我想用真实的数据集进行演示。):

标准摘要:

summary(m1)
仅包含我们选择的系数的新摘要:

请注意,我们需要首先对模型调用
summary
,因为
my.summary.lm
需要的是summary对象,而不是模型对象本身

my.summary.lm(summary(m1), my.rows=2:4)
与其按索引选择系数,不如按名称选择:

my.summary.lm(summary(m1), my.rows=grep("wt|hp|cyl", names(coef(m1))))
这里是函数。我只对原始函数做了两次更改,都用内联注释进行了标记。第一个更改是附加的
my.rows
参数。第二个是从
coefs | t |开始的行)
日志(pc)0.2920069 0.02511967 11.62463 7.075069e-29
日志(emp)0.7681595 0.03009174 25.52725 2.021455e-104
剩余平方和:1.11

F-统计:4和764 DF上的3064.81,p-值:谢谢。这对lm命令非常有效,但在使用plm包时似乎不起作用<代码>m1=plm(萼片长度~萼片宽度+花瓣长度+花瓣宽度,数据=鸢尾,索引=c('种'))
。如果我基于上一个示例运行此操作,
my.summary.lm(summary(m1))
,这会抛出一个错误,因为
plm
包有自己的功能,
print.summary.plm
用于将模型摘要打印到控制台。您可以创建自己的
my.summary.plm
函数,以类似于我的答案的方式修改
print.summary.plm
函数。缺点是,对于要打印到控制台的每种类型的模型对象,都需要单独执行此操作。另一个选项是创建您自己的函数,该函数可以从您通常使用的各种类型的模型摘要对象中获取所需的信息,并将其打印到控制台。有关如何创建您自己的函数以使用不同类型的模型摘要对象的想法,请参阅更新的代码。如何从lfe包?运行
getAnywhere(summary.felm)
获取
felm
对象的摘要方法的代码。然后按照我以上回答中的步骤定制
summary.felm
,以满足您的需求。如果你不理解我回答的某些方面,你可以用评论要求澄清。如果你有一个新问题没有在我的回答中解决,那么请随意提出一个新问题。谢谢。这对lm命令非常有效,但在使用plm包时似乎不起作用<代码>m1=plm(萼片长度~萼片宽度+花瓣长度+花瓣宽度,数据=鸢尾,索引=c('种'))
。如果我基于上一个示例运行它,则会抛出一个错误,因为
# lm object
m1 = lm(mpg ~ wt + hp + cyl + vs + am, data=mtcars)

# plm object
library(plm)

# Example from plm help
data("Produc", package = "plm")
zz <- plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp,
          data = Produc, index = c("state","year"))
# Summary function that allows selection of which coefficients to include 
# in the coefficient table
# Works with summary.lm and summary.plm objects
my.summary = function(x, rows, digits=3) {

  # Print a few summary elements that are common to both lm and plm model summary objects
  cat("Call\n")
  print(x$call)
  cat("\nResiduals\n")
  print(summary(x$residuals))
  cat("\n")
  print(coef(x)[rows,])

  # Print elements unique to lm model summary objects
  if("summary.lm" %in% class(x)) {
    cat("\nResidual standard error:", round(x$sigma,3), "on", x$df[2], "degrees of freedom")
    cat(paste(c("\nF-statistic:", " on"," and"), round(x$fstatistic,2), collapse=""),
        "DF, p-value:",
        format.pval(pf(x$fstatistic[1L], x$fstatistic[2L], x$fstatistic[3L], 
                       lower.tail = FALSE), digits=digits))

  # Print elements unique to plm model summary objects  
  } else if ("summary.plm" %in% class(x)) {
    cat(paste("\nResidual Sum of Squares: ", signif(deviance(x), 
                                                  digits), "\n", sep = ""))
    fstat <- x$fstatistic
    if (names(fstat$statistic) == "F") {
      cat(paste("F-statistic: ", signif(fstat$statistic), " on ", 
                fstat$parameter["df1"], " and ", fstat$parameter["df2"], 
                " DF, p-value: ", format.pval(fstat$p.value, digits = digits), 
                "\n", sep = ""))
    }
    else {
      cat(paste("Chisq: ", signif(fstat$statistic), " on ", 
                fstat$parameter, " DF, p-value: ", format.pval(fstat$p.value, 
                                                               digits = digits), "\n", sep = ""))
    }
  }
}
my.summary(summary(m1), 2:4)
Call
lm(formula = mpg ~ wt + hp + cyl + vs + am, data = mtcars)

Residuals
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-3.6730 -1.6580 -0.4297  0.0000  1.3310  5.4690 

       Estimate Std. Error    t value   Pr(>|t|)
wt  -2.54331718 0.93506164 -2.7199460 0.01148231
hp  -0.02588661 0.01387176 -1.8661377 0.07334148
cyl -0.40178727 0.79364098 -0.5062582 0.61694148

Residual standard error: 2.537 on 26 degrees of freedom
F-statistic: 29.8 on 5 and 26 DF, p-value: 5.57e-10
my.summary(summary(zz), 2:3)
Call
plm(formula = log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp, 
    data = Produc, index = c("state", "year"))

Residuals
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-0.120500 -0.023740 -0.002041  0.000000  0.018140  0.174700 

          Estimate Std. Error  t-value      Pr(>|t|)
log(pc)  0.2920069 0.02511967 11.62463  7.075069e-29
log(emp) 0.7681595 0.03009174 25.52725 2.021455e-104

Residual Sum of Squares: 1.11
F-statistic: 3064.81 on 4 and 764 DF, p-value: <2e-16