5

私が持っているのは、Rを使用した人工心臓サポートのある患者のカプランマイヤー分析です。

必要なのは、次のデータをプロットに追加することです(例のように)。

  • 心臓移植(HTX)のために生き残った患者
  • 死亡した患者

言い換えれば、一方が他方(すべての患者)のサブセット(移植された患者)である2つのグループがあります。これらの2つの曲線は、0/0から開始する必要があり、増加します。

私自身のプロットは次のように行われます。

pump <- read.table(file=datafile, header=FALSE,
                   col.names=c('TIME', 'CENSUS', 'DEVICE'))
# convert days to months
pump$TIME <- pump$TIME/(730/24)
mfit.overall <- survfit(Surv(TIME, CENSUS==0) ~ 1, data=pump)
plot(mfit.overall, xlab="months on device", ylab="cum. survival", xaxt="n")
axis(1, at=seq(from=0, to=24, by=6), las=0)

2つの曲線を追加するにはどうすればよいですか?

よろしくヨハン

カプランマイヤー曲線のサンプル:http://i.stack.imgur.com/158e8.jpg

デモデータ:

ポンプに入る生存データ:

TIME    CENSUS  DEVICE
426     1       1
349     1       1
558     1       1
402     1       1
12      0       1
84      0       1
308     1       1
174     1       1
315     1       1
734     1       1
544     1       2
1433    1       2
1422    1       2
262     1       2
318     1       2
288     1       2
1000    1       2

TXデータ:

TIME    CENSUS  DEVICE
426     1        1
288     1        2
308     1        1

死亡者(数:

TIME    CENSUS  DEVICE
12      0        1
84      0        1
4

2 に答える 2

7

を使用par(new=TRUE)すると、最初のプロットと同じ図に2番目のプロットを描くことができます。

通常、プロットをオーバーレイするというフィロソフィックに異なるタスクを実行するlines()ため、プロットに曲線を追加するために使用することをお勧めします。par(new=TRUE)使用を意図していない方法で関数を使用すると、間違いを犯すリスクがあります。たとえばxlim、重要な議論をほとんど忘れてしまいました。ただし、survfitオブジェクトから曲線を抽出するのは簡単ではないので、2つの悪のうちの小さい方であると考えました。

# Fake data for the plots
pump <- data.frame(TIME=rweibull(40, 2, 20),
                   CENSUS=runif(40) < .3,
                   DEVICE=rep(0:1, c(20,20)))
# load package
library("survival")

# Fit models
mfit.overall <-survfit(Surv(TIME, CENSUS==0) ~ 1, data=pump)
mfit.htx <- survfit(Surv(TIME, CENSUS==0) ~ 1, data=pump, subset=DEVICE==1)

# Plot
plot(mfit.overall, col=1, xlim=range(pump$TIME), fun=function(x) 1-x)
# `xlim` makes sure the x-axis is the same in both plots
# `fun` flips the curve to start at 0 and increase
par(new=TRUE)
plot(mfit.htx, col=2, xlim=range(pump$TIME), fun=function(x) 1-x,
    ann=FALSE, axes=FALSE, bty="n") # This hides the annotations of the 2nd plot
legend("topright", c("All", "HTX"), col=1:2, lwd=1)

ここに画像の説明を入力してください

于 2012-11-13T11:10:28.947 に答える
7

必要はありませんplot.new()(これはそのパラダイムの良い例ですが)。これはすべてlines()、クラスのメソッドを介して実現できます"surfit"

plot(mfit.overall, col=1, xlim=range(pump$TIME), fun=function(x) 1-x)
lines(mfit.htx, col=2, fun=function(x) 1-x)
lines(mfit.htx, col=2, fun=function(x) 1-x, lty = "dashed", conf.int = "only")
legend("topleft", c("All", "HTX"), col=1:2, lwd=1, bty = "n")

これにより、@ Backlinのサンプルデータを使用して(ただし、シードが異なるため、データが異なります)

ここに画像の説明を入力してください

への2つの呼び出しの理由はlines()、信頼区間が破線で描画されるように調整するためであり、1回の呼び出しで複数ltyのを渡す方法がわかりませんでしたlines()(これでうまくいきました!)lines()

于 2012-11-13T13:02:18.773 に答える