Rで統計(メモ)

難しいことはわからないけど、とにかくRでやってみようというページ

通常の因子分析

KMOとMSAの確認 サンプリングの適切性を検討する

kmo <- function(x)                  # データ行列またはデータフレーム
{
  x <- subset(x, complete.cases(x))     # 欠損値を持つケースを除く
  r <- cor(x)                             # 相関係数行列
  r2 <- r^2                               # 相関係数行列の要素の二乗
  i <- solve(r)                           # 相関係数行列の逆行列
  d <- diag(i)                            # 対角成分
  p2 <- (-i/sqrt(outer(d, d)))^2          # 偏相関係数行列の要素の二乗
  diag(r2) <- diag(p2) <- 0               # 対角成分は計算には用いない
  KMO <- sum(r2)/(sum(r2)+sum(p2))
  MSA <- colSums(r2)/(colSums(r2)+colSums(p2))
  return(list(KMO=KMO, MSA=MSA))
}
kmo(dat) #0.8超えてればOK

因子数の検討

平行分析(通常版/ポリコリック相関行列版)

fa.parallel(dat)
fa.parallel.poly(dat)

スクリープロット

cor01=cor(dat)
eigen01=eigen(cor01)$values #固有値
plot(eigen01, type="b", main="Scree Plot",xlab="Number", ylab="Eigenvalue")

固有値

cor=cor(dat)
eigen=eigen(cor)

探索的因子分析

因子数1の検討(通常版/ポリコリック相関行列版)

fit1 <- factanal(x=dat2, factors=1, fm="ml", rotation="promax") 
print(fit1, cutoff=0.35)
fit2 <- fa.poly(x=dat, nfactors=1, fm="ml",rotate = "promax") 
print(fit2, cutoff=0.35)

信頼性係数の算出(アルファとオメガ)

library(GPArotation)
alpha(dat2)
omega(nfactors = 1,dat)

確認的因子分析

SEM

library(lavaan)
#1因子モデル(remove:Q5)
model="
F1=~Q1+Q2+Q3+Q4+Q6+Q7+Q8+Q9+Q10+Q11+Q12+Q13+Q14+Q15
"
fit1=cfa(model,data=dat2,ordered=colnames(data))
summary(fit1,standardized=T,fit.measures=T)
modificationIndices(fit1, minimum.value = 100)  #修正指標

SEM図のプロット

library(semPlot)
semPaths(fit1, "std", rotation = 2, edge.label.cex = 1.8, style="lisrel",fade=F,theme='gray',label.cex=2.5)

因子得点(平均)の作成

SNFC_1$SNFC=rowMeans(dat2[,1:14])

因子間の相関係数

cor(SNFC_1[,23:29],use="complete.obs") #リストワイズ削除