我具有以下功能。
让F(。)是gamma
分布为shape = 1
和rate =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
中做到这一点吗?非常感谢您的帮助。
答案 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')
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
以上结果不是全局最大值,我想它是局部最大值。
所以,我建议您使用第一种解决方案。