{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "47c70580", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Loading required package: MASS\n", "\n", "Loading required package: Matrix\n", "\n", "Loading required package: mvtnorm\n", "\n", "Loading required package: sandwich\n", "\n", "mediation: Causal Mediation Analysis\n", "Version: 4.5.0\n", "\n", "\n", "Loading required package: nlme\n", "\n", "Warning message:\n", "“package ‘lavaan’ was built under R version 4.2.3”\n", "This is lavaan 0.6-17\n", "lavaan is FREE software! Please report any bugs.\n", "\n" ] } ], "source": [ "library(mediation)\n", "library(multilevel)\n", "library(lavaan)" ] }, { "cell_type": "code", "execution_count": 2, "id": "1353a5cc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.frame: 6 × 3
XMY
<int><int><int>
1656
2755
3774
4848
5435
6447
\n" ], "text/latex": [ "A data.frame: 6 × 3\n", "\\begin{tabular}{r|lll}\n", " & X & M & Y\\\\\n", " & & & \\\\\n", "\\hline\n", "\t1 & 6 & 5 & 6\\\\\n", "\t2 & 7 & 5 & 5\\\\\n", "\t3 & 7 & 7 & 4\\\\\n", "\t4 & 8 & 4 & 8\\\\\n", "\t5 & 4 & 3 & 5\\\\\n", "\t6 & 4 & 4 & 7\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A data.frame: 6 × 3\n", "\n", "| | X <int> | M <int> | Y <int> |\n", "|---|---|---|---|\n", "| 1 | 6 | 5 | 6 |\n", "| 2 | 7 | 5 | 5 |\n", "| 3 | 7 | 7 | 4 |\n", "| 4 | 8 | 4 | 8 |\n", "| 5 | 4 | 3 | 5 |\n", "| 6 | 4 | 4 | 7 |\n", "\n" ], "text/plain": [ " X M Y\n", "1 6 5 6\n", "2 7 5 5\n", "3 7 7 4\n", "4 8 4 8\n", "5 4 3 5\n", "6 4 4 7" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Source: https://library.virginia.edu/data/articles/introduction-to-mediation-analysis\n", "# X: grades; Y: happiness; M: self-esteem\n", "myData = read.csv('http://static.lib.virginia.edu/statlab/materials/data/mediationData.csv')\n", "head(myData)" ] }, { "cell_type": "markdown", "id": "c34146d2", "metadata": {}, "source": [ "## Baron & Kenny’s 4-step method" ] }, { "cell_type": "code", "execution_count": 3, "id": "8fd54b14", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "Call:\n", "lm(formula = Y ~ X, data = myData)\n", "\n", "Residuals:\n", " Min 1Q Median 3Q Max \n", "-5.0262 -1.2340 -0.3282 1.5583 5.1622 \n", "\n", "Coefficients:\n", " Estimate Std. Error t value Pr(>|t|) \n", "(Intercept) 2.8572 0.6932 4.122 7.88e-05 ***\n", "X 0.3961 0.1112 3.564 0.000567 ***\n", "---\n", "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", "\n", "Residual standard error: 1.929 on 98 degrees of freedom\n", "Multiple R-squared: 0.1147,\tAdjusted R-squared: 0.1057 \n", "F-statistic: 12.7 on 1 and 98 DF, p-value: 0.0005671\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step 1: Total effect = Path c = 0.3961***\n", "model.0 = lm(Y ~ X, data=myData)\n", "summary(model.0)" ] }, { "cell_type": "code", "execution_count": 4, "id": "88235b89", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "Call:\n", "lm(formula = M ~ X, data = myData)\n", "\n", "Residuals:\n", " Min 1Q Median 3Q Max \n", "-4.3046 -0.8656 0.1344 1.1344 4.6954 \n", "\n", "Coefficients:\n", " Estimate Std. Error t value Pr(>|t|) \n", "(Intercept) 1.49952 0.58920 2.545 0.0125 * \n", "X 0.56102 0.09448 5.938 4.39e-08 ***\n", "---\n", "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", "\n", "Residual standard error: 1.639 on 98 degrees of freedom\n", "Multiple R-squared: 0.2646,\tAdjusted R-squared: 0.2571 \n", "F-statistic: 35.26 on 1 and 98 DF, p-value: 4.391e-08\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step 2: Path a = 0.56102***\n", "model.XM = lm(M ~ X, data=myData)\n", "summary(model.XM)" ] }, { "cell_type": "code", "execution_count": 5, "id": "48ed6977", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "Call:\n", "lm(formula = Y ~ X + M, data = myData)\n", "\n", "Residuals:\n", " Min 1Q Median 3Q Max \n", "-3.7631 -1.2393 0.0308 1.0832 4.0055 \n", "\n", "Coefficients:\n", " Estimate Std. Error t value Pr(>|t|) \n", "(Intercept) 1.9043 0.6055 3.145 0.0022 ** \n", "X 0.0396 0.1096 0.361 0.7187 \n", "M 0.6355 0.1005 6.321 7.92e-09 ***\n", "---\n", "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", "\n", "Residual standard error: 1.631 on 97 degrees of freedom\n", "Multiple R-squared: 0.373,\tAdjusted R-squared: 0.3601 \n", "F-statistic: 28.85 on 2 and 97 DF, p-value: 1.471e-10\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step 3 & 4: Path b + Path c'\n", "# Path b = 0.6355***\n", "# Path c'= 0.0396\n", "model.MY.XY = lm(Y ~ X + M, data=myData)\n", "summary(model.MY.XY)" ] }, { "cell_type": "markdown", "id": "49cfe740", "metadata": {}, "source": [ "Interpretation:\n", "- The total effect model shows a significant positive relationship between grades(X) and happiness(Y).\n", " - Path c = 0.3961***\n", "- The path a model shows grades(X) positively correlate with self-esteem(M) and the relationship is statistically significant.\n", " - Path a = 0.56102***\n", "- Self-esteem(M) positively predicts happiness(Y) when controlling grades(X). At the same time, the relationship between grades(X) and happiness(Y) is no longer significant.\n", " - Path b = 0.6355***\n", " - Path c'= 0.0396\n", "- This suggests that self-esteem(M) completely mediates the relationship between grades(X) and happiness(Y).\n", " - However, this method cannot directly evaluate the significance of the indirect effect (i.e. ab≠0) - we need a formal test for a statistical verification." ] }, { "cell_type": "markdown", "id": "8f03de5c", "metadata": {}, "source": [ "## Sobel Test\n", "\n", "Determine the significance of the indirect effect." ] }, { "cell_type": "code", "execution_count": 6, "id": "d01577b1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "'indirect effect: 0.356522196728078'" ], "text/latex": [ "'indirect effect: 0.356522196728078'" ], "text/markdown": [ "'indirect effect: 0.356522196728078'" ], "text/plain": [ "[1] \"indirect effect: 0.356522196728078\"" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "'z-statistic: 4.32789111803173'" ], "text/latex": [ "'z-statistic: 4.32789111803173'" ], "text/markdown": [ "'z-statistic: 4.32789111803173'" ], "text/plain": [ "[1] \"z-statistic: 4.32789111803173\"" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "'p-value: 1.5054385481994e-05'" ], "text/latex": [ "'p-value: 1.5054385481994e-05'" ], "text/markdown": [ "'p-value: 1.5054385481994e-05'" ], "text/plain": [ "[1] \"p-value: 1.5054385481994e-05\"" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 手动计算: https://www.spss-tutorials.com/sobel-test-what-is-it/\n", "alpha = summary(model.XM)$coefficients[\"X\",\"Estimate\"]\n", "se_alpha = summary(model.XM)$coefficients[\"X\",\"Std. Error\"]\n", "beta = summary(model.MY.XY)$coefficients[\"M\",\"Estimate\"]\n", "se_beta = summary(model.MY.XY)$coefficients[\"M\",\"Std. Error\"]\n", "\n", "z.statistic = (alpha * beta)/(sqrt(alpha*alpha*se_beta*se_beta + beta*beta*se_alpha*se_alpha))\n", "p.value = 2*(1-pnorm(z.statistic)) # two-tailed\n", "\n", "sprintf(\"indirect effect: %s\", alpha*beta)\n", "sprintf(\"z-statistic: %s\", z.statistic)\n", "sprintf(\"p-value: %s\", p.value)" ] }, { "cell_type": "code", "execution_count": 7, "id": "0c2f0ef6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\t
$`Mod1: Y~X`
\n", "\t\t
\n", "\n", "\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\n", "
A matrix: 2 × 4 of type dbl
EstimateStd. Errort valuePr(>|t|)
(Intercept)2.85720460.69321304.1216847.875771e-05
pred0.39612610.11115983.5635745.671128e-04
\n", "
\n", "\t
$`Mod2: Y~X+M`
\n", "\t\t
\n", "\n", "\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\n", "
A matrix: 3 × 4 of type dbl
EstimateStd. Errort valuePr(>|t|)
(Intercept)1.904268820.60545853.1451682.203831e-03
pred0.039603920.10964840.3611907.187429e-01
med0.635494590.10053396.3211947.922642e-09
\n", "
\n", "\t
$`Mod3: M~X`
\n", "\t\t
\n", "\n", "\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\n", "
A matrix: 2 × 4 of type dbl
EstimateStd. Errort valuePr(>|t|)
(Intercept)1.49951830.589197732.5450171.248749e-02
pred0.56101530.094480485.9378974.391362e-08
\n", "
\n", "\t
$Indirect.Effect
\n", "\t\t
0.356522196728078
\n", "\t
$SE
\n", "\t\t
0.0823778110411936
\n", "\t
$z.value
\n", "\t\t
4.32789111803173
\n", "\t
$N
\n", "\t\t
100
\n", "
\n" ], "text/latex": [ "\\begin{description}\n", "\\item[\\$`Mod1: Y\\textasciitilde{}X`] A matrix: 2 × 4 of type dbl\n", "\\begin{tabular}{r|llll}\n", " & Estimate & Std. Error & t value & Pr(>\\textbar{}t\\textbar{})\\\\\n", "\\hline\n", "\t(Intercept) & 2.8572046 & 0.6932130 & 4.121684 & 7.875771e-05\\\\\n", "\tpred & 0.3961261 & 0.1111598 & 3.563574 & 5.671128e-04\\\\\n", "\\end{tabular}\n", "\n", "\\item[\\$`Mod2: Y\\textasciitilde{}X+M`] A matrix: 3 × 4 of type dbl\n", "\\begin{tabular}{r|llll}\n", " & Estimate & Std. Error & t value & Pr(>\\textbar{}t\\textbar{})\\\\\n", "\\hline\n", "\t(Intercept) & 1.90426882 & 0.6054585 & 3.145168 & 2.203831e-03\\\\\n", "\tpred & 0.03960392 & 0.1096484 & 0.361190 & 7.187429e-01\\\\\n", "\tmed & 0.63549459 & 0.1005339 & 6.321194 & 7.922642e-09\\\\\n", "\\end{tabular}\n", "\n", "\\item[\\$`Mod3: M\\textasciitilde{}X`] A matrix: 2 × 4 of type dbl\n", "\\begin{tabular}{r|llll}\n", " & Estimate & Std. Error & t value & Pr(>\\textbar{}t\\textbar{})\\\\\n", "\\hline\n", "\t(Intercept) & 1.4995183 & 0.58919773 & 2.545017 & 1.248749e-02\\\\\n", "\tpred & 0.5610153 & 0.09448048 & 5.937897 & 4.391362e-08\\\\\n", "\\end{tabular}\n", "\n", "\\item[\\$Indirect.Effect] 0.356522196728078\n", "\\item[\\$SE] 0.0823778110411936\n", "\\item[\\$z.value] 4.32789111803173\n", "\\item[\\$N] 100\n", "\\end{description}\n" ], "text/markdown": [ "$`Mod1: Y~X`\n", ": \n", "A matrix: 2 × 4 of type dbl\n", "\n", "| | Estimate | Std. Error | t value | Pr(>|t|) |\n", "|---|---|---|---|---|\n", "| (Intercept) | 2.8572046 | 0.6932130 | 4.121684 | 7.875771e-05 |\n", "| pred | 0.3961261 | 0.1111598 | 3.563574 | 5.671128e-04 |\n", "\n", "\n", "$`Mod2: Y~X+M`\n", ": \n", "A matrix: 3 × 4 of type dbl\n", "\n", "| | Estimate | Std. Error | t value | Pr(>|t|) |\n", "|---|---|---|---|---|\n", "| (Intercept) | 1.90426882 | 0.6054585 | 3.145168 | 2.203831e-03 |\n", "| pred | 0.03960392 | 0.1096484 | 0.361190 | 7.187429e-01 |\n", "| med | 0.63549459 | 0.1005339 | 6.321194 | 7.922642e-09 |\n", "\n", "\n", "$`Mod3: M~X`\n", ": \n", "A matrix: 2 × 4 of type dbl\n", "\n", "| | Estimate | Std. Error | t value | Pr(>|t|) |\n", "|---|---|---|---|---|\n", "| (Intercept) | 1.4995183 | 0.58919773 | 2.545017 | 1.248749e-02 |\n", "| pred | 0.5610153 | 0.09448048 | 5.937897 | 4.391362e-08 |\n", "\n", "\n", "$Indirect.Effect\n", ": 0.356522196728078\n", "$SE\n", ": 0.0823778110411936\n", "$z.value\n", ": 4.32789111803173\n", "$N\n", ": 100\n", "\n", "\n" ], "text/plain": [ "$`Mod1: Y~X`\n", " Estimate Std. Error t value Pr(>|t|)\n", "(Intercept) 2.8572046 0.6932130 4.121684 7.875771e-05\n", "pred 0.3961261 0.1111598 3.563574 5.671128e-04\n", "\n", "$`Mod2: Y~X+M`\n", " Estimate Std. Error t value Pr(>|t|)\n", "(Intercept) 1.90426882 0.6054585 3.145168 2.203831e-03\n", "pred 0.03960392 0.1096484 0.361190 7.187429e-01\n", "med 0.63549459 0.1005339 6.321194 7.922642e-09\n", "\n", "$`Mod3: M~X`\n", " Estimate Std. Error t value Pr(>|t|)\n", "(Intercept) 1.4995183 0.58919773 2.545017 1.248749e-02\n", "pred 0.5610153 0.09448048 5.937897 4.391362e-08\n", "\n", "$Indirect.Effect\n", "[1] 0.3565222\n", "\n", "$SE\n", "[1] 0.08237781\n", "\n", "$z.value\n", "[1] 4.327891\n", "\n", "$N\n", "[1] 100\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 使用函数\n", "# library(multilevel)\n", "sobel(myData$X, myData$M, myData$Y)" ] }, { "cell_type": "markdown", "id": "7190cd84", "metadata": {}, "source": [ "## 使用mediation" ] }, { "cell_type": "code", "execution_count": 8, "id": "d8a3ecf4", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Running nonparametric bootstrap\n", "\n", "\n" ] }, { "data": { "text/plain": [ "\n", "Causal Mediation Analysis \n", "\n", "Nonparametric Bootstrap Confidence Intervals with the Percentile Method\n", "\n", " Estimate 95% CI Lower 95% CI Upper p-value \n", "ACME 0.3565 0.2142 0.53 <2e-16 ***\n", "ADE 0.0396 -0.1984 0.29 0.752 \n", "Total Effect 0.3961 0.1602 0.63 0.004 ** \n", "Prop. Mediated 0.9000 0.4927 2.11 0.004 ** \n", "---\n", "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n", "\n", "Sample Size Used: 100 \n", "\n", "\n", "Simulations: 1000 \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res.1 = mediate(model.XM, model.MY.XY, treat='X', mediator='M', \n", " boot=TRUE, sims=1000)\n", "summary(res.1)" ] }, { "cell_type": "markdown", "id": "70beab0d", "metadata": {}, "source": [ "## 使用lavaan" ] }, { "cell_type": "code", "execution_count": 9, "id": "6fa64c3f", "metadata": {}, "outputs": [], "source": [ "# Step 1: Specify mediation model\n", "# The lavaan syntax\n", "model = \"\n", "# Path c' (direct effect)\n", "Y ~ c*X\n", "# Path a\n", "M ~ a*X\n", "# Path b\n", "Y ~ b*M\n", "# Indirect effect (a*b)\n", "ab := a*b\n", "\"" ] }, { "cell_type": "code", "execution_count": 10, "id": "f1f567a6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\t
$header
\n", "\t\t
\n", "\t
$lavaan.version
\n", "\t\t
'0.6.17'
\n", "\t
$sam.approach
\n", "\t\t
FALSE
\n", "\t
$optim.method
\n", "\t\t
'nlminb'
\n", "\t
$optim.iterations
\n", "\t\t
1
\n", "\t
$optim.converged
\n", "\t\t
TRUE
\n", "
\n", "
\n", "\t
$optim
\n", "\t\t
\n", "\t
$estimator
\n", "\t\t
'ML'
\n", "\t
$estimator.args
\n", "\t\t
    \n", "
\n", "
\n", "\t
$optim.method
\n", "\t\t
'nlminb'
\n", "\t
$npar
\n", "\t\t
5
\n", "\t
$eq.constraints
\n", "\t\t
FALSE
\n", "\t
$nrow.ceq.jac
\n", "\t\t
0
\n", "\t
$nrow.cin.jac
\n", "\t\t
0
\n", "\t
$nrow.con.jac
\n", "\t\t
0
\n", "\t
$con.jac.rank
\n", "\t\t
0
\n", "
\n", "
\n", "\t
$data
\n", "\t\t
\n", "\t
$ngroups
\n", "\t\t
1
\n", "\t
$nobs
\n", "\t\t
100
\n", "
\n", "
\n", "\t
$test
\n", "\t\t
$standard =
\n", "\t
$test
\n", "\t\t
'standard'
\n", "\t
$stat
\n", "\t\t
8.88178419700125e-14
\n", "\t
$stat.group
\n", "\t\t
8.88178419700125e-14
\n", "\t
$df
\n", "\t\t
0
\n", "\t
$refdistr
\n", "\t\t
'chisq'
\n", "\t
$pvalue
\n", "\t\t
<NA>
\n", "
\n", "
\n", "\t
$fit
\n", "\t\t
npar
5
fmin
4.44089209850063e-16
chisq
8.88178419700125e-14
df
0
pvalue
<NA>
baseline.chisq
77.4131764309656
baseline.df
3
baseline.pvalue
1.11022302462516e-16
cfi
0.999999999999999
tli
1
logl
-379.612296327384
unrestricted.logl
-379.612296327384
aic
769.224592654767
bic
782.250443584708
ntotal
100
bic2
766.459187569449
rmsea
0
rmsea.ci.lower
0
rmsea.ci.upper
0
rmsea.ci.level
0.9
rmsea.pvalue
<NA>
rmsea.close.h0
0.05
rmsea.notclose.pvalue
<NA>
rmsea.notclose.h0
0.08
srmr
0
\n", "
\n", "\t
$pe
\n", "\t\t
\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A data.frame: 9 × 9
lhsoprhslabelexoestsezpvalue
<chr><chr><chr><chr><int><dbl><dbl><dbl><dbl>
Y ~ X c 00.039603920.107991190.36673297.138183e-01
M ~ X a 00.561015320.093530905.99818131.995397e-09
Y ~ M b 00.635494590.099014456.41820051.378946e-10
Y ~~Y 02.581424820.365068607.07106781.537437e-12
M ~~M 02.633069540.372372277.07106781.537437e-12
X ~~X 13.009900000.00000000 NA NA
ab:=a*bab00.356522200.081354604.38232381.174201e-05
Y r2Y 00.37299924 NA NA NA
M r2M 00.26458788 NA NA NA
\n", "
\n", "
\n" ], "text/latex": [ "\\begin{description}\n", "\\item[\\$header] \\begin{description}\n", "\\item[\\$lavaan.version] '0.6.17'\n", "\\item[\\$sam.approach] FALSE\n", "\\item[\\$optim.method] 'nlminb'\n", "\\item[\\$optim.iterations] 1\n", "\\item[\\$optim.converged] TRUE\n", "\\end{description}\n", "\n", "\\item[\\$optim] \\begin{description}\n", "\\item[\\$estimator] 'ML'\n", "\\item[\\$estimator.args] \\begin{enumerate}\n", "\\end{enumerate}\n", "\n", "\\item[\\$optim.method] 'nlminb'\n", "\\item[\\$npar] 5\n", "\\item[\\$eq.constraints] FALSE\n", "\\item[\\$nrow.ceq.jac] 0\n", "\\item[\\$nrow.cin.jac] 0\n", "\\item[\\$nrow.con.jac] 0\n", "\\item[\\$con.jac.rank] 0\n", "\\end{description}\n", "\n", "\\item[\\$data] \\begin{description}\n", "\\item[\\$ngroups] 1\n", "\\item[\\$nobs] 100\n", "\\end{description}\n", "\n", "\\item[\\$test] \\textbf{\\$standard} = \\begin{description}\n", "\\item[\\$test] 'standard'\n", "\\item[\\$stat] 8.88178419700125e-14\n", "\\item[\\$stat.group] 8.88178419700125e-14\n", "\\item[\\$df] 0\n", "\\item[\\$refdistr] 'chisq'\n", "\\item[\\$pvalue] \n", "\\end{description}\n", "\n", "\\item[\\$fit] \\begin{description*}\n", "\\item[npar] 5\n", "\\item[fmin] 4.44089209850063e-16\n", "\\item[chisq] 8.88178419700125e-14\n", "\\item[df] 0\n", "\\item[pvalue] \n", "\\item[baseline.chisq] 77.4131764309656\n", "\\item[baseline.df] 3\n", "\\item[baseline.pvalue] 1.11022302462516e-16\n", "\\item[cfi] 0.999999999999999\n", "\\item[tli] 1\n", "\\item[logl] -379.612296327384\n", "\\item[unrestricted.logl] -379.612296327384\n", "\\item[aic] 769.224592654767\n", "\\item[bic] 782.250443584708\n", "\\item[ntotal] 100\n", "\\item[bic2] 766.459187569449\n", "\\item[rmsea] 0\n", "\\item[rmsea.ci.lower] 0\n", "\\item[rmsea.ci.upper] 0\n", "\\item[rmsea.ci.level] 0.9\n", "\\item[rmsea.pvalue] \n", "\\item[rmsea.close.h0] 0.05\n", "\\item[rmsea.notclose.pvalue] \n", "\\item[rmsea.notclose.h0] 0.08\n", "\\item[srmr] 0\n", "\\end{description*}\n", "\n", "\\item[\\$pe] A data.frame: 9 × 9\n", "\\begin{tabular}{lllllllll}\n", " lhs & op & rhs & label & exo & est & se & z & pvalue\\\\\n", " & & & & & & & & \\\\\n", "\\hline\n", "\t Y & \\textasciitilde{} & X & c & 0 & 0.03960392 & 0.10799119 & 0.3667329 & 7.138183e-01\\\\\n", "\t M & \\textasciitilde{} & X & a & 0 & 0.56101532 & 0.09353090 & 5.9981813 & 1.995397e-09\\\\\n", "\t Y & \\textasciitilde{} & M & b & 0 & 0.63549459 & 0.09901445 & 6.4182005 & 1.378946e-10\\\\\n", "\t Y & \\textasciitilde{}\\textasciitilde{} & Y & & 0 & 2.58142482 & 0.36506860 & 7.0710678 & 1.537437e-12\\\\\n", "\t M & \\textasciitilde{}\\textasciitilde{} & M & & 0 & 2.63306954 & 0.37237227 & 7.0710678 & 1.537437e-12\\\\\n", "\t X & \\textasciitilde{}\\textasciitilde{} & X & & 1 & 3.00990000 & 0.00000000 & NA & NA\\\\\n", "\t ab & := & a*b & ab & 0 & 0.35652220 & 0.08135460 & 4.3823238 & 1.174201e-05\\\\\n", "\t Y & r2 & Y & & 0 & 0.37299924 & NA & NA & NA\\\\\n", "\t M & r2 & M & & 0 & 0.26458788 & NA & NA & NA\\\\\n", "\\end{tabular}\n", "\n", "\\end{description}\n" ], "text/markdown": [ "$header\n", ": $lavaan.version\n", ": '0.6.17'\n", "$sam.approach\n", ": FALSE\n", "$optim.method\n", ": 'nlminb'\n", "$optim.iterations\n", ": 1\n", "$optim.converged\n", ": TRUE\n", "\n", "\n", "\n", "$optim\n", ": $estimator\n", ": 'ML'\n", "$estimator.args\n", ": \n", "\n", "\n", "$optim.method\n", ": 'nlminb'\n", "$npar\n", ": 5\n", "$eq.constraints\n", ": FALSE\n", "$nrow.ceq.jac\n", ": 0\n", "$nrow.cin.jac\n", ": 0\n", "$nrow.con.jac\n", ": 0\n", "$con.jac.rank\n", ": 0\n", "\n", "\n", "\n", "$data\n", ": $ngroups\n", ": 1\n", "$nobs\n", ": 100\n", "\n", "\n", "\n", "$test\n", ": **$standard** = $test\n", ": 'standard'\n", "$stat\n", ": 8.88178419700125e-14\n", "$stat.group\n", ": 8.88178419700125e-14\n", "$df\n", ": 0\n", "$refdistr\n", ": 'chisq'\n", "$pvalue\n", ": <NA>\n", "\n", "\n", "\n", "$fit\n", ": npar\n", ": 5fmin\n", ": 4.44089209850063e-16chisq\n", ": 8.88178419700125e-14df\n", ": 0pvalue\n", ": <NA>baseline.chisq\n", ": 77.4131764309656baseline.df\n", ": 3baseline.pvalue\n", ": 1.11022302462516e-16cfi\n", ": 0.999999999999999tli\n", ": 1logl\n", ": -379.612296327384unrestricted.logl\n", ": -379.612296327384aic\n", ": 769.224592654767bic\n", ": 782.250443584708ntotal\n", ": 100bic2\n", ": 766.459187569449rmsea\n", ": 0rmsea.ci.lower\n", ": 0rmsea.ci.upper\n", ": 0rmsea.ci.level\n", ": 0.9rmsea.pvalue\n", ": <NA>rmsea.close.h0\n", ": 0.05rmsea.notclose.pvalue\n", ": <NA>rmsea.notclose.h0\n", ": 0.08srmr\n", ": 0\n", "\n", "\n", "$pe\n", ": \n", "A data.frame: 9 × 9\n", "\n", "| lhs <chr> | op <chr> | rhs <chr> | label <chr> | exo <int> | est <dbl> | se <dbl> | z <dbl> | pvalue <dbl> |\n", "|---|---|---|---|---|---|---|---|---|\n", "| Y | ~ | X | c | 0 | 0.03960392 | 0.10799119 | 0.3667329 | 7.138183e-01 |\n", "| M | ~ | X | a | 0 | 0.56101532 | 0.09353090 | 5.9981813 | 1.995397e-09 |\n", "| Y | ~ | M | b | 0 | 0.63549459 | 0.09901445 | 6.4182005 | 1.378946e-10 |\n", "| Y | ~~ | Y | | 0 | 2.58142482 | 0.36506860 | 7.0710678 | 1.537437e-12 |\n", "| M | ~~ | M | | 0 | 2.63306954 | 0.37237227 | 7.0710678 | 1.537437e-12 |\n", "| X | ~~ | X | | 1 | 3.00990000 | 0.00000000 | NA | NA |\n", "| ab | := | a*b | ab | 0 | 0.35652220 | 0.08135460 | 4.3823238 | 1.174201e-05 |\n", "| Y | r2 | Y | | 0 | 0.37299924 | NA | NA | NA |\n", "| M | r2 | M | | 0 | 0.26458788 | NA | NA | NA |\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "lavaan 0.6.17 ended normally after 1 iteration\n", "\n", " Estimator ML\n", " Optimization method NLMINB\n", " Number of model parameters 5\n", "\n", " Number of observations 100\n", "\n", "Model Test User Model:\n", " \n", " Test statistic 0.000\n", " Degrees of freedom 0\n", "\n", "Model Test Baseline Model:\n", "\n", " Test statistic 77.413\n", " Degrees of freedom 3\n", " P-value 0.000\n", "\n", "User Model versus Baseline Model:\n", "\n", " Comparative Fit Index (CFI) 1.000\n", " Tucker-Lewis Index (TLI) 1.000\n", "\n", "Loglikelihood and Information Criteria:\n", "\n", " Loglikelihood user model (H0) -379.612\n", " Loglikelihood unrestricted model (H1) -379.612\n", " \n", " Akaike (AIC) 769.225\n", " Bayesian (BIC) 782.250\n", " Sample-size adjusted Bayesian (SABIC) 766.459\n", "\n", "Root Mean Square Error of Approximation:\n", "\n", " RMSEA 0.000\n", " 90 Percent confidence interval - lower 0.000\n", " 90 Percent confidence interval - upper 0.000\n", " P-value H_0: RMSEA <= 0.050 NA\n", " P-value H_0: RMSEA >= 0.080 NA\n", "\n", "Standardized Root Mean Square Residual:\n", "\n", " SRMR 0.000\n", "\n", "Parameter Estimates:\n", "\n", " Standard errors Standard\n", " Information Expected\n", " Information saturated (h1) model Structured\n", "\n", "Regressions:\n", " Estimate Std.Err z-value P(>|z|)\n", " Y ~ \n", " X (c) 0.040 0.108 0.367 0.714\n", " M ~ \n", " X (a) 0.561 0.094 5.998 0.000\n", " Y ~ \n", " M (b) 0.635 0.099 6.418 0.000\n", "\n", "Variances:\n", " Estimate Std.Err z-value P(>|z|)\n", " .Y 2.581 0.365 7.071 0.000\n", " .M 2.633 0.372 7.071 0.000\n", "\n", "R-Square:\n", " Estimate\n", " Y 0.373\n", " M 0.265\n", "\n", "Defined Parameters:\n", " Estimate Std.Err z-value P(>|z|)\n", " ab 0.357 0.081 4.382 0.000\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step 2: Estimate model - delta method (by default)\n", "fitmod = sem(model, data=myData)\n", "# Step 3: Request summary\n", "summary(fitmod, fit.measures=TRUE, rsquare=TRUE)" ] }, { "cell_type": "code", "execution_count": 11, "id": "50b59da3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\n", "
A lavaan.data.frame: 7 × 10
lhsoprhslabelestsezpvalueci.lowerci.upper
<chr><chr><chr><chr><dbl><dbl><dbl><dbl><dbl><dbl>
Y ~ X c 0.039603920.127558840.31047577.561992e-01-0.20007810.2901507
M ~ X a 0.561015320.096588605.80829736.311139e-09 0.38744520.7691867
Y ~ M b 0.635494590.105079226.04776651.468676e-09 0.43118230.8426629
Y ~~Y 2.581424820.328840717.85007674.218847e-15 1.90483123.1598721
M ~~M 2.633069540.346583737.59721043.019807e-14 1.91500873.3124284
X ~~X 3.009900000.00000000 NA NA 3.00990003.0099000
ab:=a*bab0.356522200.082169774.33884851.432312e-05 0.21686580.5321631
\n" ], "text/latex": [ "A lavaan.data.frame: 7 × 10\n", "\\begin{tabular}{llllllllll}\n", " lhs & op & rhs & label & est & se & z & pvalue & ci.lower & ci.upper\\\\\n", " & & & & & & & & & \\\\\n", "\\hline\n", "\t Y & \\textasciitilde{} & X & c & 0.03960392 & 0.12755884 & 0.3104757 & 7.561992e-01 & -0.2000781 & 0.2901507\\\\\n", "\t M & \\textasciitilde{} & X & a & 0.56101532 & 0.09658860 & 5.8082973 & 6.311139e-09 & 0.3874452 & 0.7691867\\\\\n", "\t Y & \\textasciitilde{} & M & b & 0.63549459 & 0.10507922 & 6.0477665 & 1.468676e-09 & 0.4311823 & 0.8426629\\\\\n", "\t Y & \\textasciitilde{}\\textasciitilde{} & Y & & 2.58142482 & 0.32884071 & 7.8500767 & 4.218847e-15 & 1.9048312 & 3.1598721\\\\\n", "\t M & \\textasciitilde{}\\textasciitilde{} & M & & 2.63306954 & 0.34658373 & 7.5972104 & 3.019807e-14 & 1.9150087 & 3.3124284\\\\\n", "\t X & \\textasciitilde{}\\textasciitilde{} & X & & 3.00990000 & 0.00000000 & NA & NA & 3.0099000 & 3.0099000\\\\\n", "\t ab & := & a*b & ab & 0.35652220 & 0.08216977 & 4.3388485 & 1.432312e-05 & 0.2168658 & 0.5321631\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A lavaan.data.frame: 7 × 10\n", "\n", "| lhs <chr> | op <chr> | rhs <chr> | label <chr> | est <dbl> | se <dbl> | z <dbl> | pvalue <dbl> | ci.lower <dbl> | ci.upper <dbl> |\n", "|---|---|---|---|---|---|---|---|---|---|\n", "| Y | ~ | X | c | 0.03960392 | 0.12755884 | 0.3104757 | 7.561992e-01 | -0.2000781 | 0.2901507 |\n", "| M | ~ | X | a | 0.56101532 | 0.09658860 | 5.8082973 | 6.311139e-09 | 0.3874452 | 0.7691867 |\n", "| Y | ~ | M | b | 0.63549459 | 0.10507922 | 6.0477665 | 1.468676e-09 | 0.4311823 | 0.8426629 |\n", "| Y | ~~ | Y | | 2.58142482 | 0.32884071 | 7.8500767 | 4.218847e-15 | 1.9048312 | 3.1598721 |\n", "| M | ~~ | M | | 2.63306954 | 0.34658373 | 7.5972104 | 3.019807e-14 | 1.9150087 | 3.3124284 |\n", "| X | ~~ | X | | 3.00990000 | 0.00000000 | NA | NA | 3.0099000 | 3.0099000 |\n", "| ab | := | a*b | ab | 0.35652220 | 0.08216977 | 4.3388485 | 1.432312e-05 | 0.2168658 | 0.5321631 |\n", "\n" ], "text/plain": [ " lhs op rhs label est se z pvalue ci.lower \n", "1 Y ~ X c 0.03960392 0.12755884 0.3104757 7.561992e-01 -0.2000781\n", "2 M ~ X a 0.56101532 0.09658860 5.8082973 6.311139e-09 0.3874452\n", "3 Y ~ M b 0.63549459 0.10507922 6.0477665 1.468676e-09 0.4311823\n", "4 Y ~~ Y 2.58142482 0.32884071 7.8500767 4.218847e-15 1.9048312\n", "5 M ~~ M 2.63306954 0.34658373 7.5972104 3.019807e-14 1.9150087\n", "6 X ~~ X 3.00990000 0.00000000 NA NA 3.0099000\n", "7 ab := a*b ab 0.35652220 0.08216977 4.3388485 1.432312e-05 0.2168658\n", " ci.upper \n", "1 0.2901507\n", "2 0.7691867\n", "3 0.8426629\n", "4 3.1598721\n", "5 3.3124284\n", "6 3.0099000\n", "7 0.5321631" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step 2: Estimate model - percentile bootstrapping method\n", "fitmod2 = sem(model, data=myData, se=\"bootstrap\", bootstrap=1000)\n", "# Ste[pRequest percentile bootstrap 95% confidence intervals\n", "parameterEstimates(fitmod2, ci=TRUE, level=0.95, boot.ci.type=\"perc\")" ] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "4.2.2" } }, "nbformat": 4, "nbformat_minor": 5 }