R_course_3:正态分布置信区间编程

1. 自定义函数

 # 自定义函数f,需要自己初始化时输入随机种子数目,均值,标准差,显著性水平
 f<-function(n,mean,sd,alpha){
   data<-rnorm(n,mean,sd) # 产生随机数
   xb<-mean(data) # 样本均值
   sd<-sd(data) # 标准差
   u<-qnorm(1-alpha/2) # 上alpha/2分位数
   interval<-c(xb-u*sd/sqrt(n),xb+u*sd/sqrt(n)) # 置信区间
   len<-interval[2]-interval[1] # 置信区间长度
   flag<-0 # 这一步也是十分必要的!
   if(interval[1]<0 & interval[2]>0) flag<-1 # 如果置信区间包含真实参数,则计数加1
   # 结果列表
   result<-list(interval_1=interval[1],interval_2=interval[2],len=len,flag=flag)
   return(result) # 返回结果列表
 }

2. 初始化参数

 iter<-10000 # 初始化迭代器
 n<-100 # 初始化每次抽样的数目
 mean<-0 # 初始化随机数均值
 sd<-1 # 初始化随机数标准差
 alpha<-0.05 # 初始化显著性水平
 interval_1<-0 # 初始化置信区间下限
 interval_2<-0 # 初始化置信区间上限
 flag_0<-0 # 初始化一个flag
 len_0<-0 # 初始化区间长度值

3. 迭代运行

 for(i in 1:iter){
   f1<-f(n,mean,sd,alpha) # 调用自定义函数记为f1
   interval_1<-interval_1 + f1$interval_1 # 下限迭代相加
   interval_2<-interval_2 + f1$interval_2 # 上限迭代相加
   len_0<-len_0 + f1$len # len迭代相加
   flag_0<-flag_0 + f1$flag # flag迭代相加
 }

4. 输出结果展示

 interval_1_mean<-interval_1 / iter # 获得平均置信区间下限
 print(paste("平均置信区间下限:",interval_1_mean)) # 输出
 interval_2_mean<-interval_2 / iter # 获得平均置信区间上限
 print(paste("平均置信区间上限:",interval_2_mean)) # 输出
 len_mean<-len_0 / iter # 获得平均置信区间长度
 print(paste("平均置信区间长度:",len_mean)) # 输出
 flag_mean<-flag_0 / iter # 获得置信区间包含真实参数的比例
 print(paste("置信区间包含真实参数的比例为:",flag_mean)) # 输出

结果

 [1] "平均置信区间下限: -0.196096613970732"
 [1] "平均置信区间上限: 0.194534569173098"
 [1] "平均置信区间长度: 0.390631183143831"
 [1] "置信区间包含真实参数的比例为: 0.9478"

5. 总结

今天在编程的时候主要的症结在于变量的范围,即全局变量和局部变量之间的范围问题。对于这种问题解决方式可以让自定义的函数return自己需要的值(list列表形式),然后进行调用($,定义为向量不可调用),获取需要修正的值。


撰稿:janck

时间:2020/10/27

posted @ 2020-10-27 13:14  janck  阅读(666)  评论(0)    收藏  举报