因子分析とカテゴリカル因子分析の結果はとのくらい異なるか

ノーマルな因子分析は連続変数を用いる。その拡張としてカテゴリカル変数でも因子分析は可能である。今回は、連続変数で推定した結果とカテゴリカル因子分析の推定はどのくらい異なるのかをシミュレーションしてみたい。

大前提としてカテゴリカル変数といっても、その背景に連続変数、正規分布が仮定できなければならない。男女や東京に住んでいる、名古屋に住んでいるといった値は因子分析では扱えない。比較的有名な研究でも、「○○という体験をした」というマルチアンサーを因子分析したり、精神医学の診断を因子分析したりするものもあるが、因子分析を使うのは誤りである。どうしてもグルーピングがしたければ潜在クラス分析を使うべきである。

サンプルデータ

児童向けウェクスラー式知能検査(Wechsler Intelligence Scale for Children; WISC)のサンプルデータを用いてシミュレーションをしてみよう。サンプルデータはこちらこちらからダウンロードする。

変数名 説明
info Information
comp Comprehension
arith Arithmetic
simil Similarities
vocab Vocabulary
digit Digit Span
pictcomp Picture Completion
parang Paragraph Arrangement
block Block Design
object Object Assembly
coding Coding

それぞれの項目は20点満点(0~20)である。 WISCのすべての項目は含まれていない。また、WISCは階層構造になっているとされているが、面倒くさい上に、実データは教科書通りの因子構造をしていないので、そのまま因子分析にかけることにする。

データの加工

Rのpsychパッケージを利用して因子分析行う。

library(foreign)
d1 <- read.spss("wiscsem.sav", to.data.frame=TRUE)
d2 <- d1[3:13] # 因子分析に使用するのは3~13列目

リコード

今回は機械的に分位点で数値を分けていく。 OneRパッケージの分位点で連続変数を分けるbin functionを使う。

library(OneR)
d3 <- bin(d2, nbins = 4, labels = c(1,2,3,4))
d4 <- bin(d2, nbins = 2, labels = c(1,2))

d3は4分位で分けたデータをいれる。4段階の変数となる。d4には2分位で分けたデータを入れるので、2値データとなる。

データ型の変更

OneRでラベルをつけていることをみてもわかるように、データの中身はfactor型である。psychパッケージは整数型、つまりinteger型でないと作動しないので変換が必要になる。

いくつか方法があるようだが、dplyrパッケージを使う。コマンドはis.factorつまりfactor型である変数をas.integerintger型へ変換するという意味である。

library(dplyr)
d3 <- d3 %>% mutate_if(is.factor, as.integer)
str(d3) # データ構造の確認
d4 <- d4 %>% mutate_if(is.factor, as.integer)
str(d4) # データ構造の確認

因子数の決定

一応、手続きに則り、因子数の決定を行う。連続変数の方で行う。

スクリー・プロット

library("psych")
scree(d2,factors=TRUE,pc=TRUE,main="Scree plot",hline=NULL,add=FALSE)
VSS.scree(d2, main = "scree plot")  

平行分析

fa.parallel(d2)

MAP情報量

res01<-vss(d2) 
print(res01,digits =4)

スクリーは1因子、平行分析は2因子、Map情報量は2因子という提案であったため、2因子を採用する。

因子分析

連続変数での実施。

library("psych")
library("GPArotation")
res2 <- fa(d2, nfactors = 2, fm = "minres", rotate = "oblimin", scores=TRUE)
print(res2, digits = 3, sort=TRUE)

オプションで推定法(minres: 最小残差法)と回転(oblimin: オブリミン)をしているが、これはデフォルト値なので指定しなくてもよいが、結果を比較するので一応記述した。

4段階の順序変数での実施。corオプションは"poly"にする。

res02 <- fa(d3, nfactors = 2, fm = "minres", rotate = "oblimin",
                   scores=TRUE, cor="poly")
print(res02, digits = 3)

2値データでの因子分析。corオプションは"tet"にする。

res03 <- fa(d4, nfactors = 2, fm = "minres", rotate = "oblimin", 
                   scores=TRUE, cor="tet")
print(res03, digits = 3)

結果

因子1

連続 4分位 2分位
info 0.831 0.816 0.978
comp 0.502 0.393 0.351
arith 0.604 0.621 0.453
simil 0.562 0.460 0.647
vocab 0.743 0.620 0.785
digit 0.487 0.392 0.353
pictcomp 0.063 -0.030 0.080
parang 0.095 -0.027 -0.082
block 0.057 0.040 0.087
object -0.088 -0.027 -0.101
coding 0.101 0.084 -0.141

因子2

連続 4分位 2分位
info -0.075 -0.101 -0.085
comp 0.315 0.391 0.438
arith -0.031 -0.037 0.335
simil 0.225 0.326 0.214
vocab 0.029 0.160 0.033
digit -0.128 0.033 -0.023
pictcomp 0.587 0.670 0.679
parang 0.382 0.397 0.444
block 0.616 0.533 0.537
object 0.656 0.552 0.731
coding -0.021 0.052 0.231

共通性(communalities)

連続 4分位 2分位
info 0.63671 0.5943 0.8828
comp 0.50340 0.4594 0.4652
arith 0.34791 0.3641 0.4663
simil 0.48808 0.4657 0.5992
vocab 0.57303 0.5077 0.6421
digit 0.19385 0.1673 0.1175
pictcomp 0.38448 0.4302 0.5204
parang 0.18932 0.1479 0.1684
block 0.41647 0.3073 0.3411
object 0.38311 0.2908 0.4729
coding 0.00856 0.0141 0.0413

一つ一つ見るとめんどくさいが、ざっくりとまとめると、それほど値は変わらない。時々、違うものも混じっている。また、2分位より4分位の方が連続変数に近いというわけでもないようだ。

結果は、連続変数から作成したカテゴリカル変数であれば、もともとの連続変数の結果からは大きく外れない、というものだ。
ただ「逆も真なり」ではない。

調査データでは、連続変数からカテゴリカル変数に変換してカテゴリカル因子分析をするということはしない。連続変数があれば連続変数で分析するのがよいからだ。

実際には、背後に連続変数が想定されると考えられるカテゴリカル変数で因子分析をすることなる。連続変数が想定される根拠は無い。「おそらく想定されるであろう」という当て推量である。その当て推量があっている場合もあれば、見当はずれの場合もある。これは、いくらシミュレーションをしてもわからないもので、どうしようもない。カテゴリカル因子分析を使用する注意点はそのあたりだろうか。

StataでLassoとリッジ回帰

Stata16でLassoが新しく使えるようになったそうだ。
https://www.lightstone.co.jp/stata/stata16_new.html#Lasso

僕はStataはあまり使わないので、新しいStataを入手していない。今手元にあるものはバージョン13で少し古く、標準機能でLassoはできない。ただ、バージョン13以上であれば、パッケージとして作成されているlassopackが使用ができ、Lassoも問題なく使用することができる。

Stata Lasso
https://statalasso.github.io/

推定するパラメータ

最小二乗法
f:id:iDES:20190915150718p:plain
応答変数Y、n個の観測値、m個の予測変数、線形結合X、誤差項σ2

f:id:iDES:20190915150731p:plain

リッジ回帰
f:id:iDES:20190915150758p:plain
正則化のペナルティλ。

Lasso回帰
f:id:iDES:20190915150815p:plain

Elastic Net
f:id:iDES:20190915150832p:plain

α=0の時にリッジ回帰、α=1の時にLasso、0≦α≦1がErastic Netである。パラメータはαとλの2つであるが、リッジ回帰とLassoのαは固定されているので、Erastic Netのことを考えないならば、λについてだけ考えればよい。

最適なラムダ

λの最適値を決める方法はいくつかある。

  1. 相互検証 Cross-validation
  2. 情報量基準(AIC, BIC, EBIC, AICc)
  3. 理論に基づいたLasso

このエントリでは1と2を扱う。

lassopackパッケージのインストール

インストールは公式ページに書いてあるようにすればよい。 https://statalasso.github.io/installation/

ssc install lassopack
ssc install pdslasso

サンプルデータ

公式ページでは前立腺がんのデータが使われているので、ここでも同じデータを使おう。データの読み込みは下記のコマンドでできる。

insheet using ///
    https://web.stanford.edu/~hastie/ElemStatLearn/datasets/prostate.data,  ///
    clear tab

このデータは下記の項目が含まれている。

lpsa:PSAスコアの対数
lcavol:がんの体積
lweight:前立腺の重さの対数
年齢:患者の年齢
lbph:良性前立腺過形成の量のログ
svi:精嚢浸潤
lcp:被膜貫通の対数
gleason:グリーソン・スコア
pgg45:グリーソン・スコアが4または5のパーセンテージ

PSAスコアを対数変換したlpsaを従属変数にした重回帰分析でデモを行う。独立変数はlpsa以外全部である。この中から最も良い予測子を選ぶ。

情報量基準

まず情報量基準を用いて最適なλの値を推定をする。デフォルトではEBIC(Extended Bayesian Information Criterion)が使用されるようなので、EBICを使用する。

lasso2 lpsa lcavol lweight age lbph svi lcp gleason pgg45, lic(ebic)

lasso2がLassoのコマンド。lpsaが従属変数で、その後に続くのが独立変数である。これは、通常の回帰分析の書き方と同じである。最後にオプションとしてlic(aic)をつけると情報量基準が出せる。

  Knot|  ID     Lambda    s      L1-Norm        EBIC     R-sq   | Entered/removed
------+---------------------------------------------------------+----------------
     1|   1  163.62492     1     0.00000     31.41226   0.0000  | Added _cons.
     2|   2  149.08894     2     0.06390     26.66962   0.0916  | Added lcavol.
     3|   9   77.73509     3     0.40800    -12.63533   0.4221  | Added svi.
     4|  11   64.53704     4     0.60174    -18.31145   0.4801  | Added lweight.
     5|  21   25.45474     5     1.35340    -42.20238   0.6123  | Added pgg45.
     6|  22   23.19341     6     1.39138    -38.93672   0.6175  | Added lbph.
     7|  29   12.09306     7     1.58269    -39.94418   0.6389  | Added age.
     8|  35    6.92010     8     1.71689    -38.84649   0.6516  | Added gleason.
     9|  41    3.95993     9     1.83346    -35.69248   0.6567  | Added lcp.
Use 'long' option for full output.
Use lambda=27.93654463358689 (selected by EBIC).

---------------------------------------------------
         Selected |           Lasso   Post-est OLS
------------------+--------------------------------
           lcavol |       0.4725389      0.5258519
          lweight |       0.3989102      0.6617699
              svi |       0.4400748      0.6656665
------------------+--------------------------------
   Partialled-out*|
------------------+--------------------------------
            _cons |       0.2975585     -0.7771568
---------------------------------------------------

EBICによってて導かれたλの値が27.9である。上の表の3列目がλなので、その中から27.9以上のものを選択する。27.9以上だとlcavolとsviとlweightなので、この3つが最適なモデルとなる。この3つの変数で構成されたのが下の表である。独立変数(予測子)は少なめのモデルである。

Post-est OLSは3つの独立変数で重回帰分析をした結果が示されている。つまり、下記の重回帰の結果と同じである。

reg lpsa lcavol lweight svi

情報量基準による差異

情報量基準は4つ選択できるので、それぞれのλも計算しておこう。

Use lambda=7.594796178345335 (selected by AIC).  
Use lambda=27.93654463358689 (selected by BIC).  
Use lambda=27.93654463358689 (selected by EBIC).  
Use lambda=7.594796178345335 (selected by AICC).  

AIC系とBIC系のλが比較的違う。もし、AICを使用した場合、7.59以上なので、変数が比較的多くなる。下記のようなモデルになる。

Use lambda=7.594796178345335 (selected by AIC).

---------------------------------------------------
         Selected |           Lasso   Post-est OLS
------------------+--------------------------------
           lcavol |       0.5057140      0.5234981
          lweight |       0.5386738      0.6152349
              age |      -0.0073599     -0.0190343
             lbph |       0.0585468      0.0954908
              svi |       0.5854749      0.6358643
            pgg45 |       0.0022134      0.0035248
------------------+--------------------------------
   Partialled-out*|
------------------+--------------------------------
            _cons |       0.1243026      0.5214696
---------------------------------------------------

AICでλを決めると、8番目のgleasonと9番目のlcpが除かれた残りすべてが選択されている。AICを用いたLassoは一般的に変数の数が多くなる傾向にあるという指摘があるが、その傾向が表れているのかもしれない。

交差検証

交差検証(Cross-validation)は英語をそのまま読んだクロス・バリデーションと呼ばれることもある。データをトレーニングデータ(訓練事例集合 training set)と検証データ(テスト事例集合 testing set)に繰り返し分けて検証していく方法。つまり、データセットで解析をすると共に、その解析の妥当性をそのデータを用いて検証する方法である。トレーニングデータはモデルへのフィット、検証データは予測誤差の計算に使用する。

交差検証によってλの最適の値を特定し、αの予測パフォーマンスを最大化する。具体的に何をするかというと、平均二乗誤差推定値を最小になるλを求めることになる。

lassopackでは、K-分割交差検証 K-fold cross-validationを用いて交差検証をしている。

K-分割交差検証では、標本群をK個に分割する。そして、そのうちの1つをテスト事例とし、残る K − 1 個を訓練事例とするのが一般的である。交差検証は、K 個に分割された標本群それぞれをテスト事例として k 回検証を行う。そうやって得られた k 回の結果を平均して1つの推定を得る。
K-分割交差検証 - wikipedia

K-分割交差検証の実施

cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, seed(123)

cvlassoが交差検証のコマンド、オプションとして乱数のシードが指定できる。

K-fold cross-validation with 10 folds. Elastic net with alpha=1.
Fold 1 2 3 4 5 6 7 8 9 10
      |         Lambda           MSPE       st. dev.
----------+---------------------------------------------
         1|      163.62492      1.3238262      .22872507
         2|      149.08894      1.2300892      .22936459  
         3|      135.84429      1.1269313      .21564351  
...
        17|      36.930468      .59233725       .1113066  ^
...
        61|      .61603733       .5412582       .0566795  *
...
       100|      .01636249      .54145991      .05572026  
* lopt = the lambda that minimizes MSPE.
  Run model: cvlasso, lopt
^ lse = largest lambda for which MSPE is within one standard error 
            of the minimal MSPE.
  Run model: cvlasso, lse

実際の結果表示は100まで表示されるが、重要なのは^*のあるところだけを表示している。MSPE(Mean Squared Prediction Error)とは、このセクションの冒頭で述べた最小平均二乗誤差推定値である。2列目はラムダの値である。MSPE(3列目)と標準誤差(4列目)から推定される。

平均二乗予測誤差を最小化するλ値は、アスタリスク*で示されている。^はその標準誤差内に入る最大のλの値である。

これらの交差検証の結果を用いてLassoを実行するには、下記のように書く。

cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, lopt seed(123)
cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, lse seed(123)

コマンドはcvlasso、オプションにloptもしくはlseを指定する。

. cvlasso, lopt
Estimate lasso with lambda=.616 (lopt).
---------------------------------------------------
         Selected |           Lasso   Post-est OLS
------------------+--------------------------------
           lcavol |       0.5567117      0.5643413
          lweight |       0.6152100      0.6220198
              age |      -0.0199971     -0.0212482
             lbph |       0.0935063      0.0967125
              svi |       0.7398081      0.7616733
              lcp |      -0.0907247     -0.1060509
          gleason |       0.0445775      0.0492279
            pgg45 |       0.0041720      0.0044575
------------------+--------------------------------
   Partialled-out*|
------------------+--------------------------------
            _cons |       0.1828371      0.1815609
---------------------------------------------------
. cvlasso, lse
Estimate lasso with lambda=36.93 (lse).

---------------------------------------------------
         Selected |           Lasso   Post-est OLS
------------------+--------------------------------
           lcavol |       0.4553753      0.5258519
          lweight |       0.3142849      0.6617699
              svi |       0.3674476      0.6656665
------------------+--------------------------------
   Partialled-out*|
------------------+--------------------------------
            _cons |       0.6435536     -0.7771568
---------------------------------------------------

K-分割交差検証のデメリットはいくつかある。

  1. 最小平均二乗誤差推定値(MSPE)は乱数によって安定しない
  2. MSPEは不安定性はサンプルサイズの小さい場合に顕著
  3. 計算に時間がかかる(機械学習が目的ではない場合、この点は問題はない)

MSPEの不安定性を確認するには、乱数のシードを変えて(もしくは設定せずに)実施すると、どの程度か確認できるだろう。

適当にシードを指定して走らせてみた。

. cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, seed(234) lopt
Estimate lasso with lambda=.321 (lopt).
. cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, seed(298) lopt
Estimate lasso with lambda=1.562 (lopt).
. cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, seed(862) lopt
Estimate lasso with lambda=5.745 (lopt).

λの値は比較的異なる印象があるが、変数選択の個数に変化はみられなかった。変数選択という観点から見ると、このデモでは比較的安定しているように思えた。

プロット

Lassoでよく表示される、平均二乗予測誤差を縦軸に、λを横軸にしたプロットはplotcvオプションをつけると描画できる。

cvlasso lpsa lcavol lweight age lbph svi lcp gleason pgg45, seed(123) plotcv

f:id:iDES:20190915151541p:plain

リッジ回帰

lassopackでもリッジ回帰は計算できる。

lasso2 lpsa lcavol lweight age lbph svi lcp gleason pgg45, alpha(0)

オプションにalpha(0)をつけるだけで今まで説明してきた方法が同じように使える。デフォルト値がalpha(1)、つまりLassoなので、今まで特に何もオプションをつけなくてもLassoの計算がされていたということだ。

Rで相関プロットを描く

相関分析を視覚的に認識するために、相関プロットは有効である。特に、二次分析の際などに威力を発揮するかもしれない。二次分析は仮説があってそれを検証すために調査を作れるわけではないので、どの部分を分析するか、総当たりで検証することもあるからだ。やってみたらこうなった的で良くないプロセスだが、二次分析というビハインドがある場合には致し方ないこともあるだろう。

相関プロットを描画するにはcorrplotパッケージを利用する。

サンプルデータとしてMASSパッケージに含まれるBostonデータを使用する。比較的連続変数が多いデータである。

library(MASS)
data(Boston)
num <- c(1:3,5:8,10:14) # 連続変数は1~3、5~8、10~14列目。列番号をnumに格納。
d1 <- Boston[num] #連続変数だけのデータをd1に格納。

以下で相関プロットを作っていく。

library("corrplot")
res <- cor(d1, method = "pearson")
corrplot(corr = res, type="upper")

f:id:iDES:20190913052408p:plain

相関の強さが色の濃さと円の大きさで確認できる。

相関係数を重ねて描画することもできる。 オプションでaddCoef.colを付け加える。値は文字の色である。blackの方がわかりやすいかもしれない。

corrplot(corr = res, type="upper", addCoef.col="gray" )

f:id:iDES:20190913052420p:plain

これだと文字が重なってよくわからない。そういう場合には、画像サイズを先に指定しておくと解決できる。

png(height=800, width=800, pointsize=15, file="corrplot02.png")
corrplot(corr = res, type="upper", addCoef.col="black" )

heightは画像の高さ、widthは幅、pointsizeは文字の大きさで、file=はファイル名である。ファイルは作業ディレクトリに出力される。文字の重なりは、画像の大きさと文字の大きさを変更すると調整できる。

f:id:iDES:20190913052436p:plain

相関の強弱であればプラスかマイナスかはあまりどうでもいいという考え方もあるので、その場合には絶対値をつけてタイルで表示させるとオシャレ感が増す。

corrplot(corr = abs(res), method="color", tl.pos="n", cl.lim = c(0,1))

f:id:iDES:20190913052513p:plain

モザイクタイルのようなものが出来上がる。男子トイレに貼られることの多いタイル建材だ。

色を変えたいときには、以下のようにする。

corrplot(corr = abs(res), method="color", tl.pos="n",
          cl.lim = c(0,1), col=colorRampPalette(c("black","white","black"))(200))

f:id:iDES:20190913052553p:plain

白と黒だと印刷するときに便利かもしれない。 200と最後についているのは白から黒までの段階を何段階にするか、という指定である。

corrplot(corr = abs(res), method="color", addCoef.col="black",
              tl.pos="n", cl.lim = c(0,1))

相関係数の値も付与できる。

f:id:iDES:20190913052606p:plain

Rで共変量プロットを描く

Rで共変量プロットを描く。

library(AER)
data(CPS1985)
fit <- lm(formula = wage ~ education + age +
       gender + occupation + union,
       data = CPS1985)
summary(fit)

結果の表示。

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)          -1.86545    1.37469  -1.357 0.175368    
education             0.59565    0.09350   6.370 4.13e-10 ***
age                   0.09476    0.01656   5.723 1.77e-08 ***
genderfemale         -1.81460    0.41555  -4.367 1.52e-05 ***
occupationtechnical   1.53776    0.68990   2.229 0.026240 *  
occupationservices   -1.34311    0.60762  -2.210 0.027507 *  
occupationoffice     -0.58774    0.63256  -0.929 0.353245    
occupationsales      -1.20902    0.81515  -1.483 0.138626    
occupationmanagement  2.82736    0.75765   3.732 0.000211 ***
unionyes              1.58683    0.50749   3.127 0.001865 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

信頼区間は次のように出力する。95%と90%を設定する。それぞれ5%有意と10%有意に相当する。

confint(fit, level = 0.95)
confint(fit, level = 0.90)

それぞれの結果の表示。

                        2.5 %     97.5 %
(Intercept)          -4.56604008  0.8351387
education             0.41196295  0.7793276
age                   0.06222812  0.1272862
genderfemale         -2.63095640 -0.9982519
occupationtechnical   0.18244561  2.8930780
occupationservices   -2.53677803 -0.1494321
occupationoffice     -1.83041166  0.6549327
occupationsales      -2.81038993  0.3923436
occupationmanagement  1.33895379  4.3157634
unionyes              0.58986138  2.5837930
                         5 %       95 %
(Intercept)          -4.13062657  0.3997252
education             0.44157788  0.7497127
age                   0.06747275  0.1220416
genderfemale         -2.49933668 -1.1298716
occupationtechnical   0.40096199  2.6745617
occupationservices   -2.34432325 -0.3418869
occupationoffice     -1.63005678  0.4545778
occupationsales      -2.55220306  0.1341567
occupationmanagement  1.57892791  4.0757893
unionyes              0.75060125  2.4230531

このままでは少し見づらいので、共変量プロットで図で確かめる。

library(coefplot)
coefplot(fit)

f:id:iDES:20190911050257p:plain

ゼロに掛かっていないものが有意である。横長のものが90%信頼区間で、短い方が95%信頼区間である。

デュルケムの契約の非契約的要素

ci.nii.ac.jp

流王貴義さんのデュルケムの議論。

本稿は「契約における非契約要素」とは契約法である,との解釈を提示する.

僕はデュルケム研究者ではないので、あまりよく知っているわけではないが、このタイプの解釈は初めて見た気がする。

契約の非契約的要素

契約における非契約的要素とは「『社会分業論』におけるスペンサー批判の論点を,パーソンズが定式化したものである(Parsons[1937]1949: 311-4, 19)」。スペンサーにとって契約とは私的な利害追求であることが多く、私的で自由な合意だとしたことに対して、デュルケムは契約は契約だけでは成立しないとした。

契約を交わしてもの条文や約束の文言自体に規則を守る効力はない。規則の以前に個々人が規則を守る前提のようなものが必要である、というのが、契約における非契約的要素である。契約における「前」契約要素と言うこともある。

流王さんによると研究者の解釈は3つに分かれるという。

1つ目は,集合意識として理解する見解,具体的には,「契約に対する社会的規制力」(杉山 1988: 81),「集合意識の規制力」(鈴木 1990: 67),契約の両当事者が備える「『神聖なもの』『畏敬の念を引き起こすもの』である『人格』という『属性』」(巻口 1999: 104)という理解である.
2つ目は,個々の契約に先立つ連帯として理解する見解,具体的には,「契約に先立つ連帯」「信頼」(Collins 1982:12),「契約の相手方への信頼」(中島 2001: 53)という理解である.
3つ目は,契約に拘束力を与える社会的規制と考える見解, 具体的には,「拘束力を与える一群のルール」(Parsons[1937]1949: 311),契約に「拘束力を与え,その実施の条件」(Lukes 1973: 146)を定めるもの,「分散している社会諸機能が調和的な協働を維持するための『固定性』あるいは『規則性』の確保」(芦田 1981: 91-2)を目的としたサンクションという理解である.

個人的には2つ目の解釈に近い感じで読んできたように思う。

1つ目の人格崇拝解釈はデュルケムは確かに人格崇拝について述べているが、後世の研究者が切り取って発展させた印象が強い。デュルケムにとっても主たる関心ではなかったはずで、デュルケム研究としてはあまり関心を持てない解釈である。

2つ目のコリンズら解釈について、「この理解は『社会分業論』の内在的な読解から引き出されたものではない」という指摘を流王さんは行っているが、この点はまったくその通りだと思う。

この解釈は『分業論』以降の著作を併せて解釈したものである。『自殺論』以降の著作であれば、どの著作でも議論可能だと思うのだが、後期の『道徳教育論』が最も理論が定式化されているように思う。『社会分業論』では、道徳の第1要素である「規律の精神」は道徳の第2要素である「社会集団への愛着」を前提とすることによって成立すると論じられている。

われわれは前回の講義において,道徳の第二要素を決定したが,それは,個人が,所属する社会集団にたいして愛着することにあった.道徳性は,われわれが何らかの人間集団の一員となるというだけで,すでに生ずるものである.じっさい,人間は,いくつかの社会に同時に属することによってのみ完全となるように,道徳性自体もまた,われわれが,自己の組入れられている様々な種類の社会(家族・同業組合・政治結社・祖国・人類)に連帯感を持つことによって,はじめて完全なものになるのである(Durkheim 1925=1964 : 上115).

道徳の第2要素である「社会集団への愛着」はコリンズ的に言えば「契約に先立つ連帯」であったり「信頼」に相当する。

しかし、3階建ての理論もありうるかもしない。道徳の第2要素の集団への愛着があり、それが前提となって、道徳の第1要素である「規律の精神」が成り立ち、それを前提として、契約が守られるようになっているという3階建てなのかもしれない。であれば、2階にあたる規律の精神は、上記の3つ目のパーソンズらの解釈である「契約に拘束力を与える社会的規制」ということになる。

このようにレイヤーを増やしていくと、パーソンズ解釈でも良い気がするが、いずれにしろ『社会分業論』に限定したテキストの解釈としては妥当性に欠けるだろう。

「契約の非契約的要素=契約法」説

鍵となるのは,先に挙げた引用文の理解である.契約に法的保護が与えられるには,「一定の条件を満たしている」(194)必要があるとデュルケムは考えている.ではなぜ「契約当事者間の意思の一致」(194)が「一定の条件」を満たしていれば, 契約と認められ,法的保護を受けられるのか.それは,この「一定の条件」を満たす契約は,「社会的価値を持っている」(82),即ち「社会的諸機能の調和的な協働」を害さない,と評価されているからである.ではどのようにすれば契約の社会的価値を判断できるのか.デュルケムが提示するのは,「法的規則(règlesdu droit)に合致」(83)しているか否か,という基準である.この「法的規則」こそが,本稿が「契約における非契約的要素」の内容であると解釈する契約法である.
(中略)
合意であれば何であれ拘束力を認めるのではなく,社会的諸機能の調和という見地から,法的保護の付与されるべき合意に限定を掛ける必要性こそ,個々の契約に対する契約法の積極的な規整としてデュルケムが考えていた役割なのである.

流王さんの試みは旧来の解釈にレイヤーを差し込んで、デュルケムの契約法に関する理解を深めるものに思えた。このあたりの議論はまだまだ可能性があるため、いろいろと読んでみたい気がした。

コマンドラインにふりながを打つ

CUIコマンドライン、など呼び方はいくつかあるが、統計処理をする際にコマンドを打つ作業が求められることがある。統計学の習得をする際にコマンドを打つという作業でつまづく人は多いらしい。

計量の研究者でもSPSSやAMOSだったらできるが、RやMplusは無理という人も存在いる。学生向けの授業で無料だからRを使うなどをしてしまうと、間違いなく問題が起こる。統計学の学習以前の所で、呪文のようなものがいっぱい並んでいてわからなくなる学生が続出する。

スラスラ読める JavaScriptふりがなプログラミング

スラスラ読める JavaScriptふりがなプログラミング

この本はJavaScriptの解説書で統計学とは関係ないが、CUIの習得に非常に良い方法な気がしたので、エントリしてみた。スラスラ読めるシリーズは他の言語でも出版されているので、JavaScript本でなくてもよい。

f:id:iDES:20190902170916p:plain

これを日本語と変換した読み下し文がセットになっている。

f:id:iDES:20190902170928p:plain

このアイデアをRやMplusにも応用したら、理解してもらえるのではないか、と思った。

HTMLで書くとレイアウト的にいまいちだが、Rの重回帰にふりがなを打つと、次のような感じになる。

lm線形回帰(formula = wage賃金(独立変数) ~チルダの後に従属変数 gender性別 + age年齢,コンマで区切るdata = CPS1985データ名)

CUIに抵抗感がない(むしろCUIの方が良いと考えている)人は特殊なのかもしれない。僕の場合、最初に使ったパソコンにはWindows3.1が搭載されていたので、GUIからの出発だった。しかし、当時はMS-DOSを使わないとできないこともたくさんあったので、かなり最初の段階からCUIMS-DOSを使わざるを得なかった。その後、HTMLを学ぶあたりから、CUIの方が快適と感じるようになってきた気がする。CUIを使う機会があると苦手感がない=苦手な人の気持ちがわからなくなってくるのかもしれない。

SPSSでステップワイズ回帰

SPSSでもステップワイズ回帰をやっておこうと思う。

重回帰分析

データは先のエントリと同じくCPS1985を使っている。
通常通り線形回帰のダイアログボックスを表示させる。

f:id:iDES:20190902023107p:plain

方法を「ステップワイズ法」にすればステップワイズ回帰になる。

REGRESSION
  /MISSING LISTWISE
  /STATISTICS COEFF OUTS R ANOVA SELECTION
  /CRITERIA=PIN(.05) POUT(.10)
  /NOORIGIN
  /DEPENDENT wage
  /METHOD=STEPWISE education experience age ethnicity region gender occupation sector union married.    

GUIからはできなかったと思うのだが、ANOVAのあとにSELECTIONを入れておくとACIやBICが出力できる。

f:id:iDES:20190902023144p:plain

赤池情報基準がAIC、Schwarzのベイズ基準がBICである。SPSSはR二乗値でモデルの選択を行っているようだ。AICはR二乗値と同じ結果を支持しているが、BICはモデル4を支持している。

IBMの解説ページ(英語)
https://www.ibm.com/support/knowledgecenter/en/SSLVMB_24.0.0/spss/tutorials/reg_cars_stepwise_01.html シンタックス(英語)
https://www.ibm.com/support/knowledgecenter/en/SSLVMB_24.0.0/spss/base/syn_regression_method.html

ロジステック回帰分析

ロジスティック回帰でもステップワイズ回帰はできるようだ。

f:id:iDES:20190902023214p:plain

方法のところを「強制投入法」から「変数減少法:尤度比」に変更するだけだ。
図では結婚を推定する変数の探索をする形になっている。

シンタックスは以下のようになる。

LOGISTIC REGRESSION VARIABLES married
 /METHOD=BSTEP  (LR) wage education experience age ethnicity region gender occupation sector union
 /CATEGORICAL ethnicity region gender occupation sector union
 /CRITERIA=PIN(.05) POUT(.10) ITERATE(20) CUT(.5).

変数減少法はBSTEP尤度比は(LR)である。 一部を強制投入法、一部をステップワイズ法で分析する場合、は以下のように投入法を行ごとに変更する。

/METHOD=ENTER  wage education
/METHOD=BSTEP  (LR) experience age ethnicity region gender occupation sector union

GUIで行う場合には、ブロック1で強制投入法をして、ブロック2で「変数減少法:尤度比」とすると同じようになる。

シンタックス(英語)
https://www.ibm.com/support/knowledgecenter/en/SSLVMB_23.0.0/spss/regression/syn_logistic_regression_method.html

ちなみにSPSSのフリーのクローンソフトウェアであるPSPPではステップワイズ回帰は実行できないようだ。