统计学-R语言-4.5

news/2024/2/23 14:25:26/文章来源:https://blog.csdn.net/2301_77225918/article/details/135582100

文章目录

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

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

相关文章

Arduino快速上手esp8266方案开发

认识ESP8266 ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目&#xff0c;目前有非常高的市场普及率&#xff0c;还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32&#xff0c;可以在乐鑫官网查看完整的芯片列表。 ESP8266芯…

RabbitMQ 的基本概念

一 MQ 的基本概念 1 MQ概述 MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的&#xff0c;解决的是通信问…

使用CSS计算高度铺满屏幕

前言 今天写项目时出现高度设置百分百却不占满屏幕&#xff0c;第一反应看自己设置的是块级元素还是行级元素。看了几篇博客&#xff0c;发现并不能解决问题。脱离文档流的做法都没考虑&#xff0c;前期模板搭建脱离文档流&#xff0c;后面开发会出现很多问题。 以上图片是我…

如何优雅的进行异步编排

Future模式 Future模式是高并发设计和开发过程中常见的设计模式。它的核心思想是异步调用&#xff0c;对于Future模式来说&#xff0c;它不是立即返回我们所需要的结果&#xff0c;但是它会返回一个异步任务&#xff0c;将来我们可以通过这个异步任务获取到我们所需要的结果。…

Linux-ARM裸机(十一)-UART串口通信

无论单片机开发还是嵌入式 Linux 开发&#xff0c;串口都是最常用到的外设。可通过串口将开发板与电脑相连&#xff0c;然后在电脑上通过串口调试助手来调试程序。还有很多的模块&#xff0c;比如蓝牙、GPS、 GPRS 等都使用的串口来与主控进行通信的&#xff0c;在嵌入式 Linux…

基于信号完整性的PCB设计原则

最小化单根信号线质量的一些PCB设计建议 1. 使用受控阻抗线&#xff1b; 2. 理想情况下&#xff0c;所有信号都应该使用完整的电源或地平面作为其返回路径&#xff0c;关键信号则使用地平面作为返回路径&#xff1b; 3. 信号的返回参考面发生变化时&#xff0c;在尽可能接近…

wins安装paddle框架

一、安装 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/windows-pip.html 装包&#xff08;python 的版本是否满足要求&#xff1a; 3.8/3.9/3.10/3.11/3.12&#xff0c; pip 版本为 20.2.2 或更高版本 &#xff09; CPU 版:…

LLM论文:ALCE (Enabling Large Language Models to Generate Text with Citations)

这是一篇RAG领域的文章&#xff0c;原文在这&#xff1a;https://aclanthology.org/2023.emnlp-main.398.pdf 时间[Submitted on 24 May 2023 (v1), last revised 31 Oct 2023 (this version, v2)]背景LLM在信息搜索、生成带引用的文本时存在幻觉问题&#xff0c;即事实准确性…

《 乱弹篇(四)》

既然是“乱弹”&#xff0c;弹&#xff08;谈&#xff09;题便可以包罗万象&#xff1b;天上地下&#xff0c;飞的走的&#xff0c;你的我的他的事儿&#xff0c;甚至还有许许多多八竿子都打不着的怪涎事儿&#xff0c;都可成为弹&#xff08;谈&#xff09;资 。比如&#xff…

计算机毕业设计 | 大型SpringBoot宠物医院管理 宠物商城购物系统(附源码)

写在前面 Le Dao宠物医院管理系统是一个超大型的&#xff0c;完成度很高的&#xff0c;集宠物医疗、宠物美容、宠物交易、宠物周边等各种功能于一身的&#xff0c;权限涵盖普通用户、医生、化验师、美容师、仓库主管、采购员等多种角色于一体的大型宠物医疗&#xff0c;购物系…

Rust-Panic

什么是panic 在Rust中&#xff0c;有一类错误叫作panic。示例如下&#xff1a; 编译&#xff0c;没有错误&#xff0c;执行这段程序&#xff0c;输出为&#xff1a; 这种情况就引发了一个panic。在这段代码中&#xff0c;我们调用了Option::unwrap()方法&#xff0c;正是这个方…

【开源】基于JAVA语言的网上药店系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…

【Django开发】美多商城项目第2篇:Django用户注册和登录开发(附代码,已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

Kubernetes (K8S) 3 小时快速上手 + 实践

1. Kubernetes 简介 k8s即Kubernetes。其为google开发来被用于容器管理的开源应用程序&#xff0c;可帮助创建和管理应用程序的容器化。用一个的例子来描述&#xff1a;"当虚拟化容器Docker有太多要管理的时候&#xff0c;手动管理就会很麻烦&#xff0c;于是我们便可以通…

【SQL注入】SQLMAP v1.7.11.1 汉化版

下载链接 【SQL注入】SQLMAP v1.7.11.1 汉化版 简介 SQLMAP是一款开源的自动化SQL注入工具&#xff0c;用于扫描和利用Web应用程序中的SQL注入漏洞。它在安全测试领域被广泛应用&#xff0c;可用于检测和利用SQL注入漏洞&#xff0c;以验证应用程序的安全性。 SQL注入是一种…

初识OpenCV

首先你得保证你的虚拟机Ubuntu能上网 可看 http://t.csdnimg.cn/bZs6c 打开终端输入 sudo apt-get install libopencv-dev 回车 输入密码 回车 遇到Y/N 回车 OpenCV在线文档 opencv 文档链接 点zip可以下载&#xff0c;点前面的直接在线浏览&#xff0c;但是很慢 https…

k8s云原生环境搭建笔记——第二篇

目录 1、使用普通方式安装prometheus和grafana1.1、安装kube-state-metrics容器1.1.1、下载并修改yaml文件1.1.2、导入kube-state-metrics镜像1.1.3、执行yaml文件目录 1.2、安装node-exploer1.2.1、创建名称空间prometheus1.2.2、执行yaml 1.3、安装prometheus1.3.1、创建集群…

基于python集成学习算法XGBoost农业数据可视化分析预测系统

文章目录 基于python集成学习算法XGBoost农业数据可视化分析预测系统一、项目简介二、开发环境三、项目技术四、功能结构五、功能实现模型构建封装类用于网格调参训练模型系统可视化数据请求接口模型评分 0.5*mse 六、系统实现七、总结 基于python集成学习算法XGBoost农业数据可…

多行SQL转成单行SQL

如下图所示 将以上多行SQL转成单行SQL 正则表达式如下 (?s)$[^a-zA-Z()0-9]*结果如下 灵活使用,也未必只能使用Sublime Text 提供了一个在线工具

[Docker] Docker为什么出现

Docker为什么出现 一款产品&#xff1a; 开发–上线 -->两套环境 | 应用配置 开发即运维&#xff01; 环境配置十分麻烦&#xff0c;每一个机器都要部署环境&#xff08;Redis, ES, Hadoop&#xff09; 费时费力 项目带上配置环境安装打包。 传统&#xff1a; 开发jar&…