忍者ブログ
2

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

# 心理統計学の基礎, p347-350のもの。感謝

# 表10-1 p318 相関行列
mat <- matrix(c(
1.000,0.033,0.315,0.456,0.266,0.607,0.228,0.419,
0.033,1.000,0.637,0.250,0.528,0.195,0.522,0.420,
0.315,0.637,1.000,0.333,0.880,0.237,0.750,0.328,
0.456,0.250,0.333,1.000,0.362,0.432,0.398,0.449,
0.266,0.528,0.880,0.362,1.000,0.252,0.738,0.269,
0.607,0.195,0.237,0.432,0.252,1.000,0.335,0.463,
0.228,0.522,0.750,0.398,0.738,0.335,1.000,0.238,
0.419,0.420,0.328,0.449,0.269,0.463,0.238,1.000),
nrow=8, dimnames=list(c("onw", "yok", "gai", "sin", "sha", "kyo", "sek", "sun"), c("onw", "yok", "gai", "sin", "sha", "kyo", "sek", "sun"))
)

library(sem)
model <- specify.model()
f1 -> yok, b12, 1
f1 -> gai, b13, NA
f1 -> sha, b15, NA
f1 -> sek, b17, NA
f2 -> onw, b21, NA
f2 -> sin, b24, NA
f2 -> kyo, b26, NA
f2 -> sun, b28, NA
f1 <-> f2, g11, NA
f1 <-> f1, NA, 1
f2 <-> f2, NA,1
 onw <->  onw,  e1, NA
 yok <->  yok,  e2, NA
 gai <->  gai,  e3, NA
 sin <->  sin,  e4, NA
 sha <->  sha,  e5, NA
 kyo <->  kyo,  e6, NA
 sek <->  sek,  e7, NA
 sun <->  sun,  e8, NA


semres <- sem(model, mat, N=200)

# 表10-7, p394 のものと一致
summary(semres)

# 適合度指標基準の覚書
 # 以下参考にしたサイト。感謝。David Kennyのをちゃんと読むのが一番いいだろう
 # David Kenny
 # 小塩先生のページ。感謝
 # Rでsem入門
 # Indiana Universitypdf
 # 荘島先生のサイト
# GFI, AGFIは.90以上。サンプルサイズが大きいときは無視
# RMSEAは小さいほうがいい。0.05未満
# AIC, BICは相対基準。小さいほうがいい

PR
# 狩野裕・三浦麻子 (2002). AMOS, EQS, CALISによるグラフィカル多変量解析――目で見る共分散構造分析 第2版 現代数学者 
 # p2, 表1のデータより
kk <- c(89,99,128,98,52,47,40,39,38,48,27,23) # 価格
sk <- c(4.3,1.9,5.2,5.1,4.0,4.8,8.7,8.2,3.3,3.9,8.2,7.2) # 走行距離
jn <- c(5,4,2,3,6,8,7,7,10,6,8,8) # 乗車年数
skn <- c(24,18,13,4,15,24,3,6,14,0,24,24) # 車検
dat <- data.frame(kk, sk, jn, skn)
dat2 <- scale(dat)

summary(lm(kk~jn))

library(lavaan) # 残念ながら、相関行列をデータとしてうけとることはできないらしい
# p15、パス解析モデル1
model1 <- '
 sk ~ jn
 kk ~ sk + skn
'

model1sc <- '
 sk ~ jn
 kk ~ sk + skn
'

# p16、パス解析モデル2
model2 <- '
 sk ~ jn
 kk ~ sk + skn + jn
'

model2sc <- '
 sk ~ jn
 kk ~ sk + skn + jn
'

fit1 <- sem(model1, data=dat)
fit1sc <- sem(model1sc, data=dat2)
fit2 <- sem(model2, data=dat)
fit2sc <- sem(model2sc, data=dat2)
summary(fit1)
summary(fit1sc)
summary(fit2)
summary(fit2sc)

参考
Rosseel, Y. lavaan: an R package for structural equation modeling and more


libcdt-4.dllがない などと言われて放置していたRgraphvizのインストール
こちらのページこちらのページを参考にした。感謝

以下自分の覚書 (ほぼ上のリンクのコピペ)

1. http://www.graphviz.org/pub/graphviz/stable/windows/ より、graphviz-2.20.3a.msiをダウンロードしてインストール
## 以下、WindowsVistaでの設定
2. コントロールパネル -> システム -> システムの詳細設定 -> 詳細設定タブ -> 環境変数ボタン クリック
3. "システム環境変数" (下側) で"新規" をクリック
4. "変数名" には  Path 
"変数値" には  C:\Program Files\Graphviz2.20\bin\ 
と入力。その後OK連打
5. コンピュータを再起動
## WindowsVistaの設定終了
6. Rを起動。コンソールに以下をコピペしてRgraphvizをインストール
  source("http://bioconductor.org/biocLite.R");biocLite("Rgraphviz")

## ためしてみよう
library("Rgraphviz")
set.seed(123)
V  <-  letters[1:10]
M  <-  1:4
g1  <-  randomGraph(V,  M,  0.2)
g1  <-  layoutGraph(g1)
renderGraph(g1)


## 以下、インストールできた環境
> sessionInfo()
R version 2.11.1 (2010-05-31)
i386-pc-mingw32

locale:
[1] LC_COLLATE=Japanese_Japan.932  LC_CTYPE=Japanese_Japan.932  
[3] LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C                 
[5] LC_TIME=Japanese_Japan.932   

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base    

other attached packages:
[1] Rgraphviz_1.26.0 graph_1.26.0   

loaded via a namespace (and not attached):
[1] tools_2.11.1

Rで確認的因子分析を行う。
Indiana Universityのサイトとデータを参考にする。感謝。

library(foreign)
dat <- data.frame(read.spss("http://www.indiana.edu/~statmath/stat/all/cfa/values.sav"))

library(sem)
model <- specify.model()
economic   ->  privtown,  p1,   1
economic   ->  govtresp,  p2,   NA
economic   ->  compete,   p3,   NA
moral      ->  homosex,   p4,   NA
moral      ->  abortion,  p5,   NA
moral      ->  euthanas,  p6,   NA
privtown  <->  privtown,  e1,   NA
govtresp  <->  govtresp,  e2,   NA
compete   <->  compete,   e3,   NA
homosex   <->  homosex,   e4,   NA
abortion  <->  abortion,  e5,   NA
euthanas  <->  euthanas,  e6,   NA
economic  <->  economic,  NA,   1
moral     <->  moral,     NA,   1
economic  <->  moral,     em,   NA

semres <- sem(model, cov(dat), nrow(dat))
(sumsem <- summary(semres))
std.coef(semres) # 標準化係数
# このサイトこのサイトにある関数を利用してAIC, BIC, R二乗を出す。感謝
source("https://blog.cnobi.jp/v1/blog/user/89d80905c7038b4121822249e9062fba/1266106324")
sem.aic(semres) # AIC
rsquare.sem(semres) #  R二乗
sumsem$chisq - sumsem$df * log(semres$N)  # BIC


## 作図。Rgraphvizが上手くインストールできないので (libcdt-4.dllがないとかいわれる) のでGraphvizで書く
 # とりあえずインストールはできた
# 以下のコードで出力されたdigraph...のテキストをGraphvizで描画する。Graphvizを起動し、File -> Newで出たウィンドウにコピペしてF5を押す。設定ダイアログは何もせずにOKとした
path.diagram(semres, ignore.double=FALSE, edge.labels="values", digits=3, standardize=T) # file="filename"と指定するとpdfが作業ディレクトリに出力される。だけど表示がおかしい

出力されたテキスト
# 望んだ作図ではないが、今日はこの辺で勘弁してやる


元サイトと全然結果が一致しない…まいったのう

## specify.model の覚書
変数間の関係、共分散・係数の名前、初期値

変数間の関係は -> か <-> で指定。前後に変数名を入れる
 sem関数に与える相関・共分散行列にない名前は潜在変数になる
その次は共分散の名前。p1とか文字列で指定する。
その次が初期値。NAこれを推定する。
一方向 -> は回帰係数
両方向 <-> で変数名が違う場合は共分散
両方向で変数名が同じ場合はその変数の分散

係数をNAとすると固定母数として扱われる
潜在変数 (因子) の分散は固定母数1にすること
F1 <-> F1, NA, 1
観測変数の分散はNAにする
O1 <-> O1, e1, NA

同じ名前のパスが2つあると同値制約
同じ潜在変数同士 F1 <-F1 は負荷量にNA, 初期値に1を与えて固定母数にする
初心者の方へ: モデル式中にはパス係数、分散、共分散の全てを表記しなければならない。パス係数だけ指定してもモデルが推定されないので、要注意である (Rjiwikiより)

psychパッケージのstructure.sem関数
でもモデルが書ける
固有値とスクリープロット
library(psych)
faev <- fa.parallel(dat3)
faev

因子推定
# 最尤法
factMLres <- fa(r=dat3, nfactors=3 ,rotate="promax", fm="ml", scores=T)
# 主因子法
factPAres <- fa(r=dat3, nfactors=3 ,rotate="promax", fm="pa", scores=T)
# 一般化最小二乗法
factGLSres <- fa(r=dat3, nfactors=3 ,rotate="promax", fm="gls", scores=T)
# 重みつき最小二乗法
factWLSres <- fa(r=dat3, nfactors=3 ,rotate="promax", fm="wls", scores=T)
# 最小残差法 (重みづけない最小二乗法)
factOLSres <- fa(r=dat3, nfactors=3 ,rotate="promax", fm="minres", scores=T)

# 結果の出力
print(factMLres, cut=0, sort=T, digits=5)

回転 (rotate="") のオプション
# 回転なし。いわゆる初期解ってやつ
"none"
# 直交解
"varimax", "quartimax", "bentlerT", and "geominT"
# 斜交解
"promax", "oblimin", "simplimax", "bentlerQ, and "geominQ" or "cluster"

因子得点はscores=T。推定は (たぶん) 回帰法

library(psych)
? fa
のDetailも勉強になる

プロフィール
HN:
tao
HP:
性別:
非公開
職業:
会社員
趣味:
アウトドア、自転車、ジョギング、英語学習
自己紹介:
・千葉在住のサラリーマンです。データ分析っぽいことが仕事。
・今年英検1級取得。今はTOEIC高得点を目指して勉強中。
・興味のあることは野球、アウトドア、英語学習、統計、プログラミング、PC関係などなど。
ブログ内検索
freead
順位表
プロ野球データFreak
セリーグ順位表
パリーグ順位表