# 判别分析:用以判别个体属于那个总体的一种统计方法
# 1.方法一:距离判断方法(马氏距离)
# 马氏距离较之欧式距离,考虑了随机变量方差的信息
# 分别讨论两总体协方差相同和不同的情况
# 首先讨论两总体的判别分析
discriminiant.distance<-
function(trnX1,trnX2,testX=NULL,var.equal=FALSE) {
# 如果测试样本为空,将训练样本1,2合并形成测试样本
if (is.null(testX) == TRUE) testX<-rbind(trnX1,trnX2);
# 如果测试样本为向量(vector),将其转换为数组(matrix)并转置(t)
if (is.vector(testX) == TRUE) testX<-as.matrix(testX);
# 转换后,如果不是数组,将其转换为数组(此时已经在上一步已经转置)
if(is.matrix(testX) != TRUE) testX<-as.matrix(testX);
# 判断两个训练样本是否为数组,如果不是,将其转换为数组
if(is.matrix(trnX1) == TRUE) trnX1<-as.matrix(trnX1);
if(is.matrix(trnX2) == TRUE) trnX2<-as.matrix(trnX2);
# 获取测试样本的行数
nrowx<-nrow(testX);
# 需要增加belong解释
belong<-matrix(rep(0,nrowx),nrow=1,byrow=T,dimnames=list("belong",1:nrowx));
# 获取两个训练样本的列均值mu1,mu2
mu1<-colMeans(trnX1);mu2<-colMeans(trnX2);
# 以下是通过统计学公式计算得来
# 1.如果两个样本的协方差相同(TRUE or T),则对两个训练样本合并rbind并计算方差(距离的平方)
# 计算测试样本与样本1和样本2的马氏距离的平方之差,判定测试样本属于哪一类样本
if(var.equal == TRUE ||var.equal == T) {
s<-var(rbind(trnX1,trnX2));
w<-mahalanobis(testX,mu1,s) - mahalanobis(testX,mu2,s);
} else {
# 2.否则(两样本协方差不相同),则分别计算两样本的方差
s1<-var(trnX1);s2<-var(trnX2);
# 再计算测试样本与两训练样本之间的距离差
w<-mahalanobis(testX,mu1,s1)-mahalanobis(testX,mu2,s2);
}
# 开始循环(循环数组的每一行,如果距离差大于0,则属于第一类赋值1,否则小于等于0,属于第二类样本赋值2)
for (i in 1:nrowx) {
if(w[i] > 0) {
belong[i] <- 1;
} else {
belong[i] <- 2;
}
}
# 返回赋值结果belong(vector)
belong;
}
# 测试数据
data.create<-function () {
classX1<-data.frame(
x1=c(39.00,39.00, 47.00, 47.00, 32.00, 6.0, 113.00, 52.00,52.00,113.00,172.00,172.00),
x2=c(1.00, 1.00, 1.00, 1.00, 2.00, 1.0, 3.50,1.00,3.50, 0.00, 1.00, 1.50),
x3=c(6.00, 6.00, 6.00, 6.00, 7.50, 7.0, 6.00,6.00,7.50, 7.50, 3.50, 3.00)
)
classX2<-data.frame(
x1=c(32.0 ,32.00, 32.00, 11.0, 8.00, 8.00, 8.00,161.00, 161.0, 6.0, 6.0, 6.0, 6.00,113.00,113.00, 52.00, 52.00, 97.00, 97.00,89.00,56.00,172.00,283.00),
x2=c(1.00, 2.00, 2.50, 4.5, 4.50, 6.00, 1.50, 1.50, 0.50, 3.5, 1.0, 1.0, 2.50, 3.50, 3.50, 1.00,1.00, 0.00, 2.50, 0.00, 1.50, 1.00, 1.00),
x3=c(5.00, 9.00, 4.00, 7.5, 4.50, 7.50, 6.00, 4.0,2.50, 4.0, 3.0, 6.0, 3.00, 4.50, 4.50, 6.0,7.50, 6.00, 6.00, 6.00, 6.00, 3.50, 4.50)
)
print("hello");
classX1;classX2;
}
# 多分类的距离判断
distinguish.distance<-
function (TrnX, TrnG, TstX = NULL, var.equal = FALSE){
# TrnG:因子变量,输入样本的分类情况
# 1.如果因子变量不是因子,记录训练样本和因子变量的行数,用于生成因子变量
# 2.将训练样本和因子变量合并赋值给测试样本变量
# 3.对因子变量赋值
if ( is.factor(TrnG) == FALSE){
mx<-nrow(TrnX); mg<-nrow(TrnG)
TrnX<-rbind(TrnX, TrnG)
TrnG<-factor(rep(1:2, c(mx, mg)))
}
# 如果测试样本为空,将训练样本赋值给测试样本
if (is.null(TstX) == TRUE) TstX<-TrnX
# 如果测试样本为向量,转换为数组并转置;如果转换后依然不是数组,再次转置赋值给测试样本
if (is.vector(TstX) == TRUE) TstX<-t(as.matrix(TstX))
else if (is.matrix(TstX) != TRUE)
TstX<-as.matrix(TstX)
# 如果训练样本不是数组,转换为数组
if (is.matrix(TrnX) != TRUE) TrnX<-as.matrix(TrnX)
# 记录测试数组的行数
nx<-nrow(TstX)
# 给判别结果赋初值,形成数组一行多列
blong<-matrix(rep(0, nx), nrow=1, dimnames=list("blong", 1:nx))
# 获取训练样本因子的长度
g<-length(levels(TrnG))
#
mu<-matrix(0, nrow=g, ncol=ncol(TrnX))
for (i in 1:g)
mu[i,]<-colMeans(TrnX[TrnG==i,])
D<-matrix(0, nrow=g, ncol=nx)
if (var.equal == TRUE || var.equal == T){
for (i in 1:g)
D[i,]<- mahalanobis(TstX, mu[i,], var(TrnX))
}
else{
for (i in 1:g)
D[i,]<- mahalanobis(TstX, mu[i,], var(TrnX[TrnG==i,]))
}
for (j in 1:nx){
dmin<-Inf
for (i in 1:g)
if (D[i,j]<dmin){
dmin<-D[i,j]; blong[j]<-i
}
}
blong
}
data(iris);
X<-iris[,1:4];
G<-gl(3,50);
distinguish.distance(X,G);
分享到:
相关推荐
通过这些笔记,读者可以学习到如何使用R语言进行数据预处理、探索性数据分析、统计建模、假设检验、数据可视化等方面的知识。 文件中的“R--main”可能是指这份笔记的主体部分,包含了R语言在统计学习中的核心内容...
#### 一、R语言概述与特点 **R语言**是一种专为统计计算和图形展示而设计的编程语言。它提供了一整套功能强大的工具,包括: 1. **高效的数据管理和处理能力**:R能够处理各种类型的数据结构,并提供了丰富的内置...
R语言在科研领域的应用是多方面的,从简单的数据处理到复杂的统计建模,再到高质量的数据可视化,R语言都能够提供强大的支持。因其免费、开源、社区活跃,R语言成为了科研人员进行数据分析不可或缺的工具之一。
【R语言与函数估计学习笔记共...通过这份46页的学习笔记,读者可以系统地了解R语言在函数估计中的运用,提升统计建模和数据分析的能力。同时,对于想要在统计学和数据科学领域深入研究的人来说,这也是一个宝贵的资源。
包含统计软件与建模(清华薛毅)、R语言与统计分析、ggplot2 Elegant Graphics for Data Analysis 、153分钟学会R、统计学与R读书笔记(第三版)、R语言统计分析与挖掘实战、R语言数据挖掘等电子书,适合想精通R语言的...
在数据分析的过程中,R语言提供了一系列的函数和库,可以帮助用户高效地处理数据集、进行统计建模和生成高质量的图表。 在学习R语言的初期,笔记整理至关重要。它可以帮助我们回顾和巩固所学的知识点,同时也方便在...
例如,《R语言实战》、《统计建模与R语言》、《高级R语言编程》等书籍都是非常好的学习资源。 最后,实践是学习R语言的关键。通过不断的实践操作,学习者可以在实际项目中应用所学知识,解决真实的数据问题。同时,...
3. **统计分析和建模**:系统介绍如何利用R语言进行描述性统计分析、推断性统计测试和统计建模。如线性回归、逻辑回归、时间序列分析等。 4. **图形绘制**:R语言提供了一套功能强大的图形绘制系统,包括基础绘图...
R语言作为一种专门用于统计分析和图形表示的编程语言,被广泛应用于数据分析、统计建模、数据挖掘、机器学习等多个领域。它具有强大的数据处理和统计分析能力,同时也是一个开放源代码的软件项目,这意味着用户可以...
此外,R语言在统计建模方面具有天然的优势,包括线性回归、逻辑回归、时间序列分析、生存分析和多元统计分析等。 高级编程部分则包括编写自定义函数、面向对象编程、性能优化以及与其他软件或语言的接口等内容。...
《R语言实战(第二版)》作为一本经典教材,深入浅出地向读者展示了如何利用R语言进行数据探索、数据清洗、图形绘制和统计建模等操作。学习笔记的整理,对于理解和掌握R语言的各项技能至关重要。 学习笔记通常会...
学习笔记中将介绍如何运用R语言中的优化函数,如优化包中的optim函数,进行参数估计、预测建模和决策分析等任务。 本次提供的学习笔记涵盖了R语言在数据操作、统计图形制作和数值优化三个方面的核心内容。这对于...
总的来说,这份21页的R语言学习笔记可能涵盖了以上提到的一些基础知识,也可能深入探讨了一些特定主题,如数据预处理、统计建模或特定包的应用。通过学习这份笔记,读者将能够系统地掌握R语言的基本技能,并为进一步...
4. **R语言使用笔记_2012**:这可能是作者整理的一份个人学习笔记,通常这类笔记会包含作者在学习过程中的理解和心得,可能包括一些常见问题的解决方案、快捷键使用、特定问题的解决策略等,对于初学者来说,这样的...
R语言是基于S语言构建的,提供了一种交互式的环境进行数据分析和统计建模。它的语法简洁明了,适合表达复杂的统计操作。R语言的核心特点是其丰富的开源库,这些库覆盖了从基本统计分析到机器学习的各种功能。 "R...
R语言学习笔记的深入研究和实践,能够显著提升我们使用R语言进行数据科学项目的效率和质量,是数据分析师和统计学家不可多得的学习资源。通过掌握这些内容,我们可以在数据分析的世界里游刃有余,无论是在学术研究...
R语言学习思维导图,对R语言进行简要介绍,列出学习知识脉络,R及其库实现了各种各样的统计和图形技术,包括线性和非线性建模、经典统计测试、时间序列分析、分类、聚类等。
R语言是一种用于统计分析、图形表示和报告的编程语言和软件环境。R语言在学术界和工业界中被广泛应用于数据分析、机器学习等领域,其开源的特性和强大的社区支持使得它成为了数据科学领域的重要工具。R语言拥有丰富...
R语言是一种用于统计分析、图形表示和报告的编程语言和软件环境。在数据分析和统计领域,R语言凭借其强大的功能和灵活性广受专业...通过理解和应用这些知识点,学习者可以更有效地使用R语言进行数据分析和统计建模。