统计学-R语言-4.5

news2024/11/18 17:39:01

文章目录

  • 前言
  • 多变量数据
    • 多维列联表
    • 复式条形图
    • 并列箱线图
    • 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.coloradmin.cn/o/1384857.html

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

相关文章

pytorch集智4-情绪分类器

1 目标 从中文文本中识别出句子里的情绪。和上一章节单车预测回归问题相比&#xff0c;这个问题是分类问题&#xff0c;不是回归问题 2 神经网络分类器 2.1 如何用神经网络分类 第二章节用torch.nn.Sequantial做的回归预测器&#xff0c;输出神经元只有一个。分类器和其区别…

安装nodejs出现问题

Error: EPERM: operation not permitted, mkdir… 全局安装express模块进行测试时&#xff1a; npm install express -g出现&#xff1a; 表示nodejs的安装目录无权限&#xff0c;根据错误日志的信息&#xff0c;定位到安装目录下&#xff1a; 点击属性&#xff1a; 点击编…

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频&#xff08;AD/DA&#xff09;复习 原理&#xff1a;两个极端 同相输入端电压 》反相输入端 电压输出最…

基于RTOS(实时操作系统)的CMT液晶屏控制器驱动程序开发与实现

RTOS&#xff08;实时操作系统&#xff09;提供了一种有效的方式来管理和调度多任务系统&#xff0c;对于液晶屏控制器的驱动程序开发来说&#xff0c;RTOS能够提供良好的实时性和可靠性。本文以RTOS为基础&#xff0c;设计并实现了一个用于控制CMT液晶屏的驱动程序。在设计过程…

【android】rk3588-android-bt

文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现&#xff0c;协议栈调用2、协议栈实现&#xff0c;vendorlib调用&#xff08;回调函数&#xff09;2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE…

【LV13 DAY16 轮询与中断】

轮询实现按键实验 #include "exynos_4412.h"int main() {//GPX1_1设置为输入模式//GPX1.CONGPX1.CON & (~ (0XF<<4));while(1){if(!(GPX1.DAT&(1<<1))){printf("key pressed\n");while(!(GPX1.DAT&(1<<1)));}else{}}return…

i18n多国语言Internationalization的实现

i18n 是"Internationalization”的缩写&#xff0c;这个术语来源于英文单词中首尾字母“”和“n”以及中间的字符数(共计18个字符) 当我们需要开发不同语言版本时&#xff0c;就可以使用i18n多国语言的一个操作处理&#xff0c;i18n主要实现那一方面的内容呢&#xff1f;…

蓝桥杯省赛无忧 STL 课件17 map

01 map 02 multimap 03 unordered_map 04 代码示例

训练DAMO-YOLO(damoyolo_tinynasL25_S.py)

文章目录 参考链接1 准备数据1.1 转为COCO格式1.2 指明数据路径 2 设置训练配置文件&#xff0c;在configs/damoyolo_tinynasL25_S.py进行如下两块修改2.1 关于训练参数的设置2.2 根据自己数据集设置 3 开始训练4 调用tools/eval.py进行测试5 训练时可能遇到的报错5.1 RuntimeE…

Java生成四位数随机验证码

引言&#xff1a; 我们生活中登录的时候都要输入验证码&#xff0c;这些验证码是为了增加注册或者登录难度&#xff0c;减少被人用脚本疯狂登录注册导致的一系列危害&#xff0c;减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号 本次实践&#xff1a;生成这样的…

Spring Boot - 利用Resilience4j-RateLimiter进行流量控制和服务降级

文章目录 Resilience4j概述Resilience4j官方地址Resilience4j-RateLimiter微服务演示Payment processorPOM配置文件ServiceController Payment servicePOMModelServiceRestConfigController配置验证 探究 Rate Limiting请求三次 &#xff0c;观察等待15秒连续访问6次 Resilienc…

mysql原理--undo日志1

1.事务回滚的需求 我们说过 事务 需要保证 原子性 &#xff0c;也就是事务中的操作要么全部完成&#xff0c;要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况&#xff0c;比如&#xff1a; (1). 事务执行过程中可能遇到各种错误&#xff0c;比如服务器本身的错误&…

前端对接电子秤、扫码枪设备serialPort 串口使用教程

因为最近工作项目中用到了电子秤&#xff0c;需要对接电子秤设备。以前也没有对接过这种设备&#xff0c;当时也是一脸懵逼&#xff0c;脑袋空空。后来就去网上搜了一下前端怎么对接&#xff0c;然后就发现了SerialPort串口。 Serialport 官网地址&#xff1a;https://serialpo…

软件工程:黑盒测试等价分类法相关知识和多实例分析

目录 一、黑盒测试和等价分类法 1. 黑盒测试 2. 等价分类法 二、黑盒测试等价分类法实例分析 1. 工厂招工年龄测试 2. 规定电话号码测试 3. 八位微机测试 4. 三角形判断测试 一、黑盒测试和等价分类法 1. 黑盒测试 黑盒测试就是根据被测试程序功能来进行测试&#xf…

通过开源端点可见性改善网络安全响应

在当今复杂的数字环境中&#xff0c;企业内的许多不同端点&#xff08;从数据中心的服务器到咖啡店的笔记本电脑&#xff09;创建了巨大且多样化的攻击面。每个设备都存在网络安全威胁的机会&#xff0c;每个设备都有其独特的特征和复杂性。攻击者使用的多种攻击媒介不仅是一个…

【占用网络】FlashOcc:快速、易部署的占用预测模型

前言 FlashOcc是一个它只需2D卷积就能实现“占用预测模型”&#xff0c;具有快速、节约内存、易部署的特点。 它首先采用2D卷积提取图形信息&#xff0c;生成BEV特征。然后通过通道到高度变换&#xff0c;将BEV特征提升到3D空间特征。 对于常规的占用预测模型&#xff0c;将…

web前端算法简介之字典与哈希表

回顾 栈、队列 &#xff1a; 进、出 栈&#xff08;Stack&#xff09;&#xff1a; 栈的操作主要包括&#xff1a; 队列&#xff08;Queue&#xff09;&#xff1a; 队列的操作主要包括&#xff1a; 链表、数组 &#xff1a; 多个元素存储组成的 简述链表&#xff1a;数组&…

阶段十-分布式锁

5.1 节 为什么要使用分布式锁 锁是多线程代码中的概念&#xff0c;只有当多任务访问同一个互斥的共享资源时才需要。如下图&#xff1a; 在我们进行单机应用开发&#xff0c;涉及并发同步的时候&#xff0c;我们往往采用synchronized或者lock的方式来解决多线程间的代码同步问…

分布式任务调度平台XXL-JOB使用(二)

说明&#xff1a;之前总结过在CentOS系统里使用XXL-JOB。但在代码开发阶段&#xff0c;我们有时需要在本地环境测试定时任务代码&#xff0c;本文介绍如何在Windows系统使用XXL-JOB。 下载 &#xff08;1&#xff09;下载代码&#xff0c;解压打开 首先&#xff0c;去Github…

权责发生制和收付实现制

目录 一. 权责发生制(应记制)二. 收付实现制 \quad 一. 权责发生制(应记制) 应计制就是应该记入的意思 各项收入和费用的确认应当以“实际发生”&#xff08;归属期&#xff09;而不是以款项的实际收付作为记账的基础。 正是有会计期间假设&#xff0c;才有权责发生制和收付实…