使用integ()和函数与if循环

时间:2014-12-02 17:29:06

标签: r

我试图在数值上整合广义极值分布的密度平方。到目前为止,我已经尝试过这个(部分基于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函数,这很好用,但我想了解我在代码中做错了什么。

感谢您的提前帮助

0 个答案:

没有答案