标签:
综合程序运行情况,样本调查中,结合成本因素,1000人样本足够。
1000人样本可以满足95%置信度,d=3%偏离程度,标准误差1.5%
精确情况:
99%置信度,d=3%偏离程度,标准误差1%,样本数要求2000人左右(精确值1842)。
#coding=-utf8
#计算最小样本
#计算置信区间
#非精确计算值,而是最大样本估算
#68%置信区间,置信度(d)=1*标准误(se)
# 95%置信区间,置信度(d)=2*标准误(se)
#99%置信区间,置信度(d)=3**标准误(se)
import math
n=2500
#d为调查误差,置信区间为(p-d,p+d)
d=0.03
#置信区间
#confidence=0.95
confidence=0.99
p=0.3
def Standard_error(n):
standard_error=math.sqrt(0.25/n)
return standard_error
#计算最小样本
#前提:置信度3%,置信区间95%
def Least_sample(d,confidence):
if confidence==0.95:
standard_error=d/2
elif confidence==0.99:
standard_error=d/3
least_sample=0.25/standard_error**2
return least_sample
# 95%置信区间
def Confidence_interval(confidence,p,standard_error):
if confidence==0.95:
start=p-standard_error*2
end=p+standard_error*2
if confidence==0.99:
start=p-standard_error*3
end=p+standard_error*3
confidence_interval=(start,end)
return confidence_interval
standard_error=Standard_error(n)
confidence_interval=Confidence_interval(confidence,p,standard_error)
print "n:",n
print ‘p:‘,p
print "standard_error:",standard_error
print "confidence_interval:",confidence_interval
精确版本
#coding=utf_8
#confidence interval置信区间
#已知次品概率p,总数n, 置信度对应Z分数(Z),可求出估计的允许误差d--然后求出置信区域
import normal_distribution,math
#总数:n
n=300
#次品数:n1
n1=5
#置信度:confidence
#confidence=0.95
confidence=0.99
#显著水平一半值
a_half=normal_distribution.A_half(confidence)
#生成Z分数累计补充表(>),(置信度,Z分数)
Complementary_cumulative=normal_distribution.Complementary_cumulative
#次品概率
p=n1*1.0/n
#置信度对应概率
z=normal_distribution.Z_score(Complementary_cumulative,a_half)
#可求出估计的允许误差d
def D(n,p,z):
d=z*math.sqrt(p*(1-p)*1.0/n)
d1=round(d,4)
return d1
def Confidence_interval(p,d):
start=p-d
start1=round(start,4)
end=p+d
end1=round(end,4)
confidence_interval=(start1,end1)
return confidence_interval
#至少需要的样本数
# n=(z**2*p*(1-p))/d**2
#一般d为3%
def Least_sample(d,z):
#0.25是p*(1-p)的最大值
n=(z**2*0.25)/(d**2)
return n
#标准差d
d=D(n,p,z)
#置信区域
confidence_interval=Confidence_interval(p,d)
least_sample=Least_sample(d,z)
#coding=utf-8
#正态分布
import math
fileName="normal_distribution.txt"
fileName_Complementary_cumulative=‘Complementary_cumulative.txt‘
#生成正态分布列表(概率范围表,即X<=n的概率)
def make_list_normalDistribution(fileName):
number=0
list_number=[]
list_value=[]
list_normalDistribution=[]
fileObj=open(fileName)
for line in fileObj:
line=line.strip()
line_list=line.split()
line_list.remove(line_list[0])
for word in line_list:
list_number.append(number)
list_value.append(float(word))#把字符串转换为数字结构
number+=0.01
number=round(number,3)#保留两位小数
list_normalDistribution=zip(list_number,list_value)
return list_normalDistribution
#.正太分布 Normal distribution ,某个X对应的特定概率,非区间概率
#u代表期望值,均值
#q代表标准差
#返回的是概率值
def Normal_distribution(x,u=0,q=1):
normal_distribution=(1.0/((math.sqrt(2*math.pi))*q))*(math.e**((-(x-u)**2)/(2*(q**2))))
return normal_distribution
#9.正态分布x值范围内概率
#例如X<=1.52
#u代表期望值,均值
#q代表标准差
#返回的是概率值
#转换公式x=(x-u)/q
#x=round(x,1) 近似值0.1
def Normal_distribution_InnerArea(Xlist,u=0,q=1):
#从只有一个元素列表中,提取值
x=Xlist[0]
x=(x-u)/q
list_normalDistribution=make_list_normalDistribution(fileName)
for i in list_normalDistribution:
if x==i[0]:
probability=i[1]
return probability
if x<0:
return 1-Normal_distribution_InnerArea([-x],u,q)
#.正态分布X值范围外概率
#例如X>=1.52
def Normal_distribution_OuterArea(Xlist,u=0,q=1):
probability_innerArea=Normal_distribution_InnerArea(Xlist,u,q)
probability_OuterArea=1-probability_innerArea
return probability_OuterArea
#X随机变量区间内概率
#例如X在(2,4]内概率
def Normal_distribution_range(Xlist,u=0,q=1):
#取最值后,数据结构要转换成列表,进行计算
list_max=[]
list_min=[]
Xmax=max(Xlist)
list_max.append(Xmax)
Xmin=min(Xlist)
list_min.append(Xmin)
probability_Xmax=Normal_distribution_InnerArea(list_max,u,q)
probability_Xmin=Normal_distribution_InnerArea(list_min,u,q)
probability_range=probability_Xmax-probability_Xmin
return probability_range
# X随机变量的区间范围概率,大综合
#(1)X<=n
#(2)X>=n
#(3)X在一个区间(n1,n2)
#一共四个参数,Xlist只有一个值时,表示大于或小于某个值;
#Xlist是一个列表时,表示在一个区间,compare比较符输入0
#u是平均值,q是标准差,compare是比较符号,表示大于或小于,输入(greater)
def Normal_distribution_area(Xlist,u=0,q=1,compare="smaller"):
#测试X是否是一个含有两个元素的列表
if len(Xlist)==2 and type(Xlist)==list:
probability=Normal_distribution_range(Xlist,u,q)
return probability
if len(Xlist)==1 and type(Xlist)==list:
if compare=="smaller":
probability=Normal_distribution_InnerArea(Xlist,u,q)
if compare=="greater":
probability=Normal_distribution_OuterArea(Xlist,u,q)
return probability
#置信区域:概率---Z分数查询表
# a/2
def A_half(confidence):
#显著水平:a
a=1-confidence
#显著水平一半:a_half
a_half=round(a/2.0,8)
return a_half
#输入概率,返回Z分数
def Z_score(Complementary_cumulative,a_half):
list_value=[]
for i in Complementary_cumulative:
if i[0]==a_half:
z=round(i[1],4)
return z
else:
round_value=round(i[0],3)
if round_value==a_half:
print ‘i:‘,i
list_value.append(i[1])
z=max(list_value)
return z
#置信度:confidence
confidence=0.95
#显著水平一半值
a_half=A_half(confidence)
#生成正态分布列表(Z分数累计表,<=)
list_normalDistribution=make_list_normalDistribution(fileName)
#生成Z分数累计补充表(>)
list_Complementary_cumulative=make_list_normalDistribution(fileName_Complementary_cumulative)
#生成Z分数累计补充表(>),(置信度,Z分数)
Complementary_cumulative=[(i[1],i[0]) for i in list_Complementary_cumulative]
z_score=Z_score(Complementary_cumulative,a_half)
标签:
原文地址:http://www.cnblogs.com/biopy/p/4885819.html