car :: boxCox 함수를 수제 함수로 래핑하여 데이터 집합의 목록에 적용 할 수 있습니다. 나는 family = "yjPower"를 사용하기 때문에 MASS 패키지가 아닌 car 패키지의 boxCox 함수를 사용하고 있습니다. 내 문제는 이상하게도 이해할 수 없거나 어떤 종류의 버그 일 수도 있습니다. 여기에 재현 예입니다수제 함수로 바꿀 때 car :: boxCox() 함수의 이상한 동작
library(car)
le.mod <- function(val.gold,val.bad){
donn <- data.frame(val.gold,val.bad)
res.lm <- lm(val.gold ~ val.bad, data=donn)
bcres <- boxCox(res.lm, family="yjPower", plotit=F)
lambda <- bcres$x[which.max(bcres$y)]
donn$val.bad.t <- donn$val.bad^lambda
res.lm <- lm(val.gold ~ val.bad.t, data=donn)
list(res.lm=res.lm, lambda = lambda)
}
xx <- runif(1000,1,100)
xxt1 <- xx^0.6 + runif(1000,1,10)
yy <- 2*xx + 10 + rnorm(1000,0,2)
le.mod(yy,xxt1)
이 나에게 오류 메시지를 제공합니다
bcres <- boxCox(res.lm, family="yjPower", plotit=F)
boxCox이 할 수 있다고 가정한다 :
## Error in is.data.frame(data) : object 'donn' not found
가 I의 라인에 문제를 핀 지적을 작품의 클래스 객체를 얻으려면 2 라인 전에 생성 된 관련 데이터를 찾지 못한다.
le.mod() 함수 밖에서도 잘 작동합니다. 아마도 환경 관리와 관련하여 문제가 될 것입니다. boxCox는 글로벌 환경에서는 "donn"을 찾고 있지만 찾을 수는 없으며, 특정 환경에서 그것을 찾지 않는 이유를 무시합니다.
아무도이 문제를 해결하거나 나에게 여기에서 이해할 수없는 것을 설명 할 생각이 있습니까? 나는 며칠 동안이 문제에 대해 머리를 터뜨 렸으며 제대로 작동하지 못했습니다.
감사
문제는'update'로 넘어갑니다 ... 부모 프레임에서 호출을 평가하려고하는데, 이것은'le.mod'보다는'BoxCox' 환경에 있습니다. 왜 내가 * 항상 * 작동하는지 궁금 하네 ... –
@ benBolker가 언급 한 바와 같이 업데이트 기능을 우회하려고 할 때, 'bcres <- boxCox (formula (dat $ val.gold ~ dat $ val.bad), family = "yjPower", plotit = F)'. 이것은 에러를 막지 만, 경고 #In lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...)를 가져온다 : # 추가 인수 'family'is disregarded.'. 그래서 그것은'family = "yjPower"라는 인자를 수식으로 객체로 사용할 수없는 것 같습니다. 저에게 잘 못된 서면 기능처럼 보입니다. – Bastien