Box-Cox变换后的数据,可以使回归模型满足线性、误差独立性、误差方差齐性和误差正态性,同时又不丢失信息。
对存在非线性关系的数据,可以使用复杂模型拟合非线性函数来处理非线性问题,但这样的运算更复杂。先采用相对简单的数据转换来尝试将数据关系变为近似线性关系的情况,是更明智的。
一般的数据转换方法:
最大化似然,求得参数λ的最优值。
Box-Cox转换通过变换参数λ来改变变换的具体形式。整个过程完全基于数据本身,从而比直接选定对数、平方根等方法要客观准确
from scipy import stats
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(3,1,1)
x = stats.loggamma.rvs(5, size=800) + 5
prob = stats.probplot(x, dist=stats.norm, plot=ax1)
ax1.set_xlabel('')
ax1.set_title('Probplot against normal distribution')
ax2 = fig.add_subplot(3,1,3)
xt, _ = stats.boxcox(x)
prob = stats.probplot(xt, dist=stats.norm, plot=ax2)
ax2.set_title('Probplot after Box-Cox transformation')
plt.show()