首页 > 编程知识 正文

用R语言画相关性矩阵,带P值和*号

时间:2023-05-06 11:10:50 阅读:267784 作者:4652

感谢Rstata团队提供的帮助

开头先丢上老师的头像和他的公众号二维码,嘿嘿嘿嘿[doge]


不会调整排版,就先这样吧。
这阵子老师让我做数据分析,在做线性回归之前,要做所有变量的相关性,我看了网上的一些教程之后感觉不太满意,于是自己手动琢磨了一下,琢磨到一半心态爆炸,就去问老师。老师给了我代码,在一来一去若干次沟通之后,我大体理解了这段代码的意思,下面上代码,后面的注释是我自己加的,当然还有一些小地方看不懂,如果我注释有错误,欢迎大神们指出我的错误

Hmisc::rcorr(as.matrix(f), type = "pearson") -> corrlist#注意,要先装Hmisc包,不然的话会报错,下同,因为太懒,所以就不写自动化的代码了,如果很多人找我写,那勉强也行,把需要计算相关系数的矩阵或者数据框放在as.martix()里面# 相关系数矩阵corrlist$r %>% #提取r矩阵 as_tibble() %>% #设置为tibble格式 mutate(v = colnames(.)) %>% #将r矩阵的列名向量作为一个新的向量放到列里面 select(v, everything()) %>% #选中所有表格 pivot_longer(2:37) -> corrdf #将数据从宽数据转化为长数据# p 值矩阵corrlist$P %>% as_tibble() %>% mutate(v = colnames(.)) %>% select(v, everything()) %>% pivot_longer(2:37) %>% #2:37说明我有37个变量,你有多少个变量后面的37就换成多少,下同 mutate(label = case_when( #设置label,并加入判断,当P值符合特定条件就显示"n"外加特定数量的*号 is.na(value) ~ " ", #NA值赋值为空格 value <= 0.001 ~ "n***", #P<0.001就显示回车加三个星号 between(value, 0.001, 0.01) ~ "n**", #P为0.001-0.01 显示回车加两个*号 between(value, 0.01, 0.05) ~ "n*", #P为0.01-0.05 显示回车加一个星号 T ~ "" )) -> pdfcorrdf %>% left_join(pdf, by = c("v", "name")) %>% #将r值和p矩阵分别按照v和name字段进行合并 rename(corr = value.x, p = value.y) %>% #将合并成的数据框中的value.x改名为corr,value.y 改名为p mutate(corr = round(corr, 2)) -> corrdf #将小数点改成两位windowsFonts("Arial" = windowsFont("Arial")) #设置字体防止下面一段代码报错corrdf %>% mutate(v = forcats::fct_reorder(v, corr), #对v和name重新排序 name = forcats::fct_reorder(name, corr)) %>% ggplot(aes(x = v, y = name)) + geom_tile(aes(fill = corr)) + #表头填充映射根据corr geom_text(aes(label = paste(corr, label, sep = "")), family = "Arial") + ggthemes::scale_fill_gradient2_tableau("Red-Blue Diverging")

出来的效果大约是这样

老师还给了我一个交互式的相关性矩阵代码,要是大家有需求可以留言,我可以再写一篇放到博客里,嘿嘿嘿嘿嘿。

再次感谢Rstata团队给予的技术支持,在这里放上公众号二维码,欢迎大家扫码关注。

168飞艇6种不亏钱的方法rename(corr = value.x, p = value.y) %>% #将合并成的数据框中的value.x改名为corr,value.y 改名为p mutate(corr = round(corr, 2)) -> corrdf #将小数点改成两位windowsFonts("Arial" = windowsFont("Arial")) #设置字体防止下面一段代码报错corrdf %>% mutate(v = forcats::fct_reorder(v, corr), #对v和name重新排序 name = forcats::fct_reorder(name, corr)) %>% ggplot(aes(x = v, y = name)) + geom_tile(aes(fill = corr)) + #表头填充映射根据corr geom_text(aes(label = paste(corr, label, sep = "")), family = "Arial") + ggthemes::scale_fill_gradient2_tableau("Red-Blue Diverging")

出来的效果大约是这样

老师还给了我一个交互式的相关性矩阵代码,要是大家有需求可以留言,我可以再写一篇放到博客里,嘿嘿嘿嘿嘿。

再次感谢Rstata团队给予的技术支持,在这里放上公众号二维码,欢迎大家扫码关注。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。