You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:03:02