【问题标题】:perform LDA with 3 classes in R在 R 中执行 3 个类的 LDA
【发布时间】:2014-10-07 18:13:06
【问题描述】:

我有三个平均类

mu1 <- matrix(c(3, 1), nrow=2)
mu2 <- matrix(c(4, 3), nrow=2)
mu3 <- matrix(c(8, 2), nrow=2)

和协方差

cov <- matrix(c(.5, .3, .3, .5), nrow=2, ncol=2)

我想模拟每个班级的大约 100 个观察结果并执行 LDA。 首先,我制作了三个包含 100 个观察值的矩阵。

x1 <- matrix(c(rmvnorm(100, mean=mu1, sigma=cov), matrix("x1", ncol=1, nrow=100)), ncol=3)
x2 <-matrix(c(rmvnorm(100, mean=mu2, sigma=cov), matrix("x2", ncol=1, nrow=100)), ncol=3)
x3 <- matrix(c(rmvnorm(100, mean=mu3, sigma=cov), matrix("x3", ncol=1, nrow=100)), ncol=3)

并将它们制作成数据框并将其绑定在一起。

d1 <- data.frame(x1)
d2 <- data.frame(x2)
d3 <- data.frame(x3)
alld <- rbind(d1, d2, d3)

现在我想用

的代码执行 lda
lda.x1 <- lda(alld[,3]~alld[,1]+alld[,2], data=alld)

这里...我收到警告信息和奇怪的结果。 请帮帮我 谢谢

【问题讨论】:

  • 警告是什么?结果如何“奇怪”?
  • 警告信息:在 lda.default(x, grouping, ...) 中:变量是共线的

标签: r matrix lda


【解决方案1】:

您的组在一条线上,正在跳闸lda(请参阅plot(alld[, 1], alld[, 2], col = alld[, 3])。我对您的代码进行了一些修改,并为手段添加了一些噪音。

set.seed(357)
mu1 <- sample(1:10, 2)
mu2 <- sample(1:10, 2)
mu3 <- sample(1:10, 2)

cov <- matrix(c(.5, .3, .3, .5), nrow=2, ncol=2)

require(mvtnorm)
x1 <- rmvnorm(100, mean= mu1, sigma=cov)
x2 <- rmvnorm(100, mean= mu2, sigma=cov)
x3 <- rmvnorm(100, mean= mu3, sigma=cov)

alld <- data.frame(rbind(x1, x2, x3))
alld$col <- rep(1:3, each = 100)
names(alld) <- c("a", "b", "col")
plot(b ~ a, data = alld, col = alld$col)

mdl <- lda(col ~ a + b, data = alld)
plot(mdl)
points(predict(mdl)$x, cex = 0.5, pch = "+")

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 2014-10-13
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多