如何在R中复现SPSS逐步DFA输出,实现考试通过/失败情况预测
R实现逐步判别分析(DFA)复现SPSS输出方案
前置准备:安装加载所需依赖包
用到三个包:MASS提供基础判别分析能力,klaR提供和SPSS逻辑一致的逐步变量筛选功能,caret用于快速计算分类准确率和混淆矩阵。
# 首次使用请先安装包 install.packages(c("MASS", "klaR", "caret")) # 加载依赖 library(MASS) library(klaR) library(caret)
注意:如果你的
examscores数据存在缺失值,建议先运行examscores <- na.omit(examscores)删除缺失行再执行后续操作,避免函数报错。
执行逐步变量筛选
greedy.wilks函数基于威尔克Lambda值做变量筛选,变量进入/剔除的显著性阈值可以和SPSS默认的0.05完全对齐,筛选过程输出也和SPSS逐步DFA的变量筛选表对应。
# 构造公式,因变量为passedfail,自变量为数据框内其余所有得分变量 dfa_formula <- as.formula(passedfail ~ .) # 执行逐步筛选,niveau参数对应SPSS的变量进入显著性阈值 step_dfa <- greedy.wilks(dfa_formula, data = examscores, niveau = 0.05) # 查看逐步筛选过程和最终入选变量 print(step_dfa)
拟合最终判别模型、计算分类准确率
# 用筛选出的变量拟合最终LDA模型 final_lda <- lda(step_dfa$formula, data = examscores) # 输出判别函数系数、组先验概率等和SPSS对应的核心模型结果 print(final_lda) # 生成样本内预测分类结果 pred_result <- predict(final_lda, newdata = examscores) # 生成混淆矩阵,输出分类准确率等指标 confusion_mat <- confusionMatrix( factor(pred_result$class), factor(examscores$passedfail), positive = "1" ) print(confusion_mat) # 单独提取并打印整体分类准确率百分比 cat("样本整体分类准确率:", round(confusion_mat$overall["Accuracy"] * 100, 2), "%\n")
特殊场景说明
- 如需复现SPSS的留一法交叉验证准确率,在拟合LDA模型时添加
CV = TRUE参数即可:final_lda_cv <- lda(step_dfa$formula, data = examscores, CV = TRUE),后续直接用final_lda_cv$class计算混淆矩阵和准确率即可。 - 如果需要和SPSS输出的标准化判别系数对齐,可以用
scale()函数对入选变量标准化后再拟合LDA模型,得到的系数就是标准化判别系数。
内容的提问来源于stack exchange,提问作者user15950867
相关产品推荐
相关产品推荐

