2015年12月11日金曜日

SASとRとSTATAとSPSSを比較してみる

2015年8月27日追記

異なる統計パッケージについて、「使い分け:SASではできてSTATAではできないような一般的な統計処理などはあるの?」というお問い合わせあり、回答ついでにここに意見貼り付けておきます。

皆さんからのご意見・突っ込みお待ちしております。

坪谷の回答:
お問い合わせの件ですが、それぞれパッケージでできること、できないことは違います。
基本的な解析はまぁなんでもできるでしょうけど、新しい方法(ex.propensity score matchingやmultiple imputation(MI) etc)は、パッケージにより、またバージョンにより、できたりできなかったりします。
またできたとしても、さくっとできるものもあれば、そのプログラムを書くのがすげー面倒なものもあります。
また解析に時間がかかるものもあります(MIで1日以上かかることも)。
また同じくできるにしても、バックグラウンドで異なるアルゴリズムで動いており、出てくる推定結果が異なることもあります(まぁ普通は誤差の範囲内でしょうが)。


臨床医は、自分で解析するんじゃなくて、疫学者や生物統計家とコラボして、解析お願いしたら?
もちろんその人も共著者に入れてですね。
その方が何かといいと思いますよ。
楽 だし、結局、疫学と統計学わかんないまま、出てきた数字を拾って言われるままに何となく論文作っても、論文のレビューの特に、レビューワーから疫学・統計 学的なこと突っ込まれて(一流雑誌にはふつうレビューワは一人はそういう人が入るので)答えられないのは勿体ないと思うので。


それも含めて自分でやるんだー!!というのは、まぁそりゃできるに越したことはないでしょうけど(一般論ですが)かなり大変だと思います。


ーーーーーーーーーーーーーーーーーーーーーー

2015年6月5日追記

「とりあえずどの統計ソフト使ったらいいの?」と聞かれることが結構あります。

もちろん絶対的な正解はありませんが、現時点では、基本的には今から使い始めるなら、STATA+Rが良いと思います。

いきなり両方は難しいと思うので、まずはSTATAが良いのではないかと。

コマンドが簡単ですし、クリックしての解析も簡単です。

STATA使いながら、疫学・統計の勉強をして、疫学の経験値も上げていき、途中からRも使いだすというので良いのではないでしょうか。

いきなりRは結構敷居高いかも(嫌いになるかも)

SASはライセンス維持が結構いろんな意味で大変な気がします。


ーーーーーーーーーーーーーーーーーーーーーー

2015年1月15日記載

今日はこんなことで1日が過ぎてしまったーーーー、正直研究的には不毛でしたが、せっかくなのでシェア。


(以下は一般論ではなくデータの内容や解析にも依存するのでしょうけど・・)


今日、ちょっと訳あって、同じ解析を、SAS,R,STATA,SPSSでやりました(全部私の1台のPCに入っていますw)


行ったのは、単純な回帰(reg@SAS,STATAとかlm@R。SPSSはクリックしただけなので良くわからずw)です。


使用したデータには欠損があります。
私の理解では、統計パッケージでは、作成した統計モデルに含まれる変数について欠損があれば、その変数は統計モデルから自動的に削除して解析がされるという理解でした(これはたぶん真実だと思うのですが・・)


同じ解析をしているので、どれも解析対象Nは同じになると思いきや・・・・
解析に使用されているNが異なってる!!
同じデータセットで同じ解析をしているのに、解析に使用されたNが、SAS=R と SPSS=STATA、で違いました(苦笑)
幸い、同じNを用いた場合の結果は「ほぼ」(←重要)同じでした。つまりSASとRは同じ、SPSSとSTATAも同じ。で、SASとSPSSは異なる←N違うしね。
いろいろ考えましたが、違いわからず・・・。ためしにcomplete caseだけのファイルをSASで作って、それをSTATAやRで解析しても、それもNが異なる始末。謎すぎるのですが、あまり本題ではないので、追及はここら辺で終了。
データのせいなのか、パッケージ側の原因なのか・・・後者でないことを祈る・・・

SASとSTATAは、解析後に使用したNが出るので、いいのですが、RとSPSSは出ない?のでしょうか。

Rで解析に使われたNが出ないのは意外でした。きっとRのことですからオプションで出るんでしょうけど。

SPSS ほとんど使ったことないので、よくわかりません(使い方によっては出るの?)が、特にSPSSを使っている人の多くは、「あまり数式とかわかっていないけ ど、いろいろクリックしたら結果が出てここ見ればいいんでしょ」的な人が多い印象で、これはちょっと危ないのではと思いました。
(SPSSのアウトプットには「自由度」が記載されており、そこからNを推測可能ではありましたが、そのことをSPSSをクリックで使っている人のうちどこまでそれを理解しているのだろう・・)

それとSPSSだけが、有効数字が小さいですね。
1未満の係数で、有効数字2ケタとか少なすぎでは・・・せめて3桁あった方がいい気がしますが、どこかいじるとでるんでしょうかね(SPSSよくわからん)。
他の3つ(SAS,STATA,R)はデフォルトで、要らないくらいにたくさん数字を出してくれますね。

SPSSは、標準化回帰係数もデフォで出してくれるので楽。(これまたSPSS使っている人が、偏回帰と標準化係数の違いを理解しているのか謎ですが・・・)



今日はこんなことで1日が終了・・・
プログラムを書くことよりも、データの取り込みで結構時間使ってしまった印象・・・
もっとスムーズに4つを同じくらいに使いこなせるとよいのですが!


追加メモ:
・確かに使用されたsample sizeを表示しないですね。degrees of freedomから読みとるか、
design matrixの行数を数えればいいでしょうか。
http://rpubs.com/kaz_yos/n-of-obs (実行例にpredictも足しました)

上記RPubsではdesign.matrix()をつかって調べています。まあ、すべてがprogrammableなので、summary methodを書き変えてオレオレsummary()にして最初に使用されたsample sizeを表示するように改造すればいいかもしれません。


・http://www.statmethods.net/stats/regression.html
より抜粋。
# Multiple Linear Regression Example
fit <- lm(y ~ x1 + x2 + x3, data=mydata)
summary(fit) # show results
fitted(fit) # predicted values →使われたデータ数と一致するはず


・SPSS
https://l.facebook.com/l.php?u=ftp%3A%2F%2Fpublic.dhe.ibm.com%2Fsoftware%2Fanalytics%2Fspss%2Fdocumentation%2Fstatistics%2F20.0%2Fen%2Fclient%2FManuals%2FIBM_SPSS_Statistics_Command_Syntax_Reference.pdf&h=5AQENVnfz

REGRESSION (p.1738)

DESCRIPTIVES Subcommand (P.1752)

DESCRIPTIVES requests the display of correlations and descriptive statistics. By default, descriptive statistics are not displayed.
N: Display numbers of cases used to compute correlation coefficients in the Correlations table.
ALL: All descriptive statistics.

MISSING Subcommand (P.1755)

MISSING controls the treatment of cases with missing values. By default, a case that has a user-missing or system-missing value for any variable named or implied on VARIABLES is omitted from the computation of the correlation matrix on which all analyses are based.

The minimum specification is a keyword specifying a missing-value treatment.

LISTWISE: Delete cases with missing values listwise. Only cases with valid valuesfor all variables named on the current VARIABLES subcommand are used. If INCLUDE is also specified, only cases with system-missing values are deleted listwise. LISTWISE is the default if the MISSING subcommand is omitted.

PAIRWISE: Delete cases with missing values pairwise. Each correlation coefficient is computed using cases with complete data for the pair of variables correlated. If INCLUDE is also specified, only cases with system-missing values are deleted pairwise

MEANSUBSTITUTION: Replace missing values with the variable mean. All cases are included and the substitutions are treated as valid observations. If INCLUDE is also specified, user-missing values are treated as valid and are included in the computation of the means.

INCLUDE:Includes cases with user-missing values. All user-missing values are treated as valid values. This keyword can be specified along with the methods LISTWISE, PAIRWISE, or MEANSUBSTITUTION.

By default, descriptive statistics are not displayed.→デフォルトでだしてよ~

0 件のコメント:

コメントを投稿