0

この質問はオプションのコンテキストにありtwoway lineますby()が、より大きな問題は、すべてのイベント ウィンドウを先験的に知ることなく、2 番目 (および後続のすべて) のイベント ウィンドウを識別する方法だと思います。

以下に、1990 年代と 2000 年代の 5 か国のデータをいくつか生成します。outcomeすべての国で 1995 年にイベントが発生し、カナダでのみ 2005 年にイベントが繰り返されます。各国の各イベントを中心に 5 年間にわたってプロットしたいと思います。と を使用してこれを行うtwoway lineby()、カナダは同じプロット ウィンドウに 2 回プロットされます。

clear
set obs 100
generate year = 1990 + mod(_n, 20)
generate country = "United Kingdom" in 1/20
replace country = "United States" in 21/40
replace country = "Canada" in 41/60
replace country = "Australia" in 61/80
replace country = "New Zealand" in 81/100
generate event = (year == 1995) ///
    | ((year == 2005) & (country == "Canada"))
generate time_to_event = 0 if (event == 1)
generate outcome = runiform()

encode country, generate(countryn)
xtset countryn year
forvalue i = 1/2 {
    replace time_to_event = `i' if (l`i'.event == 1)
    replace time_to_event = -`i' if (f`i'.event == 1)
}

twoway line outcome time_to_event, ///
    by(country) name(orig, replace)

手動の解決策では、occurrence国ごとに発生する各イベントに番号を付ける変数を追加occurrenceしてから、by()オプションに追加します。

generate occurrence = 1 if !missing(time_to_event)
replace occurrence = 2 if ///
    (inrange(year, 2005 - 2, 2005 + 2) & (country == "Canada"))

twoway line outcome time_to_event, ///
    by(country occurrence) name(attempt, replace)

これはプレイ データではうまく機能しますが、私の実際のデータでは、さらに多くの国とイベントが存在します。この変数を手動でコーディングすることはできoccurrenceますが、それは面倒です (そして、機能するツールまたはロジックがあるかどうか、非常に興味があります :))。

ウィンドウの識別を自動化するロジックはありますか? または、少なくとも動作するものtwoway lineですか?ありがとう!

4

1 に答える 1

2

time_to_eventウィンドウで -2 .. 2 である変数を生成し、それ以外の場合は欠落しています。tsspellによってインストールされた SSC から使用できます。

  ssc inst tsspell 

そのようなウィンドウにラベルを付けます。ウィンドウは、そのすべてが欠落していない呪文または観測の実行によって定義されますtime_to_event

  tsspell, cond(time_to_event < .) 

tsspellは事前確率を必要tssetとし、ヘルプで説明されている 3 つの変数を生成します。次に、これらの変数のいずれかを使用してウィンドウの番号を変更できます_seq(スペル内のシーケンス番号、1 番上)。

  gen _spell2 = (_seq > 0) * sum(_seq == 1) 

次に、によって生成される別の変数であるcountryからの各呪文の呪文識別子を使用して、呪文に明確にラベルを付けます。_spelltsspell

  egen gspell = group(country _spell) if _spell2, label

私のコードは、ウィンドウがバラバラで重複できないと想定していますが、それもあなたの仮定の1つです。http://www.stata-journal.com/sjpdf.html?articlenum=dm0029では、呪文を処理するためのいくつかのテクニックが提供されていますtsspell。原理の説明を始めましたが、プログラムを説明する前に記事が長くなりました。のヘルプtsspellは非常に詳細であるため、続編の論文が必要であるか、少なくとも書かれるとは思えません。

(後で) このコードは、ウィンドウが接触しないことも前提としています。その問題を解決すると、まったく関与しないより直接的なアプローチが提案tsspellされます。

  bysort country (year) : gen w_id  = (time_to_event < .) * sum(time_to_event == -2)

  egen w_label = group(country w_id) if w_id, label
于 2013-06-02T23:08:10.390 に答える