【问题标题】:can we use some of the arguments of cor with other statistics like RMSE?我们可以将 cor 的一些参数与其他统计数据(如 RMSE)一起使用吗?
【发布时间】:2013-01-25 10:42:39
【问题描述】:

cor函数中,有一个很棒的参数“使用”(例如:use="na.or.complete")

我尝试在计算 RMSE 或偏差时使用相同的参数。它似乎不起作用。我想知道我们可以用什么代替。

RMSE <- function(x, y){
sqrt(mean((x-y)^2))}
RMSE(x,y, use = "na.or.complete")
Error in RMSE(x,y, use = "na.or.complete") : 
unused argument(s) (use = "na.or.complete")

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    计算均方根误差的平均函数有一个na.rm 参数,你可以这样使用它:

    RMSE <- function (pred,obs,na.rm=FALSE){
       sqrt(mean((pred - obs)^2, na.rm = na.rm))
    }
    

    na.rm 参数可用于模拟 na.or.complete 行为,因为在几乎情况下,使用 na.or.complete 选项等效于从原始对中删除 NA 值。例如:

    swM <- swiss[,1:2]
    swM[1,2] <-  NA 
    swM[1,1] <-  NA 
    identical(cor(swM, use = "na.or.complete"),
              cor(na.exclude(swM), use = "all"))
    TRUE
    

    使用 RMSE

    swM[1,2] <-  NA 
    swM[1,1] <-  NA 
    identical(RMSE(swM[,1],swM[,2],na.rm=T),
              RMSE(swM[,1],swM[,2],na.rm=F))
     FALSE
    

    EDIT 将非常小的值设置为 NA

    我不知道您如何存储数据。但我假设你有一个带有变量 x 的 data.table。你可以这样做:

     dat$x[dat$x <= -3.4e+38] <- NA
    

    【讨论】:

    • @Barry 不,你不应该得到相同的结果。看我的例子。
    • @Barry 你误解了NA。 R 中的 NA 用于缺失值,但 -3.400000e+38 很难看,但它存在,没有丢失。你所有的“NA”都等于 -3.400000e+38 吗?
    • 这个对话框需要一个可重现的例子!
    • @agstudy 是这样的,但不是那样的。在data.table 中,应为dat[x &lt;= -3.4e+38, x:=NA],以避免像data.frame 那样复制整个dat
    【解决方案2】:

    简而言之,不。您必须将use= 参数引用到cor 的原因是它指定了一个字符参数,用于在内部决定算法之间的决定。它不传递函数。如果你在命令提示符下输入cor,你会看到一行:

    na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
            "everything", "na.or.complete"))
    

    然后是na.method上的一堆if声明。

    不过,您可以通过在函数签名中添加 ,use= 参数来编写自己的等效项:

    RMSE <- function(x, y, use="all") {
       if(use=="all") # Do stuff
       if(use=="na.or.complete") # Do other stuff
       sqrt(mean((x-y)^2))
    }
    

    您甚至可以将代码基于 cor 代码——这是开源软件的乐趣之一!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2019-08-23
      • 2013-10-16
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多