2016-04-02 8 views
3

私はR生存パッケージ、survdiff機能を使用しています。戻り値からp値を取得する方法は不思議です。survdiffの入手方法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を取得したいとします。ありがとう。

答えて

1

p値はsurvdiffクラスに格納されないため、出力時にその値を計算する必要があります。 「pchisq」

diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat) 
pchisq(diff$chisq, length(diff$n)-1, lower.tail = FALSE) 
+0

理由 'lower.tail = false'に:例では2番目のコードブロックに減少? –

+0

@Omer An、参照?pchisq:lower.tail logical; TRUE(デフォルト)の場合、確率はP [X≤x]、それ以外の場合はP [X> x] – Dave2e

+0

はい、なぜP [X> x] 'を取得したいのですか? –

2

値であることを表示する機能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") 

それに至るまでコード:

p値を再現する一つCHISQ分布関数を使用することができ
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 

そして「数字」引数リスト内の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 
+0

詳細な説明をありがとう! – tsznxyz

+0

df =に何かを設定するのですか?このエラーが発生し続ける:pchisq(survdiffRes $ chisq、df)のエラー: 数学的関数の数値以外の引数 – Goldname

+0

2番目のコードブロックは、dfの計算方法を示しています。 –

関連する問題