如何在R中将间隔截断的开始停止时间转换为计数处理格式的数据?

时间:2018-12-19 08:24:38

标签: r data-manipulation survival-analysis recurring-events survival

我想用在研究的观察期间内进出风险的受试者为复发事件建模。

我有关于受试者无法体验到该事件的无风险时期(开始和结束日期)的数据。

我将对如何将数据转换为这种计数过程格式以及开始停止时间来反映R中事件发生和间隔截断的任何帮助表示感谢。我可以将数据转换为事件发生时的计数过程格式,但是不能知道如何划分我的开始停止时间以反映未观察到的时间段(除了手动创建我非常想避免的数据集之外)。

这是我的宽格式输入数据结构的非常简化的示例:

View Input Data Structure

这是我想要实现的:

id t0 t1 outcome
 1  0 36       0
 2  0  5       1
 2  5  15      1
 2 15  36      0
 3  0   9      0
 3 11  20      1
 3 20  36      0

在我的示例中,主题1从未在36个月被右删失时经历过该事件。受试者2经历两次该事件,并在整个观察期内停留在风险期。主题3经历一次该事件,并在9个月退出风险期,然后在11个月重新进入风险期。

关于我的学习的其他有用信息:

  1. 对象的开始时间通常为0个月。
  2. 如果没有经历任何事件,则在36个月时对对象进行右删失。
  3. 观察对象3年。
  4. 在三年的观察期内,受试者可能会在不同的时间和频率范围内进出风险。

谢谢!

1 个答案:

答案 0 :(得分:0)

我可能会错过一些极端情况,并且可能有一个更优雅的解决方案,但这似乎行得通。

我建议先运行主逻辑的前两行,然后运行前三,四等,并检查每个阶段的输出,以加深对每个步骤在做什么的理解。

<microsoft.identityModel>
<service>
    <audienceUris>
    <add value="https://<ApplicationUrl>/"/>
    </audienceUris>
    <federatedAuthentication>
        <wsFederation requireHttps="false" realm="https://<ApplicationUrl>/" issuer="https://<IdentityServerURL>/wsfed" passiveRedirectEnabled="true"/>
        <cookieHandler requireSsl="false"/>
    </federatedAuthentication>
<issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXX">
    <trustedIssuers>
    <add thumbprint="<thumbprint>" name="https://<IdentityServerURL>/wsfed"/>
        </trustedIssuers>
</issuerNameRegistry>
    </service>
</microsoft.identityModel> 

另外,为了将来参考,最好使用library(tidyr) library(dplyr) subjects <- data.frame( id = 1:3, event = c(0, 1, 1), time_to_event_1 = c(NA, 5, 20), time_to_event_2 = c(NA, 15, NA), time_to_risk_out_start_1 = c(NA, NA, 9), time_to_risk_out_end_1 = c(NA, NA, 11), time_to_risk_out_start_2 = NA, time_to_risk_out_end_2 = NA ) subjects %>% mutate(start = 0, end = 36) %>% select(-event) %>% gather(event, t0, -id) %>% group_by(id) %>% arrange(id, t0) %>% filter(!is.na(t0)) %>% mutate(t1 = lead(t0)) %>% filter(!is.na(t1), !grepl("time_to_risk_out_start", event)) %>% mutate(outcome = lead(grepl("time_to_event", event), default = 0)) %>% select(id, t0, t1, outcome) %>% ungroup() 共享您的数据,以便人们更轻松地进行协助-在这种情况下,重现非常容易:)