我有二进制数据,我想计算它的可信区间,但为什么我得到的上限大于1? 以下是我的代码

import math
def find_CI(a):
    n = len(a)
    p_hat = sum(a)/n
    h = math.sqrt((p_hat * (1- p_hat) /n))
    ub = p_hat + (1.96 * h)
    lb = p_hat - (1.96 * h)
    return lb, ub

当我传递a=[0.17058551491594975,0,1,1]时,我得到结果(1,0,1.0294144850840503)

我还try 了以下代码

import scipy.stats as st
def find_confidence_interval(a):
    x = st.t.interval(alpha=0.95, df=len(a)-1,
              loc=np.mean(a),
              scale=st.sem(a))
    return x

我得到的结果是(-0.08008738065825705,1.280087380658257)

我很困惑.可信区间不应该在0到1之间吗?

推荐答案

使用t统计量来计算二项数据的可信区间可能不是一个好主意,因为这意味着您假设您的数据来自近似正态分布.

有关如何更恰当地处理二项分布中的可信区间的详细信息,请参阅here.例如,如果您没有很多数据点,则可以使用Wilson间隔.对于您的[1,1,1,0,0]示例,威尔逊95%的间隔将给出(0.23,0.88)

Python相关问答推荐

为什么判断pd.DataFrame的值与判断pd.Series的值存在差异(如果索引中有值)?

Plotly Dash函数来切换图形参数-pPython

使用Curses for Python保存和恢复终端窗口内容

使用Python进行网页抓取,没有页面

telegram 机器人API setMyName不起作用

Python:记录而不是在文件中写入询问在多文件项目中记录的最佳实践

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

将numpy数组存储在原始二进制文件中

仿制药的类型铸造

如何在Windows上用Python提取名称中带有逗号的文件?

为什么符号没有按顺序添加?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

pandas滚动和窗口中有效观察的最大数量

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

avxspan与pandas period_range

如何让这个星型模式在Python中只使用一个for循环?

用砂箱开发Web统计分析

Pandas GroupBy可以分成两个盒子吗?

如何使regex代码只适用于空的目标单元格