日誌

2014年7月の記事一覧

介入研究の解析での線形混合モデル(2):推定結果のグラフ化


介入研究の解析での線形混合モデル(1) の続きです。
解析後のデータを視覚化して治療効果の違いを把握します。
交互作用が有意でないこともあり,明確な違いを示すグラフには
なりませんが,元の論文でも,推定結果を元にしたらしいmean profilesを
示したグラフを示していたので,こちらでも似たようなものを描いて
みます(preの値を入れてない点は明らかに違いますが)。

mixedを実行した後に,群×時間のそれぞれの周辺効果(調整平均)が
以下のコマンドを打つことで算出できます。

margins treatment#month


----------------------------------------------------------------------------------------------------------
                     |             Delta-method
                     |     Margin   Std. Err.           z    P>|z|     [95% Conf. Interval]
--------------------+------------------------------------------------------------------------------------
treatment#month |
         TAU#2  |   19.46667   1.619558    12.02   0.000     16.29239    22.64094
         TAU#3  |   17.85983   1.693887    10.54   0.000     14.53987    21.17978
         TAU#5  |   16.25255   1.763116     9.22    0.000      12.7969    19.70819
         TAU#8  |   13.52009    1.81302      7.46   0.000     9.966633    17.07354
       BtheB#2  |   14.71154   1.506611     9.76   0.000     11.75864    17.66444
       BtheB#3  |   13.69984   1.617249     8.47   0.000     10.53009    16.86959
       BtheB#5  |   12.83243   1.697532     7.56   0.000     9.505326    16.15953
       BtheB#8  |   12.09091   1.721696     7.02   0.000     8.716448    15.46537
---------------------------------------------------------------------------------

これをグラフ化すると以下のように治療効果の違いが視覚的に
分かるようになります。

marginsplot, x(month)



なんだか,TAUの方が下がり方が急な印象。8か月後は群間にあまり
違いがなさそうです。
0

変数の複数の値のいずれかに該当したら実行するという条件の書き方

autoデータセットを使って説明します。

sysuse auto

変数rep78の内,1と3と5を1とした変数rep78rを作りたいとします

(1) genとreplaceを使う場合


gen rep78r=0
replace rep78r=1 if (rep78==1 | rep78==3 | rep78==5)


と書けばよいです*1。結果は以下の通り

tab rep78 rep78r

  Repair |
 Record |            rep78r
    1978 |          0          1 |     Total
------------+-----------------------+----------
          1 |         0          2  |         2
          2 |         8          0  |         8
          3 |         0         30 |        30
          4 |        18          0 |        18
          5 |         0         11 |        11
------------+------------------------+----------
     Total |        26         43 |        69


この場合は1と3と5の3つしかないので大変ではないですが,
選びたい値がたくさんあるとき,いちいち
rep78==1 | rep78==3・・・と繰り返すのは大変です。
できれば,重複している所は書かずに,選びたい値だけを
指定したいと思います。そんな時に使えるのがinlist( )関数です。
inlist(変数名, 値1, 値2...) と書いていきます。

gen rep78r2=0
replace rep78r2=1 if inlist(rep78,1,3,5)


結果はもちろん上と同様のものになります。

tab rep78 rep78r2

     Repair |
    Record |        rep78r2
       1978 |         0          1 |     Total
--------------+-----------------------+----------
            1 |         0          2  |         2
            2 |         8          0  |         8
            3 |         0         30 |        30
            4 |        18          0 |        18
            5 |         0         11 |        11
--------------+-----------------------+----------
       Total |        26        43 |        69

ただし,inlist( ) の中に249個以上入れるとエラーに
なるみたいなので,長い場合は分割してreplaceを複数繰り返す
必要があります。

参照:Functions: inlist()

上で説明したやり方は,データが文字型の変数でも使えます。
makeという変数は,メーカーと車種の情報が入っているので,
日本車っぽい名前が入っているのを手動で抜きだしてみました

"Honda Accord"
"Honda Civic"
"Mazda GLC"
"Subaru"
"Toyota Celica"
"Toyota Corolla"
"Toyota Corona"

これらのみ1,他は0とした変数japanを作りたい場合は以下のようにします。
長いので,途中で改行してDo-file editorの方で実行します。

gen japan=0
replace japan=1 if inlist(make,"Honda Accord","Honda Civic", ///
"Mazda GLC","Subaru","Toyota Celica","Toyota Corolla","Toyota Corona")


(2) recodeを使う場合

recode rep78 (1 3 5=1) (2 4=0), gen(rep78r)

または

recode rep78 (1 3 5=1) (else=0) if rep78~=., gen(rep78r)

でも同じことができます。recodeだと( )内はたくさん指定しても
大丈夫みたいでした。

注:
*1このままだと欠損もrep78rで0になってしまうので,これを
防ぎたい場合はgen rep78r=0 if rep78~=.とする。



【履歴】
2014/07/07 記事作成
2014/07/21 文字型の扱い追記
0

相関係数の95%信頼区間

ユーザー作成コマンドのci2をインストールすると,
相関係数の信頼区間を算出できます。
インターネットにつながっている状態で,

findit ci2

と打ち,sg159_1というリンクをクリックするとインストール
画面になります。

Stata 13.1では問題なく動きました。
使い方を,autoデータセットで確認します。

sysuse auto

まずはmpgとweightのピアソン積率相関係数を普通に出すと
次のようになります。

pwcorr mpg weight

              mpg        weight
       
mpg        1.0000
weight    -0.8072    1.0000


そして,信頼区間を出すには以下のように打ちます

ci2 mpg weight, corr

Confidence interval for Pearson's product-moment correlation
of mpg and weight, based on Fisher's transformation.
Correlation = -0.807 on 74 observations (95% CI: -0.874 to -0.710)

オプションにspearmanをつければ,スピアマンの順位相関にも対応します。
また,このコマンドに含まれているcii2の方を使うと,相関係数と人数が
分かればその数値だけでも信頼区間が算出できます。
詳しくは

help ci2
0