2014年4月の記事一覧
データの欠損を数える
ここでは,介入研究のデータセットで解説します。
使用するデータセットとして,
データセットをwideからlongへ変換する
で解説した通り,RのHSAUR2パッケージのデータセットBtheBを
使ってやってみます。Stataのバージョンは13.1です。
データをよみこんだら,準備としてIDづけとlongへの変換用に
変数名の変更は次の通り
この時点では,縦断データがwide形式,つまりそれぞれ別の変数
として入っている形です。
さて,まずBDIの値の2か月後,3か月後,5か月後,8か月後の
欠損数を一覧にしてみます。次のコマンドで,欠損のある変数の
結果のみ表示されます。
欠損数は,Obs=.の部分を確認します。追跡月が進むごとに
欠損が増えていくのが分かります。
次に,欠測パターンをみてみます。
この結果から,すべての変数で欠損がない者,つまり,
Patternの欄が全て1である者は,52名しかいないということが
分かります。100名のデータなので,約半数の者で何らかの欠損
があるという状況です。
一方,上記すべての時点が欠損である者は,いちばん下の行の
3名になります(Pattern欄がすべて0)。他にはたとえば,2か月目だけ
データがあり,その後すべて欠損という者が24名(Pattern欄が1,0,0,0),
というように読みます。
この結果から,欠損の代入を何もせずに古典的な反復測定ANOVA
やMANOVAを適用する場合,すべての時点でデータがある,n=52として
解析することになります。
使用するデータセットとして,
データセットを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 )
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からの読み込み方は↓参照
まずこのままでは,IDがないため,IDを振ります。
そして,Stata特有のルールとして,longにする時の
変数名が,言葉+数字という形式になっている必要があるので,
longにまとめるべき抑うつ得点の継時データとなっている変数
の名前を次のように変えます。
つまり,_とmを取り去った形です。
ここで最初の10名を並べると次のような感じです。
そして変換は次のコマンドです。
新しく作られる変数が,bdi と month です。
最初の10行をまた出してみます。
同じidの個人が縦に4行現れるようになりました。また,bdi2からbdi8の変数
はなくなっています。変数bdi2からbdi8の頭の文字であるbdiという変数が新たに
作られ,それぞれの値が順に並んでいます。そして対応する月数の2から8の
部分がmonthという新しい変数の元に縦に並んでいます。他の変数は元の値の
繰り返しです。
メニューからは
と進み,
この変換したままの状態なら,次のコマンドで元のwide形式に戻す
ことができます。
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
> 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