这是我第一次尝试对一个呈对数正态分布的响应建模线性回归。我有一个包含两个变量的数据框
当我绘制对数响应的分布
下一步是测量模型的正确程度,因此我计算数据集的平均响应,即:
df
:预测变量X
和响应。当我绘制response
与预测变量X
的图时,我们得到了这张漂亮的图表:![enter image description here](https://istack.dev59.com/lXHL2.webp)
np.log(response)
时,我得到了一个非常接近正态分布的结果:
为了建立 X
和 response
之间的关系模型,我建立了以下模型,import pymc3 as pm
with pm.Model() as model:
a = pm.Normal('a', 0, 10)
b = pm.Normal('b', 0, 10)
sigma = pm.Uniform('sigma', lower=0, upper=10)
mu = pm.Deterministic('mu', a + b * df_train[X])
y_hat = pm.Lognormal('y_hat', mu = mu, sd = sigma, observed = df['response'] )
trace = pm.sample(2000, tune = 2000)
下一步是测量模型的正确程度,因此我计算数据集的平均响应,即:
mu_hat = np.exp(trace['mu'].mean(0)
然而,当我绘制这个平均值适配测试集的效果时,发现拟合度非常差:
可能的解决方案: 我尝试了其他可能性,如正态分布和泊松分布,但是模型无法收敛。我一直收到错误提示:初始能量不好:inf。模型可能规定不当
.
有什么想法,为什么这个适配失败得如此惨烈?