井出草平の研究ノート

LMestパッケージを用いた潜在移行分析[R]

cran.r-project.org

公式のマニュアルに記載された例を紹介する。

データ

データdata_SRHS_longミシガン大学が実施したHealth and Retirement Studyに由来する自己申告健康状態に関するデータセットである。

t: 時点。
id ID。
gender: 男が1、女が2。
race: 「白人」が1、「黒人」が2、「その他」が3。
educational: 教育レベル。1は「高校」、2は「一般教育修了証」、3は「高校卒業」、4は「ある程度の大学」、5は「大学以上」。
age: 年齢。
srhs: 自己申告した健康状態。「優れている」を1、「非常に良い」を2、「良い」を3、「まあまあ」を4、「悪い」を5。

データ名にもあるが、このデータはロングデータと呼ばれている形である。

data("data_SRHS_long")
SRHS <- data_SRHS_long[1:2400,]  
# Categories rescaled to vary from 0 (“poor”) to 4 (“excellent”)
SRHS$srhs <- 5 - SRHS$srhs
head(SRHS)

データの頭部分。

  t id gender race education age srhs
1 1  1      1    1         3  56    1
2 2  1      1    1         3  58    1
3 3  1      1    1         3  60    2
4 4  1      1    1         3  62    2
5 5  1      1    1         3  64    1
6 6  1      1    1         3  66    2

コード

out <- lmest(responsesFormula = srhs ~ NULL,index = c("id","t"),
                     data = SRHS,k = 3,start = 1, modBasic = 1, seed = 123)
out
summary(out)

引数の解説。

index: 1 つ目はID、2つ目は時点
k: 潜在状態の数(潜在クラスの数)
modBasic=1: 均質な移行確率
seed: 乱数のシード

引数の最初にあるのはモデルの指定である。

responsesFormula・測定モデル

  • responsesFormula = y1 + y2 ~ NULL
    共変量と2つのレスポンス(y1とy2)を含まないLMモデルが指定。

  • responsesFormula = NULL
    共変量なしのLMモデルを推定。id列とtime列を除くデータ中のすべての列がレスポンスとして用いられる。

  • ResponsesFormula = y1 + y2 ~ x1 + x2
    2つのレスポンス(y1とy2)と2つの共変量(x1とx2)を持つLMモデルが指定。

latentFormulal・潜在モデル

  • responsesFormula = y1 + y2 ~ NULL
    latentFormula = ~ x1 + x2 | x3 + x4
    2つのレスポンス(y1とy2)と初期確率に影響を与える2つの共変量(x1とx2)と移行確率に影響を与える残りの2つの共変量(x3とx4)を持つLMモデルが指定。

  • responsesFormula = y1 + y2 ~ NULL
    latentFormula = ~ 1 | x1 + x2
    (orlatentFormula = ~ NULL | x1 + x2)
    共変量は移行確率にのみ影響し、切片は初期確率に指定。

  • responsesFormula = y1 + y2 ~ NULLlatentFormula = ~ x1 + x2
    初期確率と移行確率の両方に影響を与える2つの共変量(x1とx2)を持つLMモデルを指定。

  • responsesFormula = y1 + y2 ~ NULL
    latentFormula = ~ NULL | NULL
    (orlatentFormula = ~ 1 | 1)
    初期確率と移行確率の切片のみを持つLMモデルを指定。

今回は上から2番目のid列とtime列を除くデータ中のすべての列を潜在変数に組み込むモデルになっている。

結果

Convergence info:
     LogLik np k      AIC      BIC   n TT
  -2796.989 20 3 5633.979 5708.054 300  8
  
Coefficients:

Initial probabilities:
     est_piv
[1,]  0.5608
[2,]  0.3119
[3,]  0.1273

Transition probabilities:
     state
state      1      2      3
    1 0.9318 0.0608 0.0074
    2 0.0000 0.9464 0.0536
    3 0.0040 0.0200 0.9760

Conditional response probabilities:
, , item = 1

        state
category      1      2      3
       0 0.0028 0.0049 0.2924
       1 0.0000 0.1208 0.6178
       2 0.0832 0.6093 0.0860
       3 0.4979 0.2438 0.0038
       4 0.4160 0.0212 0.0000

Transition probabilitiesをみると、ほとんどのクラスが維持されていることがわかる。

余談

連続変数のageを入れて潜在クラス分析を走らせるのは無理があるので、ageを抜いた形で潜在クラス分析をR上で行うと次のようになる。1波のみのデータで実施。

library(poLCA)
d1 <- subset(SRHS, SRHS$t==1) # 1波のみ抽出
f <- cbind(gender, race, education, srhs)~1
d1$gender <- as.factor(d1$gender)
d1$race <- as.factor(d1$race)
d1$education <- as.factor(d1$education)
d1$srhs <- as.factor(d1$srhs)
lca.res <- poLCA(f,d1,nclass=3,maxiter=3000,nrep=100)
lca.res

授業に使えるICTツール

阪大の「オンライン授業なんでも相談会」のメールが来ていて、そので紹介するかも?と書かれていたツール類。

それらのツール類は阪大の岩居弘樹先生のブログで紹介されている。このブログ自体興味深い記事ばかりなのでRSSフィードに登録した。 zoom.les.cmc.osaka-u.ac.jp

EDpuzzle

zoom.les.cmc.osaka-u.ac.jp


生徒がビデオを見てるか心配?EDpuzzleの使い方

これは便利かもしれない。ビデオで自習をする場合には、使えそう。

Formative

zoom.les.cmc.osaka-u.ac.jp

今まで授業ように作ってきたWordやPDFの教材を利用してオンライン教材にするサービスらしい。僕の場合は今までの授業資料をPowerPointファイルにしてしまったので、これ以上の工夫をする元気がわかないが、スライドよりもリッチなコンテンツにできるようなので、面白そうだ。

BookWidgets

zoom.les.cmc.osaka-u.ac.jp

年間49ドルの有料サービスですが,30日の無料トライアルもあります.

おそらく、語学の授業で一番活躍する気がする。Googleフォームではできないことがいろいろできるので、Googleフォームに限界を感じたときに、といった感じだろうか。

Flipgrid

note.com

zoom.les.cmc.osaka-u.ac.jp

zoom.les.cmc.osaka-u.ac.jp

これは面白い。今期の授業に組み込めないか考えてみたい。

Socrative

zoom.les.cmc.osaka-u.ac.jp

Mentimeterみたいな感じのツール。これはこれでよさそう。無料が50人まではちょっとつらいかな。

潜在移行分析[Mplus]

www.statmodel.com

こちらの8.13の例をモディファイしたもの。8.13は共変量が設定されているためややこしいように思えたので、共変量を取り除いたシンプルにものにしてみた。

f:id:iDES:20200930000018p:plain

c1とc2は2つの時点の潜在変数である。潜在以降分析は潜在クラスが2時点、3時点でどのように変化したかを見るものなので、u11とu21は時点が違うだけで測定する内容は同じである。このモデルでは、5つの観測変数から潜在変数が作られていて、潜在クラスの数は3である。

TITLE: LTA
DATA: FILE = ex8.13.dat;
VARIABLE:   
    NAMES = u11-u15 u21-u25;
    CATEGORICAL = u11-u15 u21-u25;
    CLASSES = c1 (3) c2 (3);
ANALYSIS: TYPE = MIXTURE;
MODEL:  
    %OVERALL%
    c2 ON c1;
MODEL c1: 
    %c1#1% 
    [u11$1-u15$1] (1-5); 
    %c1#2%
    [u11$1-u15$1] (6-10); 
    %c1#3%
    [u11$1-u15$1] (11-15); 
MODEL c2:
    %c2#1% 
    [u21$1-u25$1] (1-5); 
    %c2#2%
    [u21$1-u25$1] (6-10); 
    %c2#3%
    [u21$1-u25$1] (11-15); 

CLASSES = c1 (3) c2 (3);

クラス数を指定する。c1とc2は3クラスずつである。

MODEL: %OVERALL% c2 ON c1;

全体のモデルの記述。潜在変数c1からc2への矢印を示している。

MODEL c1: %c1#1%

%c1#1%はc1のクラス1のこと。[u11$1-u15$1][u11$1] (1); [u12$1] (2); [u13$1] (3); [u14$1] (4); [u15$1] (5);と書いても良い。u11$1u21$1はいずれも"1"のラベルがついているため、同じ項目であることを意味している。

クラスの変化

最も重要なのはクラスがどのように変化したかである。
以下の表は1時点目のC1が行、2時点目のC2が行となっている。

LATENT TRANSITION PROBABILITIES BASED ON THE ESTIMATED MODEL

  C1 Classes (Rows) by C2 Classes (Columns)

            1        2        3

   1     0.632    0.135    0.233
   2     0.587    0.120    0.293
   3     0.341    0.162    0.497

1時点目でクラス1で、2時点目もクラス1だったものは63.2%ということである。クラス2に移行したものは13.5%、クラス3に移行したものは23.3%ということになる。

潜在移行分析を行う前に潜在クラス分析をする

まずは潜在クラス分析をしてクラス数を決める作業を行う。潜在クラス分析はBICやBRRTなどを参考にしてクラス数を決めるが、それらの指標の支持するクラス数が分かれる時があり、その場合は分析者が、クラス数を決める。指標の支持も必要だが、有意味なクラス分けがされているか、というのが最も重要な判断になる。3クラスから4クラスになった方が指標の数値は良いが、3から4にクラス数を増やす意味が説明できないときには、3でもよいということだ。
潜在クラス分析は通常、1時点の分析だが、潜在移行分析の場合は2時点以上のデータがあるため、それぞれの時点のクラス分けをすることになる。時点を越えると、クラス数がしばしば安定しないことがあり、通常の潜在クラス分析よりも、クラス分けは分析者の決断が必要になる傾向にある。 クラス数を決めてから、潜在移行分析を行う。

ひきこもり支援を目的として掲げる民間事業の利用をめぐる消費者トラブルにご注意ください!(消費者庁)

www.caa.go.jp

ひきこもり支援を目的として掲げる民間事業者との契約時、そうした民間事業者の利用時等において、対応が説明と異なる、途中で解約できないなど、契約や解約に際しトラブルに遭った場合には、「消費者ホットライン」(局番なしの188)を活用し、お近くの消費生活センター等へ御相談ください。

自閉スペクトラム症の子どもは情動調節がうまくいかず、学校の社会関係に失敗し、学校から離れインターネットゲーム障害になる

という傾向があるという話だ。

自閉症の特性=感情調節不全→学校とのつながりが希薄に→学校への帰属意識が減少→インターネットゲーム障害になる、という仮説である。

pubmed.ncbi.nlm.nih.gov

  • Liu S, Yu C, Conner BT, Wang S, Lai W, Zhang W, 2017, Autistic traits and internet gaming addiction in Chinese children: The mediating effect of emotion regulation and school connectedness. Research in Developmental Disabilities, 68: 122-130.

データ

18ヶ月間の縦断的研究。研究には、合計420名の中国人児童(男子220名、平均年齢=9.74±0.45歳)が参加。自閉症特性は小学4年生で測定し、情動調節、学校でのつながり、IGAは小学4年生と5年生の両方で測定。

尺度

自閉的特性

Skuse, Mandy and Scourfield (2005)によって開発されたSocial and Communication Disorders Checklist (SCDC)によって測定された。

  • Skuse, D. H., Mandy, W. P., & Scourfield, J. (2005). Measuring autistic traits: Heritability, reliability and validity of the Social and Communication Disorders Checklist. The British Journal of Psychiatry, 187(6), 568–572.

Hsiao, Tseng, Huang, and Gau(2013)は、自閉症特性のレベルが高い生徒は、教師に対してより否定的な態度を示し、クラスメートとの交流も否定的である。学校とのつながりがIGAの減少に保護的な役割を果たすことが先行研究で示されている(Li et al. 2013, Zhu et al. 2015)。

インターネットゲーム依存症

インターネットゲーム障害(IGA)はGentile(2009)のPathological Video Game Use Questionnaire。

  • Gentile, D. (2009). Pathological video-game use among youth ages 8–18: A national study. Psychological Science, 20(5), 594–602.

感情調節

感情調節はGross and John (2003)によって開発されたEmotion Regulation Questionnaire (ERQ)。

  • Gross, J. J., & John, O. P. (2003). Individual differences in two emotion regulation processes: Implications for affect, relationships, and well-being. Journal of Personality and Social Psychology, 85(2), 348–362.

感情の調節と学校のつながりとの関係については、多くの研究で裏付けられている(Denham, 2006; Eisenberg, Valiente, & Eggum, 2010; Shieldsら, 2001;Ursache, Blair, & Raver, 2012)。例えばEisenberg et al.(2010)は、感情を調節する能力が教師や仲間との関係に関係していることを報告している。同様に、Ursache et al.(2012)は、子どもの感情調節を促進することが、教師や仲間とのポジティブな交流を促進するのに役立つことを発見した。また、自閉症の特性が情動調節に負の影響を与えている可能性があることが示唆された。

学校とのつながり

School Engagement Scale(Wang,Willett & Eccles, 2011)のEmotional Engagementサブスケールで測定され、教師、クラスメート、学校との情緒的関係を反映した9つの項目を用いている(例:「学校では安全で幸せだと感じている」)。

  • Wang, M. T., Willett, J. B., & Eccles, J. S. (2011). The assessment of school engagement: Examining dimensionality and measurement invariance by gender and race/ ethnicity. Journal of School Psychology, 49, 465–480.

学校とのつながりは、学校への帰属感や教師やクラスメートとの感情的な親近感として定義されている(Fredricks, Blumenfeld, & Paris, 2004)。また、差別的行動への関与に対する保護因子として繰り返し同定されている(Chapman, Buckley, Sheehan, Shochet, & Romaniuk, 2011; Li & Lerner, 2011; Wang & Fredricks, 2014)。社会的統制理論(Hirschi,1969)によると、学校の先生やクラスメートに強い感情的なつながりを感じている子どもたちは、それらが逸脱した活動に従事することを防ぐために機能する可能性があり、安全で気遣われていると感じる可能性が高い。

分析・結果

相関

自閉症特性は感情調節および学校のつながりと有意に負の関係がある(r1=-0.20,p<0.01; r2=-0.14,p<0.01)。自閉症の特性は感情調節の低下および学校のつながりの低下と関連している。さらに、自閉症特性はインターネットゲーム障害と有意に正の相関を示していた(r=0.12,p<0.01)。自閉症の特性の高さはインターネットゲーム障害のリスク増加と関連していることが示唆された。最後に、性別はインターネットゲーム障害と有意に正の関係を示し(r=0.26、p<0.01)となり、女子よりも男子に多いことが示唆された。刺激欲求(Sensation seeking)もまた、インターネットゲーム障害と有意に正の関係があり(r = 0.16,p<0.01)であり、これは以前の結果と一致している(Mehroof & Griffiths, 2010)。

f:id:iDES:20200928002033p:plain

SEM

f:id:iDES:20200928002338p:plain

媒介モデルの標準化された経路係数を図1に示す。また、ブートストラップ解析により、仮説化された間接効果(IE)の有効性が確認された。(1)T1自閉症特性→T2感情調節→T3学校のつながり→T4IGA(標準化IE=0.02、95%CI: 0.004-0.046)、(2)T1自閉症特性→T3学校のつながり→T4IGA(標準化IE=0.01、95%CI: 0.002-0.016)と、仮説化された間接効果(IE)の有意性が確認された。

結論

感情調節能力を向上させることは、自閉症特性の高い子どもたちの学校とのつながりを強化するための効率的な方法であり、最終的にはIGA発症のリスクを減少させることになると示唆されている。

同族テストモデル・タウ等価モデル・平行テストモデル[R]

信頼性係数はα係数が使用されることが多いが、問題点が指摘されている。α係数は因子構造を無視して一次元性の検証をしているという点である。別の言い方をすると、各因子での真の得点が共通している(一元性)と仮定しているが、ほとんどのケースでは一元性は仮定できない。観測得点に対して真の値から等しく影響を与えていないとα係数は正常に機能しない。α係数は信頼性の下限であると言われることもある。

同族テストモデル

データ

IPIP-NEOデータを利用する。

library("psych")
data(bfi) # IPIP-NEOデータ
d1 <- bfi[1:5] # 因子分析に使用するのは1~5列目。Agreeableness 協調性・調和性のみ。
d1 <-na.omit(d1) # 欠損値のあるケースを削除

分析

パッケージの読み込み

library(lavaan)
library(semTools)

モデルはすべての因子負荷に異なるラベルb1からb5をつける。Agreeableness協調性・調和性外向性(Agreea)を測定する各観測得点(変数)に対して,因子である協調性からの負荷はそれぞれ異なり得ることを意味している。

誤差分散のラベルしVe1からVe5である。こちらもすべて異なったラベルになる。意味も同じで、各測定の精度が同じでないことを表している。

:=いう記号はモデル母数を使って、新たな推定対象を定義する際に使用する。ここでは,因子負荷と誤差分散を使って,信頼性係数 \rhoを定義する。

モデル

model.con <- '
 Agree =~ b1*A1 + b2*A2 + b3*A3 + b4*A4 + b5*A5
    A1 ~~ Ve1 * A1
    A2 ~~ Ve2 * A2
    A3 ~~ Ve3 * A3
    A4 ~~ Ve4 * A4
    A5 ~~ Ve5 * A5
 rho := ((b1+b2+b3+b4+b5)^2 / 
         ((b1+b2+b3+b4+b5)^2 + (Ve1+Ve2+Ve3+Ve4+Ve5)) )
'

一応、モデルを図示しておこう。

f:id:iDES:20200927132530p:plain

実行

fit.con <- cfa(model.con, d1, std.lv=TRUE)
summary(fit.con, fit.measures=TRUE, standardized=TRUE)

結果

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.563    0.012   45.675    0.000    0.563    0.590

rhoは推定値0.563。標準誤差は0.012である。

fitMeasures(fit.con, c("chisq", "df", "cfi", "tli", "rmsea", "srmr", "aic"))

結果。

    chisq        df       cfi       tli     rmsea      srmr       aic 
   86.696     5.000     0.968     0.935     0.078     0.032 43575.160 

タウ等価モデル

この同族テストモデルでは、因子負荷のラベルb1からb5をつけた。一元性を仮定する場合、bという一つのラベルをつけることになる。そうすると、因子負荷聞に等値の制約が置かれることになって、タウ等価テストになる。タウ等価という前提は、因子分析ですべての変数に対する負荷が同じだという制約なので、実際に成り立ちにくい仮定である。

model.tau <- '
 Agree =~ b*A1 + b*A2 + b*A3 + b*A4 + b*A5
    A1 ~~ Ve1 * A1
    A2 ~~ Ve2 * A2
    A3 ~~ Ve3 * A3
    A4 ~~ Ve4 * A4
    A5 ~~ Ve5 * A5
 rho := ((b+b+b+b+b)^2 / 
         ((b+b+b+b+b)^2 + (Ve1+Ve2+Ve3+Ve4+Ve5)) )
'
fit.tau <- cfa(model.tau, d1, std.lv=TRUE)
summary(fit.tau, fit.measures=TRUE, standardized=TRUE)
fitMeasures(fit.tau, c("chisq", "df", "cfi", "tli", "rmsea", "srmr", "aic"))

結果。

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.614    0.011   55.857    0.000    0.614    0.498
    
    chisq        df       cfi       tli     rmsea      srmr       aic 
 1629.662     9.000     0.358     0.286     0.258     0.318 45110.126

平行テストモデル

タウ等価モデルに加えて、誤差分散も同じだというモデルが平行モデルである。この値はα係数と同じになる。

model.para <- '
 Agree =~ b*A1 + b*A2 + b*A3 + b*A4 + b*A5
    A1 ~~ Ve * A1
    A2 ~~ Ve * A2
    A3 ~~ Ve * A3
    A4 ~~ Ve * A4
    A5 ~~ Ve * A5
 rho := ((b+b+b+b+b)^2 / 
         ((b+b+b+b+b)^2 + (Ve+Ve+Ve+Ve+Ve)) )
'
fit.para <- cfa(model.para, d1, std.lv=TRUE)
summary(fit.para, fit.measures=TRUE, standardized=TRUE)
fitMeasures(fit.para, c("chisq", "df", "cfi", "tli", "rmsea", "srmr", "aic"))

結果。

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.431    0.017   24.896    0.000    0.431    0.431

    chisq        df       cfi       tli     rmsea      srmr       aic 
 2332.318    13.000     0.081     0.293     0.257     0.274 45804.7

まとめ

3つのモデルを比較しよう。

同族テストモデル

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.563    0.012   45.675    0.000    0.563    0.590

    chisq        df       cfi       tli     rmsea      srmr       aic 
   86.696     5.000     0.968     0.935     0.078     0.032 43575.160 

タウ等価モデル

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.614    0.011   55.857    0.000    0.614    0.498
    
    chisq        df       cfi       tli     rmsea      srmr       aic 
 1629.662     9.000     0.358     0.286     0.258     0.318 45110.126

平行テストモデル

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    rho               0.431    0.017   24.896    0.000    0.431    0.431

    chisq        df       cfi       tli     rmsea      srmr       aic 
 2332.318    13.000     0.081     0.293     0.257     0.274 45804.7

AICは同族<タウ等価<平行の順番である。
SRMRは同族のみ.05を下回っている。
RMSEAは同族<平行<タウ等価である。
CFI、TLIは同族のみ0.9を超えている。

rhoの値は平行<同族<タウ等価の順番だが、フィッティング指標から同族モデルが支持される。
信頼性係数rhoは0.563であり、標準誤差は0.012である。

reliability()を使う。

reliability(fit.con)
reliability(fit.tau)
reliability(fit.para)

reliability()を使うと同じ結果が得られる。

          Agree
alpha  0.4306169
omega  0.5634002
omega2 0.5634002
omega3 0.5587968
avevar 0.3393923
           Agree
alpha  0.4306169
omega  0.6143590
omega2 0.6143590
omega3 0.8586245
avevar 0.2416297
           Agree
alpha  0.4306169
omega  0.4306169
omega2 0.4306169
omega3 0.4306169
avevar 0.1313845

同族テストモデルの制約は手動でする必要はない。モデルをmodel <- ' Agree =~ A1 + A2 + A3 + A4 + A5'と因子負荷、誤差分散ともにラベルをつけないシンプルなモデルを組んで、reliability()に入れると同族テストモデルの結果が出てくる。

制約を手動でつけるメリットはタウ等価モデル計算ができることと、信頼性係数の標準誤差がえられるところだろうか。

パス図

library(semPlot)
  semPaths(fit,layout="tree",
  whatLabels="stand",sizeMan=5,
  shapeLat="ellipse",sizeLat=12,sizeLat2=5,
  exoCov=F,residuals=F,nCharNodes=0,
  edge.label.cex=0.9,edge.color="black")