从Lexis模型生成粗略的发生率表(按因子变量分层)

时间:2017-10-23 08:30:46

标签: r survival-analysis rate

我正在使用R中的'Epi'软件包来模拟研究中的后续数据。 我在宣布Lexis模型或运行泊松(以及与生存方案相结合)Cox回归方面没有任何问题。

作为初始数据审查的一部分,我想找到一种简单的方法,根据R中的词汇模型中的数据(预先拟合任何泊松/考克斯模型)制作粗略未调整的发生率/事件率表。

我找到了一种编码方法,它允许我这样做,并通过变量进行分层,作为探索性数据分析的一部分:

    #Generic Syntax Example
total <-cbind(tapply(lexis_model$lex.Xst,lexis_model$stratifying_var,sum),tapply(lexis_model$lex.dur,lexis_model$stratifying_var,sum))
    #Add up the number of events within the stratifying variable
    #Add up the amount of follow-up time within the stratifying the variable
    rates <- tapply(lexis_model$lex.Xst,lexis_model$stratifying_var,sum)/tapply(lexis_model$lex.dur,lexis_model$stratifying_var,sum)*10^3
    #Given rates per 1,000 person years
    ratetable <- (cbind(totals,rates))

#Specific Example based on the dataset
totals <-cbind(tapply(lexis_model$lex.Xst,lexis_model$grade,sum),tapply(lexis_model$lex.dur,lexis_model$grade,sum))
rates <- tapply(lexis_model$lex.Xst,lexis_model$grade,sum)/tapply(lexis_model$lex.dur,lexis_model$grade,sum)*10^3
ratetable <- (cbind(totals,rates))
ratetable

                 rates
1 90 20338.234 4.4251630
2 64  7265.065 8.8092811
#Shows number of events, years follow-up, number of events per 1000 years follow-up, stratified by the stratifying variable

请注意,这是粗略的未调整/绝对率 - 而不是泊松模型的输出。虽然我很欣赏上面的代码确实产生了所需的输出(并且非常简单),但我想知道人们是否知道一个可以获取lexis数据集并输出它的命令。我已经看过Epi和epitools包中的可用命令 - 可能已经错过了某些东西,但是看不到明显的方法来做这件事。

由于这是一件非常普遍的事情,我想知道是否有人知道一个包/函数可以通过简单地指定lexis数据集和分层变量(或者实际上是上述步骤的单个函数)来实现这一点在一个单一的去)。

理想情况下,输出看起来像下面的内容(取自STATA,我试图摆脱R而不是R!):enter image description here

实际数据的前20行左右的副本在这里(数据已经使用Epi包放入lexis模型,因此所有相关的lexis变量都在那里): https://www.dropbox.com/s/yjyz1kzusysz941/rate_table_data.xlsx?dl=0

1 个答案:

答案 0 :(得分:2)

我会这样做只需使用tidyverse R包:

library(tidyverse)
lexis_model %>%
  group_by(grade) %>%
  summarise(sum_Xst = sum(lex.Xst), sum_dur = sum(lex.dur)) %>%
  mutate(rate = sum_Xst/sum_dur*10^3) -> rateable
rateable

#  A tibble: 2 x 4
#   grade sum_Xst   sum_dur     rate
#   <dbl>   <int>     <dbl>    <dbl>
# 1     1       2 375.24709 5.329821
# 2     2       0  92.44079 0.000000

你可以自己将它包装成一个函数:

rateFunc <- function(data, strat_var)
{
  lexis_model %>%
    group_by_(strat_var) %>%
    summarise(sum_Xst = sum(lex.Xst), sum_dur = sum(lex.dur)) %>%
    mutate(rate = sum_Xst/sum_dur*10^3)
}

然后你会打电话:

rateFunc(lexis_model, "grade")

这很有用,因为使用tidyverse summarisemutate的组合可以很容易地向表中添加更多摘要统计信息。

编辑: 澄清问题后,可以使用popEpi命令使用rate包完成此操作:

popEpi::rate(lexis_model, obs = lex.Xst, pyrs = lex.dur, print = grade)

# Crude rates and 95% confidence intervals:
#    grade lex.Xst  lex.dur       rate     SE.rate     rate.lo   rate.hi
# 1:     1       2 375.2472 0.00532982 0.003768752 0.001332942 0.0213115
# 2:     2       0  92.4408 0.00000000 0.000000000 0.000000000       NaN