我一直在准备R中的生存分析和cox回归。但是,我的直线经理是Stata用户,他希望输出的显示方式与Stata显示的方式类似,例如。
# Stata code
. strate
. stsum, by (GROUP)
stsum
会输出每个群体的风险时间和发病率,我无法弄清楚如何用R实现这一目标。
数据看起来大致如此(我无法在安全的环境中找到它):
PERS GROUP INJURY FOLLOWUP
111 1 0 2190
222 2 1 45
333 1 1 560
444 2 0 1200
到目前为止,我一直在使用相当糟糕的标准代码:
library(survival)
library(coin)
# survival analysis
table(data$INJURY, data$GROUP)
survdiff(Surv(FOLLOWUP, INJURY)~GROUP, data=data)
surv_test(Surv(FOLLOWUP, INJURY)~factor(GROUP), data=data)
surv.all <- survfit(Surv(FOLLOWUP, INJURY)~GROUP, data=data)
print(sur.all, print.rmean=TRUE)
# cox regression
cox.all<- coxph(Surv(FOLLOWUP, INJURY)~GROUP, data=data))
summary(cox.all)
答案 0 :(得分:1)
目前我们有4行数据且没有明确的描述(至少对Stata的非用户)所需的输出:
dat <- read.table(text="PERS GROUP INJURY FOLLOWUP
111 1 0 2190
222 2 1 45
333 1 1 560
444 2 0 1200",header=TRUE)
我不知道硬币或生存包中是否存在为这些数据提供粗略事件率的功能。通过普通R函数提供原始事件率(使用技术意义上的“原油”而不是贬低)是微不足道的:
by(dat, dat$GROUP, function(d) sum(d$INJURY)/sum(d$FOLLOWUP) )
#----------------
dat$GROUP: 1
[1] 0.0003636364
------------------------------------------------------
dat$GROUP: 2
[1] 0.0008032129
风险时间的相应功能(或两者都打印到控制台)将是一个非常简单的修改。 “Epi”或“epiR”软件包或用于教授基本流行病学的其他软件包之一可能会为此设计功能。 “生存”和“硬币”作者可能没有必要编写和记录这样一个简单的函数。
当我需要在因子协变量的层次中汇总实际事件与预期事件的比率时,我需要构建一个能够正确创建事件分层表的函数(以支持置信度估计),“预期”的总和(计算在年龄,性别和观察持续时间的基础),并划分实际的A / E比率。我将它们组装成一个列表对象并将比率四舍五入到小数点后两位。当我完成它时,我发现这些最有用的是对我使用的'生存'和'rms'回归方法得到的结果的敏感性检查。它们还有助于向非统计受众解释结果,这些受众更熟悉表格方法而不是回归。我现在把它作为我的Startup .profile
的一部分。