计算95%置信区间

该文展示了如何使用Python的scipy和statsmodels库计算95%置信区间,包括样本均值、标准误差以及敏感性(sensitivity)、特异性(specificity)等二项分布参数的置信区间。代码详细解释了统计推断过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算95%置信区间

import numpy as np
from scipy import stats
 
valueList = [60.33,59.13,60.33]
 
    
n = len(valueList)
averageValue = np.mean(valueList)
print("样本均值为:", averageValue)
standardError = np.std(valueList,ddof = 1)
print("样本标准误差为:", standardError)
 
a = averageValue - 1.96 * standardError / math.sqrt(n)
b = averageValue + 1.96 * standardError / math.sqrt(n)
print("区间估计值:[", a, ",", b, "]")
print(1.96 * standardError / math.sqrt(n))

计算敏感性,特异性的95%置信区间
输入TP,TN,FP,FN

import os
import sys
from argparse import ArgumentParser
import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score
from statsmodels.stats.proportion import proportion_confint

def calculate_metric(TP, TN, FP, FN, prevalence=None):
    conf_interval = 0.95
    sen = TP/float(TP+FN)
    sen_ci = proportion_confint(TP, TP+FN, alpha=1-conf_interval, method='beta')
    spe = TN/float(TN+FP)
    spe_ci = proportion_confint(TN, TN+FP, alpha=1-conf_interval, method='beta')
    ppv = TP/float(TP+FP)
    ppv_ci = proportion_confint(TP, TP+FP, alpha=1-conf_interval, method='beta')
    npv = TN/float(TN+FN)
    npv_ci = proportion_confint(TN, TN+FN, alpha=1-conf_interval, method='beta')
    acc = (TP+TN)/float(TP+TN+FP+FN)
    acc_ci = proportion_confint(TP+TN, TP+TN+FP+FN, alpha=1-conf_interval, method='beta')
    plr = (TP/(TP+FN)/(FP/(FP+TN)))
    plr_l_ci = float(np.exp(np.log(plr) - 1.96*np.sqrt((1/TP)+(1/FP)-(1/(TP+FN))-(1/(FP+TN)))))
    plr_u_ci = float(np.exp(np.log(plr) + 1.96*np.sqrt((1/TP)+(1/FP)-(1/(TP+FN))-(1/(FP+TN)))))
    nlr = (FN/(TP+FN))/(TN/(FP+TN))
    nlr_l_ci = float(np.exp(np.log(nlr) - 1.96*np.sqrt((1/FN)+(1/TN)-(1/(TP+FN))-(1/(FP+TN)))))
    nlr_u_ci = float(np.exp(np.log(nlr) + 1.96*np.sqrt((1/FN)+(1/TN)-(1/(TP+FN))-(1/(FP+TN)))))
    total = TP+TN+FP+FN
    if prevalence is None:
        prevalence = (TP+FN)/total
    TP_post = sen*prevalence
    TN_post = spe*(1-prevalence)
    FP_post = (1-spe)*(1-prevalence)
    FN_post = (1-sen)*prevalence
    ppv_post = TP_post/float(TP_post+FP_post)
    ppv_post_ci = proportion_confint(TP_post*total, (TP_post+FP_post)*total, alpha=1-conf_interval, method='beta')
    npv_post = TN_post/float(TN_post+FN_post)
    npv_post_ci = proportion_confint(TN_post*total, (TN_post+FN_post)*total, alpha=1-conf_interval, method='beta')
    performance_list = [sen, sen_ci[0], sen_ci[1], spe, spe_ci[0], spe_ci[1], 
                        ppv, ppv_ci[0], ppv_ci[1], npv, npv_ci[0], npv_ci[1],
                        acc, acc_ci[0], acc_ci[1], plr, plr_l_ci, plr_u_ci,
                        nlr, nlr_l_ci, nlr_u_ci, prevalence, 
                        ppv_post, ppv_post_ci[0], ppv_post_ci[1],
                        npv_post, npv_post_ci[0], npv_post_ci[1]]
    head = ['sen', 'sen_lci', 'sen_uci', 'spe', 'spe_lci', 'spe_uci',
            'ppv', 'ppv_lci', 'ppv_uci', 'npv', 'npv_lci', 'npv_uci',
            'acc', 'acc_lci', 'acc_uci', 'plr', 'plr_lci', 'plr_uci',
            'nlr', 'nlr_lci', 'nlr_uci', 'prevalence',
            'ppv_post', 'ppv_post_lci', 'ppv_post_uci',
            'npv_post', 'npv_post_lci', 'npv_post_uci']
    performance_df = pd.DataFrame(performance_list, index=head)
    return performance_df

proportion_confint是statsmodels.stats.proportion模块中的一个函数,用于计算二项分布参数(比例)的置信区间。其原理基于正态分布的置信区间计算方法。以下是该函数的原理概述:

二项分布参数估计:假设有一组二项分布数据,其中成功次数为count,总试验次数为nobs。根据成功次数和总试验次数,可以计算出二项分布的成功概率(比例)估计值p_hat = count / nobs。

标准误差计算:二项分布的成功次数服从二项分布,因此成功概率的估计值p_hat的标准误差可以通过以下公式计算得出:se = sqrt(p_hat * (1 - p_hat) / nobs)。

置信水平和正态分布:在统计推断中,置信水平通常为95%。根据正态分布的性质,95%置信水平对应于标准正态分布中的临界值。

置信区间计算:根据估计的成功概率p_hat、标准误差se和置信水平,可以计算出二项分布参数(比例)的置信区间。通常采用正态分布的临界值和标准误差来计算置信区间。例如,在95%置信水平下,置信区间的计算公式为[p_hat - z * se, p_hat + z * se],其中z是95%置信水平对应的标准正态分布临界值。

通过以上步骤,proportion_confint函数可以根据二项分布数据的成功次数和总试验次数,计算出成功概率的置信区间。这有助于对二项分布参数进行统计推断,并评估其估计值的可靠性范围。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风风是超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值