我试图在数值上整合广义极值分布的密度平方。到目前为止,我已经尝试过这个(部分基于evd包的dgev函数):
到目前为止,我有这个
f <- function(x){
z <- (x - loc)/sc
if (sh == 0) {t <- log(1/sc) - z - exp(-z); return(exp(t)^2)}
else if (sh*z < 0) {return(0)}
else {t <- (1 + sh*z); return(exp(log(1/sc) - t^(-1/sh) - (1/sh + 1)*log(t))^2)}
}
loc <- 10; sc <- 2; sh <- 0
integrate(f, -Inf, Inf, rel.tol = 1e-6)$value # no error message
loc <- 10; sc <- 2; sh <- 0.1
integrate(f, -Inf, Inf, rel.tol = 1e-6)$value # error message
如代码所示,如果sh不为0,我会收到一条错误消息,说
Fehler in integrate(f, -Inf, Inf, rel.tol = 1e-06) :
evaluation of function gave a result of wrong length
Zusätzlich: Warnmeldung:
In if (sh * z < 0) { :
Bedingung hat Länge > 1 und nur das erste Element wird benutzt
Fehler in integrate(f, -Inf, Inf, rel.tol = 1e-06) :
evaluation of function gave a result of wrong length
为什么会这样?
我也试过在集成中使用evd包中的dgev函数,这很好用,但我想了解我在代码中做错了什么。
感谢您的提前帮助