优化box-cox变换,无法在初始参数下评估函数

时间:2014-03-11 23:55:13

标签: r optimization transformation

我试图进行自动的box-cox变换(这对于人们通常对数据进行标准化很有用),但是在R&#39的优化正常的情况下很难对我的优化进行描述。它通常有效,但我不清楚是什么导致它在极端偏斜的变量上失败。

我们的想法是在box-cox变换中选择Lambda的参数,以最小化数据集偏度的绝对值。

library(car)
library(moments)

xskew <- function(data,par){
    abs(skewness(bcPower(data,lambda=par[1]),na.rm=T)) # minimize abs(skew)
}

boxit <- function(x){
    res <- optim(par=c(-5,5), xskew, data=x+1)         # find argmin(^) lambda
    print(res$par)
    return(bcPower(x+1,lambda=res$par[1]))

这通常很有效,例如:

> skewness(rbeta(1000,12,3))
[1] -0.6439532

变为

> skewness(boxit(rbeta(1000,12,3)))
[1] -5.980757e-08

---几乎是0偏斜。

但是在一个非常偏斜的变量上,我得到了:

Error in optim(par = c(-5, 5), xskew, data = x + 1) (from #2) : 
  function cannot be evaluated at initial parameters

我的想法很可能是:

  1. 不了解bcPower函数如何处理接近零或无穷大的值。
  2. 滥用优化
  3. 也许做一些更愚蠢的事情,因为我构建了一些不可能融合的东西。

1 个答案:

答案 0 :(得分:0)

哎呀,我使用了2个参数求解器,而不是使用具有显式下限上限的1-param求解器。我需要的优化电话是:

optim(par=-2, xskew, x=x, method="Brent", lower=-20, upper=20)

稍微重新定义xskew函数调用。