R:使用对数秩检验 (survdiff)
R: Using Log Rank Test (survdiff)
好的,所以我有一个如下所示的数据框:
head(exprs, 21)
sample expr ID X_OS
1 BIX high TCGA_DM_A28E_01 26
2 BIX high TCGA_AY_6197_01 88
3 BIX high TCGA_HB_KH8H_01 553
4 BIX low TCGA_K4_6303_01 256
5 BIX low TCGA_F4_6703_01 491
6 BIX low TCGA_Y7_PIK2_01 177
7 BIX low TCGA_A6_5657_01 732
8 HEF high TCGA_DM_A28E_01 26
9 HEF high TCGA_AY_6197_01 88
10 HEF high TCGA_F4_6703_01 491
11 HEF high TCGA_HB_KH8H_01 553
12 HEF low TCGA_K4_6303_01 256
13 HEF low TCGA_Y7_PIK2_01 177
14 HEF low TCGA_A6_5657_01 732
15 TUR high TCGA_DM_A28E_01 26
16 TUR high TCGA_F4_6703_01 491
17 TUR high TCGA_Y7_PIK2_01 177
18 TUR low TCGA_K4_6303_01 256
19 TUR low TCGA_AY_6197_01 88
20 TUR low TCGA_HB_KH8H_01 553
21 TUR low TCGA_A6_5657_01 732
简单地说,对于每个sample
,有7个患者,每个患者都有生存时间(X_OS
)和表达水平high
或low
(expr
).在下面的代码中,我希望通过 survdiff
函数获取第一个样本并 运行 它,输出为 dfx
。但是,我是生存分析的新手,我不确定如何使用 survdiff
函数的参数。我想比较每个 sample
的 high
和 low
表达式组。如何编辑函数 expfun
以产生我需要的 survdiff
输出?此外,理想情况下,我很乐意从中获取 pvalues,但我可以在稍后的步骤中进行处理。谢谢!
expfun = function(x) {
survdiff(Surv(x$X_OS, x$expr))
}
dfx <- pblapply(split(exprs[c("expr", "X_OS")], exprs$sample), expfun)
试试这个。我添加了一个正确的 Surv() 调用,因为你只有时间而没有状态参数,我把它变成了一个公式(波浪线的另一边有预测器)因为 Surv
函数期望状态作为它的第二个参数并且survdiff
需要一个公式作为它的第一个参数。这意味着您需要使用常规的 R 回归调用约定,其中列名用作公式标记,数据帧提供给数据参数。如果你有一个审查变量,它会作为第二个 Surv 参数而不是我现在在那里的 1
。
expfun = function(x) {
survdiff( Surv( X_OS, rep(1,nrow(x)) ) ~ expr, data=x)
}
dfx <- lapply(split(exprs[c("expr", "X_OS")], exprs$sample), expfun)
这是 print.survdiff 的结果:
> dfx
$BIX
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 3 3 2.05 0.446 0.708
expr=low 4 4 4.95 0.184 0.708
Chisq= 0.7 on 1 degrees of freedom, p= 0.4
$HEF
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 4 4 3.14 0.237 0.51
expr=low 3 3 3.86 0.192 0.51
Chisq= 0.5 on 1 degrees of freedom, p= 0.475
$TUR
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 3 3 1.75 0.902 1.41
expr=low 4 4 5.25 0.300 1.41
Chisq= 1.4 on 1 degrees of freedom, p= 0.235
请注意,您可以看到生成打印输出的代码:
getAnywhere(print.survdiff)
好的,所以我有一个如下所示的数据框:
head(exprs, 21)
sample expr ID X_OS
1 BIX high TCGA_DM_A28E_01 26
2 BIX high TCGA_AY_6197_01 88
3 BIX high TCGA_HB_KH8H_01 553
4 BIX low TCGA_K4_6303_01 256
5 BIX low TCGA_F4_6703_01 491
6 BIX low TCGA_Y7_PIK2_01 177
7 BIX low TCGA_A6_5657_01 732
8 HEF high TCGA_DM_A28E_01 26
9 HEF high TCGA_AY_6197_01 88
10 HEF high TCGA_F4_6703_01 491
11 HEF high TCGA_HB_KH8H_01 553
12 HEF low TCGA_K4_6303_01 256
13 HEF low TCGA_Y7_PIK2_01 177
14 HEF low TCGA_A6_5657_01 732
15 TUR high TCGA_DM_A28E_01 26
16 TUR high TCGA_F4_6703_01 491
17 TUR high TCGA_Y7_PIK2_01 177
18 TUR low TCGA_K4_6303_01 256
19 TUR low TCGA_AY_6197_01 88
20 TUR low TCGA_HB_KH8H_01 553
21 TUR low TCGA_A6_5657_01 732
简单地说,对于每个sample
,有7个患者,每个患者都有生存时间(X_OS
)和表达水平high
或low
(expr
).在下面的代码中,我希望通过 survdiff
函数获取第一个样本并 运行 它,输出为 dfx
。但是,我是生存分析的新手,我不确定如何使用 survdiff
函数的参数。我想比较每个 sample
的 high
和 low
表达式组。如何编辑函数 expfun
以产生我需要的 survdiff
输出?此外,理想情况下,我很乐意从中获取 pvalues,但我可以在稍后的步骤中进行处理。谢谢!
expfun = function(x) {
survdiff(Surv(x$X_OS, x$expr))
}
dfx <- pblapply(split(exprs[c("expr", "X_OS")], exprs$sample), expfun)
试试这个。我添加了一个正确的 Surv() 调用,因为你只有时间而没有状态参数,我把它变成了一个公式(波浪线的另一边有预测器)因为 Surv
函数期望状态作为它的第二个参数并且survdiff
需要一个公式作为它的第一个参数。这意味着您需要使用常规的 R 回归调用约定,其中列名用作公式标记,数据帧提供给数据参数。如果你有一个审查变量,它会作为第二个 Surv 参数而不是我现在在那里的 1
。
expfun = function(x) {
survdiff( Surv( X_OS, rep(1,nrow(x)) ) ~ expr, data=x)
}
dfx <- lapply(split(exprs[c("expr", "X_OS")], exprs$sample), expfun)
这是 print.survdiff 的结果:
> dfx
$BIX
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 3 3 2.05 0.446 0.708
expr=low 4 4 4.95 0.184 0.708
Chisq= 0.7 on 1 degrees of freedom, p= 0.4
$HEF
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 4 4 3.14 0.237 0.51
expr=low 3 3 3.86 0.192 0.51
Chisq= 0.5 on 1 degrees of freedom, p= 0.475
$TUR
Call:
survdiff(formula = Surv(X_OS, rep(1, nrow(x))) ~ expr, data = x)
N Observed Expected (O-E)^2/E (O-E)^2/V
expr=high 3 3 1.75 0.902 1.41
expr=low 4 4 5.25 0.300 1.41
Chisq= 1.4 on 1 degrees of freedom, p= 0.235
请注意,您可以看到生成打印输出的代码:
getAnywhere(print.survdiff)