首页 > 其他分享 >R 中的探索性相关分析

R 中的探索性相关分析

时间:2023-05-10 22:23:14浏览次数:58  
标签:分析 Indicator Code 变量 探索性 filter cor 相关 我们

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

本文

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

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

cor_results

输出看起来像:

这是为您预先选择的两个变量运行简单关联的基本 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) 以及低置信度和高置信度估计来填充整齐的小标题。对于上面运行的示例,它看起来像:

因为输出是一个 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()

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

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

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

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

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

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

本文由mdnice多平台发布

标签:分析,Indicator,Code,变量,探索性,filter,cor,相关,我们
From: https://www.cnblogs.com/swindler/p/17389508.html

相关文章

  • 算法设计与分析
    算法设计与分析简答以比较为基础的检索算法的时间下界是O(logn);Ω还是O?以比较为基础的分类算法的时间下界是Ω(nlogn);简要说明理由:理由算法的五大特性:确定性,能行性,输入,输出,有穷性。而计算过程只满足前4条特性,不满足有穷性最优性原理:无论过程的初始状态或者初始决......
  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI
    全文链接:http://tecdat.cn/?p=31108最近我们被客户要求撰写关于VAR模型的研究报告,包括一些图形和统计输出。作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意......
  • 资料分析第一道简单计算的小坑
    资料分析中第一道计算时必拿下的,但是往往计算时会加一些小坑,必须提高注意,哪怕多花10s也要稳住。如题:往往算到第二位时,会秒选A,但其实再往后算一位会发现答案更接近B往往感觉不好,容易选到C,建议多算一下或者多刷题培养感觉。......
  • 第八周 资源限制及亲和度相关
    第八周资源限制及亲和度相关1.KubernetesContainer、Pod、Namespace内存及CPU限制1)如果运行的容器没有定义资源(memory、CPU等限制,但是在namespace定义了LimitRange限制,那么该容器会继承LimitRange中的默认限制。2)如果namespace没有定义LimitRange限制,那么该容器可以占用宿主......
  • 关于真正量化和假冒量化的原理分析
    关于真正量化和假冒量化的原理分析背景: 目前大量的GPT-base模型的量化仅仅对权重(weights)进行量化,而没有对特征图(featuremaps)进行量化。这样的量化模型实际上并不是真正的量化模型。在深度学习中,模型参数(weights)和输入数据(featuremaps)都可以进行量化,从而在计算和存......
  • 班级管理系统需求分析
    一、用户愿景产品简介:本系统名为班级管理系统,面向班级内都所有角色,主要用于辅助班级的数据维护,信息管理,以及班级成员管理等功能。目标用户:本系统目标用户主要以一个班级为整体,细分为班主任、任课教师、班委、学生成员。产品特点:针对于班级管理人员对于班级大量数据的维护......
  • app逆向之安卓native层安全逆向分析(七):unidbg自尝试某潮流app+dvmObject[]处理
    前言跟着龙哥搞了几次unidbg了,这次也自己尝试用来分析下某潮流app了。分析1.抓包先抓个包 我们要搞的就是这个sign-v1了。  2.调试找参数jadx一顿分析,一搜: 搜出来还不少,往下翻,找找一些特征,很快找到这里 点进去    ok,用objectionhook之后,发现不是......
  • ArcGIS软件是干什么的?地理信息分析软件ArcGIS下载安装功能使用
    ArcGIS是一个强大的地理信息系统软件,它可以用于地图制作、数据管理和空间分析等多个领域。而在这些领域中,ArcGIS具有许多独特的功能,可以帮助用户快速准确地进行地理信息数据处理和分析。在本文中,我们将主要介绍ArcGIS的三个独特功能:三维建模、空间插值和数据驱动页面,并通过实际案例......
  • GoAccess 分析nginx日志
    GoAccess分析nginx日志安装wgethttps://tar.goaccess.io/goaccess-1.7.2.tar.gztar-xzvfgoaccess-1.7.2.tar.gzcdgoaccess-1.7.2/./configure--enable-utf8--enable-geoip=mmdbmakemakeinstall1)InstallmissingpackagesPkginstallautoconflibtoolsautoma......
  • 学习video相关事件及vue中监听切出页面方法
    1.vue中监听切出页面方法使用到的事件为:visibilitychangevisibilitychange是浏览器新添加的一个事件,当浏览器当前页面被最小化或切换浏览器其他标签页后者从其他页面或应用返回到当前标签页都会触发这个事件。document.visibilityState共有四个值:hidden:文档处于背景标签......