R 语言实战(第二版)

part 2 基本方法


-------------第6章 基本图形------------------

#1.条形图
#一般是类别型(离散)变量
library(vcd)
help(Arthritis) #类风湿性关节炎新疗法研究结果
head(Arthritis)
count <- table(Arthritis$Improved)
barplot(count,main="simple bar plot",xlab = "improvement",ylab = "frequency")
barplot(count,horiz = T)
plot(Arthritis$Improved) #类别型因子可直接plot画 #堆积bar
counts <- table(Arthritis$Improved,Arthritis$Treatment) #列联表
counts
barplot(counts,col=c("red","yellow","green"),legend=rownames(counts))
#分组bar
barplot(counts,legend=rownames(counts),beside = T)
#棘状图(对堆积图重缩放,总高度为1,按比例显示)
spine(counts) #微调参数:
par(mar=c(5,8,4,2)) #调边界
par(las=2) #旋转条形标签
barplot(count,
cex.names=0.8, #缩小字体
names.arg=c("A","b","c") #修改标签文本
) #2.饼图
x <- c(12,12,14,18,4)
y <- c("a","b","c","d","e")
pie(x,labels=y,col=rainbow(length(y)),main="pie") #即rainbow(5) #3D饼图
library(plotrix)
pie3D(x,labels=y,col=rainbow(length(y)),main="3D pie",explode = 0.1)
#扇形饼图
fan.plot(x,labels=y) #3.直方图:展示连续型变量
x <- rnorm(100)
hist(x)
hist(mtcars$mpg)
hist(mtcars$mpg,
breaks = 12, #指定组数
freq = F, #根据概率密度显示,而非频数
col="blue",
xlab = "x",
main = "histogram"
)
rug(jitter(mtcars$mpg)) #添加轴须图,jitter向每个数据点添加一个小的随机值,避免点重叠!
lines(density(mtcars$mpg),col="red",lwd=2) #添加概率密度曲线
box() #添加外框 #4.核密度图:观察连续型变量分布
#用于估计随机变量概率密度函数的一种非参数方法
plot(density(x))
plot(density(mtcars$mpg),main = "density test")
polygon(density(mtcars$mpg),
col="red", #填充颜色
border="blue") #边界颜色
rug(mtcars$mpg) #多组核密度图比较
library(sm)
attach(mtcars)
sm.density.compare(mpg,cyl,xlab="gallon")
title(main="test")
legend(locator(1),levels(factor(cyl,levels=c(4,6,8))),fill = c(2:4))
#locator(1)表用鼠标点击交互式放置图例
detach(mtcars) #5.箱线图
#连续型变量5数总括:最小值、下四分位数、中位数、上四分位数、最大值
#离群点:±1.5*IQR外的值,IQR即四分位距(上四分位数-下四分位数)
#正偏:上侧须比下侧须要长,反之负偏
boxplot.stats(mtcars$mpg) #输出构建图形的统计量
boxplot(mpg~cyl,mtcars, #两者顺序不能反
notch=T, #含凹槽,若两个箱之间互不重叠,表明其中位数有显著差异。
varwidth=T, #箱线宽度与其样本大小的平方根成正比
col="red",
main="Car mileage data",
xlab="number of cylinders",
ylab="miles per gallon",
horizontal=T #反转坐标
) #两个交叉因子的箱线图
mtcars$a <- factor(mtcars$cyl,levels = c(4,6,8)) #不同气缸
mtcars$b <- factor(mtcars$am,levels = c(0,1)) #不同变速箱
boxplot(mpg~a*b,
mtcars,
varwidth=T,
col=c("gold","darkgreen")
) #6.小提琴图
#小提琴图是箱线图和核密度图的结合
library(vioplot)
attach(mtcars)
vioplot(mpg[cyl==4],mpg[cyl==6],mpg[cyl==8], #将不同组分离到不同变量
names = c("4cyl","6cyl","8cyl"),
col = "gold"
)
detach(mtcars)
#白点中位数,黑盒上四分位数到下四分位数,细黑线为须,外部形状即为核密度估计(镜像叠加) #7.点图
dotchart(mtcars$mpg,labels = row.names(mtcars),cex = 0.7,main = "dotplot",xlab = "gallon")
#一般点图在经过排序、分组被不同符号和颜色区分开后最有用
x <- mtcars[order(mtcars$mpg),]
x$cyl <- factor(x$cyl)
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,
labels = row.names(x),
groups = x$cyl, #数据点分组
gcolor = "black", #数字颜色
color = x$color, #点和标签颜色
cex=0.7,
pch=19,
man="dot\nplot test",
xlab = "miles per gallon"
)

-----------------第7章 基本统计分析-------------------------------

#参数检验:t检验
#非参检验:U检验,KW检验 #1.描述性统计分析
#方法一:
summary(mtcars[,c("mpg","hp","wt")]) #方法二:
#lapply/sapply结合FUN:mean/sd/var/min/max/median/length/range/quantile
mystats <- function(x,na.omit=F){
if(na.omit)
x <- x[!is.na(x)]
m <- mean(x)
n <- length(x)
s <- sd(x)
skew <- sum((x-m)^3/s^3)/n #偏度
kurt <- sum((x-m)^4/s^4)/n-3 #峰度
return(c(n=n,mean=m,stdev=s,skew=skew,kurtosis=kurt))
}
sapply(mtcars[,c("mpg","hp","wt")], mystats) #方法三:
fivenum(mtcars$mpg) #不能同时指定多列 #其他方法:
library(Hmisc)
describe(mtcars[,c("mpg","hp","wt")]) #返回变量名、变量数目、缺失值、唯一值数目、平均值、分位数、最小和最大的五个数 library(pastecs)
stat.desc(mtcars[,c("mpg","hp","wt")]) #返回更多信息 library(psych)
describe(mtcars[,c("mpg","hp","wt")])
#不同包的同名函数,最后载入的包为先,如这里Hmisc包的describe被屏蔽(masked)
#最好用Hmisc::describe避免被屏蔽 #分组计算描述统计量:
#方法1:
aggregate(mtcars[,c("mpg","hp","wt")],
by=list(am=mtcars$am), #若不指定列名,将默认为Group.1
mean)
##只能用mean、sd等单返回值函数,一次无法返回多个统计量 #方法2:
by(mtcars[,c("mpg","hp","wt")],
mtcars$am,
function(x) sapply(x,mystats))
#一次返回多个统计量 #其他方法:
library(doBy)
summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats) psych::describeBy(mtcars[,c("mpg","hp","wt")],list(am=mtcars$am)) #2.频数表和列联表
library(vcd)
head(Arthritis) #一维列联表
table(Arthritis$Improved)
prop.table(table(Arthritis$Improved)) #将table比例化
prop.table(table(Arthritis$Improved))*100 #二维列联表
table(Arthritis$Treatment,Arthritis$Improved) #默认忽略NA
mytable <- xtabs(~ Treatment+Improved,data = Arthritis);mytable
##边际频数
margin.table(mytable,1) #行
margin.table(mytable,2) #列
##比例
prop.table(mytable,1) #行
prop.table(mytable,2) #列
##添加边际之和
addmargins(mytable)
addmargins(prop.table(mytable))
addmargins(prop.table(mytable),1)
addmargins(prop.table(mytable),2) #多维列联表
mtable <- xtabs(~ Treatment+Sex+Improved,data = Arthritis);mtable
ftable(mtable) #易读的方式
margin.table(mtable,1)
margin.table(mtable,2)
margin.table(mtable,3)
margin.table(mtable,c(1,3))
ftable(addmargins(prop.table(mtable,c(1,2)),3))*100 #独立性检验:原假设都是独立
##1)卡方检验
chisq.test(mytable) #p<0.05不独立(存在关系)
chisq.test(margin.table(mtable,c(1,2))) #p>0.05独立 ##2).Fisher精确检验
fisher.test(mytable) #p<0.05不独立,但不能用于2x2列联表 ##3).Cochran-Mantel-Haenszel检验(CMH卡方检验)
mantelhaen.test(mtable) #用于三维列联表 #相关性度量
#以上两个变量不独立(存在关系),度量相关性
assocstats(mytable) #越大相关性越强 #3.相关
head(state.x77)
help("state.x77") ##相关的类型:
#person:两个定量变量
#spearman:分级定序变量
#kendall:非参
cor(x,use ="everything" ,method ="pearson" ) #默认
#use指定缺失值处理方式:all.obs(不允许NA,否则报错),everything(missing), complete.obs(行删除), pairwise.complete.obs(成对删除) cor(state.x77[,1:6])
cor(state.x77[,1:6],method = "spearman")
cor(state.x77[,c(1,2,3,6)],state.x77[,c(4,5)]) #两组变量
cov(state.x77[,1:6]) #协方差 #偏相关:控制一个或多个变量时,其他两个变量间的关系
library(ggm)
colnames(state.x77[,1:6])
pcor(c(1,5,2,3,6),cov(state.x77[,1:6])) #第一个参数为数值向量,前两个是待计算的变量下标,其他是条件变量下标 ##相关性的显著性检验
cor.test(x,y,alternative = "two.side",method = "pearson") #默认
#alternative参数:less(研究假设总体相关系数小于0时),greater(研究假设总体大于0时),two.side
cor.test(state.x77[,3],state.x77[,5])
mycor <- cor.test(state.x77[,3],state.x77[,5])
str(mycor)
mycor$ estimate
mycor$p.value
#缺点:一次只能检验一种相关关系
cor.test(state.x77[,1:6]) #error library(psych)
corr.test(state.x77[,1:6],use = "complete")
#一次检验多种变量之间的关系,返回两个cor和pvalue两个矩阵
corr.test(state.x77[,3],state.x77[,5],use = "complete")
#use参数:pairwise/complete, method参数:pearson(default)/spearman/kendall #检验在控制一个或多个变量时,其他两个变量间的独立性
psych::pcor.test(r,q,n) ##4.t检验
library(MASS)
head(UScrime)
help("UScrime") ###1)独立样本
t.test(y~x,data) #y为数值型变量,x为二分变量
t.test(y1,y2) #y1,y2都为数值型变量
t.test(Prob~So,data=UScrime) ###2)非独立样本
#两个变量之间相关
t.test(y1,y2,paired = T)
sapply(UScrime[c("U1","U2")], function(x)(c(mean=mean(x),sd=sd(x))))
with(UScrime,t.test(U1,U2,paired = T)) #多组比较anova参考后续章节 ##5.组间差异的非参检验
###1)两组
#独立样本:wilcoxon秩和检验(U检验)
wilcox.test(y ~ x, data) #y是数值,x是二分变量
with(UScrime,by(Prob,So,median))
wilcox.test(Prob~So,data = UScrime) #非独立样本:wilcoxon符号秩检验(适用于成对数据和非正态情况)
sapply(UScrime[c("U1","U2")], median)
with(UScrime,wilcox.test(U1,U2,paired = T)) #当t检验的假设合理时,参数检验的功效更强,更容易发现差异;非参数检验在假设不合理时更适用,如等级有序数据。 ###2)多组
#one-way design 单向设计,如美国四个地区的文盲率比较。
#各组独立:Kruskal-Wallis检验
kruskal.test(y~A,data) #y为数值变量,A为两个及其以上水平的分组变量(两个水平等于U检验)
states <- data.frame(state.region,state.x77)
kruskal.test(Illiteracy~state.region,data = states)
#p<0.01表明四个地区的文盲率各不相同,但无法知道具体哪些地区显著不同(只能每次比较两组) #所有组之间成对比较,可以用本书作者写的wmc函数:
source("http://www.statmethods.net/RiA/wmc.txt") #函数下载
wmc(Illiteracy~state.region,data = states,method = "holm")
wmc #查看源码 #各组不独立(如重复测量设计或随机区间设计):Friedman检验
friedman.test(y~A|B,data) #A为分组变量,B为匹配变量的区组变量

R语言实战-Part 2笔记的更多相关文章

  1. 《R语言实战》读书笔记--为什么要学

    本人最近在某咨询公司实习,涉及到了一些数据分析的工作,用的是R语言来处理数据.但是在应用的过程中,发现用R很不熟练,所以再打算学一遍R.曾经花一个月的时间看过一遍<R语言编程艺术>,还用R ...

  2. R 语言实战-Part 4 笔记

    R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ...

  3. R 语言实战-Part 3 笔记

    R 语言实战(第二版) part 3 中级方法 -------------第8章 回归------------------ #概念:用一个或多个自变量(预测变量)来预测因变量(响应变量)的方法 #最常 ...

  4. R 语言实战-Part 5-1笔记

    R 语言实战(第二版) part 5-1 技能拓展 ----------第19章 使用ggplot2进行高级绘图------------------------- #R的四种图形系统: #①base: ...

  5. R 语言实战-Part 5-2笔记

    R 语言实战(第二版) part 5-2 技能拓展 ----------第21章创建包-------------------------- #包是一套函数.文档和数据的合集,以一种标准的格式保存 #1 ...

  6. 《R语言实战》读书笔记--第一章 R语言介绍

    1.典型的数据分析过程可以总结为一下图形: 注意,在模型建立和验证的过程中,可能需要重新进行数据清理和模型建立. 2.R语言一般用 <- 作为赋值运算符,一般不用 = ,原因待考证.用-> ...

  7. 《R语言实战》读书笔记 第七章--基本统计分析

    在导入数据并且将数据进行组织和初步可视化以后,需要对数据进行分布探索和两两关系分析等.主要内容有描述性统计分析.频数表和列联表.相关系数和协方差.t检验.非参数统计. 7.1描述性统计分析 7.1.1 ...

  8. 《R语言实战》读书笔记--第五章 高级数据管理

    本章内容: 数学和统计函数 字符处理函数 循环和条件执行 自编函数 数据整合与重塑 5.1一个数据处理难题 5.2数值和字符处理函数 分为数值函数和字符串函数,下面是数学函数截图: ceiling.f ...

  9. 《R语言实战》读书笔记--第四章 基本数据管理

    本章内容: 操纵日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序,合并与取子集 选入和丢弃变量 多说一句,数据预处理的时间是最长的……确实是这样的,额. 4.1一个示例 4.2创建新 ...

随机推荐

  1. 【UE4 调试】C++ 几种编译方法和小技巧

    编译方法 Visual Studio 2019 编译 默认编译 UnrealVS 快速编译 Editor 编译 一般 vs 编译完后,Editor会跟着热编译(有声音) 如果发现编译后代码没更新到Ed ...

  2. DDD领域驱动设计-概述-Ⅰ

     如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.)         ...

  3. [技术博客]在团队中使用Pull Request来管理代码

    在团队中使用Pull Request来管理代码 前言 在参加多人共同开发项目,且选用Git作为代码托管工具的时候,我们不免会遇到分支冲突.覆盖.合并等问题.显然,因为同一个仓库是属于大家的,所以每个人 ...

  4. SpringCloud 2020.0.4 系列之服务降级的其他用法与熔断

    1. 概述 老话说的好:控制好自己的情绪,才能控制好自己的人生.冲动是魔鬼,冷静才最重要. 言归正传,之前聊了在 Feign 调用时,如何给整个 Feign接口类 增加降级策略. 今天我们来聊一下 H ...

  5. Noip模拟8 2021.6.17

    T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...

  6. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  7. 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  8. 编译安装mysql和zabbix,xtrabackup数据库备份

    xtrabackup参考文章 https://www.cnblogs.com/linuxk/p/9372990.html 下载5.7的mysql 社区版包 https://cdn.mysql.com/ ...

  9. 基于 OSPF 路由的邻居邻接关系发现实践

    1.实验目的 理解 OSPF 邻居关系和 OSPF 邻接关系的含义及差别 观察 OSPF 邻居邻接关系的建立过程 观察 OSPF 链路状态数据库的同步过程 2.实验原理 OSPF 网络中,路由器在发送 ...

  10. PE节表详细分析

    目录 PE节表详细分析 0x00 前言 0x01 PE节表分析 节表结构 节表数量 节表名字 节表大小 节位置 节表属性 0x02 代码编写 PE节表详细分析 0x00 前言 上一篇文章我们学习了PE ...