R - survdiff()输出字段

时间:2016-02-20 14:18:35

标签: r survival-analysis

问题是关于“生存”库中的survdiff()函数的输出结构。也就是说,我有一个包含生存数据的数据框

> dat
         ID      Time Treatment Gender Censored
    1  E002 2.7597536       IND      F        0
    2  E003 4.2710472   Control      M        0
    3  E005 1.4784394       IND      F        0
    4  E006 6.8993840   Control      F        1
    5  E008 9.5934292       IND      M        0
    6  E009 2.9897331   Control      F        0
    7  E014 1.3470226       IND      F        1
    8  E016 2.1683778   Control      F        1
    9  E018 2.7597536       IND      F        1
    10 E022 1.3798768       IND      F        0
    11 E023 0.7227926       IND      M        1
    12 E024 5.5195072       IND      F        0
    13 E025 2.4640657   Control      F        0
    14 E028 7.4579055   Control      M        1
    15 E029 5.5195072   Control      F        1
    16 E030 2.7926078       IND      M        0
    17 E031 4.9938398   Control      F        0
    18 E032 2.7268994       IND      M        0
    19 E033 0.1642710       IND      M        1
    20 E034 4.1396304   Control      F        0

和模型

> diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
> diff
Call:
survdiff(formula = Surv(Time, Censored) ~ Treatment + Gender, 
    data = dat)

                            N Observed Expected (O-E)^2/E (O-E)^2/V
Treatment=Control, Gender=M 2        1     1.65  0.255876  0.360905
Treatment=Control, Gender=F 7        3     2.72  0.027970  0.046119
Treatment=IND, Gender=M     5        2     2.03  0.000365  0.000519
Treatment=IND, Gender=F     6        2     1.60  0.100494  0.139041

 Chisq= 0.5  on 3 degrees of freedom, p= 0.924 

我想知道包含右列(O-E)^ 2 / V值的输出对象的字段是什么?我想进一步使用它们但不能从diff $ obs,diff $ exp,diff $ var或它们的组合中获得它们。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

你可以用一种简单的方式找到它。当你运行" diff"时,实际上你会调用print.survdiff(diff)。您可以下载生存包here的包源,然后打开存档文件,在R文件夹中,您将找到包含此功能的文件print.survdiff.S(您可以使用Notepad ++ / Sublime /打开它)任何可以读取R语法的东西)。

据我所见,最后一栏来自

((otmp-etmp)^2)/ diag(x$var)

使用

从对象中获取otmpetmp
if (is.matrix(x$obs)){
    otmp <- apply(x$obs,1,sum)
    etmp <- apply(x$exp,1,sum)
    }
else {
    otmp <- x$obs
    etmp <- x$exp
    }

因此,您可以通过使用diff而不是x运行此代码来获得相同的内容(尽管我建议您不要调用您的对象diff,因为这是R中的基本函数)。