R语言sem包实现通径分析

结构方程模型(Structural Equation Modeling,SEM)是一种建立、估计和检验因果关系模型的方法。模型中既包含有可观测的显在变量,也可能包含无法直接观测的潜在变量。结构方程模型可以替代多重回归、通径分析、因子分析、协方差分析等方法,清晰分析单项指标对总体的作用和单项指标间的相互关系。本文主要应用R语言的sem包实现通径分析.

如当自变量数目比较多,且自变量间相互关系比较复杂(如:有些自变量间的关系是相关关系,有些自变量间则可能是因果关系)或者某些自变量是通过其他的自变量间接地对因变量产生影响,这时可以采用通径分析。

library(sem)
library(dplyr)
# 随机生成数据
dat <- matrix(rnorm(100), 25, 4) # 25*4 矩阵
colnames(dat) <- c('a', 'b', 'c', 'd') # 分配列名
cor_num <- cor(dat) # 计算相关性矩阵

# 构建模型
# 我们假设 变量a 通过b, c 影响 d
  model.kerch <- specifyModel(
    # sem包是以文本的形式提交, 路径关系
    # 默认所有变量都是观测变量
    # 第一列表示路径
    #第二列表示回归系数,可以先假定一个任意变量, 模型随后进行修正赋值; 第三列为自由参数的起始值, 没有可设置为NA sem会计算起始值
    # 下面的变量, 如果存在于数据中, 则为观测变量, 否则为潜在变量
    text = '
      a -> b, a_b, NA
      a -> c, a_c, NA
      a -> d, a_d, NA
      b -> d, b_d, NA
      b -> c, b_c, NA
      c -> d, c_d, NA
      a <-> a, a_a, NA
      b <-> b, b_b, NA
      c <-> c, c_c, NA
      d <-> d, d_d, NA
    ')
## NOTE: it is generally simpler to use specifyEquations() or cfa()
##       see ?specifyEquations
  # 最后四行表示变量自身的影响
  # 构建sem
  # 第二个参数可以直接使用相关性矩阵,或者协方差矩阵
  out_sem <- sem(model.kerch, cor_num, nrow(dat))
  # 回归系数
  coef <- out_sem$coeff
  # 系数名
  coeff_name <- out_sem$semmod[,1]
  summary(out_sem)
## 
##  Model Chisquare =  1.998401e-15   Df =  0 Pr(>Chisq) = NA
##  AIC =  20
##  BIC =  1.998401e-15
## 
##  Normalized Residuals
##       Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
## -2.679e-16 -8.967e-17 -2.125e-18 -7.036e-17  0.000e+00  0.000e+00 
## 
##  R-square for Endogenous Variables
##      b      c      d 
## 0.0005 0.0970 0.1277 
## 
##  Parameter Estimates
##     Estimate     Std Error z value     Pr(>|z|)             
## a_b -0.022182539 0.2040739 -0.10869855 0.9134415924 b <--- a
## a_c  0.311527866 0.1940185  1.60566059 0.1083485056 c <--- a
## a_d  0.324307405 0.2006684  1.61613599 0.1060649147 d <--- a
## b_d -0.037960563 0.1906895 -0.19906998 0.8422080012 d <--- b
## b_c  0.004386601 0.1940185  0.02260919 0.9819620148 c <--- b
## c_d  0.074420572 0.2006197  0.37095355 0.7106721273 d <--- c
## a_a  1.000000000 0.2886751  3.46410162 0.0005320055 a <--> a
## b_b  0.999507935 0.2885331  3.46410162 0.0005320055 b <--> b
## c_c  0.902991774 0.2606713  3.46410162 0.0005320055 c <--> c
## d_d  0.872252005 0.2517975  3.46410162 0.0005320055 d <--> d
## 
##  Iterations =  0
  # 构建路径图
  pathDiagram(out_sem, edge.labels="values")
library(knitr)
knit('/Users/lipidong/baiduyun/work/RFile/learn/sem_with_r.rmd', output = '/Users/lipidong/learn/blog/_posts/2015-11-09-sem_with_r.md')
  • 17
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

探索者v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值