2013-09-23 18 views
5

私はサブスクリプションの顧客寿命をモデル化しようとしています。データが検閲されているので、私はRの生存パッケージを使用して生存曲線を作成します。Rの生存モデルに打ち切りデータを入力するにはどうすればよいですか?

オリジナルのサブスクリプションデータセットは、このようになります..私はこのように見えるように操作し

id start_date end_date 
1 2013-06-01 2013-08-25 
2 2013-06-01 NA 
3 2013-08-01 2013-09-12 

..

id tenure_in_months status(1=cancelled, 0=active) 
1 2    1 
2 ?    0 
3 1    1 

生存モデル供給するため..in:

obj <- with(subscriptions, Surv(time=tenure_in_months, event=status, type="right")) 
fit <- survfit(obj~1, data=subscriptions) 
plot(fit) 

consureの場合のtenure_in_months変数には何を書きますか?すなわち、定期購読は今日でも有効です - 今日までの在任期間か、それともNAでなければならないのでしょうか?

+0

あなたのデータを収集した日までは、それは "今日"だと思います。 – drevicko

答えて

1

終了日がない場合は、サブスクリプションがまだ有効であることを意味し、現在の日付までの時間を検閲日として取る必要があります。

生存オブジェクトは使用できません。これらのケースは省略されると思います。それはあなたが望むものではありません!これらのケースには生存に関する重要な情報が含まれているためです。ところでイベントまでの時間を取得する

SQLコード(クエリのSELECT部分​​で使用)

DATEDIFF(M,start_date,ISNULL(end_date,GETDATE()) AS tenure_in_months 

: 私は私の分析のために、日中の違いを使用します。数ヶ月までの時間を四捨五入するのは意味がありません。

+1

統計的なアドバイスは良いですが、コードが有効ではありませんR. –

+0

コードはSQLです。私は自分でクエリを作ったと思ったので、それを調整することができます。 – Wietze314

+0

私は質問に記載されたSQLに気付かなかった.... – drevicko

8

最初に私は前の答えに同意しないと言います。今日でも引き続きアクティブなサブスクリプションについては、今日までの在任期間であるとみなされるべきではありません。それらの定期購読について正確に何を知っていますか?私たちは彼らが今日までに在籍していたことを知っています。それは、それらの所見にはtenure_in_monthsと同等ですが、正確にどれくらいの時間がかかっているのかわかりませんが、今日までの在籍期間よりも長くなっています。

これは、生存分析における右検閲として知られている状況です。参照:http://en.wikipedia.org/wiki/Censoring_%28statistics%29

だからあなたのデータはに

id start_date end_date 
1 2013-06-01 2013-08-25 
2 2013-06-01 NA 
3 2013-08-01 2013-09-12 

から変換する必要があります:

Surv(time=tenure_in_months, event=status, type="right") 

id t1 t2 status(3=interval_censored) 
1 2 2   3 
2 3 NA   3 
3 1 1   3 

その後、あなたから、あなたのR survオブジェクトを変更する必要があります

〜:

Surv(t1, t2, event=status, type="interval2") 

構文の詳細については、http://stat.ethz.ch/R-manual/R-devel/library/survival/html/Surv.htmlを参照してください。 http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_lifereg_sect018.htm

間隔の検閲データは、2つの方法で表すことができます。最初に使用するタイプ=間隔と上記のコード。この使用法では、event2引数の値はevent = 3でない限り無視されます。第2のアプローチは、各検視について、左検閲の場合は( - 無限、t)、右検閲の場合は(t、無限)、ある場合は厳密には(t、t)、区間については(t1、t2)と考える。これはtype = interval2で使用される手法であり、NAは無限の代わりになります。より有用であることが証明されています。

+0

ああ、あなたは正しいと思います。 Right censorは '[time、+ inf]でのイベント時間を意味するはずですが、Rでは 'type =' interval ''を使用したときの' time'の正確なイベントのようです。 'interval2'が必要です。編集を参照してください。 –

+0

私はあなたの2番のエントリが間違っていると思います。 「NA」が測定された時期を知る必要があります。 t1エントリは、その時刻から2013-06-01を引いた値になります。 – drevicko

0

あなたはのデータが収集された日付を知る必要があります。 id 2のtenure_in_monthsは、この日付から2013-06-01を引いたものになります。

それ以外の場合は、データのエンコードが正しいと思います。 statusが0でidの場合、それは右検閲されたことを示します(生存期間は下限ですが上限はありません)。

関連する問題