import numpy as np from scipy.stats import norm, binom from statsmodels.api import families #glm n = 10000000 p = 10 x = np.random.normal(size=(n, p)) beta = np.arange(1, p+1).reshape(-1, 1) z = x @ beta condprob = norm.cdf(z) y = binom.rvs(1, condprob, size=n).reshape(-1, 1) prob_fit = glm(y, x, family=families.Binomial(link=families.links.probit)).fit() logit_fit = glm(y, x, family=families.Binomial(link=families.links.logit)).fit() linear_fit = glm(y, x, family=families.Gaussian(link=families.links.identity)).fit() coef_mat = np.column_stack((prob_fit.params, logit_fit.params, linear_fit.params)) print(coef_mat) prop_mat = np.column_stack((prob_fit.params / logit_fit.params, prob_fit.params / linear_fit.params, logit_fit.params / linear_fit.params)) print(prop_mat)
时间: 2024-04-26 09:21:00 浏览: 171
这段代码是用 Python 实现的,主要使用了 numpy、scipy 和 statsmodels 这几个库。代码中生成了一个大小为 (10000000, 10) 的随机矩阵 x,以及一个大小为 (10000000, 1) 的随机向量 y。然后分别使用 probit、logit 和 identity 这三种链接函数对 y 进行了广义线性模型的拟合,得到了三组系数,分别存储在 coef_mat 和 prop_mat 中。其中 coef_mat 是一个 10x3 的矩阵,每一列代表一个链接函数的系数向量;prop_mat 是一个 10x3 的矩阵,每一行代表一个自变量在三个链接函数下的系数比值。
阅读全文