我们可以使用cor的一些参数和RMSE等其他统计数据吗?

时间:2013-01-25 10:42:39

标签: r correlation

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")

2 个答案:

答案 0 :(得分:2)

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

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

然后if上的一堆na.method语句。

但是,您可以通过在函数签名中添加,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代码 - 这是开源软件的乐趣之一!

答案 1 :(得分:2)

计算RMSE的平均函数有一个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选项是equiavlent从原始对中删除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

编辑将非常小的值设置为NA

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

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