我有三个平均值
的类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)
现在我想用代码
执行ldalda.x1 <- lda(alld[,3]~alld[,1]+alld[,2], data=alld)
这里......我得到了警告信息和奇怪的结果。 请帮帮我 谢谢
答案 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 = "+")