Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我承认tidyverse已经脱离了R语言的范畴

我承认tidyverse已经脱离了R语言的范畴

作者头像
邓飞
发布于 2022-05-19 01:49:54
发布于 2022-05-19 01:49:54
68700
代码可运行
举报
运行总次数:0
代码可运行

最近知乎热议:R和Python谁更优雅的问题,或者谁更适合数据分析的问题,各种讨论,非常值得一看:

https://www.zhihu.com/question/527922200

别点了,微信不支持超链接!!!

就我个人而言,Python更适合写流程,平时建模都是用R语言处理好数据,交予第三方软件,最后用Python串起来。不得不说,R语言的tidyverse是真的好,非常高效。从某种角度,只学R语言没有接触过tidyverse的用户,看到R的代码,觉得它已经脱离了R语言的范畴!!!

最近在学习tidyverse,批量方差分析之前都是用for循环,然后用formula处理模型,再把结果保存为list的形式,现在学习了tidyverse的操作,可以用pivot_longer将所有性状进行长数据转化,然后用group_by和nest变为列表,最后用map进行批量建模,用tidy进行结果的整理,更加行云流水。下面我们通过代码来看一下。

看一下我最终的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fm1 = fm %>% pivot_longer(-c(1:5),names_to = "trait",values_to = "y")
head(fm1)
fm1 %>% group_by(trait) %>% nest %>%
  mutate(model = map(data,~aov(y ~ Spacing + Rep, data=.))) %>% 
  mutate(result = map(model,~tidy(.))) %>% 
  unnest(result)

上面的代码,如果没有tidyverse的基础,是看不懂啥意思的,毕竟map,group_by,mutate,nest,unnest,tidy都是什么鬼是从来没见过的。

结果文件:

看一下需求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> library(learnasreml)
> data(fm)
> str(fm)
'data.frame':  827 obs. of  13 variables:
 $ TreeID : Factor w/ 827 levels "80001","80002",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Spacing: Factor w/ 2 levels "2","3": 2 2 2 2 2 2 2 2 2 2 ...
 $ Rep    : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Fam    : Factor w/ 55 levels "70001","70002",..: 44 44 44 15 15 2 2 10 10 10 ...
 $ Plot   : Factor w/ 4 levels "1","2","3","4": 1 2 4 1 4 2 4 1 2 3 ...
 $ dj     : num  0.334 0.348 0.354 0.335 0.322 0.359 0.368 0.358 0.323 0.298 ...
 $ dm     : num  0.405 0.393 0.429 0.408 0.372 0.45 0.509 0.381 0.393 0.361 ...
 $ wd     : num  0.358 0.365 0.379 0.363 0.332 0.392 0.388 0.369 0.347 0.324 ...
 $ h1     : int  29 24 19 46 33 30 37 32 34 28 ...
 $ h2     : int  130 107 82 168 135 132 124 126 153 127 ...
 $ h3     : int  239 242 180 301 271 258 238 290 251 243 ...
 $ h4     : int  420 410 300 510 470 390 380 460 430 410 ...
 $ h5     : int  630 600 500 700 670 570 530 660 600 630 ...

数据共有827行数据,相对Fam进行方差分析。

比如对`dj`进行方差分析:可以看到Fam之间达到极显著水平。

问题来了,如果相对`dj`,`dm`……`h5`这些性状都进行方差分析,应该如何处理呢?当然可以一个性状做一个模型,我们更想批量处理一些。

首选当然是For循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# for
nn = names(fm)[-c(1:5)]

re = NULL
for(i in seq_along(nn)){
  # i = 1
  mod = aov(formula(paste0(nn[i],"~Fam + Rep")),data=fm)
  re[[i]] = summary(mod)
}
names(re) = nn
re

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> re
$dj
# A tibble: 3 x 6
  term         df  sumsq   meansq statistic   p.value
  <chr>     <dbl>  <dbl>    <dbl>     <dbl>     <dbl>
1 Fam          54 0.0912 0.00169       3.52  9.85e-15
2 Rep           4 0.0319 0.00797      16.6   4.60e-13
3 Residuals   767 0.368  0.000480     NA    NA       

$dm
# A tibble: 3 x 6
  term         df  sumsq  meansq statistic     p.value
  <chr>     <dbl>  <dbl>   <dbl>     <dbl>       <dbl>
1 Fam          54 0.214  0.00396      2.12  0.00000996
2 Rep           4 0.0279 0.00696      3.73  0.00515   
3 Residuals   766 1.43   0.00187     NA    NA         

$wd
# A tibble: 3 x 6
  term         df  sumsq   meansq statistic   p.value
  <chr>     <dbl>  <dbl>    <dbl>     <dbl>     <dbl>
1 Fam          54 0.123  0.00227       3.86  3.83e-17
2 Rep           4 0.0469 0.0117       19.9   1.29e-15
3 Residuals   768 0.452  0.000588     NA    NA       

$h1
# A tibble: 3 x 6
  term         df  sumsq meansq statistic   p.value
  <chr>     <dbl>  <dbl>  <dbl>     <dbl>     <dbl>
1 Fam          54 13444.  249.       4.71  4.35e-23
2 Rep           4  4623. 1156.      21.9   4.06e-17
3 Residuals   768 40572.   52.8     NA    NA       

$h2
# A tibble: 3 x 6
  term         df   sumsq meansq statistic   p.value
  <chr>     <dbl>   <dbl>  <dbl>     <dbl>     <dbl>
1 Fam          54  82699.  1531.      2.05  2.31e- 5
2 Rep           4  65677. 16419.     22.0   3.11e-17
3 Residuals   768 572403.   745.     NA    NA       

$h3
# A tibble: 3 x 6
  term         df    sumsq meansq statistic   p.value
  <chr>     <dbl>    <dbl>  <dbl>     <dbl>     <dbl>
1 Fam          54  183935.  3406.      1.88  2.12e- 4
2 Rep           4  108005. 27001.     14.9   1.01e-11
3 Residuals   768 1393118.  1814.     NA    NA       

$h4
# A tibble: 3 x 6
  term         df    sumsq  meansq statistic   p.value
  <chr>     <dbl>    <dbl>   <dbl>     <dbl>     <dbl>
1 Fam          54  382898.   7091.      1.17  1.97e- 1
2 Rep           4  454090. 113523.     18.7   1.12e-14
3 Residuals   765 4644446.   6071.     NA    NA       

$h5
# A tibble: 3 x 6
  term         df    sumsq  meansq statistic   p.value
  <chr>     <dbl>    <dbl>   <dbl>     <dbl>     <dbl>
1 Fam          54  676396.  12526.      1.58  5.79e- 3
2 Rep           4  682404. 170601.     21.6   7.01e-17
3 Residuals   765 6049952.   7908.     NA    NA

然后我们看tidyverse的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
head(fm)
fm1 = fm %>% pivot_longer(-c(1:5),names_to = "trait",values_to = "y")
head(fm1)
fm1 %>% group_by(trait) %>% nest %>%
  mutate(model = map(data,~aov(y ~ Spacing + Rep, data=.))) %>% 
  mutate(result = map(model,~tidy(.))) %>% 
  unnest(result)

第一步:将数据转化为长数据

第二步:将数据group_by,然后nest形成列表

第三步:使用map进行批量方差分析

第四步:使用map进行结果整理

结果:

一个字:绝

二个字:真绝

……

昨天的文章中(统计学习心法:万物皆可回归,有时可以分类)介绍,学习心法很重要,学习框架很重要,而学习R语言高效的方法就是在tidyverse下学习,问题来了,tidyverse怎么学?当然看最新的电子书,纸质版的都out了:R语言学习看最新版的电子书不香嘛?


大家好,我是邓飞,一个持续分享的农业数据分析师

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 育种数据分析之放飞自我 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R语言亚组分析及森林图绘制
亚组分析的森林图很常见,在各种高分SCI文章中经常见到,其中我最喜欢NEJM的格式,美观,信息量也多。
医学和生信笔记
2023/08/30
1.9K0
R语言亚组分析及森林图绘制
R语言重复测量数据的多重比较
使用的数据来自孙振球,徐勇勇《医学统计学》第4版。课本的电子版已上传到QQ群,加群即可免费获取!
医学和生信笔记
2022/11/15
1.1K0
R语言重复测量数据的多重比较
R包基础实操—tidyverse包
核心软件包是ggplot2、dplyr、tidyr、readr、purrr、tibble、stringr和forcats,它们提供了建模、转换和可视化数据的功能。
生信技能树jimmy
2021/10/11
3.6K0
R包基础实操—tidyverse包
混合线性模型如何检测固定因子和随机因子的显著性以及计算R2
很多朋友写信问我, 像要知道固定因子的显著性和随机因子的显著性如何计算,他们使用的是lme4这个R包, 但是这个包使用anova时没有P值,还要手动计算, 随机因子也需要自己计算loglikehood值, 然后使用LRT的卡方检验进行显著性检验, 其实lme4包有扩展的包可以非常友好的做这件事情.
邓飞
2019/07/07
4.2K0
混合线性模型如何检测固定因子和随机因子的显著性以及计算R2
R语言倾向性评分:回归和分层
倾向性评分有4种应用,前面介绍了倾向性评分匹配及matchIt和cobalt包的使用:R语言倾向性评分:匹配
医学和生信笔记
2023/02/14
1.5K0
R语言倾向性评分:回归和分层
dplyr_下篇
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.
火星娃统计
2020/09/15
7440
R语言方差分析总结
这篇文章涵盖了孙振球,徐勇勇《医学统计学》第4版中关于方差分析的章节,包括:多样本均数比较的方差分析/多因素实验资料的方差分析/重复测量设计资料的方差分析/协方差分析。
医学和生信笔记
2022/11/15
2.8K0
R语言方差分析总结
【钱塘号】用R语言爬取美国总统的twitte进行数据分析
Twitter是一个流行的社交网络,这里有大量的数据等着我们分析。Twitter R包是对twitter数据进行文本挖掘的好工具。 本文是关于如何使用Twitter R包获取twitter数据并将其导入R,然后对它进行一些有趣的数据分析。 第一步是注册一个你的应用程序。 为了能够访问Twitter数据编程,我们需要创建一个与Twitter的API交互的应用程序。 注册后你将收到一个密钥和密码: 获取密钥和密码后便可以在R里面授权我们的应用程序以代表我们访问Twitter:
钱塘数据
2018/03/05
2.5K0
【钱塘号】用R语言爬取美国总统的twitte进行数据分析
R海拾遗-双因素重复测量方差分析
重复测量方差分析 sunqi 2020/7/26 概述 双因素的重复测量资料方差分析 代码 数据获得 library(tidyverse) library(ggpubr) library(rstatix) rm(list=ls()) set.seed(123) data("selfesteem2", package = "datarium") # 抽样 selfesteem2 %>% sample_n_by(treatment, size = 1) ## # A tibble: 2 x 5 ## id
火星娃统计
2020/09/15
1.9K0
R海拾遗-双因素重复测量方差分析
R语言日常笔记(2)distinc函数
从结果发现d1也就是用match的速度非常快! 而在tidyverse方法中, d3的summarize显然更好。
用户1359560
2019/07/16
4.7K0
R语言多项逻辑回归-因变量是无序多分类
因变量是无序多分类资料(>2)时,可使用多分类逻辑回归(multinomial logistic regression)。
医学和生信笔记
2022/11/15
1K0
R语言多项逻辑回归-因变量是无序多分类
R海拾遗-三因素重复
三因素重复测量资料方差分析,在这项研究中,研究人员想要评估饮食和运动对10个久坐的人减肥的影响。参与者参与了四项试验:(1)不节食,不锻炼;(2)节食;(3)锻炼;(4)节食和锻炼相结合。
火星娃统计
2020/09/15
1K0
R海拾遗-三因素重复
混合线性模型中固定因子和随机因子的检验
1, wald和anova对于asreml是一样的, 因为asreml中有anova这个类, 可以调用aonva.asreml 进行wald检验
邓飞
2019/07/07
1.9K0
混合线性模型中固定因子和随机因子的检验
R语言进阶笔记5 | purrr替代循环
其中,手动for循环我最常用,apply系列半吊子,purrr函数一窍不通,所以要学习一下。
邓飞
2021/01/12
3.4K0
R海拾遗-tidyverse
tidyverse函数高效,代码简洁,受过专业训练的一般都用这个,除非记不住,能记一点是一点吧。 love&peace
火星娃统计
2020/09/15
1.2K0
p for trend/ p for interaction/ per 1 sd 的R语言实现
本篇主要介绍P for trend、p for interaction、per 1 sd的R语言实现,关于每一项的具体含义,可参考文中给出的链接,或者自己搜索学习。
医学和生信笔记
2023/02/14
1.4K0
K均值算法R语言代码
今天给大家简单的介绍经典的聚类学习算法,K均值算法。 K均值算法的R语言代码 # 加载R包 library(tidyverse) # data manipulation library(cluster) # clustering algorithms library(factoextra) # clustering algorithms & visualization # 数据准备 df <- USArrests # 数据缺失值处理 df <- na.omit(df) # 删除含有缺失值的样本
生信交流平台
2020/08/04
1.4K0
韦恩图进阶!ggupset版upset plot
Try to learn everything about something!
医学和生信笔记
2022/11/14
1.7K0
数据分析:假设检验方法汇总及R代码实现
显著性检验方法,通常也被称为假设检验方法,是统计学中用于评估样本统计量是否显著不同于某个假设值的一种重要工具。以下是假设检验方法使用时需要考虑的三个条件的书面化表述:
生信学习者
2024/06/20
8330
数据分析:假设检验方法汇总及R代码实现
R语言方差分析的注意事项
R语言做方差分析很简单,就是一个函数aov(),包括但不限于单因素方差分析、多因素方差分析、协方差分析、重复测量方差分析等,都是这个函数。
医学和生信笔记
2022/11/15
1.4K0
R语言方差分析的注意事项
推荐阅读
相关推荐
R语言亚组分析及森林图绘制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验