这是我第一次尝试为对数正态分布的响应建模线性回归。我有一个df包含两个变量的数据框:预测变量X和响应。当我绘制responsevs. 预测变量X时,我们得到了这个漂亮的图:

当我绘制响应的对数分布时,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)
但是,当我绘制该平均值与测试集的拟合程度时,我观察到拟合度非常差:
可能的解决方案:我尝试了其他可能性,如 Normal 和 Poisson,但我无法实现模型的收敛。我收到一条错误消息:
Bad initial energy: inf. The model might be misspecified.
关于为什么这种适合如此悲惨地失败的任何想法?

