需要知道R中的predict()和predict.lm()之间的区别

时间:2014-04-22 05:19:39

标签: r predict

我是R和统计学的新手。所以这个问题可能有点愚蠢,但我想知道R中的predict()predict.lm()之间是否有任何区别?我认为它们是相同的,但如果它们是,为什么有两个不同的功能呢?

2 个答案:

答案 0 :(得分:8)

如果predict的第一个参数有“lm”类,那么就没有区别了。 predictR generic functions根据类的名称分派给特定于类的版本。您可以通过执行以下命令查看加载的命名空间中存在哪个版本的预测:

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  

答案 1 :(得分: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")
}