Conditional inference I

web.stanford.edu/class/stats364/

Jonathan Taylor

Spring 2020

Conditional inference I

One sample problem (file drawer)

Conditional inference I

One sample problem (file drawer)

Conditional inference I

MLE

Information

Exercise

In lecture, we discussed whether this selection problem can be resolved through a Bayesian approach. Take a flat prior, say \(\mu \sim N(0, 100)\) and write code that constructs 95% posterior intervals (say, equal tailed) with the likelihood in the model \({\cal M}\). When \(\mu=0\), what is the frequentist coverage of such intervals? Using the same prior, repeat with the likelihood in the model \({\cal M}^*\). What is the frequentist coverage at \(\mu=0\)?

Conditional inference I

def CGF(mu, threshold=2):
    c_ = threshold-mu
    return mu**2 / 2 + np.log(normal_dbn.sf(c_))

def grad_CGF(mu, threshold=2):
    # deriv of 1-\Phi(z) is -\phi(z) 
    c_ = threshold-mu 
    return mu + normal_dbn.pdf(c_) / normal_dbn.sf(c_)

def hess_CGF(mu, threshold=2):
    # deriv of -\phi(z) is z \phi(z) 
    c_ = threshold-mu 
    return 1 - (- c_ * normal_dbn.pdf(c_) / normal_dbn.sf(c_) + 
               (normal_dbn.pdf(c_) / normal_dbn.sf(c_))**2)

def MLE(Z, threshold=2):
    
    neg_loglike = lambda mu: (CGF(mu, threshold=threshold) - mu * Z)
    grad_neg_loglike = lambda mu: (grad_CGF(mu, threshold=threshold) - Z)
    mle = fmin_cg(neg_loglike, Z, grad_neg_loglike, disp=False, gtol=1.e-7)[0]
    return mle, grad_neg_loglike(mle), hess_CGF(mle)

Conditional inference I

MLE map

Conditional inference I

Behavior of MLE \(\mu=0, c=2\)

def simulate(truth=0,
             threshold=2,
             ndraw=1000):
    Z = []
    M = []
    I = []
    
    while True:
        z = truth + np.random.standard_normal()
        if z > threshold:
            m = MLE(z, threshold=threshold)
            M.append(m[0])
            Z.append(z)
            I.append(m[2]) # information
        if len(M) > ndraw:
            break
            
    df = pd.DataFrame({'M':M,
                       'Z':Z,
                       'I':I})
    failed = (~np.isfinite(df['M'])).mean()

    df.insert(3, 'wald', (df['M'] - truth) * np.sqrt(df['I']))
    info = hess_CGF(truth)
    df.insert(4, 'theory', (df['M'] - truth) * np.sqrt(info))

    return df.loc[lambda df: np.isfinite(df['M']) * np.isfinite(df['I'])], failed

Conditional inference I

Behavior of MLE \(\mu=0, c=2\)

truth, threshold = 0, 2
norandom, failed = simulate(truth=truth,
                            threshold=threshold)
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/linesearch.py:156: RuntimeWarning: invalid value encountered in true_divide
##   alpha1 = min(1.0, 1.01*2*(phi0 - old_phi0)/derphi0)
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: invalid value encountered in add
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/linesearch.py:392: RuntimeWarning: invalid value encountered in true_divide
##   alpha1 = min(1.0, 1.01*2*(phi0 - old_phi0)/derphi0)
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: invalid value encountered in add
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/optimize.py:1325: RuntimeWarning: invalid value encountered in multiply
##   pkp1 = -gfkp1 + beta_k * pk
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:3: RuntimeWarning: divide by zero encountered in log
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: divide by zero encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in true_divide
## /Users/jonathantaylor/opt/anaconda3/bin/python3:4: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/bin/python3:5: RuntimeWarning: invalid value encountered in double_scalars
## /Users/jonathantaylor/opt/anaconda3/lib/python3.7/site-packages/pandas/core/computation/expressions.py:194: UserWarning: evaluating in Python space because the '*' operator is not supported by numexpr for the bool dtype, use '&' instead
##   op=op_str, alt_op=unsupported[op_str]

Conditional inference I

print('proportion failures: %f' % failed)
## proportion failures: 0.000999
sns.distplot(norandom['M'])
ax = plt.gca()
ylim = ax.get_ylim()
ax.plot([truth, truth], [0, 20], 'k--')
ax.set_ylim(ylim);
ax.figure

Conditional inference I

Wald pivot

sns.distplot(norandom['theory'], label='MLE theory')
ax = plt.gca()
sns.distplot(norandom['wald'], label='Wald', ax=ax);
Zgrid = np.linspace(-4, 4, 1001)
ax.plot(Zgrid, normal_dbn.pdf(Zgrid), 'k', label='N(0,1)')
ax.legend(fontsize=20)
ax.figure

Conditional inference I

What fails here?

sns.distplot(norandom['I'][np.isfinite(norandom['I'])])

Conditional inference I

Pivotal quantity \(\mu=0, c=2\)

pivot = normal_dbn.sf(norandom['Z']) / normal_dbn.sf(threshold)

Conditional inference I

Inference with exact pivot

def CI(z, threshold=2, level=0.9):

    alpha = (1 - level) / 2
    pivot = lambda mu: normal_dbn.sf(z - mu) / normal_dbn.sf(threshold - mu)
    try:
        upper_lim = bisect(lambda mu: pivot(mu) - (1 - alpha), -20, 20)
        lower_lim = bisect(lambda mu: pivot(mu) - alpha, -20, 20)
        return lower_lim, upper_lim
    except:
        return -np.inf, np.inf
    
CIs = np.array([CI(z) for z in norandom['Z']])
lens = CIs[:,1] - CIs[:,0]
print('bisection failed proportion: %f' % np.mean(~np.isfinite(lens)))
## bisection failed proportion: 0.243129
sns.distplot(lens[np.isfinite(lens)])

Conditional inference I

Some workarounds?

Conditional inference I

Data splitting

so that \[ \left\{Z_1 > c\right\} = \left\{Z + \Delta > c\right\} \]

Exercise

Conditional inference I

Data splitting

Conditional inference I

MLE of data splitting

noise_sd = 1

def CGF(mu, threshold=2, noise_sd=0):
    c_ = (threshold-mu) / np.sqrt(1 + noise_sd**2)
    return mu**2 / 2 + np.log(normal_dbn.sf(c_))

def grad_CGF(mu, threshold=2, noise_sd=0):
    # deriv of 1-\Phi(z) is -\phi(z) 
    c_ = (threshold-mu) / np.sqrt(1 + noise_sd**2)
    scaling = -1 / np.sqrt(1 + noise_sd**2) 
    return mu + scaling * (-normal_dbn.pdf(c_) / normal_dbn.sf(c_))

def hess_CGF(mu, threshold=2, noise_sd=0):
    # deriv of -\phi(z) is z \phi(z) 
    c_ = (threshold-mu) / np.sqrt(1 + noise_sd**2)
    scaling = 1 / (1 + noise_sd**2)
    return 1 - scaling * (- c_ * normal_dbn.pdf(c_) / normal_dbn.sf(c_) + 
                           (normal_dbn.pdf(c_) / normal_dbn.sf(c_))**2)

def MLE(Z, threshold=2, noise_sd=0):
    
    neg_loglike = lambda mu: (CGF(mu, threshold=threshold, noise_sd=noise_sd) - mu * Z)
    grad_neg_loglike = lambda mu: (grad_CGF(mu, threshold=threshold, noise_sd=noise_sd) - Z)
    
    mle = fmin_cg(neg_loglike, Z, grad_neg_loglike, disp=False, gtol=1.e-7)[0]
    return mle, grad_neg_loglike(mle), hess_CGF(mle, noise_sd=noise_sd)

Conditional inference I

MLE map with \(\tau > 0\)

Conditional inference I

Comparing information

Conditional inference I

Behavior of MLE \(\mu=0, \tau=1, c=2\)

def simulate_random(truth=0,
                    threshold=2,
                    noise_sd=1,
                    ndraw=1000):
    Z = []
    M = []
    I = []
    
    while True:
        z = truth + np.random.standard_normal()
        if z + noise_sd * np.random.standard_normal() > threshold:
            m = MLE(z, threshold=threshold, noise_sd=noise_sd)
            M.append(m[0])
            Z.append(z)
            I.append(m[2]) # information
        if len(M) > ndraw:
            break
            
    df = pd.DataFrame({'M':M,
                       'Z':Z,
                       'I':I})
    df.insert(3, 'wald', (df['M'] - truth) * np.sqrt(df['I']))
    info = hess_CGF(truth, noise_sd=noise_sd)
    df.insert(4, 'theory', (df['M'] - truth) * np.sqrt(info))

    return df

Conditional inference I

Behavior of MLE \(\mu=0, c=2\)

Conditional inference I

Behavior of Wald pivot \(\mu=0, \tau=1, c=2\)

Conditional inference I

Behavior of MLE \(\mu=-1, c=2\)

Observed information

Conditional inference I

Behavior of MLE \(\mu=-1, \tau=1, c=2\)

Sampling distribution of \(\hat{\mu}\)

Conditional inference I

Behavior of Wald pivot \(\mu=-1, \tau=1, c=2\)

Conditional inference I

Back to data splitting

Conditional inference I

Back to data splitting

Conditional inference I

Back to data splitting

Conditional inference I

MLE map

Conditional inference I

Confidence intervals

Conditional inference I

One-parameter exponential family

Conditional inference I

One-parameter exponential family

from selectinf.distributions.discrete_family import discrete_family

Z = np.random.standard_normal(200)
W = np.random.sample(Z.shape)
F = discrete_family(Z, W)
Z_obs, mu = 1.2, 0.4
F.cdf(mu, Z_obs), np.sum((Z <= Z_obs) * np.exp(mu * Z) * W) / np.sum(np.exp(mu * Z) * W)
## (0.825927138173137, 0.8259271381731371)

Conditional inference I

One-parameter exponential family

def find_interval(Z, guess_for_grid, noise_sd):
    W = normal_dbn.pdf(guess_for_grid) * normal_dbn.sf((threshold - guess_for_grid) / noise_sd)
    F = discrete_family(guess_for_grid, W)
    mle = MLE(Z, threshold=threshold, noise_sd=noise_sd)[0]
    l, u = F.equal_tailed_interval(Z, alpha=0.05)
    return pd.DataFrame({'Z':[Z],
                         'L':[l],
                         'U':[u],
             'M':[mle]}) 

df = pd.concat([find_interval(z, np.linspace(z-6,z+6,501), noise_sd)
                for z in np.linspace(-4,8,301)])

Conditional inference I

One-parameter exponential family

## (-14.03577263244398, 11.115152436823685)

Confidence intervals are adaptive: well above threshold they are unadjusted; well below they are the data splitting intervals.

Conditional inference I

One-parameter exponential family

## (0, 6)