我在一个pandas数据帧中有大约500个星系的数据(每个星系有几百个测量值),我正在尝试对几个变量进行OLS回归,其中一个变量是分类的(每个星系都有自己的类别)。基本上,一旦我完成了模型的拟合,我要绘制数据、拟合和一些误差边界,去掉类别本身的假定影响。在
实际上,我想生成一个类似于this tutorial(复制于此处)的“OLS非线性曲线,但参数为线性”部分中的图。
相反,我有这个(为了便于阅读,我在这里选了两个星系,但是这500个星系实在太难看了):
既然这里似乎有两个“星团”,我就得出结论,每一个都必须对应一个星系。不过,我真正想要的是把它们缩成一条线,去掉类间效应,并想象它们都是一个星系。在
作为参考,我用来拟合和绘制的代码是:m = sm.ols(
formula='{} ~ Rdeproj + NSAMstar + \
NSASersicN + C(plateifu)'.format(qty),
data=dfr)
f = m.fit()
#print dir(f)
ypred = f.predict()
prstd, iv_l, iv_u = wls_prediction_std(f)
plt.close('all')
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(dfr['Rdeproj'], dfr[qty], '.', label='data')
ax.plot(dfr['Rdeproj'], f.fittedvalues, 'r--.', label='pred')
ax.plot(dfr['Rdeproj'], iv_u, 'r--', label='bound')
ax.plot(dfr['Rdeproj'], iv_l, 'r--')
legend=ax.legend(loc='best')
ax.set_xlabel(r'$R_{deproj}$ [Mpc]')
ax.set_ylabel(qty)
plt.tight_layout()
plt.savefig('fits/' + qty + '_fit.png')
我发现有一个类似的问题被问到here,但它似乎只是针对特定类别的预测观察,而不是完全排除这些影响。在
如有进一步的建议,将不胜感激。在