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
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
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
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