cannin / snp_plotter

snp.plotter is an R package that creates publishable-quality plots of p-values using single SNP and/or haplotype data.
https://cran.r-project.org/web/packages/snp.plotter/index.html
Other
18 stars 16 forks source link

tmerge #3

Open IKRAMTUN opened 9 months ago

IKRAMTUN commented 9 months ago

I have a problem merging two data with repetitive measurements. The merging did not include the second measurment.

library(survival) data1<- data.frame( subject = c(1, 2, 3), time1 = c(3, 2, 2), time2= c(4, 8, 6), status = c(1, 0, 1), First_measu=c(54, 66, 18))

data2<- data.frame( subject = c(1, 2, 3), Second_measu=c(66, 73, 82))

Merge the data to do the coxph

merged_data<-tmerge(data1, data2, id=subject, tstart=time1, tstop=time2) print(merged_data)

kmezhoud commented 9 months ago

Hi, For better help could you give us an example as in tmerge example.

 The pbc data set contains baseline data and follow-up status
# for a set of subjects with primary biliary cirrhosis, while the
# pbcseq data set contains repeated laboratory values for those
# subjects.  
# The first data set contains data on 312 subjects in a clinical trial plus
# 106 that agreed to be followed off protocol, the second data set has data
# only on the trial subjects.
temp <- subset(pbc, id <= 312, select=c(id:sex, stage)) # baseline data
pbc2 <- tmerge(temp, temp, id=id, endpt = event(time, status))
pbc2 <- tmerge(pbc2, pbcseq, id=id, ascites = tdc(day, ascites),
               bili = tdc(day, bili), albumin = tdc(day, albumin),
               protime = tdc(day, protime), alk.phos = tdc(day, alk.phos))

fit <- coxph(Surv(tstart, tstop, endpt==2) ~ protime + log(bili), data=pbc2)

or excluding tmerge functionalities, if you want to merge the two df you can use dplyr package:

data1<- data.frame(
    id = c(1, 2, 3),
    tstart = c(3, 2, 2),
    tstop= c(4, 8, 6),
    status = c(1, 0, 1),
    measu1=c(54, 66, 18))

data2<- data.frame(
    id = c(1, 2, 3),
    measu2=c(66, 73, 82))

data1 |>
    dplyr::left_join(data2, by= "id")
  id tstart tstop status measu1 measu2
1  1      3     4      1     54     66
2  2      2     8      0     66     73
3  3      2     6      1     18     82
IKRAMTUN commented 9 months ago

Many thanks for the answer, however, it is necessary to use the tmerge to do the Cox proportional hazard ratio regression repeating measurement. Accordingly, should I put two intervals of time in each data? and if yes how can I merge it? and associated with each measurement? I was thinking about formatting my data as follows;

id tstart tstop measurment status 1 1 0 3 54 1 2 1 3 4 66 1 3 2 0 2 66 0 4 2 2 8 73 0

BUT, can't figure out how to do it with tmerge again!! IS

kmezhoud commented 9 months ago

I think you need to create an event before to merge datasets. Make a sens to your event

data1<- data.frame(
    id = c(1, 2, 3),
    tstart = c(3, 2, 2),
    tstop= c(4, 8, 6),
    status = c(1, 0, 1),
    measu1=c(54, 66, 18))

data2<- data.frame(
    id = c(1, 2, 3),
    tstart = c(3, 2, 2),
    measu2=c(66, 73, 82))

data2 <- tmerge(data2, data2, id=id, endpt = event(tstart, measu2))

tmerge(data2, data1, id=id, tstop= tdc(endpt, tstop))

Error in tmerge(data2, data1, id = id, tstop = tdc(endpt, tstop)) : tstart and tstop arguments only apply to the first call

IKRAMTUN commented 9 months ago

In the tmerge function, the tstart and tstop variables can be present in the first dataset only.