1
我想创建一个函数来计算R中的Box-Cox变换,其中您在一个公式中迭代lambda(lambda)的值以最大化L.我最终需要的是一个向量L ,因此对于lambda中的所有我都有一个对应的L值。for循环创建向量r
y <- c(256,256,231,101,256,213,241,246,207,143,287,240,262,234,146,255,184,161,252,229,283,132,218,113,194,237,181,262,104)
df <- 28
n=29
lambdas <- seq(-3,3,0.001)
L <- c(rep(NA,length(lambdas)))
for(i in lambdas) {
if(i != 0) {
yprime <- (((y^i)-1)/i)
} else
{ yprime <- log(y)
}
st2 <- var(yprime)
L <- (((-df/2)*(log(st2))) + ((i-1)*(df/n)*(sum(log(y)))))
}
我通常最终得到L作为1的向量,计算最终的迭代。
需要分配到L'的'的元素,而不是重新分配'L'。 'L [i] < - (((...)))'。然而,for循环并不是最重要的“R-ish”方式,我相信box-cox已经在package('install.packages('MASS')')中实现了。 – Justin
你没有对L做任何索引。看看你的最后一行代码 - 它只是每次通过循环写入L。添加一个索引,使其工作'L [someindex] < - blah' – Dason
是的,powerTransform将在汽车包装中实现,但是,我试图向我的班级展示lamdba-L关系。向L(L [i])添加索引编号并创建一个向量,其中前三个元素是不同的,但其余6000具有相同的值。 – user1649902