Module zedstat.rrci

Expand source code
import pandas as pd
import numpy as np
from scipy.stats import norm

def rrci(epos,eneg,cpos,cneg,alpha=.05,ZERO_POLICY='ADDONE'):
    '''Get CI bounds for risk ratio
    
    Args:
        epos (int): exposed group with outcome
        eneg (int): exposed group without oucome
        cpos (int): control group with outcome
        cneg (int): control group without oucome
        alpha (float): significance level float
        ZERO_POLICY (str): How to handle zeropositives (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8196730/)

    Returns:
        float: risk ratio
        float: lower confidence bound
        float: wpper confidence bound
    '''
    import pandas as pd  
    import statsmodels.api as sm


    if ZERO_POLICY=="ADDONE":
        if epos == 0:
            epos=epos+1
            eneg=eneg+1
            cneg=cneg+1
            cpos=cpos+1

    if epos > 0:
        rr = (epos/(epos+eneg))/(cpos/(cpos+cneg))
    else:
        rr = (eneg/(epos+eneg))/(cneg/(cpos+cneg))


    
    lrr = np.log(rr)
    
    if epos>0:
        V=np.sqrt(1/(epos+eneg) + 1/(cpos+cneg) + 1/epos + 1/cpos)
    else:
        V=np.sqrt(1/(epos+eneg) + 1/(cpos+cneg) + 1/eneg + 1/cneg )

    
    n_sided=1
    z=norm.ppf(1-alpha/n_sided)
    del_ = z*V

    lrrlb = (lrr-del_)
    lrrub = lrr+del_

    

    return  rr, np.exp(lrrlb), np.exp(lrrub)

Functions

def rrci(epos, eneg, cpos, cneg, alpha=0.05, ZERO_POLICY='ADDONE')

Get CI bounds for risk ratio

Args

epos : int
exposed group with outcome
eneg : int
exposed group without oucome
cpos : int
control group with outcome
cneg : int
control group without oucome
alpha : float
significance level float
ZERO_POLICY : str
How to handle zeropositives (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8196730/)

Returns

float
risk ratio
float
lower confidence bound
float
wpper confidence bound
Expand source code
def rrci(epos,eneg,cpos,cneg,alpha=.05,ZERO_POLICY='ADDONE'):
    '''Get CI bounds for risk ratio
    
    Args:
        epos (int): exposed group with outcome
        eneg (int): exposed group without oucome
        cpos (int): control group with outcome
        cneg (int): control group without oucome
        alpha (float): significance level float
        ZERO_POLICY (str): How to handle zeropositives (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8196730/)

    Returns:
        float: risk ratio
        float: lower confidence bound
        float: wpper confidence bound
    '''
    import pandas as pd  
    import statsmodels.api as sm


    if ZERO_POLICY=="ADDONE":
        if epos == 0:
            epos=epos+1
            eneg=eneg+1
            cneg=cneg+1
            cpos=cpos+1

    if epos > 0:
        rr = (epos/(epos+eneg))/(cpos/(cpos+cneg))
    else:
        rr = (eneg/(epos+eneg))/(cneg/(cpos+cneg))


    
    lrr = np.log(rr)
    
    if epos>0:
        V=np.sqrt(1/(epos+eneg) + 1/(cpos+cneg) + 1/epos + 1/cpos)
    else:
        V=np.sqrt(1/(epos+eneg) + 1/(cpos+cneg) + 1/eneg + 1/cneg )

    
    n_sided=1
    z=norm.ppf(1-alpha/n_sided)
    del_ = z*V

    lrrlb = (lrr-del_)
    lrrub = lrr+del_

    

    return  rr, np.exp(lrrlb), np.exp(lrrub)