R 中的探索性相关分析

news2024/9/22 15:31:47

动动发财的小手,点个赞吧!

本文[1]

相关分析是探索两个或多个变量之间关系的最基本和最基础的方法之一。您可能已经在某个时候使用 R 执行过相关分析,它可能看起来像这样:

cor_results <- cor.test(my_data$x, my_data$y,
                        method = "pearson")

cor_results

输出看起来像:

alt

这是为您预先选择的两个变量运行简单关联的基本 R 方法。

但是,如果您真的不知道自己在寻找什么怎么办?如果您只是处于进行一些探索性数据分析的阶段,您可能不知道您对哪些变量感兴趣,或者您可能想在哪里寻找关联。在这种情况下可能有用的是能够选择一个感兴趣的变量,然后检查具有多个甚至数百个变量的数据集,以便为进一步分析找出一个好的起点。感谢 kassambara 开发的 rstatix 包,有一种快速且相对轻松的方法可以做到这一点。

获取数据

例如,我将使用来自世界银行的世界发展指标 (WDI) 数据集的数据——一个关于全球发展指标的开放访问数据存储库。我们可以从上面链接的网站访问 WDI,但也有一个 R 包

install.packages("WDI")
library(WDI)

可以使用 WDI() 函数从 WDI 导入特定的数据系列,但是因为我们对涵盖大量变量之间可能关系的探索性分析感兴趣,所以我将批量下载整个数据库……

bulk <- WDIbulk(timeout = 600)

假设我们有兴趣尝试找出哪些其他国家特征可能与贸易更多的国家相关,相对于其经济规模,我们也对 2020 年的数据感兴趣。

一旦我们确定了正确的变量(这里我将使用贸易占 GDP 的百分比),我们需要稍微清理一下数据。我们将创建一个我们可以过滤的年度系列列表,然后应用另一个过滤步骤以确保我们只使用具有大量观察值的变量用于分析(任意,n> 100在下面的示例中)。

# Create a filtered set with only annual variables
filtered <- bulk$Series %>% filter(Periodicity == "Annual")

# Create a list of variables to correlate against trade levels
bulk$Data %>% 
  filter(Indicator.Code %in% c(filtered$Series.Code)) %>% 
  filter(year == 2020) %>% 
  group_by(Indicator.Code) %>%
  filter(!is.na(value)) %>% 
  count() %>% 
  arrange(n) %>% 
  filter(n>100) -> vars_list

分析

所以现在我们有一个变量列表要运行——大约 790 个——看看哪些可能与我们的贸易水平变量相关。这将永远需要手动运行,或者从 base R 循环运行 cor.test() 。这是 rstatix 中的 cor_test() 函数闪耀的地方——它运行得非常快,相关分析的输出被转储到一个小标题中格式(使执行额外的操作和分析变得容易),并且函数是管道友好的,这意味着我们可以将过滤、变异和执行步骤组合到一个管道框架中,我们还可以将变量输入分组以进行分组输出来自 rstatix(我们稍后会看一些例子)。

因此,要运行分析:

# Because WDI contains regional data as well, we'll create a list that only has country codes, and filter our input based on that list
countries <- bulk$Country %>% filter(!Region == "") %>% as_tibble()

bulk$Data %>% 
  filter(Indicator.Code %in% c(vars_list$Indicator.Code)) %>%
  filter(year == 2020) %>%
  filter(Country.Code %in% c(countries$Country.Code)) %>% 
  select(-Indicator.Name) %>% 
  pivot_wider(names_from = Indicator.Code,
              values_from = value) %>% 
  cor_test(NE.TRD.GNFS.ZS, 
           method = "pearson",
           use = "complete.obs") -> results

results

这会使用变量配对、相关系数 (r)、t 统计量、置信水平 (p) 以及低置信度和高置信度估计来填充整齐的小标题。对于上面运行的示例,它看起来像:

alt

因为输出是一个 tibble,所以我们可以根据需要对其进行排序和分解。让我们用变量名称和描述创建一个键,将其连接到我们的输出数据中,仅过滤在 p > 0.05 水平上显着的变量对,并检查哪些变量具有最高的 r 值:

indicator_explanation <- bulk$Series %>% select(Series.Code, Indicator.Name, Short.definition) %>% as_tibble()

results %>% 
  left_join(indicator_explanation, c("var2" = "Series.Code")) %>% 
  arrange(desc(cor)) %>%
  filter(p<0.05) %>% 
  View()
alt

一些具有最高相关性的变量并不令人惊讶——例如,总体贸易在服务贸易和商品贸易的国家之间呈高水平正相关。其他情况可能更出乎意料——比如贸易水平与一个国家收到的官方发展援助(援助资金)数额之间的中等高度正相关 (r = 0.43)(上图中最下面一行)。

分组分析

那么,如果我们想更多地研究这种关系呢?例如——如果我们看看 2020 年以外的其他年份,这种关系是否仍然牢固?这是 cor_test() 的管道友好特性再次派上用场的地方。

让我们过滤我们的初始数据以仅包括我们感兴趣的两个指标,然后按年份对数据进行分组,然后再将其传输到 cor_test() 这一次:

bulk$Data %>% 
  filter(Indicator.Code %in% c("NE.TRD.GNFS.ZS""DT.ODA.ODAT.GI.ZS")) %>% 
  filter(Country.Code %in% c(countries$Country.Code)) %>% 
  select(-Indicator.Name) %>% 
  filter(year<2021) %>% 
  pivot_wider(names_from = Indicator.Code,
              values_from = value) %>%
  group_by(year) %>%
  cor_test(NE.TRD.GNFS.ZS, DT.ODA.ODAT.GI.ZS,
           method = "pearson",
           use = "complete.obs") -> results_time

这将为我们提供关于两个变量之间相关性的输出,每年都有观察结果(我将数据过滤到 2021 年之前的年份,因为 ODA 数据只运行到 2020 年)。而且由于相关数据以整齐的方式存储,我们可以轻松地运行额外的代码来可视化我们的结果:

results_time %>% 
  mutate(`Significant?` = if_else(p<0.05"Yes""No")) %>% 
  ggplot(aes(x = year, y = cor)) +
  geom_hline(yintercept = 0
             linetype = "dashed") +
  geom_line() + 
  ylab("cor (r)") +
  geom_point(aes(color = `Significant?`)) +
  theme_minimal()

在这里我们可以看到,从历史上看,这两个变量之间根本没有太大的关系(除了偶尔出现了弱负相关的几年),但在过去几年中,相关性趋于显着和正:

alt

那么这是什么意思?关于贸易与援助之间关系的任何潜在问题——我们必须做更多的研究。相关性毕竟并不意味着因果关系,但这是一个很好的假设生成器——受援国是否越来越以贸易为导向?还是援助交付模式正在转向有利于贸易更多的国家?这些都是我们探索的新途径。这些类型的快速相关分析对于趋势分析或信号发现之类的事情来说可能是一个非常有用的工具——并且采用一种对 tidyverse 友好的方式来做它真的可以避免潜在的麻烦。

就我们快速轻松地进行一些有用的探索性分析的能力而言,我们可以看到 rstatix 是一个有用的配套包。然而,rstatix 中的 cor_test() 有一些缺点

  1. 例如,与“相关”包中的许多其他方法相比,您仅限于 Pearson (r)、Spearman (ρ) 和 Kendall (τ) 相关方法。然而,这些对于临时用户来说是最常见的,对于基本分析来说应该绰绰有余。
  2. 置信区间仅在 Pearson r 的输出中报告。这意味着如果 Spearman 的 rho 或 Kendall 的 tau 需要置信区间,则需要额外的代码。
  3. 例如,不报告样本大小和自由度,如果用户的目标是根据不同的分组段开发多个输出报告,这可能会很烦人。

但这些通常不适用于临时用户。此外,除了 cor_test() 之外,rstatix 还具有用于各种其他统计测试和过程的大量其他函数,下次您需要进行一些探索性统计分析时,这些绝对值得研究——因此请向开发人员大声疾呼一。

Reference

[1]

Source: https://towardsdatascience.com/exploratory-correlational-analysis-in-r-c99449b2e3f8

本文由 mdnice 多平台发布

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

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

相关文章

手机上调试pc端电脑上的项目

文章目录 前言1、window r 打开电脑命令窗口并输入cmd点击确定或者敲击回车键2、在cmd命令行面板上输入ipconfig获取本电脑的ip地址3、在手机浏览器中输入http://192.168.XX.XX:8080 即可 前言 手机上调试电脑运行的项目的前提条件是手机和电脑公用一个局域网&#xff08;也就…

APP 性能优化你掌握的怎么样?简单聊聊?

产品性能是每个技术团队比较关心的一件事&#xff0c;不管是产品上线前到上线后&#xff0c;都需要对产品进行性能监控和优化&#xff0c;如果产品在运行过程中出现了问题&#xff0c;是很影响用户的体验感受。 所以在一些大厂技术团队中&#xff0c;是非常看重个人性能优化的…

面向开发人员的 ChatGPT 提示词教程中文版

面向开发人员的 ChatGPT 提示词教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

为你推荐一款最好用的免费截图工具-Snipaste,截图高清、智能模糊还支持滚动长截图!!!

写文章经常需要插入截图&#xff0c; 但是常常很难有顺手的截图工具&#xff0c; 常见的难题是&#xff1a; 很难滚动长屏截图&#xff0c; 截图中马赛克处理很麻烦&#xff0c; 输出的截图图像质量差。 经过大量的工具使用对比&#xff0c; 这里推荐一个最好用的截图工具。 Sn…

Fotran学习:chapter8函数

1.子程序(subrountine)的使用 把常常用于使用、具有特定功能的程序代码独立出来&#xff0c;封装程子程序&#xff0c;以后调用使用call即可。 program chapter4_exercise !主程序implicit nonecall sub1()call sub2()pauseend program chapter4_exercisesubroutine sub1() !子…

产品经理制,互联网公司发扬光大的

产品经理制&#xff0c;在互联网公司发扬光大 张小龙被称作&#xff1a;七星产品经理 其实&#xff0c;中小企业老板基本是首席产品经理 趣讲大白话&#xff1a;像带孩子一样做产品 【趣讲信息科技160期】 **************************** 产品经理制核心问题解决的是&#xff1a…

STM32F4_随机数发生器(RNG)

目录 1. 随机数发生器RNG是什么 2. RNG随机发生器框图 3. 运行RNG 4. RNG寄存器 4.1 RNG控制寄存器&#xff1a;RNG_CR 4.2 RNG状态寄存器&#xff1a;RNG_SR 4.3 RNG数据寄存器&#xff1a;RNG_DR 5. 库函数配置随机数发生器 6. 实验程序 6.1 main.c 6.2 RNG.c 6.…

植物奶站上风口

不知不觉间&#xff0c;植物奶无处不在。逛街&#xff0c;便利店里有燕麦奶、椰奶、豆奶&#xff0c;星巴克、肯德基有燕麦拿铁&#xff1b;打开小红书&#xff0c;有人做各种植物奶产品的测评结果&#xff0c;有人分享优质植物奶的自制方法…… 这场“风”并非空穴而来。 一…

软件工程开发文档写作教程(07)—招投标文件写作规范

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 招投标文件概述 国内的软件项目招投标文件的写作规则并不存在行业标准。许多大型企业的信息…

面向开发人员的 ChatGPT 提示词教程 - ChatGPT Prompt Engineering for Developers

面向开发人员的 ChatGPT 提示词教程 - ChatGPT Prompt Engineering for Developers 1. 指南(原文: Guidelines)1-1. 提示的指南(原文: Guidelines for Prompting)1-2. 配置1-3. 提示语原则(原文: Prompting Principles)原则 1: 写出清晰而具体的指示(原文: Write clear and spe…

【近期解决的小问题】

文章目录 写在前面1. Win10中USB转串口设备安装完成驱动显示感叹号&#xff08;USB不能用&#xff09;背景尝试过的方法其他解决方法 2. 安装Win7虚拟机“缺少所需的CD/DVD驱动器设备驱动程序”背景尝试过的方法 3. WMware安装Kali Linux后黑屏左上角光标闪烁背景尝试过的方法 …

Java设计模式 12-模版模式

模板模式 一、豆浆制作问题 编写制作豆浆的程序&#xff0c;说明如下: 1)制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 2)通过添加不同的配料&#xff0c;可以制作出不同口味的豆浆 3)选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一…

关于使用SSM框架搭建的项目的运行方法

目录 运行环境配置 1、安装 IDEA 开发工具 中文版设置 JDK直接下载 2、安装 MYSQL 数据库 2.1 下载安装 2.2 配置环境变量 2.4 安装 MySQL 2.4 进入 MySQL 2.5 常见问题 3、安装Tomcat 4、IDEA配置MYSQL 4.1、常见错误 5、IDEA配置TOMCAT 5.1、常见报错 一 运行环…

2023年最新无脑安装 Go lang 环境配置并编写、运行、打包第一个 Golang 程序详细步骤,附带图文教程

文章目录 下载安装Golang配置 Golang 环境GO111MODULEGOPROXY开启 Go mod 模式及设置包下载国内镜像配置 Vscode Golang 环境 Bug 集锦The "gopls" command is not available.Run "go get -v golang.org/x/tools/gopls" to install. GO语言也称为Golang&am…

烽火HG680-J/V-Hi3798MV100-当贝纯净桌面-卡刷固件包

烽火HG680-J&#xff0f;V-Hi3798MV100-当贝纯净桌面-卡刷固件包 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&…

【ArcGIS教程】批量裁剪

ArcGIS教程&#xff1a;批量裁剪 1 裁剪1.1 准备&#xff1a;创建shp文件/选定区域、自由选区1.1 单一裁剪1.2 批量裁剪&#xff08;Batch&#xff09; 2 批量裁剪参考 1 裁剪 1.1 准备&#xff1a;创建shp文件/选定区域、自由选区 步骤1&#xff1a; 创建shp文件 打开ArcCat…

2023年了,来体验下前端的测试方案

在当前的前端当中&#xff0c;有好多同学自己写的代码bugger横飞&#xff0c;怎么解决这个问题呢&#x1f914;&#x1f914;&#x1f914;&#xff1f;个人觉得主要有以下两个趋势 给前端的代码加上类型检查&#xff08;ts&#xff09;给前端代码编写单元测试和e2e测试 当然&a…

【C++】继承和多态、共有私有和保护、重写

区分继承与多态、辨别public、protected、private 继承与多态的概念继承与多态的区别与联系区别&#xff1a;联系&#xff1a;示例结果&#xff1a; 继承和访问的权限说明示例&#xff1a;结果 结论 继承与多态的概念 面向对象三大原则&#xff1a;封装、继承、多态。继承是一种…

【C++进阶1--继承】面向对象三大特性之一(附菱形继承讲解

继承是面向对象中很重要的特性&#xff0c;今天就来讲讲C中的继承。 文中不足错漏之处望请斧正&#xff01; 什么是继承&#xff1f; 是一种类的复用&#xff0c;可以让B类继承&#xff0c;从而使B类获得A类的所有成员。 A类叫做父类或基类&#xff0c;B类叫做子类或派生类。…

C++ 构造函数-2

构造函数-2 构造函数体赋值 在对象创建的时候&#xff0c;编译器会调用构造函数&#xff0c;给对象当中的成员赋一个合适的初始值。 class Date { public: Date(int year, int month, int day) { _year year; _month month; _day day; } private: int _year; int _month; i…