【问题标题】:Need to know the difference between predict() and predict.lm() in R需要知道R中predict()和predict.lm()的区别
【发布时间】:2014-04-22 05:19:38
【问题描述】:

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

【问题讨论】:

标签: r predict


【解决方案1】:

如果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  

【讨论】:

  • 如果答案很简单,请问什么是“不可见”功能?我在底部收到一条消息Non-visible functions are asterisked。那是.foo 类型的隐藏函数吗?
  • 有些函数是“导出”的,有些不是。如果您想查看未从其命名空间导出的代码(假设已加载具有该功能的包),请使用pkg_name:::fn_namegetAnywhere(fn_name)。 (不要将星号放在“fn_name”中。)我认为第二个比三冒号运算符稍微强大一些,但我不知道::: 的精确限制。
  • 有用!! getAnywhere 很好。
【解决方案2】:

正如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")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2015-11-26
    • 1970-01-01
    • 2017-11-06
    • 2013-01-05
    • 2014-02-01
    • 2014-03-31
    相关资源
    最近更新 更多