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. 【c++ Prime 学习笔记】第5章 语句

    C++提供了一组控制流语句,包括条件执行语句.循环语句.跳转语句. 5.1 简单语句 空语句 ; ,最简单的语句 别漏写分号,也别多写 while(cin>>s && s! ...

  2. 新產品SWOT分析實例

    推出新产品需要解决四个行销支柱: 价格 产品 促销 销售地点 要分析这些方面,请检查您的优势.劣势.机会和威胁,以帮助您在运行第一个广告或举行第一次促销之前将风险降至最低,并最大限度地利用资源.SWO ...

  3. mysql all_ip_test局域网IP测试工具,有需要的改一改.

    1 import threading 2 import subprocess 3 import pymysql 4 # threading.Lock() 5 6 7 class Link(object ...

  4. keras框架下的深度学习(二)二分类和多分类问题

    本文第一部分是对数据处理中one-hot编码的讲解,第二部分是对二分类模型的代码讲解,其模型的建立以及训练过程与上篇文章一样:在最后我们将训练好的模型保存下来,再用自己的数据放入保存下来的模型中进行分 ...

  5. 第五次Alpha Scrum Meeting

    本次会议为Alpha阶段第五次Scrum Meeting会议 会议概要 会议时间:2021年4月30日 会议地点:线上会议 会议时长:15min 会议内容简介:本次会议以主要围绕卡牌对接的诸多问题与对 ...

  6. Beta阶段初始任务分配

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-Beta阶段说明书 一.Beta阶段总体规划 根据用户反馈与测试结果修复alpha版本的bu ...

  7. git常用的一些简单命令

    1.如果一个文件被修改了,但是还没有使用 git add 命令,此时想取消这次修改,需要执行的命令如下: git checkout -- 文件名 2.如果一个文件执行了 git add ,此时想取消这 ...

  8. spring cloud feign的各种配置的使用

    在上一节我们完成了feign的基本使用,学会了feign如何去调用其他微服务,这次我们来完成feign的一些自定义配置. 实现功能:     1.全局修改feign的配置和单独修改feign客户端的配 ...

  9. shell脚本自学笔记

    一. 什么是Shell脚本 shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本.事实上,shell脚本就是一些命令的集合. 假如完成某个需求需要一 ...

  10. poj 2311 Cutting Game (SG)

    题意: 有一张W*H的纸片. 每人每次可以横着撕或者竖着撕,先撕出1*1那一方胜. 数据范围: W and H (2 <= W, H <= 200) 思路: 很好抽象出游戏图的模型,用SG ...