[Stata][Statistics]分位数で変数を作成するコマンド

a red paper bag in the middle of red balloons with percentage symbols stata
Photo by Karolina Grabowska on Pexels.com

分位数やパーセントタイルで変数を作成

pctileやxtileを用いる。リンクはこちら。

https://www.stata.com/manuals/dpctile.pdf

pctileについて

pctileコマンドは以下の様に用いる。

pctile qrt1 = myvar, nq(n)

\(n\)には整数を入れる。このコマンドを実行すると”qrt1″という\(n-1\)つの値を有する変数が生成される(変数名は自分で好きなように付けて良い)。この\(n-1\)つはそれぞれ順に既存の変数”myvar”の\(1, 2, \cdots, n-1\)分位を取る値が入る(したがって、”qrt1″の取り得る値は\(n-1\)個である)。以下のようなオプションをつけると、”percent”という変数も同時に生成され、この変数にはそれぞれの分位数が何パーセントになるかが配置されている。

pctile qrt1 = myvar, nq(n) genp(percent)

この”percent”の部分にも好きな変数名を名付けて良い。

xtileについて

上のpctileが分かればそれほど難しくない。これは、連続変数をカテゴリー変数に変換してくれる。例えば、

xtile myvarcat3 = myvar, nq(3)

とすると、”myvar”という変数を三分位に区切ってくれる。

xtileの実例

以下でデータを用いて実例を考える。まずはデータのロード。

use https://www.stata-press.com/data/r17/bp1, clear

これは変数bpだけのシンプルなデータセットである。

データの閲覧。

これを四分位でカテゴリー変数にするには、

xtile quart = bp, nq(4)

で良い。データを見ると以下のようになる。

list bp quart, sepby(quart)
sepby(quart)を指定することで以下のようにきれいに表示される。

cutpointsの用い方

引き続き上のデータセットを用いる。xtileコマンドは分位でなく、自分の指定する任意のカットポイントで変数を区切る事ができる。例えば、$$(-\infty, 100], (100, 110], (110, 120], (120, 130], (130, +\infty]$$で変数を区切りたいとする。これを行うには、新しい変数を作り、xtileのcutpointsオプションを使う。

input class
1. 100
2. 110
3. 120
4. 130
5. end

まずinputを入力し、コマンドに順に100, 110, 120, 130, endと入力していく。するとclassという変数が作成される。この上で以下のように入力する。

xtile category = bp, cutpoints(class)

以下で確認。

list bp class category, sepby(category)
きちんと指定されたclassという範囲でカテゴリー変数categoryが作成されている。

xtile cutpointsオプションの応用

このクラス変数は、自分で自由に設定してよい。他の変数の分位数や変数のサブグループから持ってきても良い。例えば、次の新しいデータセットでは血圧”bp”に加えて”case”変数が追加されている。

use https://www.stata-press.com/data/r17/bp2, clear

caseが\(0\)の人のパーセントタイルを全体に適応することができる。そのためにまず”pct”という変数を作成する。

pctile pct = bp if case == 0, nq(4)

次に、この変数をすべての”bp”に当てはめれば良い。つまり、上記のcutpointsオプションを用いれば良い。

xtile category = bp, cutpoints(pct)
gsort -case bp
list bp case category, sepby(category)

途中でgsortで並び替えを行っている。結果は以下。

caseが0の人の四分位カテゴリー訳を全体に当てはめている。

caseが\(0\)の人の四分位分けを、caseが\(1\)の人だけに当てはめたいなら、ifを用いれば良い。

xtile category = bp if case == 1, cutpoints(pct)

関連記事

labelの使い方、ラベル名の変更
sortとgsortの違い
カテゴリー変数の作成

コメント

タイトルとURLをコピーしました