目录
- 成对数均值差 置信区间
- 单个正态总体的样本均值差 置信区间
一 成对数均值差参数估计
例 为了检验某种降压药的效果,测试n个病人在服药前后的血压收缩值分别为
: 第i个病人服药前的血压值,第i个病人服药后的血压值
由于个人差异,不能把看作同一个正态分布,之间是独立的,也是。
但,之间是不独立的。
方法:
1.1 做差值
1.2 把看作同一分布的样本,且相互独立
1.3 置信区间为
其中:
例子: 为了评价某种训练方法是否有效,在某个大学随机选取16个学生,经过三个月训练后,训练后成绩差为
,求为95%双侧置信区间
其中
X =[189,193,230,210,198,215,234,234,209,220,195,211,228,216,212,231]
Y = [220,195,234,231,225,228,238,240,221,218,214,236,248,248,230,245]
解:
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 27 17:45:22 2021
@author: chengxf2
"""
import numpy as np
import scipy.stats as ss
from scipy.stats import norm
'''
获取分位数值a,t分布和正态分布都是对称函数
Args:
n: 自由度,t分布才有
alpha: 累积积分,p(x>a)=alpha
Ftype: 0:符合正态分布 1: t分布
'''
def GetQuantile(tp=1,alpha=0.025,n=15):
if 1==tp:
print("\n t 分布",n)
normt = ss.t(n)
x = -normt.ppf(alpha)## 累积分布概率计算反函数
else:
print("\n 标准正太分布 ")
x= -norm.ppf(0.025,loc=0,scale=1)
print("\n x %6.3f"%x)
return x
#np.std(each_acc1, ddof=1)
def D():
X =[189,193,230,210,198,215,234,234,209,220,195,211,228,216,212,231]
Y = [220,195,234,231,225,228,238,240,221,218,214,236,248,248,230,245]
D =np.array(X)-np.array(Y)
n = len(D)
s = np.std(D,ddof=1) #标准差
quantile =GetQuantile(1,0.025,n-1)
xmean = np.mean(D)
print("\n D: ",np.mean(D),s,quantile)
low = xmean- (s/np.sqrt(n))*quantile
up = xmean+ (s/np.sqrt(n))*quantile
print("\n 下限 %5.3f"%low)
print("\n 上限 %5.3f"%up)
D()
===============
t 分布 1499
x 1.962
分位数 1.9615478106169353
下限 0.228
上限 0.272
二 单个正态总体的样本均值差 置信区间
总体样本,u,未知,为样本
为样本均值和样本方差。
参数估计枢轴量:
则:
双侧置信区间为
单侧置信下限为
单侧置信上限位
例: 一批数据随机挑选25个样本,样本方差,求置信度为95%的置信双侧区间,以及单侧置信区间上限。
解:
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import numpy as np
import scipy.stats as stats
from scipy.stats import chi2
'''
获取置信区间
args:
s: 样本方差
q: 分位数
n: 自由度
返回
置信区间值
'''
def GetQ(s,q,n):
a = s*n/q
return a
'''
计算卡方分布置信区间
Args
alpha :1-alpha 的双侧置信区间
n: 样本自由度,样本个数
'''
def Calc(alpha=0.05,n=25):
s=4.25 #样本方差
up= 1-alpha/2 #概率函数的累积积分
low = alpha/2 #概率函数的累积积分
Quantile1 = chi2.ppf(q=up, df=(n-1))#分位数下限
Quantile2 = chi2.ppf(q=low, df=(n-1)) #分位数上限
print("\n 下分位数 %4.2f:"%Quantile1,"\t 上分位数%4.2f: "%Quantile2)
Q1 = GetQ(s,Quantile1,n-1)
Q2 = GetQ(s,Quantile2,n-1)
print("\n 置信区间[ %4.2f"%Q1,"\t %4.2f]"%Q2)
Calc()
下分位数 39.36: 上分位数12.40:
置信区间[ 2.59 8.23]