【问题标题】:plot linear discriminant analysis in R在 R 中绘制线性判别分析
【发布时间】:2013-06-08 16:08:54
【问题描述】:

我想在散点图中绘制两个矩阵。我怎样才能做到这一点?我喜欢这个情节看起来像

我正在使用 Fischer 方法计算两个类的线性判别分析。这是我计算的:

XM1 <- matrix(data=c(4,2, 2,4, 2,3, 3,6, 4,4), ncol = 2, byrow = TRUE)
XM2 <- matrix(data=c(9,10, 6,8, 9,5, 8,7, 10,8), ncol = 2, byrow = TRUE)
mi1 <- apply(XM1, MARGIN = 2, FUN = "mean")
mi2 <- apply(XM2, MARGIN = 2, FUN = "mean")
Sb <- (mi1-mi2)%*%t(mi1-mi2)
sum.cov <- (cov(XM1)+cov(XM2)) 
SwSb <- solve(sum.cov)%*%Sb
eg <- eigen(SwSb)

如何使用abline(使用eigenval 结果)绘制这两个矩阵(一个带圆圈,第二个带正方形)?

【问题讨论】:

  • 您的示例没有运行。 sum.cov 是什么?
  • sum.cov 矩阵在哪里?
  • 对不起。我忘了粘贴:它是:sum.cov

标签: r linear-algebra


【解决方案1】:

这是ggplot2 解决方案。首先,您必须以适当的形式提供您的数据:

mdf <- as.data.frame( rbind(XM1, XM2) )
names(mdf) <- c("x1", "x2")
mdf$f <- c( rep( "a", nrow(XM1) ), rep( "b", nrow(XM2) ) )
head(mdf)
  x1 x2 f
1  4  2 a
2  2  4 a
3  2  3 a
4  3  6 a
5  4  4 a
6  9 10 b

这会产生一个类似于你展示的情节:

library(ggplot2)
ggplot( mdf, aes(x=x1, y=x2, col=f) ) +
  geom_point( size = 4, aes(shape = f) ) +
  geom_abline( slope = eg$vectors[2,1] / eg$vectors[1,1], colour = "green"  ) +
  scale_shape_manual(values=c(16,15)) +
  expand_limits( y = 0, x = 0) +
  labs( title = paste("LDA projection vector with highest eigen value =", round(eg$values[1], 2)) ) +
  theme_bw() 

【讨论】:

  • 非常感谢,但我需要您的帮助,因为我确实计算了“结果 - 例如以更快的方式,仅使用函数 (solve(sum.cov))%*%(mi1-mi2)。我找不到修复或修改您的代码的方法使用此数据(绘制与该结果一致)。结果是:` [,1] [1,] -1.7076412 [2,] -0.7840532`。再次感谢。
  • 我确实用slope = eg[2,1] / eg[1,1] 修复了slope = eg$vectors[2,1] / eg$vectors[1,1],所以我希望这能正常工作,因为对此进行测试并修复不同的数据。 (在变量eg 中保存了我上面写的函数的结果:eg &lt;- (solve(sum.cov))%*%(mi1-mi2)
猜你喜欢
  • 2015-10-31
  • 2015-08-17
  • 2013-06-19
  • 2011-08-03
  • 1970-01-01
  • 2013-12-10
  • 2018-07-08
  • 2022-06-22
  • 1970-01-01
相关资源
最近更新 更多