中心极限定理 central limit theorem
中心极限定理是很多统计的基础,解释自然界中大多数数据属于正态分布,这使得正态分布在统计学中的应用非常广泛。「为什么中心极限定理能够解释数据属于正态分布,接下来我们就以不同类型的原始数据进行证明。」
even if you’re not normal,the average is normal
中心极限定理指的是给定一个任意分布的总体(除了无法计算均值的分布以外)。每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。然后把这 m 组抽样分别求出平均值。这些平均值的分布接近(符合)正态分布。(除了柯西分布(Cauchy distribution)没有样本均数外,几乎所有的其他分布都能计算样本均数。)
运用举例
当我们在进行实践的时候,我们往往不能知道样本数据来源于哪种分布。「基于中心极限定理,不管样本数据来源于哪种分布,样本均值们均属于正态分布,故我们不用考虑数据来源的分布」。
利用样本均值们属于正态分布这一性质,计算置信区间(confidence intervals)。t-test可以用于检验两样本的均值是否具有统计差异;ANOVA用于检验三样本的均值是否具有统计差异;或者其他使用样本均值的检验
实际数据 证明1——原始数据为均匀分布
例如在「均匀分布(在相同长度间隔的分布概率是等可能的)」 中随机抽样20个样本,接着计算20个样本的均值。
重复以上步骤20次、100次,将20个、100个均值结果绘制成直方图。随着重复次数的增多,越来越多的均值分布呈现出正态分布的趋势。「大量随机试验均值的分布为正态分布,这就是中心极限定理。」 「即使取样的原始总体属于均匀分布,但来自均匀分布的均值属于正态分布。」
实际数据证明2——原始数据为指数分布
R语言代码
数据集准备
# rm(list = ls())
library(tidyverse)
library(ggplot2)
df <- data.frame(x = 1:100,
y1 = dnorm(1:100,50,20),
y2 = dunif(1:100,1,100),
y3 = dexp(1:100,0.06)) %>% as_tibble()
set.seed(1004)
head(df)
## # A tibble: 6 x 4
## x y1 y2 y3
## <int> <dbl> <dbl> <dbl>
## 1 1 0.000992 0.0101 0.0565
## 2 2 0.00112 0.0101 0.0532
## 3 3 0.00126 0.0101 0.0501
## 4 4 0.00142 0.0101 0.0472
## 5 5 0.00159 0.0101 0.0444
## 6 6 0.00177 0.0101 0.0419
rn1 <- rnorm(100,50,20)
set.seed(1004)
rn2 <- runif(100,1,100)
set.seed(1004)
rn3 <- rexp(100,0.06)
rn <- data.frame(x = 1:100,
rn1 = rn1,
rn2 = rn2,
rn3 = rn3)
head(df)
## # A tibble: 6 x 4
## x y1 y2 y3
## <int> <dbl> <dbl> <dbl>
## 1 1 0.000992 0.0101 0.0565
## 2 2 0.00112 0.0101 0.0532
## 3 3 0.00126 0.0101 0.0501
## 4 4 0.00142 0.0101 0.0472
## 5 5 0.00159 0.0101 0.0444
## 6 6 0.00177 0.0101 0.0419
分布表图展示
#1.正态分布
(p1 <- ggplot(df,aes(x = x,y = y1))+
geom_line()+theme_classic())
#2.均匀分布
(p2 <- ggplot(df,aes(x = x,y = y2))+
geom_line()+theme_classic())
#3.指数分布
(p3 <- ggplot(df,aes(x = x,y = y3))+
geom_line()+theme_classic())
p1+p2+p3
三种分布分别证明
第一种-正态分布数据的均值分布
#画均值竖线
(a1 <- p1)
n <- c()
# n <- vector()
?sample
# sample(1:8,8,replace = F)
# sample(seq(1,8),8,replace = F)
for(i in 1:100){
n[[i]] <- mean(sample(rn$rn1,50,replace = F))
a1 <- a1 + geom_vline(xintercept = n[[i]],color = "red",size = 0.3,alpha = 0.3)
}
a1
#画直方图
dat = data.frame(n = n)
b1 = ggplot(dat,aes(x = n,y = ..density..))+
geom_histogram(color = "#D0505D",
fill = "#D0505D",
alpha = 0.4,binwidth = 1)+
theme_classic()+labs(x="n (mean value)") +
scale_y_continuous(expand = c(0,0))
b1
#加正态曲线
# 根据上述的直方图找到 类似直方图的 均值 和 方差
?dnorm
y = data.frame(
x = seq(40,62,0.2),
y1 = dnorm(seq(40,62,0.2),50,2))
(b1 = b1 + geom_line(aes(x = x,y = y1),data = y))
a1 + b1
第二种-均匀分布数据的均值分布
#画均值竖线
a2 = p2
n = c()
for(i in 1:100){
n[[i]] = mean(sample(rn$rn2,50))
a2 = a2 + geom_vline(xintercept = n[[i]],color = "red",size = 0.3,alpha = 0.3)
}
#画直方图
dat = data.frame(n = n)
b2 = ggplot(dat,aes(x = n,y = ..density..))+
geom_histogram(color = "#D0505D",
fill = "#D0505D",
alpha = 0.4,binwidth = 1)+
theme_classic()+labs(x="n (mean value)") +
scale_y_continuous(expand = c(0,0))
b2
#加正态曲线
# 根据上述的直方图找到 类似直方图的 均值 和 方差
y = data.frame(
x = 40:62,
y1 = dnorm(40:62,50,3))
b2 = b2 + geom_line(aes(x = x,y = y1),data = y)
a2 + b2
第三种-指数分布数据的均值分布
#画均值竖线
a3 = p3
n = c()
for(i in 1:100){
n[[i]] = mean(sample(rn$rn3,50))
a3 = a3 + geom_vline(xintercept = n[[i]],color = "red",size = 0.3,alpha = 0.3)
}
#画直方图
dat = data.frame(n = n)
b3 = ggplot(dat,aes(x = n,y = ..density..))+
geom_histogram(color = "#D0505D",
fill = "#D0505D",
alpha = 0.4,binwidth = 1)+
theme_classic()+labs(x="n (mean value)") +
scale_y_continuous(expand = c(0,0))
b3
#加正态曲线
# 根据上述的直方图找到 类似直方图的 均值 和 方差
y = data.frame(
x = seq(11,22,0.1),
y1 = dnorm(seq(11,22,0.1),16.5,1.5))
b3 = b3 + geom_line(aes(x = x,y = y1),data = y)
a3 + b3
中心极限定理指的是给定一个任意分布的总体(除了无法计算均值的分布以外)。每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。然后把这 m 组抽样分别求出平均值。这些平均值的分布接近(符合)正态分布。
# 总结
library(patchwork)
(p1+p2+p3)/(a1+a2+a3)/(b1+b2+b3)
参考链接(主要从以下2个链接搬运)
正态分布与中心极限定理
即使你不normal,平均值也normal–神奇的中心极限定理