代码是选修课《数据分析与统计》上附加题,可直接应用。欢迎纠错。
#*****************
#本程序利用R分布别做出单个、双个正态分布总体
#区间估计的均值和双侧、单侧置信区间
#包含4个函数
#code by Vac 2017.12.8
#*****************
#单个正态分布
#u的区间估计,sigma已知
onenorm_u_sigma<-function(X,sigma,alpha=0.99){
n<-length(X);
tmpx<-sigma*qnorm(1-alpha/2)/sqrt(n);
a<-mean(X)-tmpx;b<-mean(X)+tmpx;#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-mean(X)+sigma*qnorm(1-alpha)/sqrt(n)#单侧上限
ad<-mean(X)-sigma*qnorm(1-alpha)/sqrt(n)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#u的区间估计,sigma未知
onenorm_u_sd<-function(X,alpha=0.99){
n<-length(X);
tmpx<-sd(X)*qt(1-alpha/2,n-1)/sqrt(n);
a<-mean(X)-tmpx;b<-mean(X)+tmpx;#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-mean(X)+sd(X)*qt(1-alpha,n-1)/sqrt(n)#单侧上限
ad<-mean(X)-sd(X)*qt(1-alpha,n-1)/sqrt(n)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#sigma的区间估计,u已知
onenorm_sigma_u<-function(X,u,alpha=0.99){
n<-length(X);
a<-sum((X-u)^2)/qchisq(1-alpha/2,n);
b<-sum((X-u)^2)/qchisq(alpha/2,n);#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-sum((X-u)^2)/qchisq(alpha,n)#单侧上限
ad<-sum((X-u)^2)/qchisq(1-alpha,n)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#sigma的区间估计,u未知
onenorm_sigma_sd<-function(X,alpha=0.99){
n<-length(X);
a<-(n-1)*sd(X)^2/qchisq(1-alpha/2,n-1);
b<-(n-1)*sd(X)^2/qchisq(alpha/2,n-1);#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-(n-1)*sd(X)^2/qchisq(alpha,n-1)#单侧上限
ad<-(n-1)*sd(X)^2/qchisq(1-alpha,n-1)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
##两个正态分布
#u1-u2的区间估计,sigma1,sigma2已知
twonorm_du_sigma<-function(X,Y,sigma1,sigma2,alpha=0.99){
m<-length(X);
n<-length(Y);
tmp<-sqrt(sigma1^2/m+sigma2^2/n)*qnorm(1-alpha/2);
a<-mean(X)-mean(Y)-tmp;
b<-mean(X)-mean(Y)+tmp;#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-mean(X)-mean(Y)+sqrt(sigma1^2/m+sigma2^2/n)*qnorm(1-alpha);#单侧上限
ad<-mean(X)-mean(Y)-sqrt(sigma1^2/m+sigma2^2/n)*qnorm(1-alpha);#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#u1-u2的区间估计,sigma1,sigma2未知
twonorm_du_sd<-function(X,Y,alpha=0.99){
m<-length(X);
n<-length(Y);
Sw<-sqrt((m-1)*sd(X)^2+(n-1)*sd(Y)^2)/(m+n-2);
tmp<-Sw*sqrt(1/m+1/n)*qt(1-alpha/2,m+n-2);
a<-mean(X)-mean(Y)-tmp;
b<-mean(X)-mean(Y)+tmp;#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-mean(X)-mean(Y)+Sw*sqrt(1/m+1/n)*qt(1-alpha,m+n-2);#单侧上限
ad<-mean(X)-mean(Y)-Sw*sqrt(1/m+1/n)*qt(1-alpha,m+n-2);#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#sigma1^2/sigma2^2的区间估计,u1,u2已知
twonorm_sigma_u<-function(X,Y,u1,u2,alpha=0.99){
m<-length(X);
n<-length(Y);
numerator<-n*sum((X-u1)^2)/m/sum((Y-u2)^2);
a<-numerator/qf(1-alpha/2,m,n)
b<-numerator/qf(alpha/2,m,n)#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-numerator/qf(alpha,m,n)#单侧上限
ad<-numerator/qf(1-alpha,m,n)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}
#sigma1^2/sigma2^2的区间估计,u1,u2未知
twonorm_sigma_sd<-function(X,Y,alpha=0.99){
m<-length(X);
n<-length(Y);
numerator<-sd(X)^2/sd(Y)^2;
a<-numerator/qf(1-alpha/2,m-1,n-1)
b<-numerator/qf(alpha/2,m-1,n-1)#双侧
cat("其",alpha*100,"%双侧置信区间是:[",a,",",b,"]","\n")
bu<-numerator/qf(alpha,m-1,n-1)#单侧上限
ad<-numerator/qf(1-alpha,m-1,n-1)#单侧下限
cat("其",alpha*100,"%单侧置信区间上限是:",bu,"\n下限是",ad,"\n")
}