Fom*_*ite 6 r data-visualization
我在SAS LIFEREG中有一个加速故障时间模型,我想绘制.因为SAS在绘图时非常糟糕,所以我想实际重新生成R中曲线的数据并将其绘制在那里.SAS推出了一个量表(在指数分布固定为1的情况下),一个截距,以及一个在暴露或未暴露人群中的回归系数.
有两条曲线,一条用于暴露,一条用于未暴露的人口.其中一个模型是指数分布,我已经生成了数据和图形,如下所示:
intercept <- 5.00
effect<- -0.500
data<- data.frame(time=seq(0:180)-1)
data$s_unexposed <- apply(data,1,function(row) exp(-(exp(-intercept))*row[1]))
data$s_exposed <- apply(data,1,function(row) exp(-(exp(-(intercept+effect))*row[1])))
plot(data$time,data$s_unexposed, type="l", ylim=c(0,1) ,xaxt='n',
xlab="Days since Infection", ylab="Percent Surviving", lwd=2)
axis(1, at=c(0, 20, 40, 60, 80, 100, 120, 140, 160, 180))
lines(data$time,data$s_exposed, col="red",lwd=2)
legend("topright", c("ICU Patients", "Non-ICU Patients"), lwd=2, col=c("red","black") )
Run Code Online (Sandbox Code Playgroud)
这给了我这个:

不是最漂亮的图表,但我真的不知道我的方式围绕ggplot2足以修饰它.但更重要的是,我有第二组数据来自Log Normal分布,而不是指数,我为此生成数据的尝试完全失败了 - 将cdf合并到正态分布等等它超越了我的R技能.
任何人都可以指向正确的方向,使用相同的数字,并且比例参数为1?
对数正态模型在时间t的生存函数可以用R表示1 - plnorm(),其中plnorm()是对数正态累积分布函数.为了说明,我们首先将您的绘图放入函数中以方便:
## Function to plot aft data
plot.aft <- function(x, legend = c("ICU Patients", "Non-ICU Patients"),
xlab = "Days since Infection", ylab="Percent Surviving", lwd = 2,
col = c("red", "black"), at = c(0, 20, 40, 60, 80, 100, 120, 140, 160, 180),
...)
{
plot(x[, 1], x[, 2], type = "l", ylim = c(0, 1), xaxt = "n",
xlab = xlab, ylab = ylab, col = col[2], lwd = 2, ...)
axis(1, at = at)
lines(x[, 1], x[, 3], col = col[1], lwd=2)
legend("topright", legend = legend, lwd = lwd, col = col)
}
Run Code Online (Sandbox Code Playgroud)
接下来,我们将指定系数,变量和模型,然后生成指数和对数正态模型的生存概率:
## Specify coefficients, variables, and linear models
beta0 <- 5.00
beta1 <- -0.500
icu <- c(0, 1)
t <- seq(0, 180)
linmod <- beta0 + (beta1 * icu)
names(linmod) <- c("unexposed", "exposed")
## Generate s(t) from exponential AFT model
s0.exp <- dexp(exp(-linmod["unexposed"]) * t)
s1.exp <- dexp(exp(-linmod["exposed"]) * t)
## Generate s(t) from lognormal AFT model
s0.lnorm <- 1 - plnorm(t, meanlog = linmod["unexposed"])
s1.lnorm <- 1 - plnorm(t, meanlog = linmod["exposed"])
Run Code Online (Sandbox Code Playgroud)
最后,我们可以绘制生存概率:
## Plot survival
plot.aft(data.frame(t, s0.exp, s1.exp), main = "Exponential model")
plot.aft(data.frame(t, s0.lnorm, s1.lnorm), main = "Log-normal model")
Run Code Online (Sandbox Code Playgroud)
由此产生的数字:


注意
plnorm(t, meanlog = linmod["exposed"])
Run Code Online (Sandbox Code Playgroud)
是相同的
pnorm((log(t) - linmod["exposed"]) / 1)
Run Code Online (Sandbox Code Playgroud)
这是对数正态生存函数的正则方程中的Φ:S(t)= 1 - Φ((ln(t) - μ)/σ)
我相信你知道,有很多R软件包可以处理带有左,右或区间审查的加速故障时间模型,如生存任务视图中所列,以防你碰巧开发出R的偏好SAS.
| 归档时间: |
|
| 查看次数: |
2898 次 |
| 最近记录: |