0

这是我第一次在这里发帖。我正在尝试绘制部分 cuminc 输出,而不是全部。如果我全部绘制,我可以简单地做:

>plot(PTAR.CIage4)

这给了我太多的台词。我只想要“S”组(5 行),而不是所有组。PTAR.CIage4由以下人员创建:

>PTAR.CIage4<-cuminc(ftime=PTARdata$Time,fstatus=PTARdata$event,group=PTARdata$AgeG3,
    cencode="N",subset=(PTARdata$AgeG2!=0 & PTARdata$Time<34))

在 PTAR.CIage4 中,数据如下所示:

> str(PTAR.CIage4)
>List of 16
> $ 1 D  :List of 3
>  ..$ time: num [1:636] 0 0.19 0.19 0.52 0.52 0.85 0.85 1.21 1.21 1.28 ...
>  ..$ est : num [1:636] 0.00 0.00 4.13e-05 4.13e-05 8.25e-05 ...
>  ..$ var : num [1:636] 0.00 0.00 1.70e-09 1.70e-09 3.41e-09 ...
> $ 2 D  :List of 3
>  ..$ time: num [1:198] 0 0.49 0.49 0.91 0.91 1.14 1.14 1.77 1.77 3.25 ...
>  ..$ est : num [1:198] 0 0 0.000233 0.000233 0.000466 ...
>  ..$ var : num [1:198] 0.00 0.00 5.44e-08 5.44e-08 1.09e-07 ...
> $ 3 D  :List of 3
>  ..$ time: num [1:164] 0 0.55 0.55 2.16 2.16 2.36 2.36 2.62 2.62 2.72 ...
>  ..$ est : num [1:164] 0 0 0.000631 0.000631 0.000946 ...
>  ..$ var : num [1:164] 0.00 0.00 1.99e-07 1.99e-07 2.98e-07 ...
> $ 4 D  :List of 3
>  ..$ time: num [1:208] 0 0.32 0.32 1.37 1.37 2.03 2.03 2.85 2.85 3.67 ...
>  ..$ est : num [1:208] 0 0 0.000371 0.000371 0.000742 ...
>  ..$ var : num [1:208] 0.00 0.00 1.38e-07 1.38e-07 2.75e-07 ...
> $ 5 D  :List of 3
>  ..$ time: num [1:238] 0 1.14 1.14 1.34 1.34 1.9 1.9 2.06 2.06 2.26 ...
>  ..$ est : num [1:238] 0 0 0.00186 0.00186 0.00371 ...
>  ..$ var : num [1:238] 0.00 0.00 3.44e-06 3.44e-06 6.87e-06 ...
> $ 1 I  :List of 3
>  ..$ time: num [1:464] 0 0.98 0.98 2 2 3.35 3.35 3.64 3.64 3.74 ...
>  ..$ est : num [1:464] 0.00 0.00 4.13e-05 4.13e-05 8.25e-05 ...
>  ..$ var : num [1:464] 0.00 0.00 1.70e-09 1.70e-09 3.41e-09 ...
> $ 2 I  :List of 3
>  ..$ time: num [1:56] 0 3.87 3.87 4.53 4.53 ...
>  ..$ est : num [1:56] 0 0 0.000233 0.000233 0.000466 ...
>  ..$ var : num [1:56] 0.00 0.00 5.44e-08 5.44e-08 1.09e-07 ...
> $ 3 I  :List of 3
>  ..$ time: num [1:48] 0 2.26 2.26 5.12 5.12 ...
>  ..$ est : num [1:48] 0 0 0.000315 0.000315 0.000631 ...
>  ..$ var : num [1:48] 0.00 0.00 9.95e-08 9.95e-08 1.99e-07 ...
> $ 4 I  :List of 3
>  ..$ time: num [1:44] 0 2.66 2.66 4.69 4.69 9.75 9.75 9.92 9.92 9.98 ...
>  ..$ est : num [1:44] 0 0 0.000371 0.000371 0.000742 ...
>  ..$ var : num [1:44] 0.00 0.00 1.38e-07 1.38e-07 2.75e-07 ...
> $ 5 I  :List of 3
>  ..$ time: num [1:40] 0 1.14 1.14 7.03 7.03 7.19 7.19 7.78 7.78 10.8 ...
>  ..$ est : num [1:40] 0 0 0.00186 0.00186 0.00371 ...
>  ..$ var : num [1:40] 0.00 0.00 3.44e-06 3.44e-06 6.87e-06 ...
> $ 1 S  :List of 3
>  ..$ time: num [1:1358] 0 3.25 3.25 5.74 5.74 5.78 5.78 6.04 6.04 6.34 ...
>  ..$ est : num [1:1358] 0.00 0.00 4.13e-05 4.13e-05 8.25e-05 ...
>  ..$ var : num [1:1358] 0.00 0.00 1.70e-09 1.70e-09 3.41e-09 ...
> $ 2 S  :List of 3
>  ..$ time: num [1:1082] 0 9.95 9.95 10.57 10.57 ...
>  ..$ est : num [1:1082] 0 0 0.000233 0.000233 0.000466 ...
>  ..$ var : num [1:1082] 0.00 0.00 5.44e-08 5.44e-08 1.09e-07 ...
> $ 3 S  :List of 3
>  ..$ time: num [1:948] 0 6.01 6.01 8.96 8.96 ...
>  ..$ est : num [1:948] 0 0 0.000315 0.000315 0.000631 ...
>  ..$ var : num [1:948] 0.00 0.00 9.95e-08 9.95e-08 1.99e-07 ...
> $ 4 S  :List of 3
>  ..$ time: num [1:908] 0 7.78 7.78 9.72 9.72 ...
>  ..$ est : num [1:908] 0 0 0.000371 0.000371 0.000742 ...
>  ..$ var : num [1:908] 0.00 0.00 1.38e-07 1.38e-07 2.75e-07 ...
> $ 5 S  :List of 3
>  ..$ time: num [1:472] 0 5.88 5.88 9.29 9.29 ...
>  ..$ est : num [1:472] 0 0 0.00186 0.00186 0.00371 ...
>  ..$ var : num [1:472] 0.00 0.00 3.44e-06 3.44e-06 6.87e-06 ...
> $ Tests: num [1:3, 1:3] 1.12e+03 4.90e+01 7.48e+02 0.00 5.84e-10 ...
>  ..- attr(*, "dimnames")=List of 2
>  .. ..$ : chr [1:3] "D" "I" "S"
>  .. ..$ : chr [1:3] "stat" "pv" "df"
> - attr(*, "class")= chr "cuminc"

我不知道如何将 $ 1 S 到 $ 5 S 称为情节。谁能帮我?

4

3 回答 3

1

也许这个功能会有所帮助:

cs.cuminc <- function(x,cause="1"){
  if (!is.null(x$Tests)) 
    x <- x[names(x) != "Tests"]
  which.out <- which(unlist(strsplit(names(x), " "))[seq(2,length(names(x))*2,2)]!=cause)
  x[which.out] <- NULL
  class(x) <- "cuminc"
  return(x)
}

它可用于仅绘制 1 种故障类型的曲线,因为它从cuminc您放入的 -object 中删除了其他故障原因的结果。

这是从 cuminc-helpfile 调整的示例:

# Simulate some data
set.seed(2)
ss <- rexp(100)
gg <- factor(sample(1:3,100,replace=TRUE),1:3,c('a','b','c'))
cc <- sample(0:2,100,replace=TRUE)
strt <- sample(1:2,100,replace=TRUE)

# Make cuminc object and plot all curves
xx <- cuminc(ss,cc,gg,strt)
plot(xx,lty=1,color=1:6)

# Now use function to only plot the lines for cause="2"
x.2 <- cs.cuminc(xx, cause="2")
plot(x.2,lty=1,color=4:6)

该函数默认为 cause="1"(必须作为字符串输入)。在 OP 的例子中,它看起来像:

PTAR.CIage4.S <- cs.cuminc(PTAR.CIage4, cause="S")
plot(PTAR.CIage4.S)
于 2013-12-24T11:11:35.340 回答
0

一种可能性可能是PTAR.CIage4通过其元素的名称对您的列表进行子集化。一个小例子:

# create a list    
PTAR.CIage4 <- list("1 A" = 1, "2 A" = 2, "1 S" = 3, "2 S" = 4)
names(PTAR.CIage4)

# create a vector of names of the list elements that you wish to select
myelements <- paste(1:2, "S", sep = " ")

# select elements from the list
PTAR.CIage4_sub <- PTAR.CIage4[myelements]

然后可以将新列表用于您的绘图。

或者为什么不cuminc从一开始就在相关数据子集上运行?

按照@Shan Cheung 的评论进行编辑:

cuminc使用以下数据在数据子集上运行?cuminc

# generate data
set.seed(2)
ft <- rexp(100)
fs <- sample(x = 0:2, size = 100, replace = TRUE)
grp <- factor(sample(x = 1:3, size = 100, replace = TRUE), labels = c("a", "b", "c"))
strt <- sample(x = 1:2, size = 100, replace = TRUE)

# run cuminc on all groups
library(cmprsk)
xx <- cuminc(ftime = ft, fstatus = fs, group = grp, strata = strt)
str(xx)
plot(xx, lty = 1, col = 1:6)

# run cuminc on a subset of groups
xx2 <- cuminc(ftime = ft, fstatus = fs, group = grp, strata = strt, subset = grp == "a")
str(xx2)
plot(xx2, lty = 1, col = 1:2)

因此,在您的cuminc通话中,您应该尝试subset = whateveryoucalledthegroupvariable == "S". 下次请提供示例数据,无论是真实的还是模拟的,以及您使用了哪些包。

# my first suggestion, list subsetting, gives the same result
# run cuminc on all groups and subset the resulting list by names of its elements
xx3 <- xx[paste("a", 1:2, sep = " ")]
all.equal(xx2, xx3)  
于 2013-08-04T17:49:45.573 回答
0

只是一个猜测,但是如果您想绘制名称以 (在伪正则表达式中) "[0-9]S" 开头的每个列表元素中$est的数据与数据,那么一种方法是$time

#create an empty plot frame
plot(c(min_time,max_time),c(min_est,max_est),t='n')

for(j in 1:(length(PTAR.CIage4)-1) ) {
    if(grepl("S", names(PTARcCIage4)[j]) ) {
         lines(PTARcCIage4[[j]]$time, PTARcCIage4[[j]]$est,...) #or `points` if desired
         }
    }
于 2013-08-04T20:09:46.947 回答