需要了解R中的predict()和predict.lm()之间的差异

问题描述 投票:2回答:2

我对R和统计并不陌生。所以这个问题可能有点愚蠢,但是我想知道R中的predict()predict.lm()之间是否有区别?我认为它们是相同的,但是如果是的话,为什么要使用两个不同的功能?

r predict
2个回答
8
投票

如果predict的第一个参数具有类“ lm”,则没有区别。基于类的名称,将R generic functions之类的predict分发到特定于类的版本。您可以通过执行以下命令来查看已加载的命名空间中存在哪种预测版本:

methods(predict)

目前我加载了很多软件包,所以列表很长:

> methods(predict)
 [1] predict.ar*                predict.areg              
 [3] predict.areg.boot          predict.Arima*            
 [5] predict.arima0*            predict.bj*               
 [7] predict.bs*                predict.bSpline*          
 [9] predict.coxph*             predict.coxph.penal*      
[11] predict.cph*               predict.dataRep           
[13] predict.glm                predict.Glm*              
[15] predict.glmmPQL*           predict.glmtree*          
[17] predict.gls*               predict.Gls*              
[19] predict.gnls*              predict.goodfit*          
[21] predict.HoltWinters*       predict.lda*              
[23] predict.lm                 predict.lme*              
[25] predict.lmList*            predict.lmtree*           
[27] predict.loess*             predict.lqs*              
[29] predict.lrm*               predict.mca*              
[31] predict.mlm                predict.modelparty        
[33] predict.nbSpline*          predict.nlme*             
[35] predict.nls*               predict.npolySpline*      
[37] predict.ns*                predict.ols*              
[39] predict.orm*               predict.party*            
[41] predict.pbSpline*          predict.plm*              
[43] predict.polr*              predict.poly              
[45] predict.polySpline*        predict.ppolySpline*      
[47] predict.ppr*               predict.prcomp*           
[49] predict.princomp*          predict.psm*              
[51] predict.pspline*           predict.qda*              
[53] predict.rlm*               predict.Rq*               
[55] predict.smooth.spline*     predict.smooth.spline.fit*
[57] predict.StructTS*          predict.survreg*          
[59] predict.survreg.penal*     predict.transcan  

0
投票

正如对lm所指出的,这是相同的,因为预测立即分派到predict.lm,即

> predict
function (object, ...) 
UseMethod("predict")

但是一般来说,最好的方法是使用通用函数(例如predict)而不是直接方法(在这种情况下为predict.lm,因为在进行一些操作/检查之后,可以通过UseMethod调用适当的方法通用函数。一个例子是as.data.frame

> as.data.frame
function (x, row.names = NULL, optional = FALSE, ...) 
{
    if (is.null(x)) 
        return(as.data.frame(list()))
    UseMethod("as.data.frame")
}
© www.soinside.com 2019 - 2024. All rights reserved.