在R中执行3个类的LDA

时间:2014-10-07 06:24:59

标签: r matrix lda

我有三个平均值

的类
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)

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

1 个答案:

答案 0 :(得分:0)

您的群组在一条线上,正在绊倒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 = "+")