我有一个大约650列的矩阵,对于每一列,我想找到boxcox变换的最佳lambda。 我想使用MASS包中的函数boxcox,它输出两个列表:$ x $是可能的lambdas列表,$ y $是给定lambdas的对数似然值列表。最佳lambda是得分最高的那个。
我认为下面这段代码可行:
library(MASS)
optimal.lambda1 <- apply(mymatrix, 2, function (d) {
boxcoxlist <- boxcox(lm(d~1), lambda=seq(-5,5,by=.1), plotit=F)
p <- boxcoxlist$x[which.max(boxcoxlist$y)]
return(p)
}
)
不幸的是我总是得到同样的错误:
Error in eval(expr, envir, enclos): object 'd' not found
如果我尝试使用它的lapply版本,也会出现类似的错误:
library(MASS)
optimal.lambda1 <- lapply(1:ncol(mymatrix), function (d) {
boxcoxlist <- boxcox(lm(mymatrix[,d]~1), lambda=seq(-5,5,by=.1), plotit=F)
p <- boxcoxlist$x[which.max(boxcoxlist$y)]
return(p)
}
)
另外,我试图将对象函数隔离成类似
的东西optimal.lambda2 <- function (d) {
boxcoxlist <- boxcox(lm(d~1), lambda=seq(-5,5,by=.1), plotit=F)
p <- boxcoxlist$x[which.max(boxcoxlist$y)]
return(p)
}
然后将它用作(l)apply的参数,但第二个函数单独返回错误;即,单独以下命令始终返回相同的错误:
optimal.lambda2(mymatrix[,1])
有关如何使其有效的任何建议吗?