• R语言
  • 求助!!! R软件做判别分析的图形问题

依据观测数据x1,x2来建立判别函数, 将数据分成两类, 用lda函数得到的结果之一是:

Coefficients of linear discriminants:

LD1

x1 -0.1035305

x2 0.2247957

建立线性判别函数为y=-0.1035x1+0.2248x2.请问怎样把临界线(即图中红色那条线)画在原来的散点图中.R程序代码该怎么写?

[attachment=234283,1958]

判别函数的图像是三维的平面,但有想问的是那这个图该怎么画呢!此图可以看作是在二维x1与x2平面的投影??

此图为x2关于x1的图像,当中那条红线是判别的标准线(临界线吧),依据所给数据,用lda函数分析的结果是1类和2类各判错一例.从那条红线两边很容易看出来.我就是想问下那当中的红线该怎么画,它是数据x1和x2有什么关系吗?

抄自

https://stat.ethz.ch/pipermail/r-help/2010-May/239195.html

<br />
require(MASS)<br />
x1 = c(-1.9, -6.9,   5.2,  5.0,  7.3,<br />
        6.8,  0.9, -12.5,  1.5,  3.8,<br />
        0.2, -0.1,   0.4,  2.7,  2.1,<br />
       -4.6, -1.7,  -2.6,  2.6, -2.8)<br />
x2 = c( 3.2,  0.4,  2.0,  2.5,  0.0,<br />
       12.7, -5.4, -2.5,  1.3,  6.8,<br />
        6.2,  7.5, 14.6,  8.3,  0.8,<br />
        4.3, 10.9, 13.1, 12.8, 10.0)<br />
G = gl(2, 10)</p>
<p>fit         = lda(G ~ x1 + x2)<br />
A           = fit$scaling<br />
sigmahatinv = A %*% t(A)<br />
priorhat    = fit$prior<br />
muhat       = fit$means<br />
mu          = muhat</p>
<p>plot(x1, x2)<br />
text(x1, x2, G, adj = -0.5)</p>
<p>ownldahyperplane <- function(sigmainv, mu1, mu2, prior1, prior2) {<br />
  J = nrow(mu)<br />
  b = sigmainv %*% (mu1 - mu2)<br />
  c = -(1/2) * t(mu1 + mu2) %*% sigmainv %*% (mu1 - mu2) + log(prior1/prior2)<br />
  return(list(b = b, c = c))<br />
}</p>
<p>ownlinearize <- function(sephyp) {<br />
  return(list(beta0 = -sephyp$c/sephyp$b[2],<br />
              beta1 = -sephyp$b[1]/sephyp$b[2]))<br />
}</p>
<p>sephyp12 = ownldahyperplane(sigmahatinv,<br />
                            muhat[1, ], muhat[2, ],<br />
                            priorhat[1], priorhat[2])<br />
line12   = ownlinearize(sephyp12)</p>
<p>abline(line12$beta0, line12$beta1)<br />
</p>

建议还是使用 http://www.statmethods.net/advstats/discriminant.html 中提到的方式吧。

非常感谢版主的热心帮助,明白了,万分感谢!