问题描述
我是统计和数据科学领域的初学者,所以请您善待我。
我必须在python中解决以下问题:
问题陈述 - 假设总体变量 X 为 N(3,0.3) 且 n = 20。必须选择多大的区间,以便样本均值 ?¯ 位于总体±a 个单位内的概率为 0.95平均μ?
我知道 68% 的数据在 1 个标准偏差内,即 2.7 到 3.3。 95% 的数据在 2 个标准差范围内,即 2.4 到 3.6。
我的代码:
from scipy.stats import norm
a,b = norm.interval(alpha=0.95,loc=3,scale=0.3)
print(b-a)
输出:
1.1759783907240324
但答案 (b-a) 不正确,因为它与隐藏测试用例的预定义答案不匹配。
在打印 a,b 值时我得到了:
a=2.412010804637984
b=3.587989195362016
可能是我没有正确回答问题,或者我的计算方式不正确。
已编辑
尝试 2
from scipy.stats import norm
import numpy as np
a,scale=np.sqrt(0.3))
print(b-a) # 2.147032972460588
print(a,b) # 1.9264835137697058 4.073516486230294
使用概念 μ=?¯ ± Z(σ/√n)。 ?¯ 是样本均值。 μ 是总体平均值。 95% 是置信区间。
尝试 3
from math import sqrt
u=3+(1.96*(0.3/(sqrt(20))))
l=3-(1.96*(0.3/(sqrt(20))))
u-l # 0.2629615941539756
尝试 4
from math import sqrt
u=3+(1.645*(0.3/(sqrt(20))))
l=3-(1.645*(0.3/(sqrt(20))))
u-l # 0.22069990937922945
请建议我做什么。
解决方法
你一开始是对的。这只是您想要结果的准确程度的问题。
“我知道 68% 的数据位于 1 个标准偏差内,即 2.7 到 3.3。95% 的数据位于 2 个标准偏差内,即 2.4 到 3.6。”粗略地说,如https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule
请注意,1.1759783907240324 与 1.2 = 3.6-2.2 非常相似
您可以按如下方式重现 1.17597839072:
u=3+(1.96*(0.3))
l=3-(1.96*(0.3))
print(u-l)
1.1760000000000002
请注意,如果 0.3 已经是标准偏差,则无需除以 sqrt(20)。如果您按照 https://en.wikipedia.org/wiki/Confidence_interval
进行 t 检验,这可能很有用68–95–99.7 rule
可以很容易地检查python如下。
a,b = norm.interval(alpha=0.69,loc=0,scale=1)
print('one std to each side: ',b-a)
print('with a: ',a)
print('with b: ',b)
a,b = norm.interval(alpha=0.95,scale=1)
print('two std to each side: ',b)
有输出:
one std to each side: 2.0304440664340557
with a: -1.0152220332170279
with b: 1.0152220332170279
two std to each side: 3.919927969080108
with a: -1.959963984540054
with b: 1.959963984540054
如您所见,一个标准差为 +-1,而两个标准差为 +-1.96。
我可以用我们自己的函数做同样的事情:
#a,scale=1)
b=0+(1*(1))
a=0-(1*(1))
print('one std to each side: ',b)
#a,scale=1)
b=0+(1.96*(1))
a=0-(1.96*(1))
print('two std to each side: ',b)
有输出:
one std to each side: 2
with a: -1
with b: 1
two std to each side: 3.92
with a: -1.96
with b: 1.96
如您所见,一个标准差为 +-1,而两个标准差为 +-1.96。
正如预期的那样--> https://en.wikipedia.org/wiki/68–95–99.7_rule
,您的公式是正确的,但您需要将 0.95 除以一半,然后在表格主体内找到该概率。然后在上边距和左边距上读取获得此概率水平所需的标准差数。
所以你的 py 代码是:
from scipy.stats import norm
a,b = norm.interval(alpha=0.475,loc=3,scale=0.3)
print(b-a)
间隔为 0.38