相信很多都对前面我说的R语言感兴趣吧,分享一下我的资料吧。这是关于验证中心极限定理的R程序!
######验证:无论随机变量原来服从哪种分布,只要样本容量足够大,
#########其均数都会服从正态分布
###1.正态分布####
a<-rnorm(10000,0,1) #生成一个数据量很大的正态分布的数据
x<-1:100 #生成一个向量用来存放样本均数的向量
a<-data.frame(a) #将这两个向量存放在数据框中
x<-data.frame(x)
windows(1280,720);par(mfrow=c(2,2))
plot(density(a$a),main = "这是原来的分布")
hist(a$a,main = "这是原来的分布")
for(i in 1:100){ #设置循环,循环抽取100个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),1000),]
m=mean(c)
# print(m) #验证该循环可以正常工作
x$x[i]<-m
}
plot(density(x$x),main = "这是抽取的样本的均数的分布") #绘制抽取样本的均值的分布概率密度图
hist(a$a,main = "这是抽取的样本的均数的分布")
##将上面的程序加以改造,以验证其它形式的分布
### 2.0 指数分布####
a<-rexp(100000,1) #生成一个数据量很大的指数分布的数据
x<-1:100 #生成一个用来存放样本均数的数据框
a<-data.frame(a) #将这两个向量存放在数据框中
x<-data.frame(x)
windows(1280,720);par(mfrow=c(1,2))
plot(density(a$a),main = "这是原来的分布")
for(i in 1:10000){ #设置循环,循环抽取100个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),1000),]
m=mean(c)
# print(m) #验证该循环可以正常工作
x$x[i]<-m
}
plot(density(x$x),main = "这是抽取的样本的均数的分布") #绘制抽取样本的均值的分布概率密度图
### 3.0 t分布####
a<-rt(100,2) #生成一个数据量很大的t分布的数据
x<-1:1000 #生成一个用来存放样本均数的数据框
a<-data.frame(a) #将这两个向量存放在数据框中
x<-data.frame(x)
windows(1280,720);par(mfrow=c(1,2))
plot(density(a$a),main = "这是原来的分布") #查看原始数据的分布状态
for(i in 1:1000){ #设置循环,循环抽取1000个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),10),]
m=mean(c)
# print(m) #验证该循环可以正常工作
x$x[i]<-m
}
plot(density(x$x),main = "这是抽取的样本的均数的分布") #绘制抽取样本的均值的分布概率密度图
###4.0 F分布####
a<-rf(10000,1,5) #生成一个数据量很大的F分布的数据
x<-1:1000 #生成一个用来存放样本均数的数据框
a<-data.frame(a) #将这两个向量存放在数据框中
x<-data.frame(x)
windows(1280,720);par(mfrow=c(1,2))
plot(density(a$a),main = "这是原来的分布")
for(i in 1:1000){ #设置循环,循环抽取1000个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),1000),]
m=mean(c)
# print(m) #验证该循环可以正常工作
x$x[i]<-m
}
plot(density(x$x),main = "这是抽取的样本的均数的分布") #绘制抽取样本的均值的分布概率密度图
###5.0卡方分布 ####
a<-rchisq(100000,1) #生成一个数据量很大的卡方分布的数据
x<-1:1000 #生成一个用来存放样本均数的数据框
a<-data.frame(a) #将这两个向量存放在数据框中
x<-data.frame(x)
windows(400,400);par(mfrow=c(1,2))
plot(density(a$a),main = "这是一组呈卡方分布的数据")
for(i in 1:1000){ #设置循环,循环抽取100个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),1000),]
m=mean(c)
# print(m) #验证该循环可以正常工作
x$x[i]<-m
}
plot(density(x$x),main = "这是从上述卡方分布的数据中抽取的1000个样本的均值分布")
#绘制抽取样本的均值的分布概率密度图
### 6.0 函数解决方案####
myfun<-function(a){
x<-1:100 #先生成一个1到100的序列,后面可以更改这些值,相当于覆盖掉原来的值
x<-data.frame(x)
a<-data.frame(a)
for(i in 1:100){ #设置循环,循环抽取100个样本,并将计算出来的均值赋值给数据框中的x变量
c<-a[sample(nrow(a),1000),]
m=mean(c)
x$x[i]<-m
}
windows(1280,720);par(mfrow=c(2,2))
plot(density(a$a),main = "这是原来的分布")
hist(a$a,main = "这是原来的分布",col='skyblue')
plot(density(x$x),main = "这是抽取的样本的均数的分布")
hist(a$a,main = "这是抽取的样本的均数的分布",col='skyblue')
}
###6.1正态分布####
a<-rnorm(10000,0,1)
myfun(a)
###6.2指数分布####
b<-rexp(100000,1)
myfun(b)
###6.3 t分布####
c<-rt(1000,3)
myfun(c)
###6.4 F分布####
d<-rchisq(100000,1)
myfun(d)
本文转自 寂岚峰 51CTO博客,原文链接:http://blog.51cto.com/13271983/1970262,如需转载请自行联系原作者