在 R 中找到函数的最大值
Find the maximum of the function in R
我有以下功能。
令 F(.) 是具有 shape = 1
和 rate =1
的 gamma
分布的累积分布函数。分母是生存函数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
以上结果不是全局最大值我猜是局部最大值。
所以,我建议你使用第一种解决方案。
我有以下功能。
令 F(.) 是具有 shape = 1
和 rate =1
的 gamma
分布的累积分布函数。分母是生存函数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
以上结果不是全局最大值我猜是局部最大值。
所以,我建议你使用第一种解决方案。