如何获得 survdiff 返回的 p 值
How to get survdiff returned p value
我正在使用 R 生存包,survdiff 函数。我想知道如何从 return 值中获取 p 值。
> 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
我想使用一些函数获得 p 值 0.924。谢谢
p 值未存储在 survdiff class 中,因此必须在输出时即时计算。要重现 p 值,可以使用 chisq 分布函数:"pchisq"
diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
pchisq(diff$chisq, length(diff$n)-1, lower.tail = FALSE)
函数 print.survdiff
中显示该值的代码是:
cat("\n Chisq=", format(round(x$chisq, 1)), " on", df,
"degrees of freedom, p=", format(signif(1 - pchisq(x$chisq,
df), digits)), "\n")
导致它的代码:
if (is.matrix(x$obs)) {
otmp <- apply(x$obs, 1, sum)
etmp <- apply(x$exp, 1, sum)
} else {
otmp <- x$obs
etmp <- x$exp
}
df <- (sum(1 * (etmp > 0))) - 1
并且 'digits' 在参数列表中设置为 3,因此使用 surv.diff
帮助页面上的示例:
x <- survdiff(Surv(time, status) ~ pat.karno + strata(inst), data=lung)
cat( "p=", format(signif(1 - pchisq(x$chisq,
df), digits)) )
#p= 0.00326
解决评论:在示例中,第二个代码块减少为:
df <- with(x, (sum(1 * (apply(x$exp, 1, sum) > 0))) - 1 )
> df
[1] 7
利用broom
包中的glance()
函数,很容易得到p.value。
diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
broom::glance(diff)$p.value
我正在使用 R 生存包,survdiff 函数。我想知道如何从 return 值中获取 p 值。
> 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
我想使用一些函数获得 p 值 0.924。谢谢
p 值未存储在 survdiff class 中,因此必须在输出时即时计算。要重现 p 值,可以使用 chisq 分布函数:"pchisq"
diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
pchisq(diff$chisq, length(diff$n)-1, lower.tail = FALSE)
函数 print.survdiff
中显示该值的代码是:
cat("\n Chisq=", format(round(x$chisq, 1)), " on", df,
"degrees of freedom, p=", format(signif(1 - pchisq(x$chisq,
df), digits)), "\n")
导致它的代码:
if (is.matrix(x$obs)) {
otmp <- apply(x$obs, 1, sum)
etmp <- apply(x$exp, 1, sum)
} else {
otmp <- x$obs
etmp <- x$exp
}
df <- (sum(1 * (etmp > 0))) - 1
并且 'digits' 在参数列表中设置为 3,因此使用 surv.diff
帮助页面上的示例:
x <- survdiff(Surv(time, status) ~ pat.karno + strata(inst), data=lung)
cat( "p=", format(signif(1 - pchisq(x$chisq,
df), digits)) )
#p= 0.00326
解决评论:在示例中,第二个代码块减少为:
df <- with(x, (sum(1 * (apply(x$exp, 1, sum) > 0))) - 1 )
> df
[1] 7
利用broom
包中的glance()
函数,很容易得到p.value。
diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
broom::glance(diff)$p.value