summary() 函数的方法

Methods of summary() function

我在 mle(stats4) 函数的输出上使用 summary(),它的输出属于 class mle。我想知道 summary() 如何估计 mle(stats4) 返回的系数的标准偏差,但我在 methods(summary) 打印的列表中没有看到 summary.mle,为什么我不能找到 summary.mle() 函数 ?

(我猜正确的函数是 summary.mlm(),但我不确定,也不知道为什么它会是 mlm,而不是 mle

如图

>library(stats4)
>showMethods("summary")
Function: summary (package base)
object="ANY"
object="mle"

summaryS4 方式解释。我不会直接查看R中的代码,直接给你搜索stats4的源码

stats4/R/mle.R中,有:

setMethod("summary", "mle", function(object, ...){
    cmat <- cbind(Estimate = object@coef,
                  `Std. Error` = sqrt(diag(object@vcov)))
    m2logL <- 2*object@min
    new("summary.mle", call = object@call, coef = cmat, m2logL = m2logL)
})

因此它创建了一个 S4 对象 summary.mle。我猜你现在可以自己跟踪代码了。

如果它是 S3 方法,它实际上就是 summary.mle 的样子。 S3 方法使用 generic_function_name.class_of_first_argument 机制创建并分派,而 S4 方法根据其参数 "signature" 分派,这允许考虑第二个和后面的参数。这是如何让 showMethods 显示调用 S4 方法时调用的代码。这是一个仅将第一个参数用作签名的实例。您可以选择任何出现在缩写输出中的对象签名来指定 classes-agument,它是提示显示代码的 includeDefs 标志:

showMethods("summary",classes="mle", includeDefs=TRUE)
#---(output to console)----
Function: summary (package base)
object="mle"
function (object, ...) 
{
    cmat <- cbind(Estimate = object@coef, `Std. Error` = sqrt(diag(object@vcov)))
    m2logL <- 2 * object@min
    new("summary.mle", call = object@call, coef = cmat, m2logL = m2logL)
}