如何获取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
相关产品推荐
相关产品推荐

