チラシの裏の落書き日記

統計とか,研究とか,日常についての備忘録的なもの。

趣味を始める

 いきなり新しい趣味を始めたくなった。昔から見るのが好きだったジャグリングをやろうと思う。一番基本的なボールというやつから手をつける。3つのボールを小気味良くポコポコと投げ続けられるようになりたいものだ。
 ネットでやり方を調べてみたり,youtubeで実際の動画を見て見ながら,見よう見まねでやるものの,連続して投げ続けるのは難しい。だが,新しいことを始めるのは楽しいものだ。体を使うのも心地よい。普段使わない脳みその部分を使っている気分なのも大変によい。
 道具の場所もとらないし,持ち運びも楽なので,時間を見つけてちょくちょく練習することにする。ただし,三日坊主になってはいけないので,気合の入れ過ぎには注意する。

文章を書く上で気をつけること

自分で文章を書くときにやりがちなことをまとめておく。文章を書くのは苦手なので,注意点をキチンと書いてみる。この文章の目的は,自分にとっての現在把握している気をつけるべき点を明確にし,書き残すことで自分の作文能力を向上させるための資料を作成することである。

以下の点をあつかう。

  1. 目的を明確にする。
  2. 論理は不可欠
  3. ”具体的に”という言葉の具体的さを考える。
  4. 長い文章は書かない。
  5. ギャップに注意する。
  6. はじめと終わりを合わせる。
  7. 接続詞に注意する。
  8. 人にチェックをお願いする。
  9. 自分で読み上げる。

目的を明確にする。

 まず,何か文章を書くということには目的が無くてはならない。特に自分のやっていることを人に伝えるための文章を書く場合には,何が伝わったらいいのか(十分なのか)を正確に定義しなければならない。目的のない”つれづれなるままに”書かれた文章が許されるのは,日記やかなり狭いコミュニティでの交流に限られると考えられる。
 多くの人に自分自身のやっていること,アイデア,研究内容を伝える際には目的が必要であるし,目的があるから次に何をしなければならないかが自然に出てくる。数学のように定義から積み上げていく書き方も大事ではあるが,限られた紙面・時間で概要を伝えるためには目的を先に明示するのが望ましい。
 目的には,何か社会的,分野的な問題意識も関わっている。”そもそも意味ないんじゃない?”と思われるのを防ぐためには,解決すべき問題がある,ということを明示しなければならない。基本的には,理想状態と現実のギャップがある,そのギャップを埋める,というのがわかりやすいテンプレのように思う。例えば,手法Aを使えばこんなに世界が良くなるが,使うためにはいくつかの問題がある,そこで,その問題を解決する,といった形式だ。目的は,理想の状態,問題はギャップとするとわかりやすい。
 このような大きな目的を設定できるかが勝負である。隠れたニーズや欲求を察知したり,適切に嗅ぎ分けられる嗅覚が必要である。これは多分にセンスに依存している気もするが,訓練次第で勘が働くようになりそうである。そもそも,解決する必要がある問題や目的を正確に定めるのが何より大事になる。これがずれると後の解決策も意味が無い。正確な問題の設定のために,先輩,上司,教授,友人,同僚,の手を借りることを躊躇してはいけない。問題のオリジナリティというは大事だが,それはそれとして,すごい人というのがどのように世の中を見ているのかに触れるためにも,自分の狭い世界に閉じこもっていてはいけない。

論理は不可欠

 論理的に書くというのはこれまた難しい。数式の証明ならば,わかりやすいが,論理的な文章となると,それだけで多くの本が書かれているくらい大変なテーマである。あんまり難しいことは考えずに,私が学んだ小さい一歩を書き留めておく。
 やるべきことは,同じ概念には同じ用語をキチンと割り当てる,独自の用語を使う場合にはその定義を明確に記述する,ということである。言い換えをしてもいいのは日常用語のみ。テクニカルタームは具体的に説明することは行ってもいいが,言い換えを行ってはいけない。これは基本として忘れないようにする。
 この上で,Aが問題だ,なぜならば●●,解決には●●が必要,なぜ解決できるか,というのを書いていけば良い。型を学ばなければならない。変にオリジナリティを出して行けはいけない。型にあてはめて書く。型にはめられないことは書かない。それは書いても伝わらないことだから。目的に合わせて,1つずつ必要な要素を解決していくことが必要。目的のために問題を分割する。分割した問題をさらに分割する。この作業を十分に繰り返していく。そうするとやるべきことが見えてくるハズ。あとは,それを解決すれば,ドミノ式にはじめの問題の解決に向かうはず。だが,念のため,それが解決した場合に,実際にどうなるかを想像することが必要である。

”具体的に”という言葉の具体的さを考える。

 具体的にはどれくらい具体的なのか。個人的には,具体的の加減が分からず非常に困っていた。いや,未だに困っているのだが。数式であれば,一般的な式に具体的な値を入れたり,具体例というものは作れるのだが。なんとなくわかってきたのが,いわゆる,5W1Hというものがハッキリしていることが具体的と言われた時に満たすべき条件として重要なのかもしれない。相手が,自分の文章を読んである程度正確にやることがわかるくらいに5W1Hの内容を書くことを目指す。
 研究であれば,仮説が明確(独立変数と従属変数が何で,分析が何か),対象は誰か,いつやるか,どのような実験をやるか,どのような理論を使うか,(どこでやるか)などがあれば結構具体的になるような気がする。というか,論文で求められている項目をそのまま言えばいいのか。なるほど。

長い文章は書かない。

 文章というか,一文を長くしない。できるだけ短文にする。イメージとしては英語を書く時のように,主語,述語,目的語など書いて,修飾は少なめにする。論理的に繋がる部分は,2文に分けても良い。というか,私の場合はわけないと分けの分からない文章に成ってしまう。基本は,短めの文章を書くことを心がける。

ギャップに注意する。

 論理のギャップは常に気をつけないといけない。意外と実証されていないこと,未定義のことを暗に仮定していることもあるので注意が必要だ。今言及していることは,直前の内容を正確に受けているか,内容はこれまでに説明していないことが入っていないかなど注意する。

はじめと終わりを合わせる。

 論理をつらつらつなげていくと,間違ってはいないけど,目的からはずれているということがしばしばある。そのため,目的を書いたら,その解答・結論を先に書いてしまったほうがいいかもしれない。目的と結論から議論がずれないように気をつける。

接続詞に注意する。

 接続詞のリストは何度でも確認したほうがいい。
http://pothos.main.jp/setuzokusi.htm
こういうものを参考にする。机の前に貼って自分のものになるまで何度も参照する。

人にチェックをお願いする。

 恥を忍んで,人に自分の文章を晒してく。基本的に誤字脱字などはなくして見てもらうのがマナーだと思うが,私自身は誤字脱字が多いので見せるのに躊躇してしまう。誤字脱字のチェック方法はどうにか確立しなければならない。
 人に診てもらうことによって,自分では考えていなかった観点から意見が出る。自分では自明だと思っていたことが相手にとっては全く自明でないことも多々ある。意見を聞いたら,取り入れるかどうかは自分で判断すること。複数人に見せていると色々な人の意見が入り混じってむしろ文章が混乱することがある。しかし,見せないよりは見せたほうがよい(少なくとも今の私には)。また,どのように見てもらいたいのかを明確にして依頼するのも生産的だろう。論旨を見て欲しい,てにをはを直して欲しい,正確かどうかを見て欲しい,かっこいい言い回しはないだろうか見て欲しい,などなど。今の自分の文章に必要なことを考えて頼む。そこまで思い至らない場合でもとにかく頼む。直してもらう。直される中で,自分に欠けている部分がわかったり,よい言い回しを学んだり,いろいろとメリットが有る。また,依頼した人には懇ろにお礼を忘れないこと。相手が困っていたら相手を助けること。お互いに良い関係を育むこと。

自分で読み上げる。

 誤字脱字チェック法。しかし,私は自分の文章に自身がないため読み上げるのが恥ずかしい。恥ずかしいが,非常に効果のある方法のようだ。読めない部分,読みにくい部分は一目瞭然。自分の声にならないのだから。ということで,私自身の課題は読むのを恥ずかしがらずにできるかどうかである。これは今後克服しなければならない重要な課題である。

 ほとんど書いた後にふと思ったが,自動の読み上げ機能を使うのもいいのではないかと思った。私は,Macを使用しているのでデフォルトでついているテキスト読み上げ機能を付けて読み上げを行ってみる。自分で読むのはなんだか恥ずかしい人種なので,今後はこれを活用してみたい。
選択したテキストの音声化 - Word for Mac

このような機能が実用に堪えるのかを検証するために,文章を書いたら読み上げ機能を使ってみることとする。
実際に使ってみたが,かなり間違いを発見できることがわかった。今後,これを活用する。一文字でも入っていないと読み上げる際にかなり変に聞こえるので,一発で分る。

この辺の記事も参考にする。Wordの校正機能をMAXにする。
penya.jp

このサイトも便利そうである。
www.value-press.com


今後,このような自分のための注意点を充実させていく。

Mplusのメモ

Mplusは潜在変数モデリングに適した解析ソフトで,心理学,社会学,疫学などの分野で近年人気が出ているソフトウェアである。ホームページは次のものがある。
Muthén & Muthén, Mplus Home Page

このソフトは非常に便利で,文法も簡潔なのであるが,文法が特に覚えられないため,自分のための備忘録として徐々にまとめを書き始める。基本的にはユーザーガイドを真似して,その都度似た分析のものをコピペするという使い方が基本。これまでにやった分析の書き方を基本に。

関西学院大学の清水先生がわかりやすいまとめを書いてくださっているので,この辺も参考に。
[http://www.slideshare.net/simizu706/mplus-lecture-1:embed:cite]

ユーザーガイドから幾つか例を書いておく。まず,MIMICモデル。これだけでもMplusの文法の重要な部分がかなり盛り込まれている。

DATA: FILE IS mimic.dat;
VARIABLE: NAMES ARE y1-y6 x1-x3;
MODEL:
f1 BY y1-y3;
f2 BY y4-y6;
f1 f2 ON x1-x3;

利用するデータファイルの名前をDATAコマンドに記述する。一文の終わりはセミコロン";"で締める。変数の名前はvariableコマンドで指定する。"-"を使って,一気に定義することができるので楽ちん。尺度ごとにまとめて変数を定義するといいかもしれない。最後にmodelコマンドでモデルを記述する。byは潜在変数の定義,onは回帰を意味する。これだけわかればかなりいろいろなモデルが記述出来ることができる。普通の人がAmosでやることは概ねできる。ちなみに,コメントは"!"で記述する。


次に成長曲線モデル。iは切片,sは傾きパラメータを意味する。この書き方は省略形である。

DATA: FILE IS growth.dat;
VARIABLE: NAMES ARE y1-y4 x1 x2;
MODEL:
i s | y1@0 y2@1 y3@2 y4@3;
i s ON x1 x2;

個人的にはbyを使ったi,sの定義の方がわかりやすい。

DATA: FILE IS growth.dat;
VARIABLE: NAMES ARE y1-y4 x1 x2;
MODEL:
s by y1@0 y2@1 y3@2 y4@3;
i by y1@1 y2@1 y3@1 y4@1;
i s ON x1 x2;

独立変数ありの探索的な潜在クラスモデリング

DATA: FILE IS lcax.dat;
VARIABLE: NAMES ARE u1-u4 x;
CLASSES = c (2);
CATEGORICAL = u1-u4;
ANALYSIS: TYPE = MIXTURE;
MODEL:
%OVERALL%
c ON x;
u4 ON x;

ポイントは潜在クラスの数をvariableコマンド内で定義し,顕在変数はカテゴリカルな変数であると定義しているてんである。また,analysisコマンド内で,type=mixtureを指定するのがポイント。
モデルの%overall%でクラス全体に関わる部分を記述する。クラスごとにモデリングを行いたい場合には,%c#1%の中に具体的なモデルを記述する。詳細はまた後日。

最後は,マルチレベルモデリング。また難しい記述の仕方である。

DATA: FILE IS reg.dat;
VARIABLE:NAMES ARE clus y x w;
CLUSTER = clus;
WITHIN = x;
BETWEEN = w;
MISSING = .;
DEFINE:
CENTER x (GRANDMEAN);
ANALYSIS: TYPE = TWOLEVEL RANDOM;
MODEL:
%WITHIN%
s | y ON x;
%BETWEEN%
y s ON w;

新しいところは,variableコマンドにcluster, within, betweenが現れ,defineというコマンドが出てきたところである。さらに,analysisのtypeも何やら新しい。順番に見てみよう。

clusterはデータが何によってネストされているかを定義する。例えば,学校の中に個人がネストされていたり,個人の中に測定時点がネストされている構造がある。このとき,withinでレベル1(学校の中の個人,あるいは個人の中の測定時点)の変数を定義している。さらに,betweenではレベル2(学校,個人)の変数を定義している。
defineコマンドによって,レベル1の変数を中心化しており,全体平均によって中心化するか,レベル2の単位で中心化する場合が多い。"ANALYSIS: TYPE = TWOLEVEL RANDOM;"はとりあえず,マルチレベルモデリングを行うときのおまじないと思っておけばよい。

modelコマンドの中では,%within%で個人レベルの回帰のモデルを作成している。”s |”によって,回帰係数を"s"としており,この"s"と従属変数"y"がレベル2の変数によって説明されるモデルを構築している。

ここまでで,相当色々な分析が出来ることがわかる。今後も気が向いた時に,モデルの記述の方法や,出力の読み方(Rでも読み込ませ方)などをメモ書きに残していく。monte carloコマンドやbayes推定の方法など,実用的なところまでたどり着ければよいかと思う。

lmerでの3レベルモデルの実行

3レベルの階層線形を行う時のlmerのメモ

学校のなかに,個人がネストされていて,個人の中に測定時点がネストされている場合。学校IDをschool_id, 個人IDがind_id,あとは独立変数をx, 従属変数をyとする。簡単のため,中心化は行われているとして,レベル2以上の変数は仮定しない。基本は level3/level2などのように上のレベルの変数からスラッシュで区切れば良いようだ。

result <- le4::lmer(y ~ 1 + x + (1 + x|school_id/ind_id), data = dat)


参考にした記事
rpsychologist.com

残差の分散共分散行列の指定の方法が色々と書かれているので,かなり使える記事。
マルチレベルで必要な分析はここでほとんどまかなえる。

今日のできごとなど

今日やったこと

  1. 某ポスター作成
  2. 発表資料の作成
  3. MCMCの観察
  4. なす購入

1.2.については直前に再度確認を行うこと。

3. について,バーンインは結構早い。サンプリングがえらく時間がかかる。いらないパラメータはサンプリングしないでいたほうがいいか?
欲しいところだけとる感じ。
thiningを大きめにして,自己相関を小さくすること。
4.なすは適当なときに植える。

明日やること

  1. シミュレーションを実行し直すこと
  2. 申請書No.1の内容を修正すること
  3. 申請書No.2の草稿を作成すること。
  4. 某発表のための資料の暫定版を作成すること
  5. 対応の続き。
  6. 某お仕事について。

1.すっかり忘れていた。
2. わりかし大事。イントロの部分を中心に直す。印刷してみて考えること。
3.全く手をつけていないが,No1の流れを参考にしてみる?
4. 暫定版を作成。必要なシミュを追加する?
5.引き続き。ただ,相談は必要。
6.誰がやるのだろうか。。。?

Rの使いかたメモ(purrrの使いかたについて)

最近読んだ良記事

最近のRの界隈で流行っている(気がする)purrrパッケージの使いかたについて。
よく参照させてもらうので,とりあえずまとめておく。

sinhrks.hatenablog.com
sinhrks.hatenablog.com
uribo.hatenablog.com
{purrr} による非テーブルデータの処理 - SSSSLIDE


自分が使うとしたらどう使うか?

一番やりそうだなぁと思ったのは最後の@sinhrksさんが紹介してくれているような,複数のモデルを作成して,まとめて分析するというやり方だと思う。
例えば,共分散構造分析を行うときに複数のモデルを立てて分析する,というような使いかたや,探索的因子分析を行うときに,因子数や回転方法を変えながら分析するという感じ。

確認的因子分析の例はこんな感じ。
このように書くメリットは,モデルの構築の部分の分析を分けられるから,記述がすっきりすることかと。

library("purr")
library("lavaan")

# lavaanの例を流用
model1<- ' visual  =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
speed   =~ x7 + x8 + x9 '

model2<- ' f1  =~ x1 + x2 + x3 + x4 + x5
          f2 =~ x6 + x7 + x8 + x9 '

model3<- ' f1  =~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 '

model4<- ' visual  =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
speed   =~ x7 + x8 + x9 
f1  =~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 
f1 ~~ 0* visual
f1 ~~ 0* textual
f1 ~~ 0* speed'

model5 <- ' visual  =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
speed   =~ x7 + x8 + x9 
f1 =~ visual +  textual +speed'

models <- list(model1,model2, model3, model4, model5)

# 推定できないモデルもあるが,とりあえずは気にしない。
fits <- purrr::map(models,~lavaan::cfa(., data=HolzingerSwineford1939))
fits %>% map(.,~summary(., fit.measures=TRUE))
fits %>% map(.,~lavaan::fitMeasures(.))

summary(fits[[1]])

sapply(fits,lavaan::fitMeasures)


psychパッケージのfa関数をつかって分析をおこなう。本来は因子数を予め決める必要があるが,ここでは,因子数を変える。さらに,回転方法も回転無し,直交回転,斜交回転の3種類に対して分析を行なってみる。それぞれの回転方法にたいして,1から7因子の場合を当てはめている。一応screeplotや平行分析からは5,6因子あたりが良さそう。推定方法は最尤推定を用いる。

library("purrr")
library("psych")
library("GPArotation")

# Big fiveの25項目
dat <- bfi[1:25]

# 因子数の確認。
scree(dat)
fa.parallel(dat)

# 関数をつくる関数を作成する。
myfa <-function(rotate){
    function(nf){
      fa(dat,nf,rotate=rotate,fm="ml")
    }
  }

rotate <- list("none", "varimax",  "promax")
nf <- c(1:7)
# 
results <- purrr::map(rotate,myfa) %>% map(.,~lapply(nf,function(x).(x))) %>% flatten()
# どんな出力があるのかを確認
names(results[[1]])

results %>% map(.,~.[c("RMSEA")])
results %>% map_df(.,~.[c("BIC","EBIC","TLI")])

指標的には因子数を増やすほどよい結果になっていますが,実際には解釈を考えたりしないといけないので,これだけでは決めがたいです。

とにかく,備忘録的なもの。

前回から随分間が空いているが,気にしない。
思ったらやってみるのが大事な気がする。

最近の困り

  1. 研究のオリジナリティが良くわからない。何を研究したら面白いのか全くわからない。
  2. 査読のコメントへの対応が困った。オリジナリティの主張の仕方,伝え方。
  3. というか,自分が何をやりたいのか,という話の気もする。
  4. 自分の進退をキチンと考えねばならない。
  5. 発表資料の作成がまるでできていない。

対処など

  1. 先生に相談を行うこと。アポイントメントを迅速にとること。
  2. コメントには,1つ1つ,何をやるべきかを冷静に受け止める。すぐに書けること,すぐには書けないこと,考えれば書けることなど,考える。困難は分割せよ。全体に関わることであっても,全体として考えるより,処理できるまで細かい単位に分割しまくる。そのために,自分のやることを書き出すこと。
  3. とりあえず,逃げ出すには早い。逃げるのはいつでもできる。頼れる人を頼れ。馬

鹿だと思われても気にするな。だって学生だし,と開き直れ。

  1. やれ。アウトラインを書いて,ポスターは簡単でもいい。発表出来るだけの材料をとにかく詰め込むこと。デザインやらなんやらは二の次。ただの文字芝居になってもいい。ポスターもわかりにくくてもいい。とにかくやるべし。

見ていたらが学部生みたいな困りも含まれていて,人間の成長には時間がかかるのだなぁと実感。
むやみにやるのもよくないけど,パニックになって何もやらないのはだめ。もっとだめ。

関連してみた記事のリンクをおいておく。
next49.hatenadiary.jp
next49.hatenadiary.jp
next49.hatenadiary.jp