示例#1
0
def gen_endog(lin_pred, family_class, link, binom_version=0):

    np.random.seed(872)

    fam = sm.families

    mu = link().inverse(lin_pred)

    if family_class == fam.Binomial:
        if binom_version == 0:
            endog = 1 * (np.random.uniform(size=len(lin_pred)) < mu)
        else:
            endog = np.empty((len(lin_pred), 2))
            n = 10
            endog[:, 0] = (np.random.uniform(size=(len(lin_pred), n)) <
                           mu[:, None]).sum(1)
            endog[:, 1] = n - endog[:, 0]
    elif family_class == fam.Poisson:
        endog = np.random.poisson(mu)
    elif family_class == fam.Gamma:
        endog = np.random.gamma(2, mu)
    elif family_class == fam.Gaussian:
        endog = mu + np.random.normal(size=len(lin_pred))
    elif family_class == fam.NegativeBinomial:
        from scipy.stats.distributions import nbinom
        endog = nbinom.rvs(mu, 0.5)
    elif family_class == fam.InverseGaussian:
        from scipy.stats.distributions import invgauss
        endog = invgauss.rvs(mu)
    else:
        raise ValueError

    return endog
示例#2
0
def gen_endog(lin_pred, family_name):

    if family_name == "binomial":
        probs = 1 / (1 + np.exp(-lin_pred))
        endog = 1 * (np.random.uniform(size=len(lin_pred)) < probs)
    elif family_name == "poisson":
        lam = np.exp(lin_pred)
        endog = np.random.poisson(lam)
    elif family_name == "gamma":
        lam = np.exp(lin_pred / 4)
        endog = np.random.gamma(2, lam)
    elif family_name == "gaussian":
        endog = lin_pred + np.random.normal(size=len(lin_pred))
    elif family_name == "negbinom":
        from scipy.stats.distributions import nbinom
        lam = np.exp(lin_pred)
        endog = nbinom.rvs(lam, 0.5)
    elif family_name == "inverse_gaussian":
        from scipy.stats.distributions import invgauss
        lin_pred = 2 + (lin_pred - 2) / 4.
        lam = 1 / np.sqrt(lin_pred)
        endog = invgauss.rvs(lam)
    else:
        raise ValueError

    return endog
示例#3
0
def gen_endog(lin_pred, family_class, link, binom_version=0):

    np.random.seed(872)

    fam = sm.families

    mu = link().inverse(lin_pred)

    if family_class == fam.Binomial:
        if binom_version == 0:
            endog = 1*(np.random.uniform(size=len(lin_pred)) < mu)
        else:
            endog = np.empty((len(lin_pred), 2))
            n = 10
            endog[:, 0] = (np.random.uniform(size=(len(lin_pred), n)) < mu[:, None]).sum(1)
            endog[:, 1] = n - endog[:, 0]
    elif family_class == fam.Poisson:
        endog = np.random.poisson(mu)
    elif family_class == fam.Gamma:
        endog = np.random.gamma(2, mu)
    elif family_class == fam.Gaussian:
        endog = mu + np.random.normal(size=len(lin_pred))
    elif family_class == fam.NegativeBinomial:
        from scipy.stats.distributions import nbinom
        endog = nbinom.rvs(mu, 0.5)
    elif family_class == fam.InverseGaussian:
        from scipy.stats.distributions import invgauss
        endog = invgauss.rvs(mu)
    else:
        raise ValueError

    return endog
示例#4
0
def gen_endog(lin_pred, family_class, link, binom_version=0):
    np.random.seed(872)
    mu = link().inverse(lin_pred)

    if family_class == sm.families.Binomial:
        if binom_version == 0:
            endog = 1 * (np.random.uniform(size=len(lin_pred)) < mu)
        else:
            endog = np.empty((len(lin_pred), 2))
            n = 10
            uni = np.random.uniform(size=(len(lin_pred), n))
            endog[:, 0] = (uni < mu[:, None]).sum(1)
            endog[:, 1] = n - endog[:, 0]
    elif family_class == sm.families.Poisson:
        endog = np.random.poisson(mu)
    elif family_class == sm.families.Gamma:
        endog = np.random.gamma(2, mu)
    elif family_class == sm.families.Gaussian:
        endog = mu + np.random.normal(size=len(lin_pred))
    elif family_class == sm.families.NegativeBinomial:
        from scipy.stats.distributions import nbinom
        endog = nbinom.rvs(mu, 0.5)
    elif family_class == sm.families.InverseGaussian:
        from scipy.stats.distributions import invgauss
        endog = invgauss.rvs(mu)
    elif family_class == sm.families.Tweedie:
        # upstream this case wasn't present in test_glm, but there was an
        # otherwise identical gen_endog function in test_glm_weights
        rate = 1
        shape = 1.0
        scale = mu / (rate * shape)
        endog = (np.random.poisson(rate, size=scale.shape[0]) *
                 np.random.gamma(shape * scale))
    else:
        raise ValueError

    return endog