임의의 pdf 함수 (예 : pnorm, punif, pbinom 등)에 대한 2 차 오차를 최소화하는 매개 변수를 찾기 위해 R에서 함수를 구현하고 있습니다. 설계는 사용자가 densit
함수 (예 : mean
및 sd
의 pnorm
)에서 확률, 경험적 분위, 함수 이름 (densit
) 및 매개 변수 이름 목록 (params
)을 제공하도록 설계되었습니다. 인스턴스의 존재 q1
, q2
및 -1.644854, 0이 q3
및 1.644854 및 p1
, p2
0.05 같 p3
, 0.5, 0.95 들어, 함수 mean
및 sd
는 대략 0과 1은 각각 회수한다.optim()의 표현식 평가 중 오류
optim
에 이러한 표현식을 공급하여 후자는 최적화 중에 표현식을 평가해야하는 함수 (내부적으로 quadraticFun
)를 사용합니다. 그러나 나는 추정을 위해 그러한 표현에 대해 optim
을 만들 수 없습니다.
fun <- function(p1 = 0.05, p2 = 0.50, p3 = 0.95, q1, q2, q3, output = "complete", densit, params) {
densit <- substitute(densit)
params <- sapply(params, as.name)
densiCall1 <- as.call(c(as.list(densit), as.list(q1), params))
densiCall2 <- as.call(c(as.list(densit), as.list(q2), params))
densiCall3 <- as.call(c(as.list(densit), as.list(q3), params))
quadratEq <- substitute((densiCall1 - p1)^2 +
(densiCall2 - p2)^2 +
(densiCall3 - p3)^2)
quadraticFun <- function(params) {
eval(quadratEq)
}
initVals <- rep(1, times = length(params))
res <- optim(initVals, quadraticFun) # ERROR SOMEWHERE AROUND HERE...
# if output is set to "complete", return the whole res object, otherwise, return just the parameters
if (output == "parameters") {
return(res$par)
}
return(res)
}
디버깅 오류가 구체적으로 다음과 같은 메시지 quadraticFun
의 평가시, 전화 optim(initVals, quadraticFun)
중에 나타나 있음을 나타냅니다 :
> findParams(q1 = -1.644854, q2 = 0, q3 = 1.644854, densit = pnorm, params = list("mean", "sd"))
Error in pnorm(-1.644854, mean, sd) :
Non-numeric argument to mathematical function
그것은 표현 보인다 기능이 있습니다 결과는 인터프리터에 의해 문자 그대로 취해집니다. 즉, mean
및 as
은 최적화 할 함수의 인수 대신 평가할 기호로 사용됩니다.
이 문제를 해결하는 데 도움이되는 힌트를 미리 보내 주셔서 감사합니다.
감사 전화와 벡터화 작업의 구현의 개선을 구성하는 더 좋은 방법을 지적. 당신의 대답이 그 문제를 해결했고 통찰력이있었습니다. – gaballench