boxcox#
- scipy.stats.boxcox(x, lmbda=None, alpha=None, optimizer=None)[原始碼]#
傳回經 Box-Cox 冪轉換的資料集。
- 參數:
- xndarray
要轉換的輸入陣列。
如果 lmbda 不是 None,則這是
scipy.special.boxcox
的別名。如果x < 0
則傳回 nan;如果x == 0 且 lmbda < 0
則傳回 -inf。如果 lmbda 是 None,則陣列必須為正數、1 維且非常數。
- lmbda純量,選用
如果 lmbda 是 None (預設值),則尋找使對數概似函數最大化的 lmbda 值,並將其作為第二個輸出引數傳回。
如果 lmbda 不是 None,則對該值進行轉換。
- alpha浮點數,選用
如果 lmbda 是 None 且
alpha
不是 None (預設值),則傳回 lmbda 的100 * (1-alpha)%
信賴區間作為第三個輸出引數。必須介於 0.0 和 1.0 之間。如果 lmbda 不是 None,則忽略
alpha
。- optimizer可呼叫物件,選用
如果 lmbda 是 None,則 optimizer 是用於尋找使負對數概似函數最小化的 lmbda 值的純量最佳化器。optimizer 是一個可呼叫物件,它接受一個引數
- fun可呼叫物件
目標函數,它在提供的 lmbda 值下評估負對數概似函數
並傳回一個物件,例如
scipy.optimize.OptimizeResult
的實例,該實例在屬性 x 中保存 lmbda 的最佳值。請參閱
boxcox_normmax
中的範例或scipy.optimize.minimize_scalar
的文件以取得更多資訊。如果 lmbda 不是 None,則忽略 optimizer。
- 傳回值:
註解
Box-Cox 轉換由下式給出
y = (x**lmbda - 1) / lmbda, for lmbda != 0 log(x), for lmbda = 0
boxcox
要求輸入資料為正數。有時 Box-Cox 轉換會提供一個位移參數來實現此目的;boxcox
不會。這樣的位移參數等效於在呼叫boxcox
之前向 x 新增一個正數常數。當提供
alpha
時傳回的信賴區間限制給出以下區間\[llf(\hat{\lambda}) - llf(\lambda) < \frac{1}{2}\chi^2(1 - \alpha, 1),\]其中
llf
是對數概似函數,而 \(\chi^2\) 是卡方函數。參考文獻
G.E.P. Box 和 D.R. Cox,“An Analysis of Transformations”,Journal of the Royal Statistical Society B,26,211-252 (1964)。
範例
>>> from scipy import stats >>> import matplotlib.pyplot as plt
我們從非常態分佈中產生一些隨機變數,並為其製作機率圖,以顯示它在尾部是非常態的
>>> fig = plt.figure() >>> ax1 = fig.add_subplot(211) >>> x = stats.loggamma.rvs(5, size=500) + 5 >>> prob = stats.probplot(x, dist=stats.norm, plot=ax1) >>> ax1.set_xlabel('') >>> ax1.set_title('Probplot against normal distribution')
我們現在使用
boxcox
轉換資料,使其最接近常態>>> ax2 = fig.add_subplot(212) >>> xt, _ = stats.boxcox(x) >>> prob = stats.probplot(xt, dist=stats.norm, plot=ax2) >>> ax2.set_title('Probplot after Box-Cox transformation')
>>> plt.show()