统计学-R语言-4.5

文章目录

  • 前言
  • 多变量数据
    • 多维列联表
    • 复式条形图
    • 并列箱线图
    • R语言中取整运算主要包括以下五种:
  • 点带图
  • 多变量散点图
    • 重叠散点图
    • 矩阵式散点图
  • 练习


前言

本篇文章将继续对数据的类型做介绍,本片也是最后一个介绍数据的。


多变量数据

掌握描述多变量数据的分析方法:多维列联表、复式条形图、并列箱线图、点带图、多变量散点图(重叠散点图和矩阵式散点图)。

多维列联表

除了一维表、二维表,在实际中更多的是多维表,也就是多个变量交叉生成的表格。
R中的table()函数也可以生成多维表。
假设存在x、y、z三个变量,table(x,y)则生成x、 y二维表,table(x,y,z)生成每个z值关于x、y的二维表(由于计算机作三维及三维以上的表格不方便,所以就用这种方式显示)。

例题1:
为了了解不同年龄的男性,吸烟与呼吸系统疾病之间的关系,青原博士获得如下的调查数据。
在这里插入图片描述
这是一个2×2×2的三维列联表,因为每个变量的水平数均为2。

age=c(rep("40岁",4),rep("40~59",4))
smoke=rep(c("吸烟","不吸烟"),4)
breath=rep(c("呼吸正常","呼吸正常","呼吸不正常","呼吸不正常"),2)
freq=c(874,567,28,14,780,328,68,2)

接下来分析breath变量的频数分布,分析后再作breath与smoke的二维表,最后作breath、smoke与age的三维表
在这里插入图片描述

xtabs (freq~breath)

breath
呼吸不正常 呼吸正常
112 2549

xtabs(freq~breath+smoke)        

smoke
breath 不吸烟 吸烟
呼吸不正常 16 96
呼吸正常 895 1654

xtabs(freq~breath+smoke+age)

, , age = <40岁
smoke
breath 不吸烟 吸烟
呼吸不正常 14 28
呼吸正常 567 874
, , age = 40~59
smoke
breath 不吸烟 吸烟
呼吸不正常 2 68
呼吸正常 328 780

复式条形图

对breath按不同的smoke作复式条形图。
从下图可以看出,首先按smoke分成"吸烟",“不吸烟” 2组,每组里又按breath分成"呼吸正常","呼吸不正常"2类

par(mfrow=c(1,2))
barplot(xtabs(freq~breath+smoke))
barplot(xtabs(freq~breath+smoke),beside=T)

在这里插入图片描述
breath按照smoke作的复式条形图,黑色的方块代表不健康。

对smoke按照不同的breath做复式条形图,首先按breath分 成“呼吸正常”,“呼吸不正常”2组;然后,每组里又分成“吸烟”,“不吸烟”等2类。结果如下图所示

par(mfrow=c(1,2))
barplot(xtabs(freq~smoke+breath))
barplot(xtabs(freq~smoke+breath),beside=T)

在这里插入图片描述
黑色的方块代表不吸烟。

并列箱线图

用并列箱线图考察年龄与吸烟、年龄与呼吸的关系
为了画出并列箱线图,此处需要没有分组的年龄变量。 不失一般性,假设两个年龄段"<40岁","40~59"的男性的年龄均值分别为20岁和49.5岁
按照下面的程序产生年龄的连续观测值

set.seed(500)
age.value=round(c(rnorm(1483,mean=20,sd=6.5),rnorm(1178,mean=49.5,sd=3)))

set.seed()函数是为了保证随机生成的随机数前后一致
首先,不设置该种子函数

x=rnorm(10)
plot(x)

绘出的图如下:

在这里插入图片描述
重新运行一遍这两行,就是另外的图

x=rnorm(10)
plot(x)

在这里插入图片描述

为了在下次运行时,产生一样的随机数,就得使用set.seed()函数了,如下

set.seed(1)
x=rnorm(10)
plot(x)

画图如下:
在这里插入图片描述

那么此时,我们重复运行上面的代码

set.seed(1)
x=rnorm(10)
plot(x)

在这里插入图片描述
那么set.seed(1)换为set.seed(2)时还一样吗?我们运行下面程序

set.seed(2)
x=rnorm(10)
plot(x)

显然是不一样的,因此,set.seed()括号里面的参数可以是任意数字,是代表你设置的第几号种子而已,不会参与运算,是个标记而已。

在这里插入图片描述
rnorm(n, mean = 0, sd = 1)
n 为产生随机值个数(长度),mean 是平均数, sd 是标准差 。
使用该函数的时候后,一般要赋予它 3个值.
rnorm() 函数会随机正态分布,然后随机抽样或者取值 n 次,
rnorm(5,0,1) 以N(0,1)的正态分布,分别列出5个值。

函数形式:rep(x, time = , length = , each = ,)
参数说明:
x:代表的是你要进行复制的对象,可以是一个向量或者是一个因子。
times:代表的是复制的次数,只能为正数。负数以及空值都会为错误值。复制是指的是对整个向量进行复制。
each:代表的是对向量中的每个元素进行复制的次数。
length.out:代表的是最终输出向量的长度。

在这里插入图片描述
例题1:
用并列箱线图考察年龄与吸烟、年龄与呼吸的关系
为了画出并列箱线图,此处需要没有分组的年龄变量。 不失一般性,假设两个年龄段"<40岁","40~59"的男性的年龄均值分别为20岁和49.5岁
按照下面的程序产生年龄的连续观测值

set.seed(500)
age.value=round(c(rnorm(1483,mean=20,sd=6.5),rnorm(1178,mean=49.5,sd=3)))

还需要给出每一个男性的吸烟状态、呼吸状态,这由下面的程序来实现:

age1=c(rep("<40岁",1483),rep("40~59",1178))
breath1=c(rep(" 呼吸正常",1441),rep("呼吸不正常",42),rep(" 呼吸正常",1108),rep("呼吸不正常",70))
smoke1=c(rep("吸烟",874),rep("不吸烟",567),rep("吸烟",28),rep("不吸烟",14),rep("吸烟",780),rep("不吸烟",328),rep("吸烟",68),rep("不吸烟",2))
基于age.value,分别做出age.value按smoke1和breath1分类的箱线图
par(mfrow=c(1,2))
boxplot(age.value ~smoke1)
boxplot(age.value ~breath1)

在这里插入图片描述

从箱线图可以发现,吸烟的男性平均年龄高于不吸烟的男性,呼吸不正常的男性平均年龄高于呼吸正常的男性。

例题2:
为了比较乘坐公交车上班快还是自己开车快,青原博士对两种方式所用时间各进行了10次记录,具体数据见下表。
在这里插入图片描述
目的是比较两种交通方式所需时间是否有差异,从并列箱线图可以看出两个交通方式所需时间存在较大差异

x1=c(48,47,44,45,46,47,43,47,42,48)
x2=c(36,45,47,38,39,42,36,42,46,35)
time=c(x1,x2)
transportation=c(rep(1,10),rep(2,10))
traffic.time=cbind(time,transportation)
boxplot(time ~transportation

在这里插入图片描述

cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符。
rbind: 根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符。
在这里插入图片描述
在这里插入图片描述
例题三:
模拟1000个标准正态分布随机数,分成10组,作10个并列箱线图这里利用rep()函数重复100次生成1:10的1000个数,再利 用factor()函数生成10个因子。

r1= rnorm(1000)
f1=factor(rep(1:10,100))
boxplot(r1~f1)

在这里插入图片描述

R语言中取整运算主要包括以下五种:

floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留给定位数的精度。
floor返回对应数字的’地板’值,即不大于该数字的最大值;
ceiling返回对应数字的’天花板’值,就是不小于该数字的最小整数;
round是R里的’四舍五入’函数,round的原型是round(x, digits = 0), digits设定小数点位置,默认为零即小数点后零位(取整)。
trun的特性是’向零截取’, 也就是说对于一个数字a,它将数轴分成两侧,trunc(a)将返回数轴上包含数字0的那一侧离a最近的那个整数。
signif是保留有效数字的函数。常用于科学计数。

点带图

点带图(StripChart)经常用来比较各变量的分布情况,点带图主要用在当样本观测值较少时。
R作点带图的函数是stripchart(),对于双变量数据其用法是stripchart(z~t),z变量在t变量上的分布情况,不同的是这里z变量刻度在x轴上,而t 变量在y轴上。

例题1:
对呼吸正常与否按吸烟与否分类作点带图。
结果如下图所示,呼吸的各个类型都描在了图上。

smoke1[ smokel1=="吸烟"]=1
smoke1[ smokel1=="不吸烟"]=0
par(mfrow =c(1,1))
stripchart(as. numeric( smoke1)~ breath1,xlab="吸烟"

在这里插入图片描述
x轴用1 , 0 代表" 吸烟" 和"不吸烟"等2组
该例中的两个变量都是二分类,关系比较简单。下面再看一个复杂一点儿的点带图例子。

一般只要是数字,不管是什么类型的,都可以通过as.numeric()函数转换为对应的numeric类型的数字,例如
x<-“123”,x为character类型,而as.numeric(x)则为numeric类型的123。
但是因子(factor)类型却不一样。
a<-factor(c(100,200,300,301,302,400,10)),
它们的值分别为100 200 300 301 302 400 10,然而as.numeric(a)对应的值并非100 200 300 301 302 400 10,而是2 3 4 5 6 7 1。
因子(factor)转换成数值型(numeric)的规则是这样的:
一共有n个数,那么转换后的数字就会在1—n中取值,数字最小的取一,次小的取二,以此类推。那么如何让因子(factor)类型里的数值转换对应的数值型呢?

mean(as.numeric(as.character(factorname)))
mean(as.numeric(levels(factorname)[factorname]))

以上代码就可以实现将因子(factor)类型里的数值转换对应的数值型,思路都是先转换成字符型然后再转换成数值型。

例题2:
模拟100个标准正态分布的随机数,分成5组,作点带图

r2= rnorm(100)
f2=factor(rep(1:5,20))
stripchart(r2~f2)

在这里插入图片描述
反映了各随机数在各组上的分布情况,而且绝大 部分集中在[-1,1]上,当样本观察值较多时,点带图就显得有点凌乱,没有箱线图清晰直观。这是点带图的局限性,当样本观察值较多时,建议使用箱线图。

多变量散点图

多变量散点包括重叠散点图和矩阵式散点图。我们使用R自带的著名的鸢尾花(iris)数据集来介绍如何绘制多变量散点图。

例题1:
R内置的鸢尾花(iris)数据集是Fisher关于 150个植物分类的数据,是判别分析的经典案例。
该数据集内有五个变量:Sepal.Length(花萼长度)、 Sepal.Width(花萼宽度)、Petal.Length(花瓣长度) Petal.Width(花瓣宽度)、Species(品种)。
品种有三个:setosa,versicolor和virginica。每种品种有50 个样本。

iris
levels(iris $ Species)#种类的水平

[1] “setosa” “versicolor” “virginica”

共有三种植物,
分别是setosa,versicolor和virginica
为了在图中方便显示,
重新标示它们为1、2和3

iris.lab=rep(c("1","2","3"),rep(50,3))

重叠散点图

有时出于研究的需要,将两个或多组两个变量的散点图绘制在同一个图中, 可以更好的比较它们之间的相关关系,这时就可以绘制重叠散点图

par(mfrow=c(1,2))
plot(iris[,1],iris[,3],type="n")	#绘制iris第1列和第3列的散点图,type="n"不显示点
text(iris[,1],iris[,3],cex=0.6) #显示样本序号,缩小字体cex=0.6
plot(iris[,1],iris[,3],type="n")
text(iris[,1],iris[,3],iris.lab,cex=0.6)

在这里插入图片描述

矩阵式散点图

同时考察三个或三个以上的数值变量间的相关关系时, 一一绘制它们之间的简单散点图就十分麻烦
利用矩阵式散点图则比较合适,这样可以快速发现多个 变量间的主要相关性,这一点在多元线性回归中显得尤为重要
R作矩阵式散点图的函数是pairs()。

pairs(iris)
pairs(iris [1:4],pch=21,bg=iris.lab)	#按iris.lab分类

在这里插入图片描述


练习

1、(数据: example2_4. RData)下表是随机抽取的20家医药企业销售收入、销售网点数、销售人员数以及广告费用的数据。
在这里插入图片描述

1 . 绘制带有箱线图的散点图观察这些变量间的关系,并描述每个变量的分布状况

par(fig=c(0,0.8,0,0.8),mai=c(0.9,0.9,0.1,0.1)) 
plot(广告费用,销售收入,xlab="广告费用",ylab="销售收入",cex.lab=0.7,cex.axis=0.7)
abline(lm(销售收入~广告费用,data=example2_4),col="red")
par(fig=c(0,0.8,0.5,1),new=TRUE)
boxplot(广告费用,horizontal=TRUE,axes=FALSE)
par(fig=c(0.52,1,0,0.9),new=TRUE)
boxplot(销售收入,axes=FALSE)

在这里插入图片描述

从图中的两个箱线图可以看出,销售收入和广告费用均为右偏分布。

2 . 绘制关于销售收入与销售网点数、销售人员数及广告费用的重叠散点图

par(mai=c(0.5,0.85,0.1,0.1))
plot(广告费用,销售收入,xlab="",ylab="销售收入")
abline(lm(销售收入~广告费用,data=example2_4))
points(销售网点数,销售收入,pch=2,col="blue")
abline(lm(销售收入~销售网点数,data=example2_4),col="blue")
points(销售人员数,销售收入,pch=3,col="red")
abline(lm(销售收入~销售人员数,data=example2_4),col="red")
legend("bottomright",legend=c("广告费用","销售网点数","销售人员数"),pch=1:3,col=c("black","blue","red"))

在这里插入图片描述

3 . 绘制矩阵散点图

load("C:/example/ch2/example2_4.RData")
plot(example2_4,cex=0.8,gap=0.5) 
pairs(example2_4)

在这里插入图片描述
在这里插入图片描述

图显示,销售收入、销售网点数、销售人员数、广告费用两两之间都有较强的线性关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDN内容分发网络

1、CDN的含义 1.1 什么是CDN&#xff1f; CDN是内容分发网络&#xff08;Content Delivery Network&#xff09;的缩写。它是一种通过将内容部署到全球各地的服务器节点&#xff0c;使用户能够快速访问和下载内容的网络架构。 简单来说&#xff0c;CDN通过将内容分发到离用户更…

Redis-redis.conf配置文件中的RDB与AOF持久化方式的详解与区别

RDB&#xff08;Redis Database&#xff09; RDB是Redis的默认持久化方式&#xff0c;它将内存中的数据以二进制格式写入磁盘&#xff0c;形成一个快照。RDB持久化有以下几个重要的配置选项&#xff1a; save&#xff1a;指定了保存RDB的策略&#xff0c;默认的配置是每900秒&…

SpringCloud:Gateway服务网关

文章目录 Gateway服务网关快速入门断言工厂默认过滤器自定义过滤器过滤器执行顺序跨域问题处理 Gateway服务网关 网关&#xff08;Gateway&#xff09;是将两个使用不同协议的网络段连接在一起的设备。 网关的作用就是对两个网络段中的使用不同传输协议的数据进行互相的翻译转换…

案例123:基于微信小程序的在线订餐系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布…

1127: 矩阵乘积

题目描述 计算两个矩阵A和B的乘积。 输入 第一行三个正整数m、p和n&#xff0c;0<m,n,p<10&#xff0c;表示矩阵A是m行p列&#xff0c;矩阵B是p行n列&#xff1b; 接下来的m行是矩阵A的内容&#xff0c;每行p个整数&#xff0c;用空格隔开&#xff1b; 最后的p行是矩…

SpringFramework实战指南(一)

SpringFramework实战指南&#xff08;一&#xff09; 一、技术体系结构1.1 总体技术体系1.2 框架概念和理解 一、技术体系结构 1.1 总体技术体系 单一架构 一个项目&#xff0c;一个工程&#xff0c;导出为一个war包&#xff0c;在一个Tomcat上运行。也叫all in one。 单一架…

Kubernetes (十二) 存储——Volumes配置管理

一. 卷的概念 官方地址&#xff1a;卷 | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/storage/volumes/ 二. 卷的类型及使用 …

前端性能优化之数据存取,存储以及缓存技术

无论是哪种计算机语言&#xff0c;说到底它们都是对数据的存取与处理。若能在处理数据前&#xff0c;更快地读取数据&#xff0c;那么必然会对程序执行性能产生积极的作用。 一般而言&#xff0c;js的数据存取有4种方式。 直接字面量:字面量不存储在特定位置也不需要索引&…

spring基于XML方式的组件管理

基本介绍 依赖注入是一种处理对象间依赖关系的技术。在Spring中&#xff0c;依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量&#xff0c;通过主调类的setter方法注入依赖。构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来…

CSC8021_computer network_The Transport Layer

Role of the transport layer • The transport layer is responsible for providing a reliable end-to-end connection between two application processes in a network • Abstracting away the physical subnet • Does not involve intermediate nodes • Takes a netwo…

UML-通信图和交互概览图(通信图和顺序图的区别与联系)

UML-通信图和交互概览图&#xff08;通信图和顺序图的区别与联系&#xff09; 一、通信图简介1.消息2.链接 二、通信图和[顺序图](https://blog.csdn.net/weixin_65032328/article/details/135587782)的联系与区别三、交互概览图四、顺序图转化为通信图练习 一、通信图简介 通…

2.2 物理层

2.2 物理层 2.2.1 物理层的基本概念 1、物理层主要解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而给数据链路层提供透明传输比特流的服务 2、由于传输媒体的种类太多&#xff08;例如同轴电缆、光纤、无线电波等&#xff09;&#xff0c;物理连接方式也有很多例如…

libcurl开源库的编译与使用全攻略

libcurl简介 libcurl 是一个广泛使用的、支持多种协议的、开源的客户端URL传输库&#xff0c;提供了许多用于数据传输的API&#xff0c;例如文件传输、FTP、HTTP、HTTPS、SMTP等。libcurl 的主要特点包括 支持多种协议&#xff1a;libcurl 支持多种协议&#xff0c;如 HTTP、F…

Spring集成

目录 概述1 声朋一个简单的集成流1.1 使用XML定义集成流1.2 使用Java配置集成流1.3 使用Spring lntegration 的 DSL 配置 2 Spring integration 功能概览2.1 消息通道2.2 过滤器2.3 转换器2.4 路由器2.5 切分器2.6 服务激活器2.7 网关2.8 通道适配器2.9 端点模块 概述 就像我们…

JDK8-JDK17版本升级

局部变量类型推断 switch表达式 文本块 Records 记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类&#xff0c;但代码少得多&#xff1b;大多数开发人员使用 Lombok 生成 POJO 类&#xff0c;但是有了记录&#xff0c;你就不需要使…

逸学Docker【java工程师基础】3.1安装Jenkins

1.下载镜像 docker pull jenkins/jenkins:lts 2.运行容器 docker run -d -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins:lts 3.要启动名为 jenkins 的 Docker 容器 docker st…

HarmonyOS-LocalStorage:页面级UI状态存储

管理应用拥有的状态概述 上一个章节中介绍的装饰器仅能在页面内&#xff0c;即一个组件树上共享状态变量。如果开发者要实现应用级的&#xff0c;或者多个页面的状态数据共享&#xff0c;就需要用到应用级别的状态管理的概念。ArkTS根据不同特性&#xff0c;提供了多种应用状态…

OpenGauss源码分析-SQL引擎

所讨论文件大多位于src\common\backend\parser文件夹下 总流程 start_xact_command()&#xff1a;开始一个事务。pg_parse_query()&#xff1a;对查询语句进行词法和语法分析&#xff0c;生成一个或者多个初始的语法分析树。进入foreach (parsetree_item, parsetree_list)循环…