Triad sou.

SAS Analytics U

SASからSAS University Editionというソフトがリリースされていました。


含まれるパッケージは、BASE SAS(R), SAS/STAT(R), SAS/IML(R), SAS/ACCESS(R) TO PC FILES およびSAS STUDIO(R)だそうです。
Mac, Linuxでも使用できるようです。


FAQによれば、非商用利用であれば、高等教育機関に所属しているかどうかに関係なく、どなたでも学習や学術調査の目的で利用できるそうです。

インストール

VMでサーバーを動かして、Webのインタフェースからプログラミングと解析の実行をするようです。
Oracle VirtualBoxVMwareをインストールする必要があるようです。

インストール手順概要は

  1. VMをインストール
  2. VMイメージを読み込む
  3. myfoldersという名前の共有フォルダを作って、VMの設定画面等でパスを入力する
  4. VMを起動
  5. サーバー画面に http://localhost:10080 とか http://123.456.789.101 と表示されるので、これをブラウザのアドレスバーに入力する
  6. ブラウザからSAS STUDIOが起動する

といった感じでした。
インストールマニュアルがあるので、さほど苦労はしないと思われます。

関連リンク

SAS STUDIO

SASのWebのインターフェースでした。
コード補完してくれるエディタが付いていて、ショートカットキーも使用できました。
Rユーザ向けに言えば、Server版のR Studioをローカルから使うような感じですね。

SAS/STAT

搭載バージョンは13.1で、最新のものでした。
したがって、

  • GLMSELECT ProcedureでAdaptive lasoo
  • PHREG Procedureで生存時間解析やFine-Grayモデル
  • MIXED Procedureで線形混合モデル
  • GLIMMIX Procedureで一般化線形混合モデル
  • NLMIXED Procedureで非線形混合モデルや一般のモデル
  • ICLIFETEST Procedureで区間打ち切りデータの解析
  • IRT Procedureでitem response models
  • MI ProcedureにはMNAR statementが追加されているので使いやすくなった!
  • MCMC ProcedureでMCMC (13.1からmulti thread化; ただしSAS University Editionは2コアまでしか割り当てられないようです)

などもとても簡単に実行できるでしょう。


SAS/STATでできる事の一覧は

などを参照のこと。
ちなみに、↑に書いていないことも死ぬほど沢山できるので、SAS/STATヘルプファイルを熟読すると良いでしょう。
各手法のサンプルプログラムが付いていますので、参考になります。

感想

非商用利用のみとはいえ、SASが無償で使えるとなると、助かる人が沢山いそうですね。

sashelp.vcolumn と sashelp.vtable によるデータセット情報の抽出

sashelp.vcolumn や sashelp.vtable などには、SAS にロードされた全データセットの情報が格納されている。
そのため、フォーマットだったり、オブザベーション数だったり、変数の数だったり、他にも非常に細かい情報を取り出すことができる。
大胆だなぁ。

proc format;
  value myfmt 1 = "Yes" 2 = "No";
run;

data test;
  x = 1;
  y = 2;
  z = 1;
  output;
  x = 2;
  y = 2;
  z = 2;
  output;
  format x best32. y best8. z myfmt.;
data test2;
  x = 1;
  y = 2;
  z = 1;
  output;
  format x best32. y best8. z myfmt.;
run;

proc print data = sashelp.vcolumn;
  where libname = "WORK" & memtype = "DATA";
  var libname memname format;
run;

proc print data = sashelp.vtable;
  where libname = "WORK" & memtype = "DATA";
  var libname memname nobs nvar;
run;
 Obs    libname    memname    format

6468     WORK       TEST      BEST32.
6469     WORK       TEST      BEST8.
6470     WORK       TEST      MYFMT.
6471     WORK       TEST2     BEST32.
6472     WORK       TEST2     BEST8.
6473     WORK       TEST2     MYFMT.
Obs    libname    memname    nobs    nvar

806     WORK       TEST        2       3
807     WORK       TEST2       1       3

RcmdrPlugin.KMggplot2_0.2-0 is on CRAN now

I posted a new version of the "RcmdrPlugin.KMggplot2" package, which is an Rcmdr plug-in for a "ggplot2" GUI front-end.
This package assists you to make "ggplot2" graphics.

NEWS

Changes in version 0.2-0 (2013-01-23)
  • Added themes: classic, minimal (ggplot2-0.9.3).
  • Added themes: tufte, economist, solarized, stata, excel, igray, few, wsj (ggthemes).
  • Kaplan-Meier plot: added a option to show a p-value of the log-rank test (Thanks to Sharma Vivek).
  • Kaplan-Meier plot: added a option to draw a line at median survival (Thanks to Sharma Vivek).
  • Scatter plot matrix: fixed bugs and reimplemented, because the ggplot2::plotmatrix() is deprecated.
  • Scatter plot matrix: added stratified plots.
  • Modified start-up for the problem that Commander window open twice when a plug-in is loaded via library() (see Rcmdr 1.9-3 NEWS). In RcmdrPlugin.KMggplot2 0.2-0, you can directly load by library(RcmdrPlugin.KMggplot2).
themes
  • theme_classic (ggplot2)


  • theme_minimal (ggplot2)


  • theme_tufte (ggthemes)


  • theme_economist (ggthemes)


  • theme_solarized (ggthemes)


  • theme_stata (ggthemes)



  • theme_igray (ggthemes)


  • theme_few (ggthemes)


  • theme_wsj (ggthemes)

Kaplan-Meier plot: log-rank p-value and lines at median survival

Scatter plot matrix: stratified plots

Firefox のタブが接続中のままになるエラー

エラー: ReferenceError: oldSetTabTitle is not defined
ソースファイル: chrome://tabmixplus/content/utils.js
行: 347

こんなエラーがでてタブの名前が全部接続中に・・・
Tab Mix Plus をオフにするとなおるけどどうしたもんか。



アドオンのソースを調べると IE Tab 2 と干渉していたらしい事が分かった。
IE Tab 2 の方はあまり使わないので切っておくことにしたら無事解決した。
IE Tab 2 修正版 (4.12.22.2) にアップデートしてもなおるみたいです。

エラーが起きた環境

Time-dependent (varying) covariate / Time-dependent (varying) effect

比例ハザードモデルとその拡張のちょっとしたメモ。

  • 色々調べると、time-dependent と time-varying は特に区別していない文献ばかりだった
  • 当然 covariate と effect では意味が違うので注意
    • Proportional hazard
      • $h(t, \mathbf{x}, \boldsymbol{\beta}) = h_0(t) \exp(\mathbf{x}'\boldsymbol{\beta})$
    • Time-dependent covariate
      • $h(t, \mathbf{x}(t), \boldsymbol{\beta}) = h_0(t) \exp(\mathbf{x}(t)'\boldsymbol{\beta})$
    • Time-dependent effect
      • $h(t, \mathbf{x}, \boldsymbol{\beta}(t)) = h_0(t) \exp(\mathbf{x}'\boldsymbol{\beta}(t))$
    • Time-dependent covariate + effect
      • $h(t, \mathbf{x}(t), \boldsymbol{\beta}(t)) = h_0(t) \exp(\mathbf{x}(t)'\boldsymbol{\beta}(t))$

Recoding a factor variable in a data.frame by the levels() function

When you want to change the coding of a factor variable in R, you can use the levels() function.

Recoding z as 1 = A, 2-6 = B, 7 = C

d <- data.frame(z = gl(7, 1, 14))
d$zc <- factor(d$z)
levels(d$zc) <- list(A = 1, B = 2:6, C = 7)
d
Result
> levels(d$zc) <- list(A = 1, B = 2:6, C = 7)
> d
   z zc
1  1  A
2  2  B
3  3  B
4  4  B
5  5  B
6  6  B
7  7  C
8  1  A
9  2  B
10 3  B
11 4  B
12 5  B
13 6  B
14 7  C

Recoding z as 1 = "1", 2-6 = "2-6", 7 = "7"

levels(d$zc) <- list("1" = 1, "2-6" = 2:6, "7" = 7)
d
Result
> levels(d$zc) <- list("1" = 1, "2-6" = 2:6, "7" = 7)
> d
   z  zc
1  1   1
2  2 2-6
3  3 2-6
4  4 2-6
5  5 2-6
6  6 2-6
7  7   7
8  1   1
9  2 2-6
10 3 2-6
11 4 2-6
12 5 2-6
13 6 2-6
14 7   7

Penalized quasi-likelihood について

GLMM の推定アルゴリズムに Penalized quasi-likelihood (PQL) という方法があるのですが、整理のためメモを書くことにしました。

PQL

混合効果モデルのパラメータ推定において、周辺尤度の積分を必要とする方法があることはよく知られていると思います。
GLMM ではリンク関数が非線形なものを扱うが故に、この積分が非常に大変でした (現代の計算機では苦労せず解けるものも多い)。
一昔前はこの積分が大変だったため、非線形な関数を線形な関数に近似してあげて、LMM の範疇で扱えるようにした方法が PQL です。


GLMM として、確率変数 $\mathbf{Y}_i$ の期待値が、変量効果 $\mathbf{b}_i$ を与えた下で、
\[
\mathrm{E}[\mathbf{Y}_i|\mathbf{b}_i]=g^{-1}(\mathbf{X}_i\boldsymbol{\beta}+\mathbf{Z}_i\textbf{b}_i)=g^{-1}(\boldsymbol{\xi}_i)=\boldsymbol{\mu}_i
\] とモデル化された一般的なものを考えます ($\mathbf{X}_i$, $\mathbf{Z}_i$ はデザイン行列、$\boldsymbol{\beta}$ は固定効果のパラメータベクトル、$\boldsymbol{\xi}_i = \mathbf{X}_i\boldsymbol{\beta}+\mathbf{Z}_i\textbf{b}_i$、$g^{-1}$ はリンク関数の逆関数)。


PQL では $\boldsymbol{\xi}_i$ の関数である $\boldsymbol{\mu}_i$ に対して $\boldsymbol{\beta}=\hat{\boldsymbol{\beta}}$, $\mathbf{b}_i=\hat{\mathbf{b}_i}$ の周りの一次の Taylor 展開、
\[
g^{-1}(\mathbf{X}_i\boldsymbol{\beta}+\mathbf{Z}_i\textbf{b}_i) \approx g^{-1}(\mathbf{X}_i\hat{\boldsymbol{\beta}}+\mathbf{Z}_i\hat{\textbf{b}_i}) + \hat{\Delta}_i\mathbf{X}_i(\boldsymbol{\beta}-\hat{\boldsymbol{\beta}}) + \hat{\Delta}_i\mathbf{Z}_i(\textbf{b}_i-\hat{\textbf{b}_i})
\] を考えます、ただし、
\[
\hat{\Delta}_i= \mathrm{diag} \left( \frac{\partial g^{-1}(\xi_{ij})}{\partial \xi_{ij}} \Big|_{\boldsymbol{\xi}_i=\hat{\boldsymbol{\xi}}_i}\right)_{1 \leq j \leq n_i}
\] とします ($n_i \times n_i$ 次元行列)。


これを整理すると、
\[
\hat{\Delta}_i^{-1}(\boldsymbol{\mu}-g^{-1}(\mathbf{X}_i\hat{\boldsymbol{\beta}}+\mathbf{Z}_i\hat{\textbf{b}_i}))+ \mathbf{X}_i\hat{\boldsymbol{\beta}}+ \mathbf{Z}_i\hat{\textbf{b}_i} \approx \mathbf{X}_i\boldsymbol{\beta}+ \mathbf{Z}_i\textbf{b}_i
\] が得られます。
左辺をよく見ると、これは、$\hat{\Delta}_i^{-1}(\mathbf{Y}_i-g^{-1}(\mathbf{X}_i\hat{\boldsymbol{\beta}}+\mathbf{Z}_i\hat{\textbf{b}_i}))+ \mathbf{X}_i\hat{\boldsymbol{\beta}}+ \mathbf{Z}_i\hat{\textbf{b}_i} \equiv \mathbf{P}_i$ の期待値になっていることが分かります。
確率変数 $\mathbf{Y}_i$ 以外は全て定数とみなして新しい作業確率変数として $\mathbf{P}_i$ を定義します。
また、同じく $\mathbf{Y}_i$ 以外が全て定数とすれば、$\mathrm{Var}(\mathbf{P}_i\mid\mathbf{b}_i)= \hat{\Delta}_i^{-1} \mathrm{Var}(\mathbf{Y}_i\mid\mathbf{b}_i) \hat{\Delta}_i^{-1}$ が簡単に分かります。
そして、右辺からは非線形なリンク関数がうまく消去できていて、線形化することができました。


以上の近似を使って、LMM、
\[
\mathbf{P}_i=\mathbf{X}_i\boldsymbol{\beta}+\mathbf{Z}_i\mathbf{b}_i+\boldsymbol{\epsilon}^*_i,~
\mathrm{Var}(\boldsymbol{\epsilon}^*_i)= \mathrm{Var}(\mathbf{P}_i \mid \textbf{b}_i)
\] を当てはめたものが、PQL と呼ばれる方法です。


また、類似の Marginal quasi-likelihood (MQL) という方法では、変量効果の方を母集団平均で置き換えるため、$\mathbf{b}_i=\mathbf{0}$ を用います。
ただし、MQL は変量効果が非常に小さい場合でないとうまくいかないことが知られています。


また、アウトカムが二項分布に従う場合は、PQL と MQL による近似は特にうまくいかないケースがあることが知られています。

感想

とまあ、一次の Taylor 展開を使ったシンプルな方法だという事が分かります。
計算は早くなりますが、デメリットもあります。
作業確率変数 $\mathbf{P}_i$ に置き換えるため、$\mathbf{y}_i$ に基づく尤度が定義できない事はデメリットの一つでしょう。
どこかに quasi-likelihood を使う方法だから良くないと書いてあった気がしますが、そうではないんです。
本質的な問題点は作業確率変数を使った近似の方ですよね。


よって、利用可能であれば、適応型ガウス–エルミート求積法などの周辺尤度を直接計算するような方法が望ましいでしょう。


ちなみに SAS 9.3 の GLIMMIX Procedure は METHOD = RSPL (PQL で REML 推定) がデフォルトです。

参考文献

[1] Breslow N. Whither PQL? UW Biostatistics Working Paper Series. Working Paper 192. http://biostats.bepress.com/uwbiostat/paper192