日誌

2014年4月の記事一覧

データの欠損を数える

ここでは,介入研究のデータセットで解説します。
使用するデータセットとして,

データセットをwideからlongへ変換する

で解説した通り,RのHSAUR2パッケージのデータセットBtheBを
使ってやってみます。Stataのバージョンは13.1です。

データをよみこんだら,準備としてIDづけとlongへの変換用に
変数名の変更は次の通り

egen id=seq()
rename ( bdi_2m bdi_3m bdi_5m bdi_8m )( bdi2 bdi3 bdi5 bdi8 )


この時点では,縦断データがwide形式,つまりそれぞれ別の変数
として入っている形です。

さて,まずBDIの値の2か月後,3か月後,5か月後,8か月後の
欠損数を一覧にしてみます。次のコマンドで,欠損のある変数の
結果のみ表示されます。

misstable sum

 
                                                              Obs<.
                                                    +-------------------------
              |                                      | Unique
 Variable |   Obs=.   Obs>.   Obs<.  | values      Min     Max
------------+-------------------------------------+-------------------------
     bdi2 |       3                         97  |     37         0        48
     bdi3 |      27                        73  |     33         0        53
     bdi5 |      42                        58  |     33         0        47
     bdi8 |      48                        52  |     24         0        40
----------------------------------------------------------------------------


欠損数は,Obs=.の部分を確認します。追跡月が進むごとに
欠損が増えていくのが分かります。
次に,欠測パターンをみてみます。

misstable patterns, freq

 
Missing-value patterns
   (1 means complete)

                  |   Pattern
  Frequency | 1  2  3  4
-----------------+-------------
             52 |  1  1  1  1
                 |
             24 |  1  0  0  0
             15 |  1  1  0  0
               6 |  1  1  1  0
               3 |  0  0  0  0
-----------------+-------------
           100 |

Variables are  (1) bdi2  (2) bdi3  (3) bdi5  (4) bdi8


この結果から,すべての変数で欠損がない者,つまり,
Patternの欄が全て1である者は,52名しかいないということが
分かります。100名のデータなので,約半数の者で何らかの欠損
があるという状況です。

一方,上記すべての時点が欠損である者は,いちばん下の行の
3名になります(Pattern欄がすべて0)。他にはたとえば,2か月目だけ
データがあり,その後すべて欠損という者が24名(Pattern欄が1,0,0,0),
というように読みます。

この結果から,欠損の代入を何もせずに古典的な反復測定ANOVA
やMANOVAを適用する場合,すべての時点でデータがある,n=52として
解析することになります。
0

データセットをwideからlongへ変換する

縦断の混合モデル,またはマルチレベル分析等を行う時に,
wide形式のデータセットをlong形式にする必要があります。

適度に欠損値があり,線型混合モデルの解析に適した例
として,RのパッケージHSAUR2のデータセットBtheBを
使ってやってみます。Stataのバージョンは13.1です。
Rからの読み込み方は↓参照

EZRでパッケージ中のRデータセットをStataデータセットに変換する

まずこのままでは,IDがないため,IDを振ります。

egen id=seq()

そして,Stata特有のルールとして,longにする時の
変数名が,言葉+数字という形式になっている必要があるので,
longにまとめるべき抑うつ得点の継時データとなっている変数
の名前を次のように変えます。

rename ( bdi_2m bdi_3m bdi_5m bdi_8m )( bdi2 bdi3 bdi5 bdi8 )

つまり,_とmを取り去った形です。

ここで最初の10名を並べると次のような感じです。

list in 1/10

     id  bdi2  bdi3  bdi5  bdi8  drug  length  treatm~t  bdi_pre
    ------------------------------------------------------------
1.    1     2     2      .      .    No      >6m       TAU      29
2.    2    16    24    17    20   Yes    >6m     BtheB      32
3.    3    20      .      .     .     Yes     <6m       TAU      25
4.    4    17    16    10     9     No     >6m     BtheB      21
5.    5    23      .       .     .      Yes    >6m     BtheB      26
    ------------------------------------------------------------
6.    6     0      0       0       0   Yes     <6m     BtheB       7
7.    7     7      7       3       7   Yes     <6m       TAU      17
8.    8    20    21      19    13    No     >6m       TAU       20
9.    9    13    14      20    11   Yes     <6m     BtheB      18
10.  10    5      5       8     12   Yes     >6m     BtheB      20
    +------------------------------------------------------------+


そして変換は次のコマンドです。

reshape long bdi, i(id) j(month)

新しく作られる変数が,bdi と month です。
最初の10行をまた出してみます。

list in 1/10

    +----------------------------------------------------
     id  month   bdi   drug   length   treatm~t   bdi_pre
    -----------------------------------------------------
1.    1      2      2     No      >6m        TAU        29
2.    1      3      2     No      >6m        TAU        29
3.    1      5       .     No      >6m        TAU        29
4.    1      8       .     No      >6m        TAU        29
5.    2      2     16    Yes     >6m      BtheB       32
    -----------------------------------------------------
6.    2      3     24    Yes      >6m      BtheB      32
7.    2      5     17    Yes      >6m      BtheB      32
8.    2      8     20    Yes      >6m      BtheB      32
9.    3      2     20    Yes      <6m        TAU       25
10.   3      3       .    Yes      <6m        TAU       25
    +----------------------------------------------------

同じidの個人が縦に4行現れるようになりました。また,bdi2からbdi8の変数
はなくなっています。変数bdi2からbdi8の頭の文字であるbdiという変数が新たに
作られ,それぞれの値が順に並んでいます。そして対応する月数の2から8の
部分がmonthという新しい変数の元に縦に並んでいます。他の変数は元の値の
繰り返しです。

メニューからは
Data > Create or change data > Other variable-transformation commands
 > Convert data between wide and long


と進み,

Long format from wide を選び,

ID variable(s)の欄の右端▼をクリックしてidを選択します。

Subobservation identifier - the j() optionのvariableに

month と入れます。そして
 
Base (stub) names of X_ij variablesに

bdi と入れてOKです。入力場所は下図参照




この変換したままの状態なら,次のコマンドで元のwide形式に戻す
ことができます。

reshape wide
0