前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多元统计分析:判别分析

多元统计分析:判别分析

作者头像
yiyun
发布2022-04-01 13:56:31
5680
发布2022-04-01 13:56:31
举报
文章被收录于专栏:yiyun 的专栏yiyun 的专栏

简介

步骤

1. Fisher 判别(线性判别)

代码语言:javascript
复制
fd4 <- lda(G~x1+x2+x3+x4, d4_uni);fd4
print('------------------------------------')
predict(fd4)$class  # 预测结果
print('------------------------------------')
ftab4 <- table(predict(fd4)$class, d4_uni$G);ftab4  # 判别矩阵
print('------------------------------------')
sum(diag(ftab4))/sum(ftab4) # 判对率

2. 非线性判别

代码语言:javascript
复制
qd4 <- qda(G~x1+x2+x3+x4,d4_uni)    # 注意: 非线性判别使用 qda(),线性判别使用 lda()
qtab4 <- table(predict(qd4)$class, d4_uni$G);qtab4  # 判别矩阵
print('------------------------------------')
sum(diag(qtab4))/sum(qtab4) # 判对率

3. Bayes 判别

代码语言:javascript
复制
bd4 <- lda(G~x1+x2+x3+x4,d4_uni,prior=c(1,1)/2);bd4
print('------------------------------------')
btab4 <- table(predict(bd4)$class, d4_uni$G);btab4 # 判别矩阵
print('------------------------------------')
sum(diag(btab4))/sum(btab4) # 判对率

PS: Bayes 判别 也使用 lda() 函数,但需要给出先验概率。 在进行 Bayes判别时,假定各类协方差阵相同,此时判别函数为线性。 先验概率 相等的 Bayes判别模型 ,此时判别函数类似于 Fisher 线性判别函数

4. 预测

代码语言:javascript
复制
predict(fd4, newdata=data.frame(x1=78.3563,x2=0.8895,x3=1.8001,x4=14.1022))$class
predict(qd4, newdata=data.frame(x1=78.3563,x2=0.8895,x3=1.8001,x4=14.1022))$class
predict(bd4, newdata=data.frame(x1=78.3563,x2=0.8895,x3=1.8001,x4=14.1022))$class

案例

企业财务状况的判别分析

代码语言:javascript
复制
library(openxlsx)

Case6 = read.xlsx("../Res/mvcase5.xlsx", 'Case6');Case6
代码语言:javascript
复制
plot(Case6[,2:5], gap = 0)
代码语言:javascript
复制
library(MASS)

ld = lda(G~., data = Case6);ld # 线性判别
plot(ld)
代码语言:javascript
复制
Zld = predict(ld);Zld

data.frame(Case6$G, Zld$class, round(Zld$x, 3))
代码语言:javascript
复制
tab1 = table(Case6$G, Zld$class);tab1
代码语言:javascript
复制
sum(diag(tab1)) / sum(tab1)
代码语言:javascript
复制
addmargins(tab1)
代码语言:javascript
复制
qd = qda(G~., data = Case6);qd # 二次判别
代码语言:javascript
复制
Zqd = predict(qd);Zqd # 预测
代码语言:javascript
复制
data.frame(Case6$G, Zqd$class, round(Zqd$post, 3) * 100)
代码语言:javascript
复制
tab2 = table(Case6$G, Zqd$class);tab2 # 判对阵
代码语言:javascript
复制
sum(diag(tab2)) / sum(tab2) # 判对率
代码语言:javascript
复制
addmargins(tab2)

Q&A

补充

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 步骤
    • 1. Fisher 判别(线性判别)
      • 2. 非线性判别
        • 3. Bayes 判别
          • 4. 预测
          • 案例
          • Q&A
          • 补充
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档