我试图进行自动的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
我的想法很可能是:
答案 0 :(得分:0)
哎呀,我使用了2个参数求解器,而不是使用具有显式下限上限的1-param求解器。我需要的优化电话是:
optim(par=-2, xskew, x=x, method="Brent", lower=-20, upper=20)
稍微重新定义xskew函数调用。