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

如何获取MASS包lda函数的分类临界D值及得分重叠范围?

鸟类性二态性LDA分析:判别临界值与得分重叠范围问题

背景

我拥有一份鸟类身体测量数据集,共34只样本,其中雄性个体数量多于雌性。暂认为雄性捕获率更高存在真实原因,但样本量较小可能不具备统计学意义。目前正在使用MASS包的lda()函数分析其性二态性,最终目标是得到可在无电脑/R环境的野外使用的判别方程与临界分数,用于现场判断手中鸟类的性别。

我已掌握提取判别方程的方法,但发现predict.lda()输出的D得分存在重叠区间,且预期的临界D值为0但实际并非如此。现需解决两个核心问题:

  • 找到模型判定鸟类为雌性/雄性的临界D值
  • 确定D得分的重叠范围

模拟代码

set.seed(42) 

train <- data.frame(sex = c(rep("F", 35), rep("M", 65)),
                   A = c(rnorm(35, 20, 2.5), rnorm(65, 15, 2.5)),
                   B = c(rnorm(35, 6, 0.2), rnorm(65, 5.5, 0.2)),
                   C = c(rnorm(35, 250, 5), rnorm(65, 240, 5)),
                   D = c(rnorm(35, 450, 25), rnorm(65, 350, 25)))

mod <- lda(sex ~ ., data = train)
mod

gm = mod$prior %*% mod$means # 用于推导判别方程
const = drop(gm %*% mod$scaling)

# 判别方程:D = mod$scaling[1] * A + mod$scaling[2] * B + mod$scaling[3] * C + mod$scaling[4] * D - const

test <- data.frame(sex = c(rep("F", 350), rep("M", 650)),
                  A = rnorm(1000, gm[1], 2.5),
                  B = rnorm(1000, gm[2], 0.2),
                  C = rnorm(1000, gm[3], 5),
                  D = rnorm(1000, gm[4], 25))

pred <- data.frame(predict(mod, test)$x, class = predict(mod, test)$class)

内容的提问来源于stack exchange,提问作者AnneA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20