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蒙特卡洛模拟

打赏

暂无评论

发布评论