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

浙公网安备 33010602011771号