R语言学习笔记(1)

R语言学习

setwd(“D:\R语言学习”)#更改工作路径
write.table(y,“sample.csv”,sep=",")#保存文件

> x=scan()#手动输入
1: 1
2: 2
3: 3
4: 5
5: 
  Read 4 items
> x
[1] 1 2 3 5
x=scan("a.txt")
as.array()
as.character()
as.data.frame()
as.matrix()
is.array()
is.character()
is.data.frame()
d = 密度函数density()、dnorm()
p = 分布函数pnorm()
q = 分位数函数 quantile()  、qnorm()
r = 生成随机数 rnorm()

str函数#显示对象内部结构

^或** 乘方
A/B 普通除法
A%%B 取余,模运算
A%/%B 整数除法
&与
|或
!非

ceiling(X) #向上取整
floor(x)#向下取整
trunc(5.54)#向0的方向取x的整数部分  5
round(x,digits = 2)  保留两位小数   3.45184  =》3.45
signif(x,digits = n)  保留为n位有效数字 3.45184  =》3.5
log(x,base = n)  以n为底的对数

> log(2,base =exp(1) )
[1] 0.6931472
mean()
weight.mean(d,c(1,2,4,5,6)) #加权求平均值
median()
sd()
var()
mad()绝对中位差
# 比如说有一个数据样本集X={2 3 8 7 9 6 4},
# 这时候数据的中位数是6,
# 原始数据减去中位数求绝对值形成新的数据样本为{4 3 2 1 3 0 2},
# 新的数据样本的中位数是2,所以原始数据样本集合的绝对中位差是2。
quantile(x,probs = c(0.25,0.75),names = T,type = )分位数  names就是显示50% 50,还是50,type有9中选择
fivenum(x)  #求取5个分位值,等价于quantile(x,names=F,type=1)
IQR(四分位间距)
prod(1:5) #连乘
factorial(5) #阶乘函数5!
range()值域
diff(x,lag = n)滞后查分
min()
max()
any(x>5) #任意条件any
all(x>5) #全体条件all
any()函数判断这些值是否至少一个为TURE。all()函数的功能类似,它判断这些值是否全部为TRUE。
choose(5,2) #从5个中选出2个,共有几种选法  C(2 5)
rank()
combn()  #用于产生集合元素的组合,例如找出集合1,2,3中含有两个元素的子集,输出结果是按列排列的矩阵
combn(1:3,2) #输出的结果按列排序,类型为矩阵
      [,1] [,2] [,3]   #1,2,3的所有可能
[1,]    1    1    2
[2,]    2    3    3
cumsum(1:5) #累加
cumprod(1:5) #累乘

cummin(x) #最小累积,相当于从左到右依次取变量最小值
cummax(x) #最大累积,相当于从左到右依次取变量最大值
intersect(x,y) #取交集
union(x,y) #取并集
setdiff(x,y) #取差集,从x中排出y
setequal(x,y) #判断两个向量是否相等
unique(x) #取唯一值
which(duplicated(x)) #找到重复元素的索引
duplicated()#函数是从数据框中取出重复的数据,如果是将重复的数据删除
Kpil<-exceldata[!duplicated(exceldata[,c(“tian”,”yin”)])];
pmin()\pmax() #把多个等长度的向量按元素逐一对比,并返回所有向量的第k个元素中最小或最大的值
sort(x,decreasing = F)排序 升序
order(x,decreasing = T) 降序  F是升序
pi  圆周率
rug()在图形下面加上数据点的具体位置
ftable()
xtabs()
prod=T纵坐标单位以概率
mode
mode中将integer和double显示为numeric
class
mode是指变量的类型如:数值型、字符型、逻辑型等
class是指变量的类别如:矩阵、列表、数据框
typeof
typeof是对变量类型的细分

> 2^(1:5)
[1]  2  4  8 16 32
> class(x)
[1] "integer"
> class(v)
[1] "data.frame"

> typeof(x)
[1] "integer"
> typeof(v)
[1] "list"
names(cars)查看变量名称
tail()查看最后
row.names()

> attributes(cars) #查看属性
$names
[1] "speed" "dist" 
$class
[1] "data.frame"
$row.names
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50
ncol(cars) 列数
nrow(cars) 行数
dim(cars)

scale标准化

x<-c(1,2,3,4)
xx<-scale(x)

scale(x,scale = F)  #指的是不除以方差,x每一个元素减去均值
scale(x,center=TRUE,scale=F)  #为数据对象x按列进行中心化(即减平均值)

scale(x,center = F) #指的是不减去均值,直接每个元素除以方差
scale(x,center=T,scale=T)  #同时(即标准化)(均值为0,标准差为1)

#如果要对每一列进行任意均值和标准差的标准化
scale(x,center=TRUE,scale=TRUE)*sd+M
newdata<-scale(marks$math)*10+10 #使用scale函数对数列进行标准差为10,均值为10的标准化。
使用方法是scale(x)*sd+mean

复杂数学函数

  1. 三角函数
sec() #正割,斜边与邻边的比值
csc() #余割,斜边与对边的比值
tan() #正切,对边与邻边的比值
  1. 内积与外积
#x,y均为向量,计算两个向量的内积(数量积,点积,标积)表示方法:x.y=|x|*|y|*cos(x,y),其中|x|表示向量大小sqrt(sum(x**2))
crossprod(x,y) 或 x %*% y
#向量外积定义:即向量积,矢积,叉积,记a×b.若a、b不共线,则a×b的模是:
|a×b∣=|a|·|b|·sin(a,b);a×b的方向遵守右手定则:垂直于a和b,且a、b和a×b按这个次序构成右手系.若a、b共线,则a×b=0
x %o% y 或 tcrossprod(x,y)
 如果需要求函数的最大值和最小值,需要nlm()和optim()函数.例如如果求f(x)=x^2+sin(x)的最小值
nlm(function(x) return(x^2+sin(x)),0)
其中输出$minimum最小值,$estimate横轴x的取值,$iterations迭代的次数,0设定的初始值

随机数与抽样模拟

  • set.seed
r语言中的set.seed(i)   可以是任意数字,它的作用是一个编号
set.seed()函数是为了保证你随机生成的随机数前后一致,
x=rnorm(5)
[1] -0.4657179 -0.8252361 -0.1893222 -0.8956596  1.5736333

再来一次
x=rnorm(5)
[1] -0.5802258 -0.2242277 -0.5897595  0.6455071  0.5062776
每次重新运行结果都不一样

而当种下种子后,每次重复结果都一样,一个编号i,代表一种结果
set.seed(5)
x=rnorm(5)
[1] -0.84085548  1.38435934 -1.25549186  0.07014277  1.71144087

重新运行
set.seed(5)
x=rnorm(5)
[1] -0.84085548  1.38435934 -1.25549186  0.07014277  1.71144087

结果一样,那么set.seed(5)换为set.seed(2)时还一样吗?显然是不一样的,因此,set.seed()括号里面的参数可以是任意数字,
是代表你设置的第几号种子而已,不会参与运算,是个标记而已。
  1. runif(n,min=,max=)均匀分布随机数;如果省略min和max则表示[0,1]上均匀分布随机数,生成n个随机数

  2. .随机抽样
    sample(x,n,replace=T,prob=null)放回与无放回抽样
    其中x表示抽样样本的总体(总体向量,可以是字符型、数字型、逻辑型等);
    n表示样本容量,即抽样几次;
    replace=F,默认为无放回抽样;
    prob可以设置每个不同的入样单元的入样概率,进行不等概率抽样
    x=1:100
    sample(x,20,replace = ,size = ,prob = )#抽样

  3. 众数计算:names(which.max(table(x))) #x为数值型向量

  4. #计算峰度和偏度的函数:
    Mtcarss<-function(x,na.omit=FALSE){ #na.omit去掉有缺失值的所有行
    if(na.omit)
    x<-x[!is.na(x)]; #返回非空的x
    m<-mean(x);
    n<-length(x);
    s<-sd(x);
    skew<-sum((x-m)3/s3)/n;
    kurt<-sum((x-m)4/s4)/n-3;
    return(c(n,m,s,skew,kurt));
    }

  5. mean(salary,trim=0.2) 截尾均值,表示对salary字段的两头都截去20%的均值,trim的取值范围为0-0.5
    【6】协方差
    cov(x,y) #协方差,x和y的向量维数必须相等
    #计算方差或者协方差矩阵(它的每个元素是各个向量之间的协方差)
    cov(x) #协方差矩阵,x为矩阵或者数据框

x=matrix(21:40,nrow = 4,ncol = 5,byrow = FALSE)  #矩阵
f=c(1,2,3,10,20,30)
rnames=c("R1","R2")
cnames=c("C1","C2","C3")
my=matrix(f,nrow = 2,ncol = 3,byrow = TRUE,dimnames = list(rnames,cnames))
#
    C1 C2 C3
R1  1  2  3
R2  10 20 30

数组

x=array(data = ,dim = ,dimnames = )  
arr1 <- array(1:10) #相当于1维的向量:1 2 3 4 5 6 7 8 9 10

arr2 <- array(1:10, dim=c(2,5)) #相当于2行5列的矩阵
# [,1] [,2] [,3] [,4] [,5]
# [1,]    1    3    5    7    9
# [2,]    2    4    6    8   10
arr3 <- array(1:24, dim=c(3,4,2)) #创建了一个3×4×2维的数组
# , , 1
# 
#       [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12
# 
# , , 2
# 
#       [,1] [,2] [,3] [,4]
# [1,]   13   16   19   22
# [2,]   14   17   20   23
# [3,]   15   18   21   24
相当于是一个“长方体”,3是高或者↓,4代表长或者→,2代表宽或者 “里”
dim1 <- c("A1","A2","A3")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2")
arr4<-array(1:18, dim=c(3,3,2), dimnames = list(dim1, dim2, dim3))
arr4[2,3,1] # 获取单个元素的值:8
arr4[2,1,] #获取第1个维度的第2个水平和第2个维度的第1个水平的所有元素值
arr4[2,,] #获取第1个维度的第2个水平的所有组合元素值
arr4[,2,] #获取第2个维度第2个水平的所有组合元素值
arr4["A2","B3","C2"] #通过水平名称的组合来获取元素值
  • 一个数据框时
    attach()函数打开可以将数据框添加到R的搜索路径中,当r遇到一个变量,
    就会在搜索路径中查找是否有此变量
    detach()关闭

with函数

with(data.frame,{summary(age),mean(weight),plot(age,sys)}
     
和attach()类似,只不过只在{}能才执行,在{}内系统自动查找data.frame的变量
但是{}内生成不能保存在with以外(局部变量),若要保存为全局变量,用<<-
with(data.frame,
     {a <<- summary(age),    #a,b为全局变量
      b <<- mean(weight),
      c <- plot(age,sys)}  #c为局部变量

因子

用于存储类别的类型
factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)

x为字符型和数值型向量;
levels为指定的因子水平;字符类型,用于设置x可能包含的唯一值,默认值是x的所有唯一值。
      如果x不是字符向量,那么使用as.character(x)把x转换为字符向量,然后获取x向量的水平。x向量的取值跟levels有关。

exclude表示要剔除的水平;排除的字符

nmax:水平的上限数量,表示因子数目的上界。

例如,因子sex的值是向量c('f','m','f','f','m'),因子水平是c('f','m'):

sex <- factor(c('f','m','f','f','m'),levels=c('f','m'))
sex
[1] f m f f m
Levels: f m
  1. .指定因子水平的名称 #labels为指定的因子水平的名称;是水平的标签,字符类型,用于对水平添加标签,
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"))
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A B C D E F           #相当于对因子水平重命名;labels参数的字符顺序,要和levels参数的字符顺序保持一致
  1. 定义有次序水平的因子
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"),order=T)     #ordered 表示因子的水平是否有次序,逻辑值,用于指定水平是否有序;
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A < B < C < D < E < F
sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE)
> sex
[1] female male female female male  
Levels: female < male
  1. 查看因子水平,可以通过函数levels(factor)来查看:
levels(heights$gender)
#[1] "f" "m"     
水平的级数,相当于level的长度,可以由nlevels函数查询到:
> nlevels(heights$gender)
[1] 2

通常情况下,因子一般是无序的,这可以通过is.ordered()函数来验证:

> is.ordered(sex)
[1] FALSE

把因子水平转换为字符串 as.character(heights$gender)

把因子转换成相应的整数 使用as.numeric()或as.integer()函数可以把因子转换成对应的整数as.factor(mydata$Category)

把连续变量分割为类别

函数cut()能够把数值变量切成不同的块,然后返回一个因子,对数值数据进行分组:使用cut函数对数值数据进行分组
cut(x, breaks, labels = NULL)
参数注释:
x:数值变量
breaks:切割点向量
labels:每一个分组的标签
例如,把身高数据,按照指定的切割点向量分割:

cut(heights$height_cm,c(150,170,190))
[1] (150,170] (170,190] (150,170]
Levels: (150,170] (170,190]
salary.cut<-cut(salary,breaks=c(1000,2000,3000,max(salary)))

练习

a <- read_excel("C:/Users/Administrator/Desktop/a.xlsx")
# A tibble: 19 x 2
mus_n    name  
<chr>    <chr> 
  1 害怕     薛之谦
2 演员     薛之谦
3 认真的雪 薛之谦
4 一半     薛之谦
5 意外     薛之谦
6 绅士     薛之谦
7 遗憾     薛之谦
8 动物世界 薛之谦
9 晚安     薛之谦
10 害怕     张艺兴
11 意外     张艺兴
12 羊       张艺兴
13 我不好   张艺兴
14 一半     张艺兴
15 演员     张艺兴
16 盛夏     毛不易
17 我不好   毛不易
18 消愁     毛不易
19 演员     毛不易
attach(a)
v<-as.data.frame(table(a$mus_n))
p<-list()
for (i in v$Var1) {p=append(p,list(name[which(mus_n==i)]))}
v$num<-p
v
detach(a)
#结果
Var1   Freq             num
1  动物世界    1                 薛之谦
2      害怕    2         薛之谦, 张艺兴
3  认真的雪    1                 薛之谦
4      绅士    1                 薛之谦
5      盛夏    1                 毛不易
6      晚安    1                 薛之谦
7    我不好    2         张艺兴, 毛不易
8      消愁    1                 毛不易
9      演员    3 薛之谦, 张艺兴, 毛不易
10       羊    1                 张艺兴
11     一半    2         薛之谦, 张艺兴
12     遗憾    1                 薛之谦
13     意外    2         薛之谦, 张艺兴
pretty(x,n) 创建分割点,将x分隔成n个区间
rnorm(50,0,1)

返回向量中字符个数

> x<-c("a","aa","aaaaaddddd")
> a<-nchar(x)
> a
[1]  1  2 10
> a<-nchar(x[c(1,3)])
> a
[1]  1 10
> xx<-"aaaaadddddd"
> substr(xx,2,5)
[1] "aaaa"
> substr(xx,2,7)
[1] "aaaadd"
> substr(xx,2,4)="41"
> xx
[1] "a41aadddddd"

分离字符串函数

> x=strsplit("avg","")
> x
[[1]]
[1] "a" "v" "g"
> strsplit("2012-155-544",split = "-")
[[1]]
[1] "2012" "155"  "544" 

链接函数

> paste("x",1:5,sep = "")
[1] "x1" "x2" "x3" "x4" "x5"
> paste("x",1:5,sep = "坦白")
[1] "x坦白1" "x坦白2" "x坦白3" "x坦白4" "x坦白5"
> paste("x","ddd",sep = "坦白")
[1] "x坦白ddd"

year<-c(1959,1959,1959,1959,1960)
month<-c(6,7,8,9,10)
paste(year,month,sep = "-")

转换大小写

> toupper("aaaddf")
[1] "AAADDF"
> tolower("KDSDDD")
[1] "kdsddd"

手动输入数据

> number <- data.frame(age=numeric(0),sxe=character(0),weight=numeric(0))
> number=edit(number)
> number
    age  sxe  weight
1    12 澳门      11
2    25 骄傲      11
3    55  大       5
4    44  大       5
  1. 将excel文件导出为逗号分隔的csv文件。然后读取excel最好方法是用read.table,Excel数据的读取

  2. 有两种简单的方法获得Excel电子表格中的数据.

  • 利用剪贴板
    一种简单不过的方法是打开Excel中电子表格, 选中需要的数据区域, 再
    复制到剪贴板中(使用CTRL+C). 然后在R中键入命令
> mydata <- read.delim("clipboard")
  • 使用程序包RODBC.
    要得到文件"c:\data\body.xls"中工作表1(sheet1)中的数据,设为
Sex Weight Height
M 65 168
M 70 172
F 54 156
F 58 163

可以使用命令
> library(RODBC)
> z <- odbcConnectExcel("c:/data/body.xls")
> foo <- sqlFetch(z, "Sheet1")
> close(z)

函数transform
为原数据框添加新的列,改变原变量列的值,通过赋值NULL删除列变量
#在数据框中要添加新的列

x1=c(1,2,35,4,4)
x2=c(7,8,4,5,6)
newdata<-transform(newdata,sumy=x1+x2,meany=(x1+x2)/2)
> newdata
  x1 x2 sumy meany
1  1  7    8   4.0
2  2  8   10   5.0
3 35  4   39  19.5
4  4  5    9   4.5
5  4  6   10   5.0
或者用这个方法
newdata<-data.frame(x1=c(1,2,35,4,4),x2=c(7,8,4,5,6))
names(newdata)[1:2]=c("tan","dd")#修改名字
attach(newdata)
newdata$sum<-x1+x2
newdata$mean<-(x1+x2)/2
detach(newdata)
append(1:5, 0:1, after = 3)
[1] 1 2 3 0 1 4 5
airquality数据集,其中自带含有缺失值
complete.cases(airquality)#判断每行有没有缺失值
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
[9]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
[17]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE


…………
which(complete.cases(airquality))
> sum(complete.cases(airquality))
[1] 111
na.omit()删除缺失值行



> a=airquality[1:10,]
> names(a)=c("x1","x2","x3","x4","x5","x6")
> a
   x1  x2   x3 x4 x5 x6
1  41 190  7.4 67  5  1
2  36 118  8.0 72  5  2
3  12 149 12.6 74  5  3
4  18 313 11.5 62  5  4
5  NA  NA 14.3 56  5  5
6  28  NA 14.9 66  5  6
7  23 299  8.6 65  5  7
8  19  99 13.8 59  5  8
9   8  19 20.1 61  5  9
10 NA 194  8.6 69  5 10



> a=na.omit(a)#去掉有缺失值的所有行
> a
x1  x2   x3 x4 x5 x6
1 41 190  7.4 67  5  1
2 36 118  8.0 72  5  2
3 12 149 12.6 74  5  3
4 18 313 11.5 62  5  4
7 23 299  8.6 65  5  7
8 19  99 13.8 59  5  8
9  8  19 20.1 61  5  9


a[order(a$x4),]#排序

#连接两个数据框
merge(q,newdata)#数据库那种连接
xx=rbind(a[1:5,],newdata)行链接,横链接
cbind(q,newdata)列链接,纵向链接

subset()提取满足条件的子集

> subset(Puromycin, state == "treated" & rate > 160)
subset(Puromycin, conc > mean(conc))

A[c(-1,-3)]剔除不要的一列或几列

barplot(table(x))

fix()不仅可以修改表格,还有函数

第四章

t检验
检验效率就是1-β,把握率,也就是power
d是

> pwr.t.test(d=0.2678571428571429,sig.level = 0.05,power = 0.9,type = "one.sample",alternative = "two.sided")

One-sample t test power calculation #结果
n = 148.3841#要检验效率为90%。则需要样本量148.3841
d = 0.2678571
sig.level = 0.05
power = 0.9
alternative = two.sided
> pwr.t.test(n=100,d=0.2678571428571429,sig.level = 0.05,type = "one.sample",alternative = "two.sided")

One-sample t test power calculation #结果
n = 100
d = 0.2678571
sig.level = 0.05
power = 0.7557033#固定样本量100,则只有75.57%把握
alternative = two.sided

pwr.2p.test()两比率和配对设计总体率
pwr.2p2n.test()
pwr.anova.test()
pwr.chisq.test()卡方
pwr.f2.test()线性模型
pwr.t2n.test()

#这些都是检验效能分析,帮助判断在给定的置信度和效应值的前提下所需要的样本量,
#也就是样本量的估计,或者给定样本量,检测要求的效应值的概率,把握程度的估计

第五章

i=1
while (i<11) {
  print("d")
  i=i+1
  if (i>10) {
  break    
  }
}

break()也可以用在for语句中

sweep(x, MARGIN, STATS, FUN="-", ...) 
对矩阵进行运算。MARGIN为1,表示行的方向上进行运算,
为2表示列的方向上运算。STATS是运算的参数。FUN为运算函数,默认是减法。

sweep(x,1,1:5,"*")把向量1:5的每一个元素乘到每一行

apply

apply(X, MARGIN, FUN)
Here:
  -x: 一个数组或者矩阵
-MARGIN: 两种数值1或者2决定对哪一个维度进行函数计算
-MARGIN=1`: 操作基于行
-MARGIN=2`: 操作基于列
-MARGIN=c(1,2)`: 对行和列都进行操作
-FUN: 使用哪种操作,
内置的函数有
mean(平均值)、medium(中位数)、sum(求和)、min(最小值)、max(最大值)
,当然还包括广大的用户自定义函数

ifelse(条件,若成立执行1,否则执行2)

q=c("ff","aa")
for (i in q) {
  print(switch (i,aa = "1",ss="2",ff="3"))
}

百分位比用quantile()函数

> data <- c(1,2,3,4,5,6,7,8,9,10)
> quantile(data,0.5)
50% 
5.5 
> quantile(data,c(0.25,0.75))
25%  75% 
  3.25 7.75

字符分离 strsplit(aa$name," ")

转置t()

aggregate函数是数据处理中常用到的函数,
简单说有点类似sql语言中的【group by】,可以按照要求把数据打组聚合,然后对聚合以后的数据进行加和、求平均等各种操作。

> x=data.frame(name=c("张三","李四","王五","赵六"),sex=c("M","M","F","F"),age=c(20,40,22,30),height=c(166,170,150,155))
> x
  name sex age height
1 张三   M  20    166
2 李四   M  40    170
3 王五   F  22    150
4 赵六   F  30    155
aggregate(x[,3:4],by=list(sex=x$sex),FUN=mean)
#sex age height
1   F  26  152.5    均值
2   M  30  168.0
> 
  > list(sex=x$sex)
$sex
[1] M M F F
Levels: F M
summary()  描述性统计
sd(1,4)

apply : 用于遍历数组中的行或列,并且使用指定函数来对其元素进行处理。
lapply : 遍历列表向量内的每个元素,并且使用指定函数来对其元素进行处理。返回列表向量。
sapply : 与lapply基本相同,只是对返回结果进行了简化,返回的是普通的向量。
mapply: 支持传入两个以上的列表。  

tapply: 接入参数INDEX,对数据分组进行运算,就和SQL中的by group一样。

#定义函数
fun1<-function(x){
  sum1<-sum(x)
  aa=sum1/length(x)
  return(aa)
}

第六章

(1)
1.描述性统计summary

summary(iris$Sepal.Length)
#
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
4.300   5.100   5.800   5.843   6.400   7.900 

2.Hmisc包describe()

describe(iris$Sepal.Length)
#iris$Sepal.Length 
n  missing distinct     Info     Mean      Gmd   #基本描述性统计量
150        0       35    0.998    5.843   0.9462 
.05      .10      .25      .50      .75      .90   .95    #分位数
4.600    4.800    5.100    5.800    6.400    6.900  7.255 

lowest : 4.3 4.4 4.5 4.6 4.7, highest: 7.3 7.4 7.6 7.7 7.9

3.psych包中describe()

describe(iris$Sepal.Length)
#
   vars   n mean   sd median trimmed  mad min max range  skew kurtosis   se
X1    1 150 5.84 0.83    5.8    5.81 1.04 4.3 7.9   3.6 0.31    -0.61 0.07

4.pastecs包中的stat.desc()

stat. desc (x, basic=TRUE, desc=TRUE, norm-FALSE,p=0.95)
其中,x为数据框。basic=TRUE(默认值)
计算所有值、空值、缺失值的数量,以及最小值、最大值、值域和总和。desc=TRUE(默认值),计算中位数、均数、均数标准误、均数95%
可信区间、方差、标准差以及变异系数。nom-TRUE(非默认值),计算正态分布统计量,包括偏度和峰度(以及它们的统计显著程度)和Shapiro-Wilk 正态检验结果。
stat.desc(iris$Sepal.Length, basic=TRUE, desc=TRUE, norm=FALSE,p=0.95)
#
nbr.val     nbr.null       nbr.na        min          max        range       sum       median         mean 
150.00000000   0.00000000   0.00000000  4.30000000   7.90000000   3.60000000 876.50000000   5.80000000   5.84333333 
SE.mean CI.mean.0.95          var 
0.06761132   0.13360085   0.68569351 
std.dev     coef.var 
0.82806613   0.14171126

(二)、分组计算描述性统计量

1.aggregate()
attach(iris)
aggregate(Sepal.Length,by=list(Species),FUN=mean)
#
Group.1     x
1     setosa 5.006
2 versicolor 5.936
3  virginica 6.588
2.by(),这个函数和上面写到的函数差不多,
只不过是by函数可以返回多个统计量,而aggregae只能返回一个统计量
attach(iris)
ss=function(x)(c(n=length(x),m=mean(x),s=sd(x)))
by(Sepal.Length,Species,ss)
#
Species: setosa
n          m          s 
50.0000000  5.0060000  0.3524897 
-------------------------------------- 
  Species: versicolor
n          m          s 
50.0000000  5.9360000  0.5161711 
-------------------------------------- 
  Species: virginica
n          m          s 
50.0000000  6.5880000  0.6358796 
3.psych包中describeBy()
describeBy(Sepal.Length,Species)
#
Descriptive statistics by group 
group: setosa
    vars  n mean   sd median trimmed mad min max range skew kurtosis   se
X1    1 50 5.01 0.35      5       5 0.3 4.3 5.8 1.5 0.11    -0.45 0.05
-------------------------------------- 
group: versicolor
    vars  n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 50 5.94 0.52    5.9    5.94 0.52 4.9   7   2.1  0.1    -0.69 0.07
-------------------------------------- 
group: virginica
    vars  n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 50 6.59 0.64    6.5    6.57 0.59 4.9 7.9 3 0.11     -0.2 0.09
4.doBy包中的分组描述性统计量
summaryBy(Sepal.Length~Species,data = iris,FUN = mean)
Species Sepal.Length.mean
1     setosa             5.006
2 versicolor             5.936
3  virginica             6.588

第七章 假设检验(t检验)

1.单样本t检验

t.test(iris$Sepal.Length,mu = 4.5,alternative = "two.sided",conf.level = 0.95)
其中mu是总体均值
这是针对有原始数据的,如果没有原始数据,就利用公式硬算
如果是双侧检验就用

t=(x-u)/(s/sqrt(n))
v=n-1
2*pt(-abs(t),v)

单检验就不乘2

2.两样本t检验

t.test(x~group,var.equal=TRUE,alternative="two.sided",conf.level=0.95)

方差齐性检验(F检验)
var.test(x,y,ratio = 1,alternative = "two.sided",conf.level = 0.95)
#ratio = 1是指两个的方差比率
也就是原假设两个方差相等

第八章

用函数aov()函数和lm都可以做方差分析
【交互】就是指A和B一起相互作用影响因变量

y~A+B+A:B 表示A、B和A与B的交互项一起来预测y
y~A*B*C表示所有可能的交互项,等价为y~A+B+A:B+A:C+B:C+A:B:C
.表示除去因变量以外的所有变量,如y~. 等价为y~A+B+C
y~(A+B+C)^2  等价为y~A+B+A:B+A:C+B:C

以下为一些常用的研究设计表达式,小写字母为定量变量,大写字母为组别因子,Subject为研究对象松识变量:
·单因素ANOVA,y-A.
·含单个协变量的单因素ANCOVA,y-x+A.
·双因素ANOVA.yAB.
·含两个协变量的双因素ANOVA,y-x1+X2+A+B.
·随机化区组,y-B+A.其中8为区组因素。
·单因素姐内ANOVA.y-A+Ermor(Subjec/A).
,含单个组内因子(w)和单个组间因子(B)的重复测量ANOVA,y-B
w+Eror(Subjectwl在非平赛设计或存在协变量的情足下,表达式中效应的顺序将对模拟结果产生影响。情远,在不得千方意分析中,模望”“日写规型-那风的信果不间。R我认类道1(序贵型)方!
算ANOVA效应,模型-A+B+A:B在R中的ANOVA表的结果将评价。
·A对y的影响;
·找制A时,B对y的影响,
·控制A和B的主效应时,A与B的交互效应。
假如使用如下表达式对数据进行建模;y~A+B+A:B有3种类型的方法可以分解右边各效应对y所解释的方差。

aa=read.table("C/a.txt",header = TRUE,sep = "|")
library("multcomp")
attach(aa)
table(gruop)
# gruop
# A  B  C 
# 10 10 10 
aggregate(apt,by=list(gruop),FUN=mean)
aggregate(apt,by=list(gruop),FUN=sd)
fit=aov(apt~gruop)      这里用lm()是一样的
#
# Call:
#   aov(formula = apt ~ gruop)
# 
# Terms:
#   gruop Residuals
# Sum of Squares  240.20499  71.77491
# Deg. of Freedom         2        27
# 
# Residual standard error: 1.630439
# Estimated effects may be unbalanced

summary(fit)
#           
#             Df Sum Sq Mean Sq F value   Pr(>F)    
  gruop        2 240.20  120.10   45.18 2.43e-09 ***     这里P值远小于0.05,拒绝原假设,在统计上显著,三组均值不相等
#   Residuals   27  71.77    2.66                     
# ---
#   Signif. codes:  
#   0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


library("gplots")
plotmeans(apt~gruop,xlab = "gruop",ylab = "apt",main="mean plot \nwith 95% CI")
TukeyHSD(fit)
#
# Tukey multiple comparisons of means
# 95% family-wise confidence level
# 
# Fit: aov(formula = apt ~ gruop)
# 
# $gruop
# diff        lwr       upr     p adj
# B-A  6.514  4.7061219  8.321878 0.0000000
# C-A  1.206 -0.6018781  3.013878 0.2411216
# C-B -5.308 -7.1158781 -3.500122 0.0000002

后面的方差分析比较难 比如 拉丁方设计资料的方差分析 和析因设计资料方差分析和正交试验设计资料方差分析 和
重复测量资料方差分析

但所有的都是一样的套路

Examp1el_6<-read,table("example8——8,csv",header=TRUE,sep-",")
attach(Example8_6)
block <-factor(block,order=FALSE)
dose <-factor(dose,ordex=FALSE)
table(block,dose)
aggregate(weight,by-list(block),FUN=mean)
aggregate(weight,by-list(bloek),FUN-sd)
aqqregate(welight,by-1ist(dose),FUN-mean)
aggregate(uoight,by=list(dosel,FUN=sd)
fit <-aov (weight-block+dose)
summary(fit)
TakeyHsD(f1t,"dose")
TakeyHsD(fit,"block")
detach(Example8_6)

协方差分析
排除非处理因素的干扰和影响,使实验误差的估计降到最低
非处理因素是那些不能控制或者难以控制的因素
协方差分析结合了回归分析和方差分析的影响,既用到回归分析,有用到方差分析
将难以控制的因素X称为协变量
Y为因变量

library("multcomp")
#
> head(litter)
   dose weight gesttime number       这里分析不同dose对体重的影响,怀孕时间作为协变量
1    0  28.05     22.5     15
2    0  33.33     22.5     14
3    0  36.37     22.0     14
4    0  35.52     22.0     13
5    0  36.77     21.5     15
6    0  29.60     23.0      5
attach(litter)
table(dose)
#
dose
0   5  50 500 
20  19  18  17
aggregate(weight,by=list(dose),FUN=mean)
aggregate(weight,by=list(dose),FUN=sd)
fit=aov(weight~gesttime+dose)
summary(fit)
TukeyHSD(fit,"dose")
detach(litter)


(1)
Group.1        x
1       0 32.30850
2       5 29.30842
3      50 29.86611
4     500 29.64647
(2)
Group.1        x
1       0 2.695119
2       5 5.092352
3      50 3.762529
4     500 5.404372

(3)
            Df Sum Sq Mean Sq F value  Pr(>F)   
gesttime     1  134.3  134.30   8.049 0.00597 **   说明怀孕时间与体重有关,校正了怀孕时间的影响
dose         3  137.1   45.71   2.739 0.04988 *     说明dose对体重差异有显著性影响
Residuals   69 1151.3   16.69                   
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(4)
Tukey multiple comparisons of means
95% family-wise confidence level

Fit: aov(formula = weight ~ gesttime + dose)
$dose
            diff       lwr       upr     p adj
5-0    -3.4171829 -6.862400 0.0280344 0.0526932   接受
50-0   -1.8696021 -5.363552 1.6243477 0.4982585   接受
500-0  -2.9743214 -6.521945 0.5733020 0.1314349   接受
50-5    1.5475808 -1.989654 5.0848159 0.6589068   接受
500-5   0.4428615 -3.147400 4.0331232 0.9880653   接受
500-50 -1.1047193 -4.741771 2.5323320 0.8543245   接受
# 

第九章 直线回归与相关

(一)直线相关分析

(1)相关系数

cor(x = ,use =,method = )
use包括all.obs  假设不存在缺失值,若遇到缺失值则报错
      everything 遇到缺失数据,相关系数的数值将设为missing  (默认)
        complete.obs()行删除
        pairwise.complete.obs成对删除
method包括pearson spearman秩相关  kendall

(2)相关系数检验

cor.test(x = ,y= ,alternative = ,method = )

(3)散点图

plot(x,y) 

例子
cor.test(cars$speed,cars$dist,alternative = "two.sided",method = "pearson")
plot(cars$speed,cars$dist)
结果
# Pearson's product-moment correlation
# 
# data:  cars$speed and cars$dist
# t = 9.464, df = 48, p-value = 1.49e-12
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
# 0.6816422 0.8862036
# sample estimates:
# cor 
# 0.8068949 


cor.test(cars$speed,cars$dist,alternative = "two.sided",method = "spearman")
# Spearman's rank correlation rho
# 
# data:  cars$speed and cars$dist
# S = 3532.8, p-value = 8.825e-14
# alternative hypothesis: true rho is not equal to 0
# sample estimates:
# rho 
# 0.8303568

二、直线回归分析
注意异常点
lm()

y~A+B+A:B 表示A、B和A与B的交互项一起来预测y
y~A*B*c 表示所有可能的交互项,等价为y~A+B+A:B+A:C+B:C+A:B:C
. 表示除去因变量以外的所有变量,如y~. 等价为y~A+B+C
y~(A+B+C)^2  等价为y~A+B+c+A:B+A:C+B:C
-  表示除去某个 如y~(A+B+C)^2-A:B  等价为y~A+B+C+A:C+B:C
-1 强制去掉截距项
I() 将括号内的作为一个新的变量进行运算,从算术的角度解释括号中的元素。
    例如,y~x+(z+w)^2  展开为y~x+z+w+z:w
     而  y~x+I((z+w)^2) 展开为y~x+h  h为系统等价的新变量
Function   log(Y)~x+z+w 
  • 函数|用途
summary)|展示拟合模型的详细结果
coeficients)|列出拟合模型的模型参数(截距项和斜率)
confint()|提供模型参数的置信区间(默认为95%)
fited()|列出拟合模型的预测值
residulas()|列出拟合模型的残差值
anova()|生成一个拟合模型的方差分析表,或者比较两个或更多;
vcov)|列出模型参数的协方差矩阵
AIC()|输出赤池信息统计量
plot()生成评价拟合模型的诊断图
predict()用拟合模型对新的数据集预测因变量值
test6.2 <- data.frame(
  x1=c(0.4,0.4,3.1,0.6,4.7,1.7,9.4,10.1,11.6,12.6,10.9,23.1,23.1,21.6,23.1,1.9,26.8,29.9),
  x2=c(52,23,19,34,24,65,44,31,29,58,37,46,50,44,56,36,58,51),
  x3=c(158,163,37,157,59,123,46,117,173,112,111,114,134,73,168,143,202,124),
  y=c(64,60,71,61,54,77,81,93,93,51,76,96,77,93,95,54,168,99))

lm.sol <- lm(y~1+x1+x2+x3, data=test6.2)
summary(lm.sol)
lm.new=lm(y~x1+x2+x3+I(x1^2)+I(x1*x2)+I(x1*x3)+I(x2^2)+I(x2*x3)+I(x3^2)+I(x1*x2*x3),data=test6.2)
lm.temp=lm(y~x1+x2+I(x1^2)+I(x1*x2)+I(x1*x3)+I(x2*x3)+I(x3^2)+I(x1*x2*x3)+0,data=test6.2)

(三)多元线性回归

> s=lm(Fertility~.,data=swiss)
这里数据集是swiss,Fertility~.代表Fertility为因变量,~代表回归,
.代表数据集除了Fertility以外的其他的所有变量作为自变量
> print(s)
# 
# Call:
#   lm(formula = Fertility ~ ., data = swiss)
# 
# Coefficients:
#   (Intercept)       Agriculture       Examination  
# 66.9152           -0.1721           -0.2580  
# Education          Catholic  Infant.Mortality  
# -0.8709            0.1041            1.0770  

> summary(s)模型汇总信息
# 
# Call:
#   lm(formula = Fertility ~ ., data = swiss)
# 
# Residuals:
#   Min       1Q   Median       3Q      Max 
# -15.2743  -5.2617   0.5032   4.1198  15.3213 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
# (Intercept)      66.91518   10.70604   6.250 1.91e-07 ***
#   Agriculture      -0.17211    0.07030  -2.448  0.01873 *  
#   Examination      -0.25801    0.25388  -1.016  0.31546    
# Education        -0.87094    0.18303  -4.758 2.43e-05 ***
#   Catholic          0.10412    0.03526   2.953  0.00519 ** 
#   Infant.Mortality  1.07705    0.38172   2.822  0.00734 ** 
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 7.165 on 41 degrees of freedom
# Multiple R-squared:  0.7067,    Adjusted R-squared:  0.671 
# F-statistic: 19.76 on 5 and 41 DF,  p-value: 5.594e-10
# 
# 
# > s1=step(s,direction="forward")逐步回归法,向后剔除法
# Start:  AIC=190.69
# Fertility ~ Agriculture + Examination + Education + Catholic + 
#   Infant.Mortality

abline(lm(cars s p e e d   c a r s speed~cars dist),col=“red”) #给散点图加拟合曲线

多元线性回归分析
β=(X’X)^-1*X’Y
多重共线性
(1)直观的判断方法。

1.在自变量的相关系数矩阵中,某些自变量的相关系数值比较大。
2.回归系数的符号与专业知识或一般经验相反。
3.对重要的自变量的回归系数进行t检验,其结果不显著,但是F检验却得到了显著的通过。
4.如果增加一个变量或删除一个变量,回归系数的估计值会发生很大的变化。
5.重要变量的回归系数置信区间明显过大。

(2)方差扩大因子法(VIF)。
(3)特征根判别法

qq图 若满足正太假设,则点应该落在45度直线上,

fited()|列出拟合模型的预测值

【程序】

library("MASS")
attach(iris)
fit1=lm(Sepal.Length~Sepal.Width+Petal.Length+Petal.Width)
fit2=lm(Sepal.Length~1)
stepAIC(fit2,direction = "both",scope = list(upper=fit1,lower=fit2))#逐步回归法
anova(fit1)
summary(fit1)
Sepal.Length
fitted(fit1)
residuals(fit1)
detach(iris)


【结果】
Start:  AIC=-55.6
Sepal.Length ~ 1   #开始就一个截距项

                Df Sum of Sq     RSS      AIC
+ Petal.Length  1    77.643  24.525 -267.641    #-267.641最小
+ Petal.Width   1    68.353  33.815 -219.460
+ Sepal.Width   1     1.412 100.756  -55.690
<none>                      102.168  -55.602    #<none> 表示什么都不做

Step:  AIC=-267.64
Sepal.Length ~ Petal.Length  #所以加入AIC最小的

                Df Sum of Sq     RSS     AIC
+ Sepal.Width   1     8.196  16.329 -326.66   #最小
+ Petal.Width   1     0.644  23.881 -269.63
<none>                       24.525 -267.64
- Petal.Length  1    77.643 102.168  -55.60   #先在Sepal.Length ~ Petal.Length 基础上加入+ Sepal.Width
                                              #在剔除Petal.Length
Step:  AIC=-326.66
Sepal.Length ~ Petal.Length + Sepal.Width  #所以他们两个都符合

                Df Sum of Sq     RSS     AIC
+ Petal.Width   1     1.883  14.445 -343.04  #最小
<none>                       16.329 -326.66
- Sepal.Width   1     8.196  24.525 -267.64
- Petal.Length  1    84.427 100.756  -55.69

Step:  AIC=-343.04
Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width   #最终

                Df Sum of Sq    RSS     AIC
<none>                      14.445 -343.04
- Petal.Width   1    1.8834 16.329 -326.66
- Sepal.Width   1    9.4353 23.881 -269.63
- Petal.Length  1   15.4657 29.911 -235.86

Call:
  lm(formula = Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width)  #所以三个都保留

Coefficients:
  (Intercept)  Petal.Length   Sepal.Width   Petal.Width  
1.8560        0.7091        0.6508       -0.5565  


> anova(fit1)
Analysis of Variance Table

Response: Sepal.Length
                Df Sum Sq Mean Sq F value    Pr(>F)    
Sepal.Width    1  1.412   1.412  14.274 0.0002296 ***  #都显著  ,拟合很好
Petal.Length   1 84.427  84.427 853.309 < 2.2e-16 ***
Petal.Width    1  1.883   1.883  19.035 2.413e-05 ***
Residuals    146 14.445   0.099    


> summary(fit1)

Call:
  lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width)

Residuals:
  Min       1Q   Median       3Q      Max 
-0.82816 -0.21989  0.01875  0.19709  0.84570 

Coefficients:
  Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.85600    0.25078   7.401 9.85e-12 ***
  Sepal.Width   0.65084    0.06665   9.765  < 2e-16 ***
  Petal.Length  0.70913    0.05672  12.502  < 2e-16 ***
  Petal.Width  -0.55648    0.12755  -4.363 2.41e-05 ***
  ---
  Signif. codes:  
  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3145 on 146 degrees of freedom
Multiple R-squared:  0.8586,	Adjusted R-squared:  0.8557   #R平方0.8586  效果不错
F-statistic: 295.5 on 3 and 146 DF,  p-value: < 2.2e-16


还有三条结果太多了,就是实际值,拟合值,残差

复相关系数和偏相关系数
library(“ggm”)
pcor(u,s)
u是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余的数值为条件变量的下标,
s为变量的协方差阵

attach(iris)
cor(Example)
library(psych)
corr.test(Example)
pcor(c(1,5,2,3,4),cov(Example))  #偏相关系数
pcor.test(pcor(c(1,5,2,3,4),cov(Example)),3,n=13)  #偏相关系数统计检验
pcor(c(2,5,1,3,4),cov(Example))
pcor.test(pcor(c(1,5,2,3,4),cov(Example)),3,n=13)
pcor(c(3,5,1,2,4),cov(Example))
pcor.test(pcor(c(1,5,2,3,4),cov(Example)),3,n=13)
pcor(c(4,5,1,2,3),cov(Example))
pcor.test(pcor(c(1,5,2,3,4),cov(Example)),3,n=13)

第十一章 逻辑回归

因变量不是连续的正态变量,而是二分类变量,y=0 或 1
1.非条件逻辑回归(队列研究或者非配对病例,对照研究成组资料分析)

y取某个值的概率P与x的关系,显然如果用P=a+bx1+cx2……是不合适的,因为p取值是0-1
所以进行log变换
log(P)=a+bx1+cx2…… (1)

P(y=1|x)=exp(a+bx)/1+exp(a+bx) (2)

所以ln(P/1-P)=a+bx1+cx2……

22章 统计图

hist(x)  画直方图
plot(x1,x2)散点图
plot(q$x5,q$x6,main="散点图",xlab="数学分析",ylab="高等代数",xlim=c(0,100),ylim=c(0,100),col="red",pch=19)
##其中pch=19指的是图中的点,用什么形状
a=c(1:6)
b=c(2,4,6,8,10,12)
plot(a,b,type="l") #画连线的图
table(x1)
x1
79  80  82  85  88  90  91  92  93  94  95  96  97  98  99 100 
1   1   1   1   4   1   2   1   7   3   4   1   7   4  11  51 
barplot(table(x1)) #画条形图,柱状图
pie(table(x1)) #饼图
boxplot(x1,x2)#箱型图
boxplot(x1,x2,horizontal=T) #水平放置
faces(x1) #脸谱图
stem(x1) #茎叶图
The decimal point is at the |
  
78 | 0
80 | 0
82 | 0
84 | 0
86 | 000
88 | 0000
90 | 000
92 | 00000000
94 | 0000000
96 | 00000000
98 | 000000000000000
100| 000000000000000000000000000000000000000000000000000
 
qqnorm(x1) Q-Q图
qqline(x1)
plot(density(rnorm(1000)))#分布函数密度图

数据集
data()可以得到许多的内置数据集
常用的有iris

heatmap(as.matrix(mtcars),Rowv=NA,Colv=NA,col=heat.colors(256),scale="column",margins=c(2,8),main="Car haracteristics by Model")
热力图
sunflowerplot(iris[,3:4],col="gold",seg.col="gold")
pairs(iris[,1:4])散点图集  这个例子会生成16个图,即1与1,1与2,1与3……,4与1,4与2……,变量之间是否有联系
par(mfrow=c(3,1)) ##par把画布分割成3行1列的,还有更多
plot(x1,x2)
scatterplot3d(x1,x2)画三维散点图.

par(mfrow=c(3,1)) 
par(bg="red")#把整个背景设置颜色
plot(rnorm(1000),col=5)

#只设置坐标轴内的颜色
plot(rnorm(1000),type="n")
x<-par("usr")#获取坐标轴四个角的坐标
rect(x[1],x[3],x[2],x[4],col="lightgray")#设置为亮灰色
points(rnorm(1000))画图

使用title()函数,设置标题,或则横纵坐标的

title("Sales Figures for 2010",col.main="blue")
title(xlab="X axis",col.lab="red") 
title(ylab="Y axis",col.lab="blue")
                
rain<-read.csv("cityrain.csv")


rain <- read.csv("cityrain.csv")
par(mfrow=c(4,1),mar=c(5,7,4,2),omi=c(0.2,2,0.2,2))
for(i in 2:5)
{
  plot(rain[,i],ann=FALSE,axes=FALSE,type="l",col="gray",lwd=2)
  mtext(side=2,at=mean(rain[,i]),names(rain[i]),las=2,col="black")
  mtext(side=4,at=mean(rain[,i]),mean(rain[i]),las=2,col="black")
  points(which.min(rain[,i]),min(rain[,i]),pch=19,col="blue")
  points(which.max(rain[,i]),max(rain[,i]),pch=19,col="red")
}

用par(family=“serif”,font=2)设置Times New Roman字体
0缺省,1粗体,2斜体,3粗斜体

> plot(rain$Tokyo,type="l",col="red",
       + ylim=c(0,300),
       + main="Monthly Rainfall in major cities",
       + xlab="Month of Year",
       + ylab="Rainfall (mm)",
       + lwd=2)
> lines(rain$NewYork,type="l",col="blue",lwd=2)
> lines(rain$London,type="l",col="green",lwd=2)
> lines(rain$Berlin,type="l",col="orange",lwd=2)

par(bty=“u”)这里bty改变坐标轴的样式
plot(x,col=‘RED’,type=“l”,lty=6,lwd=3)

在图的边缘加一个黑框
par(oma=c(1,1,1,1))
plot(x,col=‘RED’,type=“l”,lty=6,lwd=3)
box(which=“figure”)

plot(rnorm(1000),col=5,pch=14,cex=1) #pch对应散点图点的形状,cex代表点的大小
plot(x,col=‘RED’,type=“l”,lty=6,lwd=3) #lwd为线宽
plot(rnorm(100),xaxp=c(0,100,10),yaxp=c(0,5,1))#改变坐标轴的刻度
plot(rnorm(100),main=“Plot Title”,col.axis=“blue”,col.lab=“red”,col.main=“darkblue”)#设置标题为蓝色,坐标题为红色,坐标横线刻度为蓝色

#Ity参数:决定线型
0:blank
1:solid(default)
2:dasked
3:dotted
4:dotdash
5:1ongdash
6:twodash

柱形图

setwd("D:\\R语言学习")
#install.packages("RColorBrewer") #if not already installed
library(RColorBrewer)
citysales<-read.csv("citysales.csv")
barplot(as.matrix(citysales[,2:4]), 
        beside=T,  #beside为TRUE时,表示柱形图,为F时(或者默认不写),表示堆叠图
        legend.text=citysales$City,
        args.legend=list(bty="n",horiz=TRUE),
        col=brewer.pal(5,"Set1"),  #画板,5中颜色
        border="white",
        ylim=c(0,100),
        ylab="Sales Revenue (1,000's of USD)",
        main="Sales Figures")
box(bty="l")
#legend.text=citysales$City表示图例
args.legend=list(bty="n",horiz=TRUE)#水平放置
box(bty="l")#表示坐标轴只有x和y,若为     这里bty改变坐标轴的样式



legend("topright",                                    #图例位置为右上角
      + legend=c("Tokyo","NewYork","London","Berlin"),        #图例内容
      + col=c("red","blue","green","orange"),                 #图例颜色
      + lty=1,lwd=2)                                          #图例大

堆叠效果

citysales<-read.csv("citysales.csv")
barplot(as.matrix(citysales[,2:4]),
        legend.text=citysales$City,
        args.legend=list(bty="n",horiz=TRUE),#水平放置
        col=brewer.pal(5,"Set1"),
        border="white",
        ylim=c(0,200),
        ylab="Sales Revenue(1,000's of USD)",
        main="Sales Figures")
box(bty="l")

用堆叠效果展示百分比
使用第五章数据
citysalesperc<-read.csv(“citysalesperc.csv”)
par(mar=c(5,4,4,8),xpd=T)###mar=c(5,4,4,8)表示图的边缘宽度,xpd=T画图的界限

barplot(as.matrix(citysalesperc[,2:4]),
        col=brewer.pal(5,"Set1"),
        border="white",
        ylab="Sales Revenue (1,000's of USD)",
        main="Percentage Sales Figures")
legend("right",legend=citysalesperc$City,bty="n",###画图例legend,其中bty="n"表示没有方框围住坐标轴
        inset=c(-0.3,0),
        fill=brewer.pal(5,"Set1"))##图例和图的边距离
box(bty="l")

水平方向的柱形图

barplot(as.matrix(citysales[,2:4]),
        beside=TRUE,
        horiz=TRUE,
        legend.text=citysales$City,
        args.legend=list(bty="n"),  #其中bty="n"表示没有方框围住坐标轴
        col=brewer.pal(5,"Set1"),
        border="white",
        xlim=c(0,100), 
        xlab="Sales Revenue(1,000's of USD)",
        main="Sales Figures")
box(bty="l")

展示百分比的堆叠水平方向柱形图

par(mar=c(5,4,4,8),xpd=T)
barplot(as.matrix(citysalesperc[,2:4]),
        horiz=TRUE,
        col=brewer.pal(5,"Set1"),
        border="white",
        xlab="Percentage of Sales",
        main="Perecentage Sales Figures")
legend("right",legend=citysalesperc$City,bty="n",  #其中bty="n"表示没有方框围住坐标轴
       inset=c(-0.3,0),fill=brewer.pal(5,"Set1"))
box(bty="l")

调整柱形图的宽度,间隔和颜色

barplot(as.matrix(citysales[,2:4]),
        beside=TRUE,
        legend.text=citysales$City,
        args.legend=list(bty="n",horiz=T),
        col=c("#E5562A","#491A5B","#8C6CA8","#BD1B8A","#7CB6E4"),
        border=FALSE,
        space=c(0,5),  ##space=c(0,5)表示每个柱子的的距离大小,0表示柱子组内的距离,5表示组与组之间的距离
        ylim=c(0,100),
        ylab="Sales Revenue(1,000's of USD)",
        main="Sales Figures")
box(bty="l")
barplot(as.matrix(citysales[,2:4]),
        beside=T,
        legend.text=citysales$City,
        args.legend=list(bty="n",horiz=T),  #其中bty="n"表示没有方框围住坐标轴
        ylim=c(0,100),ylab="SalesRevenue (1,000's of USD)",
        main="Sales Figures")
box(bty="l")

在柱子顶端显示数据

x<-barplot(as.matrix(citysales[,2:4]),
           beside=TRUE,
           legend.text=citysales$City,
           args.legend=list(bty="n",horiz=TRUE),  #其中bty="n"表示没有方框围住坐标轴
           col=brewer.pal(5,"Set1"),
           border="gray",#m每个柱子的边框
           ylim=c(0,100),ylab="Sales Revenue (1,000'sof USD)",
           main="Sales Figures")
length("top")
y<-as.matrix(citysales[,2:4])
text(x,y+2,labels=as.character(y))##y+2多加一个2
box(bty="l")

水平柱子旁标注数据

y<-barplot(as.matrix(citysales[,2:4]),
           beside=TRUE,horiz=TRUE,
           legend.text=citysales$City,
           args.legend=list(bty="n"),
           col=brewer.pal(5,"Set1"),
           border="white",
           xlim=c(0,100),xlab="Sales Revenue(1,000's of USD)",
           main="Sales Figures")
x<-as.matrix(citysales[,2:4])
text(x+2,y,labels=as.character(x))

在柱子里面进行标注

rain<-read.csv("cityrain.csv")
y<-barplot(as.matrix(rain[1,-1]),
            horiz=T,
            col="white",
            yaxt="n",main=" Rainfall in January",###yaxt="n"表示不显示y轴
            xlab="Rainfall(mm)")
x<-0.5*rain[1,-1]
text(x,y,colnames(rain[-1]))
#box(bty="l")

标注误差

sales<-t(as.matrix(citysales[,-1]))
colnames(sales)<-citysales[,1]
x<-barplot(sales,
           beside=T,
           legend.text=rownames(sales),
           args.legend=list(bty="n",horiz=F),
           col=brewer.pal(3,"Set2"),
           border="white",
           ylim=c(0,100),
           ylab="Sales Revenue (1,000's of USD)",
           main="Sales Figures")
arrows(x0=x,
       y0=sales*0.95,
       x1=x,
       y1=sales*1.05,
       angle=90,
       code=3,
       length=0.04,
       lwd=0.4)
legend("top")
box(bty="l")

s

ales<-t(as.matrix(citysales[,-1]))
colnames(sales)<-citysales[,1]
x<-barplot(sales,
           beside=T,
           legend.text=rownames(sales),
           args.legend=list(bty="n",horiz=T),
           col=brewer.pal(3,"Set2"),
           border="white",
           ylim=c(0,100),
           ylab="Sales Revenue (1,000's of USD)",
           main="Sales Figures")
arrows(x0=x,
       y0=sales*0.95,
       x1=x,
       y1=sales*1.05,
       angle=90,
       code=3,
       length=0.04,
       lwd=0.4)
legend("topright",cex=0.6)
box(bty="l")

plot(x) 以x的元素值为纵坐标、以序号为横坐标绘图
plot(x, y) x(在x-轴上)与y(在y-轴上)的二元作图
sunflowerplot(x, y) 同上, 但是以相似坐标的点作为花朵,其花瓣数目为点的个数
pie(x) 饼图
boxplot(x) 盒形图(“box-and-whiskers”)
stripchart(x) 把x的值画在一条线段上,样本量较小时可作为盒形图的替代
coplot(x~y | z) 关于z的每个数值(或数值区间)绘制x与y的二元图
interaction.plot (f1, f2, y) 如果f1和f2是因子,作y的均值图,以f1的不同值作为x轴,而f2的不
同值对应不同曲线;可以用选项fun指定y的其他的统计量(缺省计算均值,fun=mean)
matplot(x,y) 二元图,其中x的第一列对应y的第一列,x的第二列对应y的第二列,依次类推.
dotchart(x) 如果x是数据框,作Cleveland点图(逐行逐列累加图)
fourfoldplot(x) 用四个四分之一圆显示2times2列联表情况(x必须是dim=c(2, 2,k)的数组,或者是dim=c(2, 2)的矩阵,如果k ? 1)
assocplot(x) Cohen–Friendly图,显示在二维列联表中行、列变量偏离独立性的程度
mosaicplot(x) 列联表的对数线性回归残差的马赛克图
pairs(x) 如果x是矩阵或是数据框,作x的各列之间的二元图
plot.ts(x) 如果x是类"ts"的对象,作x的时间序列曲线,x可以是多元的,但是序列必须有相同的频率和时间
ts.plot(x) 同上,但如果x是多元的,序列可有不同的时间但须有相同的频率
hist(x) x的频率直方图
barplot(x) x的值的条形图
qqnorm(x) 正态分位数-分位数图
qqplot(x, y) y对x的分位数-分位数图
contour(x, y, z) 等高线图(画曲线时用内插补充空白的值),x和y必须为向量,z必须为矩阵,使得dim(z)=c(length(x), length(y)) (x和y可以省略)
filled.contour (x, y, z) 同上,等高线之间的区域是彩色的,并且绘制彩色对应的值的图例
image(x, y, z) 同上,但是实际数据大小用不同色彩表示
persp(x, y, z) 同上,但为透视图
stars(x) 如果x是矩阵或者数据框,用星形和线段画出
symbols(x, y, …) 在由x和y给定坐标画符号(圆,正方形,长方形,星,温度计式或者盒形图),符号的类型、大小、颜色等由另外的变量指定
termplot(mod.obj) 回归模型(mod.obj)的(偏)影响图

add=FALSE 如果是TRUE,叠加图形到前一个图上(如果有的话)
axes=TRUE 如果是FALSE,不绘制轴与边框
type=“p” 指定图形的类型,“p”: 点,“l”: 线,“b”: 点连线,“o”: 同上,但是线在点上,“h”: 垂直线,“s”: 阶梯式,垂直线顶端
显示数据,“S”: 同上,但是在垂直线底端显示数据
xlim=, ylim= 指定轴的上下限,例如xlim=c(1, 10)或者xlim=range(x)
xlab=, ylab= 坐标轴的标签,必须是字符型值
main= 主标题,必须是字符型值
sub= 副标题(用小字体)

低级绘图命令
R的低级作图命令作用于现存的图形上的, 下表给出了一些主要的:
函数名 功能
points(x, y) 添加点(可以使用选项type=)
lines(x, y) 同上,但是添加线
text(x, y, labels,…)
在(x,y)处 添 加 用labels指 定 的 文 字; 典 型 的 用 法 是: plot(x, y,type=“n”); text(x, y, names)
mtext(text, side=3,line=0, …)在边空添加用text指定的文字,用side指定添加到哪一边(参照下面的axis());line指定添加的文字距离绘图区域的行数
segments(x0, y0, x1,y1)
从(x0,y0)各点到(x1,y1)各点画线段
arrows(x0, y0,x1, y1, angle= 30,code=2)同上, 但加画箭头. 如果code=2, 则在各(x0,y0)处画箭头; 如果code=1, 则在
各(x1,y1)处画箭头; 如果code=3, 则在两端都画箭头angle控制箭头轴到箭头
边的角度.
abline(a,b) 绘制斜率为b和截距为a的直线
abline(h=y) 在纵坐标y处画水平线
abline(v=x) 在横坐标x处画垂直线
abline(lm.obj) 画由lm.obj确定的回归线
rect(x1, y1, x2, y2) 绘制长方形,(x1, y1)为左下角,(x2,y2)为右上角
polygon(x, y) 绘制连接各x,y坐标确定的点的多边形
legend(x, y, legend) 在点(x,y)处添加图例,说明内容由legend给定
title( ) 添加标题,也可添加一个副标题
axis(side, vect) 画坐标轴. side=1时画在下边; side=2时画在左边; side=3时画在上边;
side=4时画在右边. 可选参数at指定画刻度线的位置坐标
box( ) 在当前的图上加上边框
rug(x) 在x-轴上用短线画出x数据的位置
locator(n, type=“n”,…)在用户用鼠标在图上点击n次后返回n次点击的坐标(x,y);并可以在点击处绘
制符号(type="p"时)或连线(type="l"时),缺省情况下不画符号或连线

绘图参数
除了低级作图命令之外,图形的显示也可以用绘图参数来改良. 绘图参数
可以作为图形函数的选项(但不是所有参数都可以这样用),也可以用函数par(
)来永久地改变绘图参数,也就是说后来的图形都将按照函数par( )指定的参
数来绘制. 例如,下面的命令:

par(bg=“yellow”)
将导致后来的图形都以黄色的背景来绘制. 有73个绘图参数,其中一些有非常
相似的功能. 这些参数详细的列表可以通过help(par)获得. 下面的表格只列
举了最常用的参数.

参数 功能

> adj 控制关于文字的对齐方式: 0是左对齐,0.5是居中对齐,1是右对齐,值 ? 1时对齐位置在文本右边的地方,取负值时对齐位置在文本左边的地方;如果给出两个值(例如c(0, 0)),第二个只控 制关于文字基线的垂直调整
> bg 指定背景色(例如bg="red", bg="blue"; 用colors( )可以显示657种可用的颜色名)
> bty 控制图形边框形状,可用的值为: "o", "l", "7", "c", "u" 和"]" (边框和字符的外表相像);如果bty="n"则不绘制边框
> cex 控制缺省状态下符号和文字大小的值;另外,cex.axis控制坐标轴刻度数字大小, cex.lab控制  #可以用 cex=sqrt(w$profits)  表示气泡图坐标轴标签文字大小, cex.main控制标题文字大小, cex.sub控制副标题文字大小 
> col 控制符号的颜色;和cex类似,还可用:col.axis, col.lab, col.main, col.sub font
控制文字字体的整数(1: 正常,2: 斜体,3: 粗体,4: 粗斜体);和cex类似,还可用: font.axis, font.lab,font.main, font.sub
> las 控制坐标轴刻度数字标记方向的整数(0: 平行于轴,1: 横排,2: 垂直于轴,3: 竖排)
> lty 控制连线的线型,可以是整数(1: 实线,2: 虚线,3: 点线,4: 点虚线,5: 长虚线,6: 双虚线),或者是不超过8个字符的字符串(字符为从"0"到"9"之间的数字) 交替地指定线和空白的长度, 单位为磅(points)或象素,例如lty="44"和lty=2效果相同 
> lwd 控制连线宽度的数字 
> mar 控制图形边空的有4个值的向量c(bottom, left, top, right), 缺省值为c(5.1, 4.1, 4.1, 2.1) 
> mfcol c(nr,nc)的向量,分割绘图窗口为nr行nc列的矩阵布局,按列次序使用各子窗口 mfrow 同上,但是按行次序使用各子窗口 
> pch 控制符号的类型,可以是1到25的整数,也可以是""里的单个字符(见图 2.4) pch对应散点图点的形状 ps
> 控制文字大小的整数,单位为磅(points) 
> pty 指定绘图区域类型的字符,"s": 正方形,"m":最大利用
> tck 指定轴上刻度长度的值,单位是百分比,以图形宽、高中最小一个作为基数;如果tck=1则绘 制grid tcl
> 同上,但以文本行高度为基数(缺省下tcl=-0.5) 
> xaxt 如果xaxt="n"则设置x-轴但不显示(有助于和axis(side=1,
> ...)联合使用) 
> yaxt 如果yaxt="n"则设置y-轴但不显示(有助于和axis(side=2, ...)联合使用)
> prod=T纵坐标单位以概率

保存画图结果方法

> plot(rnorm(1000))
> png("scatterplot. png") 
> plot(rnorm(1000))
> dev.off()
windows 
2 

点图

install.packages("reshape")
library(reshape)
sales<-melt(citysales)
sales$color[sales[,2]=="ProductA"] <- "red"
sales$color[sales[,2]=="ProductB"] <- "blue"
sales$color[sales[,2]=="ProductC"] <- "violet"
dotchart(sales[,3],
         labels=sales$City,
         groups=sales[,2],
         col=sales$color,
         pch=19,   #pch对应散点图点的形状
         main="Sales Figures",
         xlab="Sales Revenue (1,000's of USD)")

饼图

browsers<-read.table("browsers.txt",header=TRUE)
browsers<-browsers[order(browsers[,2]),]
pie(browsers[,2],
    labels=browsers[,1],#图中标签
    clockwise=TRUE,#顺时针画
    radius=1,#饼图半径
    col=brewer.pal(7,"Set1"),#颜色,调色板
    border="white",#边框
    main="Percentage Share of InternetBrowserusage")

在饼图上标注百分比

browsers<-read.table("browsers.txt",header=TRUE)
browsers<-browsers[order(browsers[,2]),]
pielabels <- sprintf("%s = %3.1f%s", browsers[,1],100*browsers[,2]/sum(browsers[,2]), "%")##在饼图上标注百分比
pie(browsers[,2],
    labels=pielabels,
    clockwise=TRUE,
    radius=1,
    col=brewer.pal(7,"Set1"),
    border="white",
    cex=0.8,
    main="Percentage Share of Internet Browser usage")

增加图释

browsers<-read.table("browsers.txt",header=TRUE)
browsers<-browsers[order(browsers[,2]),]
pielabels <- sprintf("%s = %3.1f%s", browsers[,1],
                     100*browsers[,2]/sum(browsers[,2]), "%")
pie(browsers[,2],
    labels=NA,
    clockwise=TRUE,
    col=brewer.pal(7,"Set1"),
    border="white",
    radius=0.7,
    cex=0.8,
    main="Percentage Share of Internet Browser usage")
legend("bottomright",legend=pielabels,bty="n",fill=brewer.pal(7,"Set1"))##增加图释

直方图
使用第六章数据

air<-read.csv("airpollution.csv")
hist(air$Nitrogen.Oxides,xlab="Nitrogen OxideConcentrations",main="Distribution of NitrogenOxide Concentrations")

以概率密度显示

hist(air$Nitrogen.Oxides,
     freq=FALSE,
     xlab="Nitrogen Oxide
     Concentrations",
     main="Distribution of Nitrogen
     Oxide Concentrations")

增加breaks

hist(air$Nitrogen.Oxides,
     breaks=20,xlab="Nitrogen Oxide
     Concentrations",
     main="Distribution of Nitrogen
     Oxide Concentrations")

指定breaks范围

hist(air$Nitrogen.Oxides,
     breaks=c(0,100,200,300,400,500,600),
     xlab="Nitrogen Oxide
     Concentrations",
     main="Distribution of Nitrogen Oxide
     Concentrations")

用颜色美化

hist(air$Respirable.Particles,
     prob=TRUE,col="black",border="wh
     ite",
     xlab="Respirable Particle
     Concentrations",
     main="Distribution of Respirable
     Particle Concentrations")

用线条美化

par(yaxs="i",las=1)
hist(air$Respirable.Particles,
     prob=TRUE,col="black",border="whi
     te",
     xlab="Respirable Particle
     Concentrations",
     main="Distribution of Respirable
     Particle Concentrations")
box(bty="l")
grid(nx=NA,ny=NULL,lty=1,lwd=1,co
l="gray")

标识密度函数

par(yaxs="i",las=1)
hist(air$Respirable.Particles,
prob=TRUE,col="black",border="white",
xlab="Respirable Particle
Concentrations",
main="Distribution of Respirable Particle
Concentrations")
box(bty="l")
lines(density(air$Respirable.Particles,na.r
m=T),col="red",lwd=4)
grid(nx=NA,ny=NULL,lty=1,lwd=1,col="
     gray")

一组直方图

panel.hist <- function(x, ...)
{
par(usr = c(par("usr")[1:2], 0, 1.5) )
hist(x,
prob=TRUE,add=TRUE,col="bla
ck",border="white")
}
plot(iris[,1:4],
main="Relationships between
characteristics of iris flowers",
pch=19,col="blue",cex=0.9,
diag.panel=panel.hist)
发布了4 篇原创文章 · 获赞 1 · 访问量 104

猜你喜欢

转载自blog.csdn.net/qq_42374697/article/details/104079544
今日推荐