【发布时间】:2022-11-23 13:30:42
【问题描述】:
我有一个鸟类身体测量数据集,我正在使用 MASS 包中的 lda 函数来找出两性异形的程度。最终,我想得出一个方程式和临界分数,可以在现场使用(无需使用计算机或 R)来确定手中的鸟是雄性还是雌性。在我们的数据集中,男性多于女性。我不知道为什么会这样,但就目前而言,我假设这意味着雄性比雌性更容易被捕获是有真正原因的,尽管我们的数据集只有 34 只鸟,所以这可能并不重要。
我知道如何提取/确定方程式(按照此处页面中部的说明进行操作:https://stats.stackexchange.com/questions/157772/how-to-find-the-line)但是在 D 分数中有一些重叠,其中 predict.lda 函数似乎是双向的。我预计临界 D 分数为 0,但它不是......
我想知道如何找到 1) 模型始终确定鸟是雌性(或雄性)的 D 分数,2) 重叠的程度是多少。
模拟代码(与真实数据有更多重叠):
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 # these are used to get the equation
const = drop(gm %*% mod$scaling)
#the equation is then: 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)
我在谷歌上搜索了很多,并查看了几个堆栈交换和堆栈溢出问题,但我无法弄清楚。
【问题讨论】: