R---第三章___基础

计算数据框中某类参数的所需的数

str(airquality)
summary(airquality)
mean(airquality$Ozone,na.rm=T)   #na.rm默认是F,但得到的数也是缺失值,所以要=T,忽略缺失值
mean(airquality$Ozone,na.rm=T,trim=0.01) #trim是切尾,按比例各去掉百分之一的头和尾巴,再计算mean

加权平均数

temp100=rnorm(100,30,1) #rnorm(n,mean=30,sd=1) n个,平均值是mean,方差是1,默认mean=0,sd=1
w=1:100  #随即产生了100年的温度,第一年的温度没参考价值w=1
temp100
library(stats)
(wtm<-weighted.mean(temp100,w,na.rm=T))  #加权平均数 w是权数,
(tm=mean(temp100,na.rm=T)) #又顺便求一下平均数

几何平均数

x<-c(0.045,.021,.255,.019)

(xm=mean(x))
(xg=exp(mean(log(x))))  

中位数

(tmid=median(temp100,na.rm=T))  

分位数

quantile,就很常跟probs

(quantile(airquality$Temp,na.rm=T))
quantile(airquality$Temp,probs=c(0,0.1,0.9,1))

方差和标准差

方差var()

(tv=var(temp100))  #var方差
temp100
(ts=sd(temp100)) #sd标准差
ts^2   #标准差的平方等于方差

函数fivenum()

fivenum(temp100)   #五个数分别是:最小值,lower-hinge,中位数,upper-hinge,最大值
#lower-hinge是先取中间两个数得到中位数(100个),再前49加上这个中位数,再取前50个的中位数
quantile(temp100)

协方差cov()

summary(airquality)
cov(airquality[,-5:-6],use='pairwise.complete.obs')  #cov求协方差,把五六列去掉月份和天数  use是配对删除
cov(airquality[,-5:-6],use='complete.obs')  #use是整行删除   
var(airquality$Ozone,na.rm = T)
var(airquality$Solar.R,na.rm = T)
#协方差的表格对角线就是他自己的方差

相关系数cor()

cor(airquality[,-5:-6],use='pairwise.complete.obs')   #cor求相关系数
cor(airquality[,-5:-6],use='complete.obs')    
apply(airquality[,c(-5,-6)],2,FUN=mean,na.rm=T)

去掉5、6列,在将每列进行mean操作

分组统计量

split(airquality[,-5:-6],airquality$Month) #根据Month将去掉5,6列的airquality进行分组,简单的  返回的是列表
airquality
sapply(split(airquality$Temp,airquality$Month),FUN = quantile,probs=c(0,0.1,0.9,1)) 
#前面的split是按月份将温度分组,FUN就在对其中细的进行分组,quantile就分位数进行分组,quantile后就有了probs
lapply(split(airquality$Temp,airquality$Month),FUN = quantile,probs=c(0,0.1,0.9,1)) 
#laaply和sapply 一样的就返回的不一样,lapply返回的是列表,sapply是向量或矩阵,通常用sapply好看点

sapply(split(airquality$Temp,list(airquality$Month,airquality$Day)),FUN = quantile,probs=c(0,0.1,0.9,1))
#就按月份和日期进行分组了,因为有两个,就把他们组成了一个list放一起,因为他这个DAY一天只有一条数据,不太好看,如果一天很多条数据就会好一点

tapply(airquality$Temp,airquality$Month,FUN = quantile,probs=c(0,0.1,0.9,1)) 
#tapply不像sapply,不用split进行分组了,但结果是一个list

split后就先显示月份,再其他信息

上面这些分类统计量的缺点是,只能处理一个变量(就最前面那个)

aggregate(airquality[,-5:-6],by=list(airquality$Month),FUN=mean,na.rm=T)#na.rm是丢给mean的
aggregate(airquality[,-5:-6],by=list(airquality$Month,airquality$Day),FUN=mean,na.rm=T)#因为这个DAY只有一天,就很蠢取mean

aggregate(cbind(Ozone,Solar.R)~Month,data=airquality,FUN=quantile,probs=c(0,.1,.9,1))
#前面ozone,solar.r是数据集,month是分组的列

例子:

airquality
attach(airquality)
cor(Ozone,Wind,use='pairwise.complete.obs') #求的ozone和wind的相关系数
by(cbind(Ozone,Wind),Month,function(m) cor(m[,1],m[,2],use='pairwise.complete.obs'))
#ozone和wind按Month进行分组,再求相关系数,就不同月ozone和wind的相关系数
as.vector( by(cbind(Ozone,Wind),Month,function(m) cor(m[,1],m[,2],use='pairwise.complete.obs')))
#将上面那个结果转为向量的形式
detach(airquality)

可视化

①单变量

散点图

x=rnorm(1000,100,5) #rnorm(n,mean=30,sd=1) n个,平均值是mean,方差是1,默认mean=0,sd=1

plot(x) #散点图,x轴是100个数的编号,像正态分布,rnorm就是正态分布的差不多的东西
abline(h=100)  #h是高度,abline是画一条直线

plot(airquality$Ozone)

 

箱线图boxplot

boxplot(airquality$Ozone) 
?boxplot  #也可以查下参数,再水平摆放
boxplot(airquality$Ozone,horizontal=T)  #他有两个边,边中间有一个长方形,再长方形里面有一个竖线
#两个边对应的最小值和最大值(对于标准的箱线图,外面没点),长方形左边的是25%的分位点,右边是75%分位点.里面的竖线是50%的分位点
#当然还可以改箱子的两边的分位点的百分比
#长方形的宽度是IQR(四分位距),第一、三个四分位数之间的间距
#最右边的竖线到箱子的右边不能超过1.5*IQR,如果有最大值超过了这个,就最右边的竖线用1.5*IQR来划
#这个图箱子外面的两个点,是超出的两个点,就说明可能是异常值
airquality$Ozone

 直方图hist

hist(x)
hist(airquality$Ozone)
hist(airquality$Ozone,breaks=seq(0,180,5),prob=T) 
#就改变每条柱子的宽度,0到180之间每5个一条柱子,prob=T就不在统计频数了,改为频率(纵坐标)
lines(density(airquality$Ozone,na.rm=T),col=3,lw=4)
#density是生成密度数据,再用lines连起来,是核密度估计图

 

画布布置

par(mfrow=c(1,2)) #控制画布的布局
hist(airquality$Ozone,breaks=seq(0,180,5),prob=T) #画了直方图
lines(density(airquality$Ozone,na.rm=T),col=3,lw=4) #画了核密度估计图 col=3颜色是绿色,lw=4控制粗细
library(carData)
library(car)
qqPlot(airquality$Ozone) #qq图是专门用来看是否符合正态分布的,之间的直线是如果是标准的正态分布的话,点全在直线上,边上的两条线是95%的置信区间,

par(mfrow=c(1,1))  #再把画布还原回去

 

par(mfrow=c(1,3))  #par画布分为三个
attach(airquality)
plot(density(Ozone,na.rm=T))
abline(v=mean(Ozone,na.rm=T),col='red',lw=2) #红色均值线,v是垂直的维度
abline(v=median(Ozone,na.rm=T),col='green',lw=2) #绿色中位数线
#看图是右偏的数据,就说明有很多极大值的存在,拉着均值往右跑,如果两侧对称的就会重合,均值比中位数大
boxplot(Ozone)
abline(h=mean(Ozone,na.rm=T),col='red',lw=2) #h是水平的维度
vioplot(na.omit(airquality$Ozone))  #小提琴图把箱线图和核密度估计图结合起来
abline(h=mean(Ozone,na.rm=T),col='red',lw=2)
par(mfrow=c(1,1))  #再把画布还原回去
detach(airquality)

但是他那个vioplot包安装不了 什么sm包,,,就只显示了两个图

 

table()看频数

table(airquality$Month) #table看的频数表
barplot(table(airquality$Month))#再画成柱状图

 

②双变量的可视化

散点图()

先简单看下散点图

attach(airquality)
plot(Wind,Temp)
detach(airquality)

添加回归线:

1、一元线性回归y=ax+b  直线 黑色的

attach(airquality)
plot(Wind,Temp)


alm=lm(Temp~Wind)   #做了一个回归模型放到了alm里面
abline(alm$coefficients)  #回归模型的coefficients画出来

2、局部加权回归 :画的红色的线

alowess=loess(Temp~Wind)  #首先得到回归模型loess放到alowess里面

ord=order(Wind)
lines(Wind[ord],alowess$fitted[ord],lwd=1,col=2,lty=2)
detach(airquality)

他这个col可以是数字也可以说直接'red'、‘blue'

lwd参数是线宽,1=默认线宽、n=默认线宽的n倍、-n=默认线宽的1/n倍

lty参数是设置线的类型1=实线、2=虚线、3=点线、4=点+短虚线、5=长虚线、6=点+长虚线

问题:解决数据点重叠

x=rbinom(1000,10,0.1)
y=rbinom(1000,10,0.1) #先构造两个数据集,有1000个数据点,都重复到一块了 一个小白点后面有很多个点

par(mfrow=c(1,4))     #分为4个画布
plot(x,y)
sunflowerplot(x,y,cl='red',seg.col='blue') #向日葵seg.col花瓣的颜色蓝色
plot(jitter(x),jitter(y))    #扰动的方式jitter
smoothScatter(x,y)     #蘑菇


第一个plot就全部都重叠在一起了

散点图集

pairs(airquality[,-5:-6]) #就有点像相关系数的那个表
plot(airquality[,-5:-6])  #跟上面这个画出来一样的
#错误的函数:
scatterPlotMatrix((airquality[,-5:-6]),lty.smooth=2,spread=F)  #NO不是这个
?scatterPlotMatrix   #NO不是这个
#真正的函数:
car::scatterplotMatrix((airquality[,-5:-6]),lty.smooth=2,spread=F)   #是car包里的

第一个图里最下面的竖线是密度分布一样的,一元线性回归线 直线,曲线是局部加权回归曲线
smooth=2就是画局部加权回归曲线

 用了scatterplot后才有的下面这个蓝色的图

相关系数


library(corrgram)
corrgram(airquality[,-5:-6],lower.panel=panel.conf,upper.panel=panel.pie,text.panel=panel.txt)
#都是n*n的,下三角区是相关系数,括号里面的相关系数的区间估计,是对称矩阵,看颜色来对于正负相关,正的蓝色
#lower.panel=conf控制下三角区是数字,upper.panel=pie控制上三角区是pie,斜对角可以是text.panel文字区也可以是diag.panel对角区

 

corrgram(airquality[,-5:-6],lower.panel=panel.conf,upper.panel=panel.pts,diag.panel=panel.minmax) 
#pts是散点图,斜对角里面还展示了左下和右上的最小值和最大值

马赛克图

library(grid)
library(vcd)   #马赛克图  就随便看看
mosaic(~cyl+gear,data=mtcars,shade=T,legend=T)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值