我正在使用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!):
实际数据的前20行左右的副本在这里(数据已经使用Epi包放入lexis模型,因此所有相关的lexis变量都在那里): https://www.dropbox.com/s/yjyz1kzusysz941/rate_table_data.xlsx?dl=0
答案 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
summarise
和mutate
的组合可以很容易地向表中添加更多摘要统计信息。
编辑:
澄清问题后,可以使用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