R语言中提取Lavaan包CFA输出结果的完整精确p值
问题
我是R语言初学者,目前使用lavaan包运行验证性因子分析(CFA)。输出结果可提供我所需的全部其他内容,仅p值显示为.000,我希望获取该p值的精确数值(例如.0000009这类实际结果)。
我已尝试使用以下方法调整精度:
format.pval(p, digits=6)
以及
options(digits=10)
但两种方式均未改变p值的输出显示效果。
我当前运行CFA所用的代码如下:
fit<-cfa(model,data=fulldata,estimator = "WLSMV") summary(fit,fit.measures=TRUE,standardized=TRUE)
求可正确提取完整精确p值的实现方法。
解答
之前的方法不生效的核心原因有两个:
options(digits=10)是全局数值显示设置,但lavaan的summary()方法内置了独立的p值格式化逻辑,会默认将小于0.001的p值截断显示为.000,全局设置不会覆盖这个规则。- 调用
format.pval(p, digits=6)时没有传入实际存储p值的对象,代码里的p只是占位符,没有指向拟合结果里真实的p值,自然不会生效。
可以根据需求选择以下两种方案获取精确p值:
方案1:直接提取原始p值(最可靠,无格式化截断)
lavaan所有计算得到的原始数值都存在拟合对象中,不会做截断处理,直接用专用提取函数取值即可:
- 提取模型整体拟合检验(卡方检验)的精确p值(WLSMV估计下对应缩放调整后的检验结果):
# 提取缩放卡方、自由度、p值三个结果 fit_res <- fitMeasures(fit, c("chisq.scaled", "df.scaled", "pvalue.scaled")) # 打印p值,可自定义保留小数位数 print(fit_res["pvalue.scaled"], digits = 10)
- 提取所有因子载荷、路径系数、协方差等参数的精确p值:
# 提取全部参数的估计值、标准误、检验统计量、p值、标准化结果 param_table <- parameterEstimates(fit, standardized = TRUE) # 查看参数对应关系和精确p值 print(param_table[, c("lhs", "op", "rhs", "pvalue")], digits = 10)
方案2:调整summary输出的p值显示规则
如果不想单独提取,想让summary()直接输出非截断的p值,可以在调用summary时设置数值显示位数,同时关闭p值的最小显示阈值:
summary(fit, fit.measures = TRUE, standardized = TRUE, nd = 10, # 全局保留10位有效数字 pvalue. = TRUE)
注意:如果p值极小(比如小于1e-16),R本身会在数值存储层面做精度截断,这种情况属于浮点运算的正常限制,不属于显示问题。
内容的提问来源于stack exchange,提问作者Nichole Elizabeth
相关产品推荐
相关产品推荐

