RでMF/MD法を行うために

自分メモ。「MF/MD法」という表記と「MD/MF法」という表記、そして、「#MDMF」というタグと「#MFMD」というタグが混在しているけど、気にしないw
2
langstat @langstat

田畑智司(2005)「コーパス言語学の文体論―MF/MD法による文体比較」『コンピュータを利用した英語文体論の通時的総合研究』(平成13年度〜平成16年度科学研究費補助金研究成果報告書)pp.402-416. 自宅にて、ようやく発掘。 #MFMD

2014-05-08 15:17:07
langstat @langstat

Biber流の分析では、相関行列(Pearson)を因子分析の入力データとし(田畑 2005: 406)、軸の回転にはプロマックス回転を使用する(Biber 1988: 85)。因みに、因子数は、スクリープロットを見て、任意に決めるっぽい(ibid: 82)。 #MFMD

2014-05-08 15:37:16
langstat @langstat

因子数の決定 > 「研究者が仮説から決める」「固有値やスクリープロットを見て,固有値が大きく落ち込むところまでを採用する」「固有値が1以上の因子数を採用する」「累積寄与率がある程度の値を越えるところで判断する」 http://t.co/bfkouScgQX #MFMD

2014-05-08 15:40:15
langstat @langstat

入力データに0が多いと、factanal関数の実行でエラーが出るっぽい。 > R help - factanal: error message http://t.co/2SjjZ6WbBk #MDMF

2014-05-08 16:01:33
langstat @langstat

(承前)何かよく分からないけど、変数の数よりもケースの数が少ないとダメとか、そういう制約があるのかも。t()で入力データを転置したら解決。 > factanal: error message #MDMF

2014-05-08 16:12:11
langstat @langstat

Rのpsychパッケージに含まれる探索的因子分析関数 fa() では不適解が発生しないらしい - 教育社会学の勉強・備忘録 http://t.co/EkejUmkZ8P fa()ではなく、factanal()を使う方がいいっぽい。 #MFMD

2014-05-08 16:22:14
langstat @langstat

うーん、入力データの性質(前述)なのか、factanal()でもfa()でも、promax回転を指定するとエラーが出る。。。varimax回転なら、エラーが出ないのだけれど、Biber (1988) は、言語データの場合は相関関係を想定すべき、と言っているしなあ。。。 #MDMF

2014-05-08 16:26:56
langstat @langstat

Biber (1988) では、因子得点をどうやって求めているのか? 具体的には、regressionなのかBartlettなのかといった記述がない。なので、とりあえず、regressionにしておく(←オイw) #MDMF

2014-05-08 16:37:48
langstat @langstat

因子得点を出そうとすると、"requested scores without an 'x' matrix"というエラーが出るので、何故かを調べてみた。 > factor analysis problem http://t.co/ETdPoD5OLO #MDMF

2014-05-08 16:43:35
langstat @langstat

psychパッケージのfa.parallel()は、平行分析による因子数を提案してくれる関数。 http://t.co/rjgfjrXQl5 #MDMF

2014-05-08 16:50:29
langstat @langstat

正直、Biber流のMD/MF法は、計算上のオプションが多く、(細かい設定が書かれていないので)再現性もイマイチ。個人的には、Biberのfeature setは(経験上)優れたものであると思うけど、因子分析に基づくMD/MF法がそれほど優れているとは思えない。 #MDMF

2014-05-08 17:03:00
langstat @langstat

MD/MF法に関しては、Corpora誌の特集号 http://t.co/Qhd68O05fX が参考になる。また、Nakamura (1995) http://t.co/cQrQeuocUP では、因子分析ではなく、数量化Ⅲ類を使うべきだという指摘がなされている。 #MDMF

2014-05-08 17:09:31
Akira Murakami @mrkm_a

@langstat そもそも因子得点と次元得点って同じものでしたっけ・・。修士の時にちょっと調べたのですが結局よくわからず、その時は次元得点の計算は1988の本に従いました。

2014-05-08 18:00:10
langstat @langstat

.@mrkm_a 次元得点は正の因子項目の標準化頻度の合計を使って算出するものなので、因子得点と次元得点は別物です。しかも、cut-offのポイントも任意に決定しているっぽい(Biber 1988: 93)ので、なかなかに怪しげですよね。。。

2014-05-08 18:14:22
langstat @langstat

"A factor score is computed by summing, for each text, the number of occurrences of the features having salient loadings on that factor."(続く

2014-05-08 18:16:18
langstat @langstat

(承前)"Due to the large number of features loading on most of the factors in the present analysis, ..."(続く

2014-05-08 18:19:44
langstat @langstat

(承前)"... I use a conservative cut-off .35 for these features to be included in the computation of factor scores." (Biber 1988: 93)

2014-05-08 18:20:01
Akira Murakami @mrkm_a

@langstat あ、ですよね。80年代の言語研究であることを考えると因子分析を用いているだけで先進的で、cut-off辺りは多少恣意的でもそれほど問題にならなかったのでしょうね。それをそのまま現代に持ってきて適用するとわかりませんが・・・。

2014-05-08 18:24:12
langstat @langstat

次元得点は、その次元における正の因子項目の標準化頻度の合計から負の因子項目の標準化頻度の合計を引いたもの(田畑 2005: 411)。 #MFMD

2014-05-08 18:25:09
langstat @langstat

@mrkm_a 因子分析という手法に限らず、多変量解析を言語研究に導入したというのは、大きいですね。殆ど同時期に、Burrowsも主成分分析を使っていますが。 http://t.co/Mg0FQUj2vk

2014-05-08 18:27:51
langstat @langstat

かつては少数の言語項目のみを使って分析する研究が殆どであったため、複数の研究の結果が矛盾することもあった(Biber 1986)。それはSLAの誤り分析でも同じで、複数の誤りの頻度を相対的に分析すべきという指摘があった(Schachter & Celce-Murcia 1977)

2014-05-08 18:39:11
langstat @langstat

library(psych) # 因子数決定(datは入力データ) VSS(dat, n = 10) # プロマックス回転 fa <- fa(dat, nfactors = 2, rotate = "promax", fm = "ml", scores = TRUE) #MFMD

2014-05-08 20:49:23
langstat @langstat

# 因子負荷量 fa$loadings # 因子得点 fa$scores # その後、以下の手順で因子得点から次元得点を求める http://t.co/kYeVUqUbM9#MFMD

2014-05-08 20:51:17
langstat @langstat

# データフレームに変換 fadm <- data.frame(Dim1 = fa$scores[, 1], Dim2 = fa$scores[, 2]) # 第一次元の得点でソート fadm[order(fadm$Dim1, decreasing = TRUE),] #MFMD

2014-05-08 20:59:09
langstat @langstat

標準化頻度を求めるには、個々の相対頻度から平均値を引いて、標準偏差で割る。Rの場合は、scale()で一発。 #MFMD

2014-05-08 21:02:55