<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def jackknife_stats(theta_subs, theta_full, N=None, d=1):
 """Compute Jackknife Estimates, SE, Bias, t-scores, p-values Parameters: theta_subs : ndarray The metrics, estimates, parameters, etc. of the model (see "func") for each subsample. It is a <C x M> matrix, i.e. C=binocoeff(N,d) subsamples, and M parameters that are returned by the model. theta_full : ndarray The metrics, estimates, parameters, etc. of the model (see "func") for the full sample. It is a <1 x M> vecotr with the M parameters that are returned by the model. N : int The number of observations in the full sample. Is required for Delete-d Jackknife, i.e. d>1. (Default is N=None) d : int The number of observations to leave out for each Jackknife subsample, i.e. the subsample size is N-d. (The default is d=1 for the "Delete-1 Jackknife" procedure.) Returns: -------- pvalues : ndarray The two-sided P-values of the t-Score for each Jackknife estimate. (In Social Sciences pval<0.05 is referred as acceptable but it is usually better to look for p-values way closer to Zero. Just remove or replace a variable/feature with high pval>=pcritical and run the Jackknife again.) tscores : ndarray The t-Score for each Jackknife estimate. (As rule of thumb a value abs(tscore)>2 indicates a bad model parameter but jsut check the p-value.) theta_jack : ndarray The bias-corrected Jackknife Estimates (model parameter, metric, coefficient, etc.). Use the parameters for prediction. se_jack : ndarray The Jackknife Standard Error theta_biased : ndarray The biased Jackknife Estimate. Other Variables: These variables occur in the source code as intermediate results. Q : int The Number of independent variables of a model (incl. intercept). C : int The number of Jackknife subsamples if d>1. There are C=binocoeff(N,d) combinations. """

    # The biased Jackknife Estimate
    import numpy as np
    theta_biased = np.mean(theta_subs, axis=0)

    # Inflation Factor for the Jackknife Standard Error
    if d is 1:
        if N is None:
            N = theta_subs.shape[0]
        inflation = (N - 1) / N
    elif d > 1:
        if N is None:
            raise Exception((
                "If d>1 then you must provide N (number of "
                "observations in the full sample)"))
        C = theta_subs.shape[0]
        inflation = ((N - d) / d) / C

    # The Jackknife Standard Error
    se_jack = np.sqrt(
        inflation * np.sum((theta_subs - theta_biased)**2, axis=0))

    # The bias-corrected Jackknife Estimate
    theta_jack = N * theta_full - (N - 1) * theta_biased

    # The Jackknife t-Statistics
    tscores = theta_jack / se_jack

    # Two-sided P-values
    import scipy.stats
    Q = theta_subs.shape[1]
    pvalues = scipy.stats.t.sf(np.abs(tscores), N - Q - d) * 2

    # done
    return pvalues, tscores, theta_jack, se_jack, theta_biased