`
beyondme121
  • 浏览: 14765 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

统计建模与R语言笔记

    博客分类:
  • R
R 
阅读更多

# 判别分析:用以判别个体属于那个总体的一种统计方法

# 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语言概述与特点 **R语言**是一种专为统计计算和图形展示而设计的编程语言。它提供了一整套功能强大的工具,包括: 1. **高效的数据管理和处理能力**:R能够处理各种类型的数据结构,并提供了丰富的内置...

    R语言学习笔记

    R语言在科研领域的应用是多方面的,从简单的数据处理到复杂的统计建模,再到高质量的数据可视化,R语言都能够提供强大的支持。因其免费、开源、社区活跃,R语言成为了科研人员进行数据分析不可或缺的工具之一。

    R语言与函数估计学习笔记共46页.pdf.zip

    【R语言与函数估计学习笔记共...通过这份46页的学习笔记,读者可以系统地了解R语言在函数估计中的运用,提升统计建模和数据分析的能力。同时,对于想要在统计学和数据科学领域深入研究的人来说,这也是一个宝贵的资源。

    R语言统计分析、数据挖掘、可视化电子书大汇总

    包含统计软件与建模(清华薛毅)、R语言与统计分析、ggplot2 Elegant Graphics for Data Analysis 、153分钟学会R、统计学与R读书笔记(第三版)、R语言统计分析与挖掘实战、R语言数据挖掘等电子书,适合想精通R语言的...

    统计学与R笔记

    徐俊晓编写的《统计学与R读书笔记(第六版)》提供了一个全面的学习资源,帮助读者掌握R语言的基本操作,包括环境配置、函数使用、类和泛型函数的定义、内存管理和异常处理等,并介绍了R语言在统计学领域的应用,例如...

    R语言学习笔记共21页.pdf.zip

    总的来说,这份21页的R语言学习笔记可能涵盖了以上提到的一些基础知识,也可能深入探讨了一些特定主题,如数据预处理、统计建模或特定包的应用。通过学习这份笔记,读者将能够系统地掌握R语言的基本技能,并为进一步...

    R语言学习书籍下载

    4. **R语言使用笔记_2012**:这可能是作者整理的一份个人学习笔记,通常这类笔记会包含作者在学习过程中的理解和心得,可能包括一些常见问题的解决方案、快捷键使用、特定问题的解决策略等,对于初学者来说,这样的...

    R语言学习资料整理

    R语言是基于S语言构建的,提供了一种交互式的环境进行数据分析和统计建模。它的语法简洁明了,适合表达复杂的统计操作。R语言的核心特点是其丰富的开源库,这些库覆盖了从基本统计分析到机器学习的各种功能。 "R...

    R语言基本知识,学习思维导图

    R语言学习思维导图,对R语言进行简要介绍,列出学习知识脉络,R及其库实现了各种各样的统计和图形技术,包括线性和非线性建模、经典统计测试、时间序列分析、分类、聚类等。

    R语言与函数估计学习笔记

    R语言是一种用于统计分析、图形表示和报告的编程语言和软件环境。在数据分析和统计领域,R语言凭借其强大的功能和灵活性广受专业...通过理解和应用这些知识点,学习者可以更有效地使用R语言进行数据分析和统计建模。

    R语言使用笔记-2012

    本资源摘要信息涵盖了 R 语言的基础知识和高级应用,从基本操作到统计建模和数据分析,涵盖了 R 语言的各方面。 基础操作 * 数组赋值操作:使用 `运算符将值赋给变量,例如 `X1 (,,,)`。 * 平均值计算:使用 `mean...

    统计学与R语言学习

    #### R语言基础及统计学学习笔记概览 **R语言**是一种广泛应用于统计分析、图形表示和报告的专业编程语言。它支持各种统计技术和图表技术,包括线性和非线性建模、经典统计测试、时间序列分析、分类、聚类等。 ###...

    统计模型及其R实现笔记202002181

    本笔记主要探讨的是统计建模中的一个重要概念——变量选择,以及如何在R语言中实现这些方法。统计模型通常用于分析数据中的关系,例如在回归分析中,通过建立数学公式来描述因变量和一个或多个自变量之间的关系。在...

    R语言笔记常用函数统计分析数据类型数据操作帮助安装程序包R绘图.docx

    R语言是一种广泛应用于数据分析、统计建模和可视化任务的强大编程环境。这篇笔记涵盖了R语言中的多个关键知识点,包括数据操作、统计分析、图形绘制以及数据挖掘。以下是对这些主题的详细解释: 1. **聚类分析**: ...

    R语言笔记

    ### R语言笔记知识点详解 #### 一、函数`source()`的使用 - **函数定义**:`source()`函数用于在当前R会话中执行指定的R脚本文件。 - **基本语法**:`source(file = "filename", echo = TRUE/FALSE, ...) - `file...

    《R语言实战(第2版)》同步笔记

    - **R语言介绍**:R是一种开源的统计编程语言,广泛应用于数据分析和统计建模等领域。R语言具有强大的绘图功能和丰富的第三方包支持,使得其成为数据科学家和统计分析师的首选工具之一。 - **R中的数据结构**:R中...

    缤纷灿烂R语言系列课程.txt打包整理.zip

    【标题】"缤纷灿烂R语言系列课程.txt打包整理.zip" 提供的是一个关于R语言学习资源的集合,可能包括教程、笔记、示例代码等,旨在帮助用户系统性地掌握R语言并提升其在数据分析、统计建模以及可视化等方面的技能。...

    R语言学习笔记内附实例及代码.docx

    以上只是R语言学习的一部分,R还涵盖了矩阵、数据框、因子、时间序列、数据导入导出、可视化、统计建模等多个方面的知识。深入学习R语言,需要不断实践,阅读文档,参与社区交流,以提升对R的理解和运用能力。

    R200条笔记.zip

    这200条笔记可能涵盖了R语言的基础语法,如变量定义、数据类型(向量、列表、矩阵、数据框等)、控制结构(if语句、for循环、while循环)以及函数的创建与调用。 其次,笔记可能涉及了R中的数据操作,包括数据清洗...

Global site tag (gtag.js) - Google Analytics