码迷,mamicode.com
首页 > 其他好文 > 详细

最小样本_置信区间_标准误差

时间:2015-10-16 18:56:04      阅读:764      评论:0      收藏:0      [点我收藏+]

标签:

 综合程序运行情况,样本调查中,结合成本因素,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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!