依据观测数据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来建立判别函数, 将数据分成两类, 用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 中提到的方式吧。
非常感谢版主的热心帮助,明白了,万分感谢!