我正在尝试预测特定疾病的存活率。我仅有的信息是诊断后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")
PS:我发现了我的错误。S向量必须小于1,并且该函数假定为x * a,而不是(x / a)。再次感谢fmarm帮助我!
在您的情况下,S和x是固定的,您想找到最小化sum(i = 1到4)exp(a * x [i] ** b)-S [i])** 2的a和b
您可以创建一个函数
f <- function(ab){
a <- ab[1]
b <- ab[2]
return(sum((exp(a*x**b)-S)**2))
}
ab是长度为2的向量,其中第一位为a,第二位为b
要最小化此功能,您可以使用 nlm
minim <- nlm(f,p=c(0,0))
您必须提供p:ab的起始参数。因为我不知道什么会是好的,所以我只输入了a = 0和b = 0
ab <- minim$estimate
然后可以从a提取a和b
a_opt <- ab[1]
b_opt <- ab[2]
您可以创建预测功能
prediction_exp <- function(x){
return(exp(a_opt*x**b_opt))
}
prediction_exp(20)
20年后预测的存活率约为63%
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句