在R中找到函数的最大值

时间:2019-06-17 22:54:54

标签: r function survival-analysis maximize

我具有以下功能。

enter image description here

让F(。)是gamma分布为shape = 1rate =1的累积分布函数。分母是生存函数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中做到这一点吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在开始之前,我定义了您创建的功能

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)
}

然后让我们的函数适合称为“曲线”的函数,它将使用连续数据绘制图 结果显示如下

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

enter image description here 并调整xlim以找到最大值

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

enter image description here

现在我们可以猜测全局最大值位于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

以上结果不是全局最大值,我想它是局部最大值。

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