3_R与统计视频笔记
一.定性数据
生成一组电影评分
set.seed(123)
ranks <- as.factor(sample(10,40,replace = T))
#> ranks
#[1] 3 8 5 9 10 1 6 9 6 5 10 5 7 6 2 9 3 1 4 10 9 7
#[23] 7 10 7 8 6 6 3 2 10 10 7 8 1 5 8 3 4 3
#Levels: 1 2 3 4 5 6 7 8 9 10
table(ranks) #频率分布表格
做数据的汇总,定性数据归类
ranks
1 2 3 4 5 6 7 8 9 10
3 2 5 2 4 5 5 4 4 6
定性数据的可视化:柱状图
barplot(table(ranks),space=0,border=0,col="blue",main="Title") #space是图之间的空隙。border是描边,数字代表描边颜色。
相对频率分布
table(ranks)/length(ranks)
#ranks
1 2 3 4 5 6 7 8 9 10
0.075 0.050 0.125 0.050 0.100 0.125 0.125 0.100 0.100 0.150
百分比相对频率分布
table(ranks)/length(ranks)*100
#ranks
# 1 2 3 4 5 6 7 8 9 10
# 7.5 5.0 12.5 5.0 10.0 12.5 12.5 10.0 10.0 15.0
定性数据的可视化:饼图
pie(table(ranks),border = 0,edges=50) #border为线的颜色,edges为边的数量,
二.定量数据
生成一组身高分布
set.seed(123)
heights <- rnorm(40,171,5)
heights
#[1] 168.1976 169.8491 178.7935 171.3525 171.6464 179.5753 173.3046
#[8] 164.6747 167.5657 168.7717 177.1204 172.7991 173.0039 171.5534
#[15] 168.2208 179.9346 173.4893 161.1669 174.5068 168.6360 165.6609
#[22] 169.9101 165.8700 167.3555 167.8748 162.5665 175.1889 171.7669
#[29] 165.3093 177.2691 173.1323 169.5246 175.4756 175.3907 175.1079
#[36] 174.4432 173.7696 170.6904 169.4702 169.0976
将数据分为区间
b <- seq(from =160,to = 181,by =3) #生成等差数列
heights.cut <- cut(heights,breaks = b,right = F) #cut函数,将元素变成所在区间,break表示组距。right 表示是否右闭左开
table(heights.cut)
#heights.cut
#[160,163) [163,166) [166,169) [169,172) [172,175) [175,178) [178,181)
# 2 4 7 10 8 6 3
此时
heights.cut # > class(heights.cut) [1] "factor"
#[1] [166,169) [169,172) [178,181) [169,172) [169,172) [178,181)
#[7] [172,175) [163,166) [166,169) [166,169) [175,178) [172,175)
#[13] [172,175) [169,172) [166,169) [178,181) [172,175) [160,163)
#[19] [172,175) [166,169) [163,166) [169,172) [163,166) [166,169)
#[25] [166,169) [160,163) [175,178) [169,172) [163,166) [175,178)
#[31] [172,175) [169,172) [175,178) [175,178) [175,178) [172,175)
#[37] [172,175) [169,172) [169,172) [169,172)
#7 Levels: [160,163) [163,166) [166,169) [169,172) ... [178,181)
有趣的地方:a <- as.numeric(heights.cut)
定量数据的可视化:直方图
barplot(table(heights.cut),space=0,border=0) #只能画table图。可定义性强
hist(heights,breaks = 10) #自动画数值型的图。更简单一些,自动分组。括号里必须为数值型
定量数据的可视化:茎叶图
stem(heights,scale =2) #scale是小数点控制
定量数据的总结
h <- hist(heights,plot = F,breaks = b,right = F) #plot = F,不画图
h$mids #中点
#[1] 161.5 164.5 167.5 170.5 173.5 176.5 179.5
h$counts 计数
#[1] 2 4 7 10 8 6 3
定量数据的可视化:多边形
将中点连接起来
plot(h$mids,h$counts,type="l")
points(h$mids,h$counts,pch=19)
累积频率分布
cumsum(table(heights.cut))
#(160,163] (163,166] (166,169] (169,172] (172,175] (175,178] (178,181]
# 2 6 13 23 31 37 40
相对频率分布
cumsum(table(heights.cut)/length(heights))
(160,163] (163,166] (166,169] (169,172] (172,175] (175,178] (178,181]
0.050 0.150 0.325 0.575 0.775 0.925 1.000
定量数据的可视化:分布
plot(cumsum(table(heights.cut)),pch=19,xaxt="n") #pch为绘图符号
axis(1,at = 1:(length(b)-1),labels = b[2:length(b)]) #绘制坐标系,1代表1位置
lines(cumsum(table(heights.cut))) #画线
定量数据的可视化:散点图
两组数据在同一张图上
生成另外一组体重
set.seed(123)
weights <- rnorm(40,120,15)
plot(heights,weights,pch = 19)
三.数据实战
setwd( "H:/程序语言学习/R/学习材料/[www.97zixue.com]数据、文档、代码")
为了读excel, install.packages("xlsx")
library(xlsx)
df <- read.xlsx("HousePriceData.xlsx",sheetIndex = 1,stringsAsFactors = F)
str(df) #查看数据框的信息
View(df) #查看数据框内容
df$Beds <- as.factor(df$Beds)
df$Baths <- as.factor(df$Baths)
table(df$Beds) #频率分布表格
ftBeds <- table(df$Beds) #保存下来
table(df$Beds)/length(df$Beds) #相对频率分布表格
paste(table(df$Beds)/length(df$Beds)*100, "%", sep='') #将频率分布变成百分比频率分布向量
pie(ftBeds,border = 0) #饼图
barplot(ftBeds,space = 0.05,border = 0, col = "blue") #柱状图,Y轴频数,频率分布,需要给table
hist(df$Price,border = 0,col = "blue",plot = T) #直方图,自动分组,画频数
hist(df$Price,plot = F) #可以查看很多数据
四.扩充
dplyr包
library(dplyr)
a <- group_by(df,Beds) #df按照Beds进行分组
b <- summarise(a,Price = mean(Price))
b #不同卧室数的房子,均价是多少
c <- group_by(df,Baths,Beds) #df按照Baths和Beds进行分组,多个条件
d <- summarise(c,Price = mean(Price))
d #得到一个综合的分组
五.数据的计算
set.seed(123)
heights <- rnorm(40, mean = 171, sd = 3)
sum(heights)/length(heights) #平均数,手工
mean(heights) #平均数,自动
median(heights) #中位数
quantile(heights,probs = 0.15,type = 6) #加权分位数,有15%的数小于它,它是哪个数。type类型很多.%50是中位数
fivenum(heights) #算数分位数
summary(heights) #和上面的类似
heights <- sort(heights) #数值排序,从小到大
max(heights)
min(heights)
异常值检验
1.5*IQR()
箱线图:图版的summary()
boxplot(heights,horizontal = T,pch = 8) #horizontal是方向
boxplot(c(heights,226),horizontal = T,pch = 8)
var(heights) #方差
sd(heights) #标准差
sd(heights)/mean(heights) #变异系数
cov(heights,weights) #协方差,看正负。正表示,我的身高大于平均值的时候,我的体重也倾向于大于平均值。
cor(heights,weights) #相关系数,参考https://www.zhihu.com/question/20852004看协方差和相关系数
六.抽样分布
抽样方法
方差:样本之间的不同
偏差:整体的偏移
normaldata <- rnorm(99999,mean = 4,sd = 1.2)
sample1 <- sample(normaldata,size=1000,replace = F) #抽样
hist(sample1,border = 0,col = "black")
蒙特卡洛模拟的抽样分布
set.seed(123)
mus <- vector()
for(i in 1:9999){
d <- runif(999,0,10)
mus <- c(mus,mean(d))
}
中央极限定理
样本量足够大的话,满足正态分布
N 连续概率
5.1均匀分布
画均匀分布密度函数
a <- seq(from=2,to=6,length = 100)
plot(a,dunif(a,2,6),type="l",xlab="u",ylab="pdf",lwd=2,ylim=c(0,0.3)) #unif为均匀分布名称。前面加d就是求频率分布
segments(x0=2,y0=0,x1=2,y1=1/4,lwd=2) #画竖线
segments(x0=6,y0=0,x1=6,y1=1/4,lwd=2)
dunif(a,2,6):a分布在2,6的频率分布密度函数,这里2和6是分布的上下边缘
runif(100,2,6):随机生成100个均匀分布,分布在2~6上
punif(3,2,6):小于等于某个数的概率,即2~6的均匀分布小于等于3的概率,即分布函数
qunif(0.8,2,6):与p相反,知道概率,求值
polygon(x = c(2,2,3,3),y = c(0,.25,.25,0),col="gray") #画出一块灰色的多边形
5.2正态分布
画正态密度函数
a <- seq(from=-5,to=5,length = 300)
par(mfrow = c(2,1))
plot(a,dnorm(a),type="l",xlab="x",ylab="pdf",lwd=2,ylim=c(0,0.8)) #密度函数
plot(a,pnorm(a),type="l",xlab="x",ylab="cdf",lwd=2,ylim=c(0,1)) #分布函数
其他前缀与均匀分布相同
5.3蒙特卡洛模拟