R 求积分函数的根

R 求积分函数的根,r,functional-programming,numerical-integration,R,Functional Programming,Numerical Integration,我正在R中编写一个函数,以找到函数的根k 其中φ(x)是标准正态分布的概率密度 这就是我所做的 fn = function(l1,l2,kappa){ intf = function(x){ 2*((l1*x+l2)^kappa)*dnorm(x) } return(intf) } g = function(l1,l2){ function(kappa){ integrate(fn(l1,l2,kappa),0,Inf)-1 } } m = functi

我正在R中编写一个函数,以找到函数的根k

其中φ(x)是标准正态分布的概率密度

这就是我所做的

fn = function(l1,l2,kappa){
  intf = function(x){
    2*((l1*x+l2)^kappa)*dnorm(x)
  }
  return(intf)
}

g = function(l1,l2){
  function(kappa){
    integrate(fn(l1,l2,kappa),0,Inf)-1
  }
}

m = function(l1,l2){
  kk = g(l1,l2) 
  inter = c(1,5)
  res = uniroot(kk,c(1,5))
  return(res$root)
}
但我收到一条错误信息说

> m(0.08,0.09)
rror in integrate(fn(l1, l2, kappa), 0, Inf) - 1 : 
  non-numeric argument to binary operator 
如果我将函数
g
更改为

g = function(l1,l2){
  function(kappa){
    integrate(fn(l1,l2,kappa),0,Inf)
  }
}
错误消息是

> m(0.08,0.09)
 Error in pmin(x, .Machine$double.xmax) : 
  (list) object cannot be coerced to type 'double' 
In addition:     Warning messages:
1: In if (is.na(f.lower)) stop("f.lower = f(lower) is NA") :
  the condition has length > 1 and only the first element will be used
2: In if (is.na(f.upper)) stop("f.upper = f(upper) is NA") :
  the condition has length > 1 and only the first element will be u

请帮我修一下。谢谢

integrate函数返回一个列表。您需要将
$value
添加到集成调用结果中。你还需要弄清楚如何处理卡帕。@42-非常感谢!你救了我的命!它正在工作!似乎一个简单的解决方案是
l1
=0、
l2
=2和
kappa
=1。@42-是的,但我正在编写一个函数来查找GARCH模型的尾部索引,所以我需要为特定的
l1
l2
找到确切的
kappa
。我很高兴它在您手中起作用。我找不到解决办法。