基于R语言的判别分析
本文主要介绍了基于R语言实现距离判别、Bayes判别、Fisher判别的基本思路以及给出了具体的操作过程。
1.数据
这里总共有个20个电视品牌的数据,销售状态G1中的1表示畅销,2表示滞销;销售状态G2中的1表示畅销,2表示平销,3表示滞销。接下来只对销售状态G1做判别分析,也就是两总体的判别分析,对于多总体判别分析,思路完全一样,有兴趣的同学可以自己尝试。
2.描述性统计分析
code:
## step1:对样本做描述性统计分析par(mfrow = c(1,3))## Q和C的散点图
plot(data1[,1],data1[,2],xlab = "质量评分Q",ylab = "功能评分C",main = "Q和C的散点图");
text(data1[,1],data1[,2],data1[,4],adj = -0.8)## Q和P的散点图
plot(data1[,1],data1[,3],xlab = "质量评分Q",ylab = "销售价格P",main = "Q和P的散点图");
text(data1[,1],data1[,3],data1[,4],adj = -0.8)## C和P的散点图plot(data1[,2],data1[,3],xlab = "功能评分C",ylab = "销售价格P",main = "C和P的散点图");
text(data1[,2],data1[,3],data1[,4],adj = -0.8)
运行结果:
这里不对描述性结果做解释.
接下来进入正题,依次为距离判别,Bayes判别和Fisher判别,必要细节在程序中都给出了相应注释,这里只对结果做简单解释,对程序不做过多的解释。
## step2: 选择方法: ===== 距离判别法 =====# First:编写判别程序 【注】:该函数只适用于数据框或者矩阵discriminant_distance <- function(trnx1 , trnx2 , tst = NULL , var.equal = FALSE){nx <- nrow(tst)blong <- matrix(rep(0,nx),nrow = 1,byrow = TRUE,dimnames = list('blong',1:nx))mu1 <- colMeans(trnx1)mu2 <- colMeans(trnx2)if(var.equal == TRUE || var.equal == T){n1 <- nrow(trnx1)n2 <- nrow(trnx2)S <- (n1 + n2 -1)/(n1 + n2 -2)*var(rbind(trnx1 , trnx2))w <- mahalanobis(tst , mu2 , S) - mahalanobis(tst , mu1 , S)}else{S1 <- var(trnx1)S2 <- var(trnx2)w <- mahalanobis(tst , mu2 , S2) - mahalanobis(tst , mu1 , S1)}for(i in 1:nx){if(w[i]>0) blong[i] <- 1else blong[i] <- 2}blong
}# Second:构造训练样本和测试样本## 1. 取状态为1的前3个样本,状态为2的后两个样本作为测试样本trnx1 <- data1[1:13,1:3]
trnx2 <- data1[14:20,1:3]tst <- rbind(data1[1:3,1:3],data1[19:20,1:3])#(1) 在协方差矩阵相同的情况下做判别discriminant_distance(trnx1,trnx2,tst,var.equal = T)#(2) 在协方差矩阵不同的情况下做判别discriminant_distance(trnx1,trnx2,tst)# 2. 用训练集作为测试集tst1 <- data1[1:20,1:3]#(1) 在协方差矩阵相同的情况下做判别discriminant_distance(trnx1,trnx2,tst1,var.equal = T)#(2) 在协方差矩阵不同的情况下做判别discriminant_distance(trnx1,trnx2,tst1,var.equal = FALSE)## step3: 选择方法: ===== Bayes判别法 =====data1 <- read.csv("E:/多元统计分析/tvdata.csv")
names(data1) <- c("Q","C","P","G1","G2")## 编写判别程序并用样本进行判别 【注】:该程序只适用于数据框或者矩阵#(1) 在协方差矩阵相同的情况下做判别a <- data1[1:13,1:3]
b <- data1[14:20,1:3]n1 <- nrow(a)
n2 <- nrow(b)mu1 <- colMeans(a)
mu2 <- colMeans(b)sig1 <- var(a)
sig2 <- var(b)
sig <- ((n1-1)*sig1+(n2-1)*sig2)/(n1+n2-2)beta <- log2(n2/n1)ab <- rbind(a,b)
nx <- nrow(ab)blong <- matrix(rep(0,nx),nrow = 1,byrow = TRUE,dimnames = list('blong',1:nx))for(i in 1:nx){x <- ab[i,]wx <- t(t(x)-(1/2)*(mu1+mu2)) %*% solve(sig) %*% (mu1-mu2)if(wx > beta){blong[i] <- 1}else{blong[i] <- 2}
}blong#(2) 在协方差矩阵不相同的情况下做判别p1 <- n1/(n1+n2)
p2 <- n2/(n1+n2)## 计算k值k <- log2(p2/p1)+(1/2)*log2(det(sig1)/det(sig2))+(1/2)*(t(mu1)%*%solve(sig1)%*%mu1 - t(mu2)%*%solve(sig2)%*%mu2)## bayes判别ab <- rbind(a,b)
ab <- as.matrix(ab)
nx <- nrow(ab)blong <- matrix(rep(0,nx),nrow = 1,byrow = TRUE,dimnames = list('blong',1:nx))for(i in 1:nx){x <- ab[i,]wx <- (-1/2)*t(x) %*% (solve(sig1)-solve(sig2)) %*% x + (t(mu1)%*%solve(sig1) - t(mu2)%*%solve(sig2))%*%xif(wx > k){blong[i] <- 1}else{blong[i] <- 2}
}blong## step4: 选择方法: ===== Fisher判别法 =====data1 <- read.csv("E:/多元统计分析/tvdata.csv")
names(data1) <- c("Q","C","P","G1","G2")library(MASS)## (1) 协方差矩阵相等时为一次判别函数model1 <- lda(data1$G1~data1$Q+data1$C+data1$P)
z <- predict(model1)
newG1 <- z$class
cbind(data1$G1,z$x,newG1)## (2) 协方差矩阵不相等时为二次判别函数model2 <- qda(data1$G1~data1$Q+data1$C+data1$P)
Z <- predict(model2)
new_G1 <- Z$class
cbind(data1$G1,new_G1)
ok,在距离判别中,我们使用了马氏距离,这里的马氏不是马尔科夫,也不是闵可夫斯基,而是马哈拉诺比斯,具体计算公式在任何一本多元统计教材都可以找到。
以上就是基于R语言的判别分析的三种主要判别方法。
基于R语言的判别分析相关推荐
- R语言应用实战-基于R语言的判别分析:fisher判别法,距离判别法以及Bayers判别法(附源代码)
前言 判别分析(Discriminat Analysis)是多变量统计分析中用于判别样本所属类型的一种统计分析法.它所要解决的问题是在一些已知研究对象用某种方法已经分成若干类的情况下确定新的样本属于已 ...
- 基于R语言的Copula变量相关性分析及应用
在工程.水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点.虽然皮尔逊相关.秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克 ...
- 基于R语言极值统计学及其在相关领域中的应用
受到气候变化.温室效应以及人类活动等因素的影响,自然界中极端高温.极端环境污染.大洪水和大暴雨等现象的发生日益频繁:在人类社会中,股市崩溃.金融危机等极端情况也时有发生:今年的新冠疫情就是非常典型的极 ...
- Protein Cell:基于R语言的微生物组数据挖掘最佳流程(大众评审截止14号晚6点)...
Protein & Cell综述:基于R语言的微生物组数据挖掘的最佳流程 近日,中国农业科学院刘永鑫组联合南京农业大学袁军组在国际期刊 Protein & Cell (IF = 15. ...
- canoco5主成分分析步骤_基于R语言的主成分分析
基于R语言的主成分分析 加入的SPSS群里有人问,怎么用SPSS进行主成分分析.确实没有注意到这种操作.很好奇,于是翻了翻孙振球的<医学统计学>,发现主成分分析这一块,竟使用了SAS!后来 ...
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
原文 基于R语言的lmer混合线性回归模型tecdat.cn 混合模型适合需求吗? 混合模型在很多方面与线性模型相似.它估计一个或多个解释变量对响应变量的影响.混合模型的输出将给出一个解释值列表,其 ...
- 基于R语言实现的交通时空大数据处理
2019独角兽企业重金招聘Python工程师标准>>> 基于R语言实现的交通时空大数据处理 Import public NYC taxi and Uber trip data int ...
- 【R语言实验】基于R语言的时间序列平稳性检验
一.实验项目名称:基于R语言的时间序列平稳性检验 二.实验目的与要求: 平稳时间序列的概念,平稳性检验的时序图检验方法和自相关图检验方法. 三.实验原理: 时序图和自相关图检验时间序列的平稳性依据: ...
- 055B ENMTools教程-基于R语言对MaxEnt模型优化-MaxEnt调参教程--更新日期2021-9
055B-1 视频附带资料下载和密码:软件-数据-文献下载-持续更新 055B-2 ENMTools软件下载安装 055B-3 R软件和工具包安装 055B-4 生物气候因子的精度说明与选择方法(理论 ...
最新文章
- Windows 下连接mysql工具NavicatForMysql
- 这一次,彻底弄懂 JavaScript 执行机制
- MySQL原生密码认证
- vscode如何找letax模板_一直努力却找不到变美思路?韩国新一代「整容模板」,教你如何提高美商、科学变美!...
- 生产环境JVM内存溢出案例分析!
- linux shell实现go.mod迁移后版本号的更新问题(技能点:sed删除行自定义分隔符;文件的过滤后遍历)
- office 高效办公智慧树_华为发布首款商用台式机,打造未来高效智慧办公体验_企业...
- 二叉树遍历(信息学奥赛一本通-T1364)
- Netty工作笔记0056---Unpooled应用实例2
- python基础一 day17 二分查找算法
- Oracle 存储过程、存储函数 与原生 JDBC 调用
- windows server 2008 R2开启ftp服务
- Android ViewPage使用
- Vue基础语法之计算属性
- 淘宝签名分析之一(反编译和利用frida快速找点)
- HackMyvm(六)Noob持续更新
- day 55 定位流(相对,绝对,固定)
- MySQL中的BETWEEN...AND的用法
- Keras的loss_weights和class_weight
- 博学笃志 追求卓越--献给研究生的12条忠告与建议
热门文章
- jquery加载页面的几种方法(页面加载完成就执行)
- 小学计算机教研组总结,小学信息技术中心教研组工作总结范文
- 《英语修辞与写作(修订版)》黄任(编著)epub+mobi+azw3格式下载
- D-Link宽带路由器设置全攻略
- 图解HTTP读书笔记.第八章
- [P14-v19]自己做一台 Hifi 耳放,全分立的!
- 8 9区别 endnote7_带鱼5-7和8-9的区别
- 为什么前端工作越来越难找了?
- python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...
- 读武志红的《层次不同的人,难以交流》有感