Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Yamadai.Rデモンストレーションセッション

7,089 views

Published on

2013/03/18にひらかれたYamadai.Rの後半スライドです

Published in: Education
  • Be the first to comment

Yamadai.Rデモンストレーションセッション

  1. 1. Welcome toYamadai. .R #1 2013/03/18
  2. 2. デモンストレーション セッション Yamadai.R #1
  3. 3. おしながき1. Anovakunの使いかた(Rで分散分析)2. psychパッケージ(Rで因子分析)3. クラスター分析4. sem/lavaanパッケージ(RでSEM)5. MCMCpackパッケージ(Rでベイズ推 定)
  4. 4. anovakunの使い方 福屋いずみ
  5. 5. Anovakun・「R」で動作する分散分析関数・実験参加者間要因,実験参加者内要因, または両方含むタイプの分散分析が可能・単純主効果の検定 (一次の交互作用についてのみ)
  6. 6. ANOVA4 on the Web
  7. 7. ANOVA君のファイル入手方法○井関先生のホームページより ANOVA君のファイルから最新のものを保存http://www11.atpages.jp/~riseki/pukiwikiplus/index.php anovakun_432.txt(2013.03.18 現在)
  8. 8. Rstudio での読み取り方
  9. 9. データ作成例:3(A)×2(B)の実験参加者内要因 A1 A2 A3 B1 B2 B1 B2 B1 B2 例:3(A)×2(B)の実験参加者間要因 B1 A1 B2 B1 A2 B2 B1 A3 B2
  10. 10. データ作成例:3(A:実験参加者間)×2(B:実験参加者内) A1 A2 B1 B2 A3
  11. 11. 基本コードanovakun(データ,”要因計画”,水準,…)○要因計画 sを基準に左が実験参加者間要因 右が実験参加者内要因 例: “sA” 実験参加者内1要因計画 “AsB”実験参加者間内2要因混合計画 ○水準 要因数に合わせて要因Aの水準から記入 例:anovakun(data,“AsB”,2,4)
  12. 12. 練習問題 2(実験参加者内)×2(実験参加者内)×3(実験参加者間) いanovakun(data, ろ , は ,に , ) い ろ は に オ 3 ク 1 サ 2ア “ABsC” カ 2 ケ 2 シ 3イ “AsBC” キ 4 コ 3 ス 1ウ ABsCエ ASBC
  13. 13. 基本コードオプション効果量eta・・・「eta = T」とすることで,分散分析表にイータ二乗(eta squared)を追加peta・・・「peta = T」とすることで,分散分析表に偏イータ二乗(partial eta squared)を追加geta・・・「geta = T」とすることで,分散分析表に一般化イータ二乗(generalized eta squared)を追加eps・・・ 「eps = T」とすることで,分散分析表にイプシロン二乗(epsilon squared)を追加peps・・・「peps = T」とすることで,分散分析表に偏イプシロン二乗(partial epsilon squared)を追加 gpes・・・「gpes = T」とすることで,分散分析表に一般化イプシロン二乗(generalized epsilon squared)を追加omega・・・「omega = T」とすることで,分散分析表に加算モデルに基づくオメガ二乗(omega squared) を追加omegana・・・「omegana = T」とすることで,分散分析表に非加算モデルに基づくオメガ二乗(omega squared)を追加pomega・・・「pomega = T」とすることで,分散分析表に偏オメガ二乗(partial omega squared)を追加 gomega・・・「gomega = T」とすることで,分散分析表に加算モデルに二基づく一般化オメガ二乗 (generalized omega squared)を追加gomegana・・・「gomegana = T」とすることで,分散分析表に非加算モデルに基づく一般化オメガ二乗 (generalized omega squared)を追加prep・・・「prep = T」とすることで,分散分析表にp_repを追加 例:anovakun(data,“AsB”,2,4,eta=T) source; 7 〜12行目
  14. 14. 多重比較1. holm・・・「holm = T」とすることで,Holmの方法(Sequentially Rejective Bonferroni Procedure)を指定できます。2. hc・・・「hc = T」とすることで,Holland-Copenhaverの方法(Improved Sequentially Rejective Bonferroni Test Procedure)を指定できます。3. s2r・・・「s2r = T」とすることで,RasmussenのアルゴリズムによるShaffer2の方法を指定で きます。4. s2d・・・「s2d = T」とすることで,DonoghueのアルゴリズムによるShaffer2の方法を指定で きます。5. fs1・・・「fs1 = T」とすることで,主効果(単純主効果)の結果を反映させたShaffer1の方法 を指定できます。6. fs2r・・・「fs2r = T」とすることで,主効果(単純主効果)の結果を反映させたShaffer2の方法 を指定できます(Rasmussenのアルゴリズム)。7. fs2d・・・「fs2r = T」とすることで,主効果(単純主効果)の結果を反映させたShaffer2の方法 を指定できます(Donoghueのアルゴリズム)。8. criteria・・・「criteria = T」とすると,多重比較の結果の出力時に,調整済みp値の代わりに調 整後の有意水準を表示します。
  15. 15. psychパッケージ @kosugitti
  16. 16. Basic data analysis• Descriptive analysis• Simple descriptive graphics• Testing correlations• Polycoric,Tetrachoric,Polyserial,Biserial correlationsItem and scale analysis• Factor analysis• Cluster analysis• Determining the number of dimensions to extract• Reliability analysisその他• IRT analysis• Multiple regression• Simulation• Psychometrics• Etc…
  17. 17. 記述統計で便利な関数• describe関数;記述統計を一通り算出します• summary関数より見やすい source; 14 〜18行目
  18. 18. 記述統計で便利な関数• describeBy関数;群毎にdescribe source; 18行目
  19. 19. 記述統計で便利な関数• corr.test;相関係数の検定までしてくれる相関係数を出す関数,cor()で は係数が出てくるだけcorr.test()関数は,係数,散 布ルサイズ,p値を出す source; 20行目
  20. 20. 記述統計で便利な関数• multi.hist関数;マルチでヒストです。 source; 21行目
  21. 21. 因子分析に便利な関数• Rがもっているfactanal関数はちょっと不便 • 最尤法しかつかえない • 回転がPromaxとVarimaxの二種類しかない• Psychパッケージを使えばすぐに解決!
  22. 22. 因子分析に便利な関数fa.parallel関数;平行分析による因子数の決定。 データと同じサイズの乱 数行列とスクリープロッ トで比較して,意味のあ る因子数を提案してくれ る。 source; 22 〜23行目
  23. 23. 因子分析に便利な関数• 実際の因子分析はfa関数で!• 様々なオプション • nfactors;因子数 • rotate;回転は直交で varimax, quartimax, bentlerT, geominT,斜交でpromax, oblimin, simplimax, bentlerQ,geominQ,clusterから選択できます • scores;TRUEにすれば因子得点を推定 • impute;欠損値をmedianかmeanで代入 • fm;共通性の推定にminres,WLS,GLS,PA,MLから選べ ます
  24. 24. 因子分析に便利な関数• 実行例 共通性(h2) と 独自性(u2) ※h2=1-u2 因子負荷量 source; 24 〜25行目
  25. 25. 因子分析に便利な関数 負荷量,寄与率,累積寄与率 因子間相関 適合度
  26. 26. 信頼性係数の算出• alpha関数;α係数の算出 o 言わずと知れた内的整合性信頼性係数• omega関数;ω係数の算出 o 因子分析結果に基づく信頼性係数。 o α係数はいわば非常におおざっぱな計算法で 出されている信頼性の下限なので,ωのよう な係数の方がよい,という話も(清水, 2007) source; 26 〜27行目
  27. 27. 信頼性係数の算出• alpha関数
  28. 28. 信頼性の算出• omega関数• オプション  nfactors  fm  rotateomegaSem関数を使うと,CFAに基づくomega係数のほか,適合度指標も出してくれる
  29. 29. Rでクラスター分析 @kosugitti
  30. 30. クラスター分析とは• 数値の近いものを同じグループ(クラスター)に まとめる,という手法。• 手法は大きく分けて二つ。 o 階層的クラスター o 非階層的クラスター• いずれもクラスター数は未知で,様々な指標で もって事前・事後に定める
  31. 31. 階層的クラスター分析• まとめたクラスターをさらに上位のクラ スターにまとめる,というのを繰り返す
  32. 32. クラスタリングの方法• 距離のルール • まとめ方のルール o ユークリッド距離 o Ward法 o マンハッタン距離 o 最長距離法 o ミンコフスキ距離 o 最短距離法 o マハラヌビス距離 o その他 実行例
  33. 33. 非階層的クラスター分析o k-means法が有名  SPSSでは大規模データのクラスタリング,とい う名前になっている  事前にいくつのクラスタにするか決めておく必 要がある。  アルゴリズムについては次のアドレスのアニ メーションがわかりやすい  http://d.hatena.ne.jp/nitoyon/20090409/kme ans_visualise
  34. 34. モデルに基づくクラスタリング
  35. 35. クラスター数の決め方について• pvclustパッケージ(階層的) o シミュレーションによって出現確率からクラスター数を検定する• NbClustパッケージ(階層的) o 様々な統計指標を算出してくれる• MClust/Model-based HC o モデルに基づいた階層的クラスター分析• Xmeans法 source; 29 〜52行目a o BIC基準でk-means法を反復的に
  36. 36. 自己組織化マップとは自己組織化マップ(SOM: Self-Organizing Map) は、コホネン(T. Kohonen)により提案された 教師なしのニューラルネットワークアルゴリ ズムで、高次元データを2次元平面上へ非線 形写像するデータ解析方法である。(by金先 生のページ)
  37. 37. 自己組織化マップの特徴• 任意のサイズの2次元図にデー タを分類する• 分類の基準は類似度• カテゴリカルデータはダミー 変数にして距離を算出する• マップのグラデーションから 傾向を読み取る• NNモデルなので数値の一意的 再現性はないが,強力な分類 source; 55 〜61行目
  38. 38. 自己組織化マップの使い方• とにかく分類したい!というあなたに• データの全体像を図で見てみたい!という あなたに• とりあえず分類してから,決定木などで分 類ルールを探す,という使い方も。• 数量化三類や階層クラスタリングのような 代数的バックボーンがないので理解しやす い=突っ込まれにくい!
  39. 39. RでSEM @kosugitti
  40. 40. SEMとは• Structural Equation Modelingの略• 構造方程式モデリングともいう• 因子分析+回帰分析+α用語• 観測変数/潜在変数• 測定方程式/構造方程式• 内生変数/外生変数
  41. 41. SEMのモデル図と方程式• 回帰分析 a b Y X• 因子分析 X1 e1 F X2 e2 X3 e3
  42. 42. SEMが便利になった理由• 自由なモデリング o いちいち「○○分析」「××分析」の入門をし 直さなくてよい• モデルの評価次元の統一 o 適合度指標によって,モデル全体を一括評価• グラフィカルなソフトウェアの登場 o Amosの存在は高く評価しなければならない o EQSとかLISRELもがんばってたんだぜ o OpenMXという手もあるぜ
  43. 43. Rでだって負けてはいない• CUIなので見栄えの良さは負けるけど o やや慣れも必要だけど o 一部GUI出力するようになってきているし o そもそもたくさんの測定方程式をGUIで書く のはかえってややこしいし o 機能はどんどん増えていってるし o 分析環境がRの中で統一できるし o 無償だし o 無償だし o 無償だし
  44. 44. Rにおける二大SEMパッケージSEMパッケージ lavaanパッケージ• こちらが古株 • LAtent VAriables• 最近になって使いや ANalysis すさはぐっと増した • 後発だけに,様々な• パス図も出力するよ 便利機能。• ブートストラップ, • ブートストラップ, 多母集団同時分析に 多母集団,平均構造 も対応してるよ なんでもござれ。 source; 65 〜127行目 source; 132 〜144行目 OpenMXパッケージというのもあるよ
  45. 45. とりあえずやってみよういつものirisデータを使って 花びらの長さ 顎の長さSepal.Length e1 Petal.Length 花びらの幅 顎の幅Sepal.Width e2 Petal.Length{sem} {lavaan}model.a2 <- specifyEquations() model.b1 <-Petal.Length = path1 * Sepal.Length + path3 * Petal.Length ~ Sepal.Length+Sepal.WidthSepal.Width Petal.Width ~ Sepal.Length+Sepal.WidthPetal.Width = path2 * Sepal.Length + path4 * Sepal.Width result.b1 <- cfa(model.b1,data=subiris)v(Sepal.Length) = v1 summary(result.b1,fit.measures=T,standardized=T)v(Sepal.Width) = v2v(Petal.Length) = v3v(Petal.Width) = v4result.a2 <- sem(model.a2,cov(subiris),150)summary(result.a2)
  46. 46. 両者の書式〜{sem}の場合semパッケージの書式• specifyModel()を使うとき o <-で因果,<>で相関(分散) o 変数X <- 変数Y,パス名,初期値/固定母数• specifyEquations()を使うとき o 変数X = 係数z1 * 変数Y o v(変数)=分散• 出力はsummary o 適合度指標はfit.indecesオプションで o 標準化係数を出すstandardizedCoefficients() o 修正指数を出すmod.indices()
  47. 47. 両者の書式〜{lavaan}の場合• モデルは変数間をつなぐだけ o 潜在変数=~観測変数1+2+3+...で測定方程式 o 変数X~変数Y で構造方程式 o 変数X~~変数Yで相関関係(共分散) o 他にも~1で切片,f1 ~ 0*f2で直交,など。• 結果はsummary関数で o オプションとして  適合度指標 fit.measure=TRUE  標準化係数 standardrized=TRUE• lavaanの方がやや親切かな,と。
  48. 48. 応用編;潜在変数をおいたモデルいつものirisデータを使って 顎の長さSepal.Length e1 顎の幅Sepal.Width e2 F 花びらの長さ e3 Petal.Length 花びらの幅 e4 Petal.Length パッケージsemのコードは65〜127行目 パッケージlavaanのコードは130〜144行目 です。実際に試してみてください
  49. 49. 注意;パッケージによる上書き• パッケージsemとパッケージlavaanはど ちらもsem()という関数を定義しています• どちらの関数を使うのか,明示してない 場合は「後で読み込まれた方」が使われ ます。• 対策1;明示する o lavaan::sem(),のようにパッケージ名::関数 名で指定できます• 対策2;関係ない方を解放する o detach(package:lavaan)のように取り外す
  50. 50. Bootstrapについて ブートストラップ 母集団 復元抽出 ブートストラップ サンプル サンプル ブートストラップ サンプル サンプル ブートストラップ サンプル ブートストラップ サンプル サンプル こっちを集め るのが政正統 ・ ・ 派推測統計学 ・ ・でも真面目にやってないでしょ ・ サンプル数N ・ サンプル数M かったるいし
  51. 51. 多母集団同時分析• SEMのおかげで同じモデルを色々なグ ループ(サンプル)に当てはめて検証す ることが可能に• それどころか,一部の係数を等値して検 証する,という扱い方も!• 因子負荷量だけが同じとか,分散を等し くするとか!
  52. 52. ブートストラップの実装• ブートストラップをするには o semパッケージはbootSem関数 o lavaanパッケージはbootstrapLavaan関数• bootSem,bootstrapLavaanのオプションR o R=1000で1000個のブートストラップサンプ ルを生成
  53. 53. 多母集団同時分析の実装• 多母集団同時分析をするには o semパッケージでは,複数のモデルを multigroupModel関数でひとつにまとめ,ま とめた関数をsem関数で実行する。  例では全て同じモデルを当てはめているので, 因子負荷量からなにから完全に同じになる o lavaanパッケージではsem関数のオプション として指定  等値制約をかけるときは,制約する係数を group.eauql関数で指定
  54. 54. Rでベイズ推定 @kosugitti
  55. 55. これからはベイジアン• 学会でこれからの統計業界はベイジアン 一色になるよ,と言われてそろそろ10年 o ちなみにその前は「これからの統計業界は SEM一色になるよ」と言われていたし,だい たいそうなってる• アプリケーション上での実装が進んでき ているので,あながち外れではない• 心理学業界は検定至上主義思想があるか ら,もう少し導入が先になるかも・・・
  56. 56. ベイズを使うと何が嬉しいの?• ベイズ統計的に考えると o χ二乗分布,t分布,F分布など,検定に応じ て分布を変えるという必要がない。  教えやすい,間違えにくい o 検定という考え方がそもそもなくなる  色々な検定を覚える必要がない  効果量とかも関係ない o データだけに基づいて物が言える  正規分布を仮定できる母集団から完全無作為サ ンプリングしてきたもの,とか言い張らなくて いい
  57. 57. ベイジアンになるための注意• あらゆるものを確率変数と考える o 回帰係数も,因子負荷量も確率変数 o たったひとつの推定値(真の値)に近づくと いう考え方がない。 o 推定値も確率変数として,中心化傾向の指標 と散らばりの指標を伴って報告される o 信頼区間Confidence Intervalではなく,信用 区間Credible Intervalといいあらわす• 思想が根本から違うと考えた方がいい
  58. 58. ベイズの使われている場所• スパムメールの学習アルゴリズムとして o 技名;ナイーブベイズ(単純ベイズ分類) o 実装例;多くのメーラー• 実例に基づく経験知の積み重ねとして o 技名;ベイジアンネット o 実装例;病院,警察などいろいろ
  59. 59. ベイズ統計が使われ始めたのは• やはりコンピュータの演算能力が爆発的 に発達したから。 o ブートストラップのように,リサンプリング を数千回行っても数秒で終わる o ベイズ的推定値を求めるには,分布の形や面 積が分からなければならないが,そのための 積分計算が実用的時間の範囲内で行われるよ うになった o 積分の計算には乱数の発生を必要とするが, 乱数発生法も進化!(MC法)
  60. 60. 頻度主義とベイジアンの思想• 「究極の魚料理」を求めているとする• ネイマンピアソン派は,世界各地を回っ て様々な料理を食べる。特殊な調理法を 省いていくと,真の魚料理ができると考 えている• ブートストラップ屋は,一冊の魚料理本 を最初から最後まで何度も何度も通読し ていると,その中に魚料理の王道が現れ ると考えている
  61. 61. 頻度主義とベイジアンの思想• ベイジアンは一冊の本を見ながら,自分 の好きな料理を作り続けていると,ひと つの答えにたどり着く。• 「やっぱり魚は刺身に醤油やで!」• 変な背理法なんか,もうええやん。。。
  62. 62. で,Rでどうやんの• ナイーブベイズをするならe1071パッケー ジ• ベイジアンネットをするならdealパッ ケージ• 回帰分析,因子分析などSEMモデルをベ イズ推定したいという場合はMCMCpack から始めるのが一番
  63. 63. MCMCpackの中身• 現在ver1.2-4,一部抜粋すると o MCMCregress ...回帰分析 o MCMCfactanal ...探索的因子分析 o MCMCirt1d ...項目反応理論 o MCMCirtKd ...多次元項目反応理論 o MCMChregress ...階層線形モデル o MCMClogit ...ロジスティック回帰 o MCMCordfactanal ...順序尺度因子分析 o MCMCpoisson ...ポワソン回帰 o MCMCtobit ...打ち切りデータの解析
  64. 64. MCMCpack関数の共通オプション• mcmc ... 反復回数• burnin ... 最初のうちは数値が落ち着か ないので,準備期間として捨てる部分• thin ... サンプリング間隔。間 引きに使う• verbose... 画面に結果を出力する頻度• seed ... 乱数の種
  65. 65. オプションとそのイメージseed 途中経過を出力するタイミング=verbose ・・・ 推定に使う間引き間隔=thin burn in 推定に使われる範囲 mcmc 室橋「MCMCにおける収束判定技法の利用」を参考に筆者改変 http://www.es99.net/murohashi/filemgmt_data/files/JPAWS08.pdf
  66. 66. mcmcはどれぐらい?いつまでburn inしたらいいの?• デフォルトでは mcmc=100000,burnin=1000になっている• 収束したかどうか,を判定する指標 o Gewekeの指標 o Gelman&Rubinの指標 o Heidelberger and Welchの指標 o Rafty and Lewisの指標• いずれもcodaパッケージ(MCMCpackが自動的 に召還)に含まれています
  67. 67. 実践してみよう• 回帰分析MCMCregress o 最小二乗法による結果と比較してみよう• 因子分析MCMCfactanal o minres法による結果と比較してみよう source; 146 〜161行目
  68. 68. 収束判定の実装• codaパッケージのcodamenu()関数から,対 話的に• gewek.diag関数やraftery.diag関数で直接判断 指標を呼び出すことも。 o Gewekeの指標はZ値で出るので,±1.96以内 に入っていれば収束してないとはいえない o Gelman and Rubin,Rafty and Lewisの指標は 自己相関をもとにしていて1.0に近ければOK o Heidelberg and Welchはテスト結果も出ます
  69. 69. ぶっちゃけRだとまだまだ• MCMCpackは結構頻繁にバージョンアッ プしている o どんどん機能が追加されています• それでもやっぱり不便を感じる o MCMCfactanalでうまくいったためしがない o SEMをまるごとベイズ推定したいよね• そんなときは,素直にM-plus• これはRをdisってるのではなくて,Rには もっと広い統計の世界があるからいいの
  70. 70. ある有名なお父さんは言いましたなにジョジョ,Rが結局は役に立たない?ジョジョ,それはRを使い込んでないからだよ逆に考えるんだ 「Rでこんなにもできる, R(とM-plus)があればできないことはない」と考えるんだ...
  71. 71. Yamadai. #1Enjoy Life!

×