Sequence Symmetry Analysis – (SQL script)

こちらの記事で使用したSQLのスクリプトです

コマンドフィールド名
クエリ名0010 work_csr q
説 明
select_into[0010 work_csr]
select[_drug].PERSON_ID
select[_drug].D_STD
select[_condition].C_STD
selectSwitch([D_STD]<[C_STD],"D->C",[D_STD]>[C_STD],"C->D",True,"UNK") AS FLG INTO [0010 work_csr]
from_drug INNER JOIN
from_conditiON
from[_drug].PERSON_ID = [_condition].PERSON_ID
group by[_drug].PERSON_ID
group by[_drug].D_STD
group by[_condition].C_STD
group bySwitch([D_STD]<[C_STD],"D->C",[D_STD]>[C_STD],"C->D",True,"UNK")
クエリ名0020 work_out q
説 明
select_into[0020 work_out]
select[0010 work_csr].FLG
selectCount([0010 work_csr].PERSON_ID) AS [Count] INTO [0020 work_out]
from[0010 work_csr]
group by[0010 work_csr].FLG
クエリ名0030 work_output1 q
説 明
select_into[0030 work_output1]
selectSum(IIf([0020 work_out].[FLG]="D->C",[0020 work_out].[Count],0)) AS DC
selectSum(IIf([0020 work_out].[FLG]="C->D",[0020 work_out].[COUNT],0)) AS CD
selectSum([0020 work_out].Count) AS TOTAL
select[DC]/[CD] AS CSR INTO [0030 work_output1]
from[0020 work_out]
group by[DC]/[CD]
クエリ名0040 D_TOTAL q
説 明
select_into[0040 D_TOTAL]
selectCount([_drug].[PERSON_ID]) AS D_TOTAL INTO [0040 D_TOTAL]
from_drug
クエリ名0050 C_TOTAL q
説 明
select_into[0050 C_TOTAL]
selectCount([_condition].PERSON_ID) AS C_TOTAL INTO [0050 C_TOTAL]
from_condition
クエリ名0060 D_COUNT q
説 明
select_into[0060 D_COUNT]
select[_drug].[D_STD]
selectCount([_drug].[PERSON_ID]) AS D_COUNT INTO [0060 D_COUNT]
from_drug
group by[_drug].[D_STD]
クエリ名0070 D_COUNT2 q
説 明
select_into[0070 D_COUNT2]
select[0060 D_COUNT].D_STD
select[0060 D_COUNT].D_COUNT
select[_condition].PERSON_ID
select[_condition].C_STD INTO [0070 D_COUNT2]
from[0060 D_COUNT], _condition
where((([C_STD]-[D_STD])>0))
order by[0060 D_COUNT].D_STD
クエリ名0080 D_COUNT3 q
説 明
select_into[0080 D_COUNT3]
select[0070 D_COUNT2].D_STD
selectCount([0070 D_COUNT2].D_COUNT) AS [COUNT] INTO [0080 D_COUNT3]
from[0070 D_COUNT2]
group by[0070 D_COUNT2].D_STD
order by[0070 D_COUNT2].D_STD
クエリ名0090 D_COUNT4 q
説 明
select_into[0090 D_COUNT4]
select[0080 D_COUNT3].D_STD
select[0080 D_COUNT3].COUNT
select[0060 D_COUNT].D_COUNT INTO [0090 D_COUNT4]
from[0080 D_COUNT3] INNER JOIN
from[0060 D_COUNT] ON
from[0080 D_COUNT3].D_STD = [0060 D_COUNT].D_STD
order by[0080 D_COUNT3].D_STD
クエリ名0100 D_COUNT4 q
説 明
select_into[0100 D_COUNT4]
select[EXP_C] AS TOTAL_SUM
select[0090 D_COUNT4].D_STD
select[0090 D_COUNT4].COUNT
select[0090 D_COUNT4].D_COUNT
select[0050 C_TOTAL].[C_TOTAL] AS N
select[COUNT]/[N] AS P
select[P]*[D_COUNT] AS EXP_C INTO [0100 D_COUNT4]
from[0090 D_COUNT4], [0050 C_TOTAL]
group by[EXP_C]
group by[0090 D_COUNT4].D_STD
group by[0090 D_COUNT4].COUNT
group by[0090 D_COUNT4].D_COUNT
group by[0050 C_TOTAL].[C_TOTAL]
group by[COUNT]/[N]
group by[P]*[D_COUNT]
クエリ名0140 D_EXP q
説 明
select_into[0140 D_EXP]
selectSum([0100 D_COUNT4].EXP_C) AS D_EXP INTO [0140 D_EXP]
from[0100 D_COUNT4]
クエリ名0150 OUTPUT2 q
説 明
select_into[0150 OUTPUT2]
select[0140 D_EXP].[D_EXP]
select[0040 D_TOTAL].D_TOTAL
select[D_EXP]/[D_TOTAL] AS A
select[A]/(1-[A]) AS NSR INTO [0150 OUTPUT2]
from[0140 D_EXP], [0040 D_TOTAL]
クエリ名0160 ASR q
説 明
select_into[0160 ASR]
select[0030 work_output1].CSR
select[0150 OUTPUT2].NSR
select[CSR]/[NSR] AS ASR
select[0030 work_output1].CD
select[0030 work_output1].DC INTO [0160 ASR]
from[0030 work_output1], [0150 OUTPUT2]

Sequence Symmetry Analysis (SSA)– (3)

問題の糸口が見えてきて

前記事で悩んでいた部分がクリアになってきました。そして、自宅SASのライセンスが切れていたという問題も解決しました。

このSASは無料で使用できてちょっとテストコードを走らせるのにはいいんですが、ビッグデータは扱えないなどの制限があります。OSIM2の巨大データも読み込めません。ただ、元データが大きくても実際の解析対象をデータを抽出して、絞ってデータのサイズを小さくすれば無料SASでも十分データ集計ができます。とりあえず、抽出した後の、_drug  _conditionのデータからスタートです。こんな感じのSASスクリプトを実行しました。

SASの実行結果

これは、基本的に他人様の書いたスクリプトなので、この結果が正解だろうという前提で提示しています。

自作のスクリプトで実行…おやっ?

で、同じデータを自作のスクリプトでも実行。自作スクリプトはSQLで集計して、統計的な集計はRで実行、と言う2段構えにしました。データ集計はSQLが快適で良いのですが、F分布の確率密度関数の扱いがSQLだけでは私が苦手なので、データを出力してRスクリプトを実行しました。初めからRでデータ集計をしたら良いのでは?と思うかもしれませんが、Rは大きなデータをデータフレームに入れようとすると、全部オンラインメモリに読み込もうとするのかメモリを食うわ、何かデータのコピーを繰り返すのかスピードが落ちるわ。しまいにはゲロはいて死んでしまいます。ですので、仕方なしにこんなことしています。で、次が実行結果です。

ASR_UCI, ASR_LCIの値が、SASの出力と微妙に一致しません。今回はすぐ気付いたけど、実は当初悩んでいたのも、この問題だったりして。

この状況は以前にもあった

上手のASRやNSRの出力を見て気づきました。以前と同じ失敗をやらかしてしまったようです。windowsのコントロールパネルの言語設定の追加の設定

の数値タブの小数点以下の桁数を増やします。

気を取り直して再チャレンジ

データを読み込みなおして、気を取り直して実行です。

これなら、SASの正解と一致します。めでたしめでたし。

SSAの理解も深まってきたし、これで集計する道筋がついたぞ。

 

Sequence Symmetry Analysis (SSA) – (2)

どこでつまずいていたのか

前記事の続きです。入り口でつまずいていると言うことでした。仮想の症例集団を作って何を悩んでいるかを書いてみます。

上の図の例では、調査期間中に薬剤Aを新規に使用した患者数 n = 3 です。ここは、問題ありません。とりあえず、この点の解釈に関係のないイベントは表示しません。Aの文字があって灰色の四角が伸びているところが薬剤Aの使用を示します。

悩みどころの元資料の文言です。

ここで、誤解したのが、日本語の資料に記載された「調査開始x日目における薬剤Aの新規に使用した患者数 nx」です。私はじっくり何回読んでも、日本語として落ち着かない感じがします。この言葉を私なりに普通に解釈すると”調査開始x日目に薬剤Aが新規に使用された患者数、つまり nx = 3”になります。調査期間中に薬剤Aが新規に使用された患者のうち、x日目に使用されていた患者数、と読み替えてしまいます。この解釈が誤りであるのは原著1を読むと一目瞭然です。

(原著では薬剤AではなくAD( antidepressant; 抗うつ薬)、x日目ではなくindex dayで説明されています) number of persons presenting their first antidepressant prescription on index day  日本語にするのであれば「調査開始x日目に薬剤Aが初めて処方された人数」つまり図の例ではnx=1です。

ライティングの問題?

「使用する」というと、患者が服用していることも「使用する」だし、医師の立場からすると処方する行為も意味するかもしれません。「処方する」という具体的な診療行為を、「使用する」といういろいろな意味に解釈されかねない言葉に置き換えてしまったこともさることながら、「における」という、思考停止キーワードを用いてしまったことも指摘しましょう。(「におけるしす」も参考にしてください。「白衣を脱いだらみな奇人」―平盛 勝彦

(つづく)

References:

1.
Hallas J. Evidence of depression provoked by cardiovascular medication: a prescription sequence symmetry analysis. Epidemiology. 1996;7(5):478-484. [PubMed]

SAS University Edition

私が自宅で使用しているSASの起動画面です。しばらく起動していなかったのですが、お知らせのところを読むとライセンスが切れていた事が判明しました。

更新ボタンのクリックだけでは先に進まないようです。

この画面の「続行」ボタンを押しても更新されません。再度バーチャルマシンをダウンロードして仮想アプライアンスの再登録からやり直す必要がありそうです。ちょっとめんどくさそうです。何時しようかな、とりあえずバックグラウンドでバーチャルマシンのダウンロードだけはしておこう。

 

Sequence Symmetry Analysis (SSA) – (1)

はじめに

以前Sequence Symmetry Analysis (SSA) がイマイチうまく算出できないという話を書いて、そのまま放置していましたけど、ここの所American College of Physiciansで新しいプロジェクトを開始するという件が、いよいよ動き出すことになってその準備が佳境に入ってきています。先週は、平日に会社を1日休んで準備にあてていました。勤労感謝の今日もかなりの時間をその準備に使っています。旗振り役の某大学の先生とも電話で打ち合わせしましたが、彼女は勤労感謝の今日も休日出勤で一日中病院にいらしたという事で、それでも、学会のプロジェクトの仕事もされていたようです。そうまでして、こういうプロジェクトをしようと言うバイタリティには脱帽です。わたしも、ACPのプロジェクトが忙しくなってきたので他の事はぼちぼち進めます。

本題の入り口

SSAについて、まずは日本語の資料から少しずつ読み解いてゆこうと思います。粗順序比は難しくないので、元資料でよいとおもいます。悩んでいるのは、無効果順序比の集計の説明パートから。

まず、ここで疑問が発生。ここに至る前段階で「調査期間中に新規にAとBが発生した患者」を選択しているので、この定義だと、必ずN=nになります。Nとnを分けて記述する意味があるのか? あるとして、いったいどういう事だろうか。

次に、aを求めるところで、分母にxについての∑があるので、観察期間人数の情報になると思うのだが、それを人数nの次元で割って確率になるのだろうか? 分母にも観察期間人数の次元のデータを以て来なくていいのだろうか?

この点を原著に戻って確認しないと、コード化できない感じです。つまり、入口の理解でつまずいていることが確認できました。

(つづく)

Beethoven Concert

大晦日にベートーベンの交響曲全曲を演奏するコンサートのパンフレットです。午後1時に演奏が始まって終わるのがほぼ日付で年の変わる23時55分だそうです。ぐったりして新しい年を迎えることができそうです。

iPodから送信

Tamago Brass 2nd Concert Photo Gallery

たまごぶらす 第2回コンサート 新宿 グラムシュタイン 2017年11月9日

写真・ビデオを撮影したので公開します。

 

Tamago Brass 2nd Concert (3)

たまごぶらす 第2回コンサート 新宿 グラムシュタイン 2017年11月9日

楽器紹介メドレー

おしゃべりの冒頭部分で、楽器紹介メドレーという事で進行を務めている片野さんが「金管五重奏を聴いたことのある人どのくらいいますか?」とお客さんに尋ねています。たまたま一緒のテーブルのおじさんたちが、ブリティッシュブラスのバンドのラッパだったり、小さな管弦楽の指揮者だったりと、そこそこディープな感じの人たちだったというのもあって、特に宣伝もしていないコンサートに足を運ぶ人は、メンバーと何らかのつながりのある人ばかりだろうと思っていたので、多くのお客さんが金管五重奏を聴いたことのある人だろうと思っていたら、意外や意外。あまり金管五重奏を聴いたことのある人はあまりいないようでした。いったいどういう人たちが集まってきていたのか、謎が深まります。

<https://youtu.be/pOr9vxkkS0k>

 

Translate »