【发布时间】:2019-03-28 22:39:23
【问题描述】:
我正在尝试预测特定疾病的存活率。我掌握的唯一信息是诊断后 1 年、3 年、5 年和 10 年的存活率。
例如:
S,即成活率
S<-c(81,78,72,65)
x,诊断后的时间
x<-c(1,3,5,10)
我正在尝试测试一些可以让我估算 20 年后存活率的函数。
我的一个函数被定义为
f(x)= exp(ax^b),a 和 b 未知,但需要为正。我非常友好地使用了 fmarm 提供的代码,但用另一个函数进行了测试。
f(x) = (1 + (x/a)^b)^-1
但是,我得到了非常奇怪的值,都低于 1,我似乎不知道为什么。我错过了什么吗?
S<-c(81,78,72,65)
x<-c(1,3,5,10)
f<-function(ab)
{
a <- ab[1]
b <- ab[2]
return(sum((((1+(x/a)**b)**-1)-S)**2))
}
minim <- nlm(f,p=c(1,1))
ab <- minim$estimate
a_opt <- ab[1]
b_opt <- ab[2]
prediction_exp <- function(x){
return((1+(x/a_opt)**b_opt)**-1)
}
prediction_exp(20)
plot(prediction_exp(1:20), type="l", col="blue", xlab="Nb d'années après diagnostic", ylab="survie nette en %")
lines(x,S,col="black")
P.S:我发现了我的错误。 S 向量需要小于 1,并且函数应该是 x*a 而不是 (x/a)。再次感谢 fmarm 帮助我!
【问题讨论】:
标签: r optimization sum