在 R 中找到函数的最大值

Find the maximum of the function in R

我有以下功能。

令 F(.) 是具有 shape = 1rate =1gamma 分布的累积分布函数。分母是生存函数S(X) = 1 - F(X)g(x) 是平均剩余寿命函数。

我在r中写了下面的函数

x = 5
denominator = 1 -pgamma(x, 1, 1)
numerator = function(t) (1 - pgamma(t, 1, 1))

intnum  = integrate(numerator , x, Inf)

frac = intnum$value/denominator
frac

如何找到函数 g(x) 对于 X >= 0 所有可能值的最大值?我可以在 r 中执行此操作吗?非常感谢您的帮助。

开始之前,我定义了你做的函数

surviveFunction<-function(x){
  denominator = 1 -pgamma(x, 1, 1)
  numerator = function(t) (1 - pgamma(t, 1, 1))

  # I used sapply to get even vector x
  intnum  = sapply(x,function(x){integrate(numerator , x, Inf)$value})
  
  frac = intnum/denominator
  return(frac)
}

然后让我们的函数适合名为 'curve' 的函数,它将绘制连续数据的绘图。

结果如下图:

df = curve(surviveFunction, from=0, to=45)
plot(df, type='l')

并调整xlim找到最大值

df = curve(surviveFunction, from=0, to=45,xlim = c(30,40))
plot(df, type='l')

现在我们可以猜测全局最大值位于 35

附近

我建议两个选项来找到全局最大值。

首先使用df数据求最大值:

> max(df$y,na.rm = TRUE)
 1.054248 #maximum value

> df$x[which(df$y==(max(df$y,na.rm = TRUE)))]
 35.55 #maximum value of x 

第二次使用 optimize:

> optimize(surviveFunction, interval=c(34, 36), maximum=TRUE)

$maximum
[1] 35.48536

$objective
[1] 1.085282

但是 optimize 函数找到的不是我认为的全局最大值。

如果你看到下面

optimize(surviveFunction, interval=c(0, 36), maximum=TRUE)

$maximum
[1] 11.11381

$objective
[1] 0.9999887

以上结果不是全局最大值我猜是局部最大值。

所以,我建议你使用第一种解决方案。