【问题标题】:Apply Box Cox transformation to two columns simultaneously同时对两列应用 Box Cox 变换
【发布时间】:2022-01-06 17:07:13
【问题描述】:

我想对两个不同的列应用 Box-Cox 变换。不同的是,我被要求同时选择对两列都最佳的 lambda。

scipy.stats.boxcox 只接受一维数组。

如何将 Box-Cox 转换应用于受 lambda_1 = lambda_2 约束的两列?

Here's my data.

我想转换 SPEEDCAP 列。

import pandas as pd
from scipy import stats

df = pd.read_csv('https://raw.githubusercontent.com/BenjaminKay/berndt-econometrics/master/data/floppy_ver/CHAP4.DAT/COLE',
                 sep='\t')
stats.boxcox(df[['SPEED','CAP']].values)

ValueError:数据必须是一维的。

【问题讨论】:

  • 仅供参考:您的输入文件中有两个不同的数据表。我认为pandas.read_csv 无法处理。

标签: python scipy statistics


【解决方案1】:

听起来您希望boxcox 将两列视为一个数据集。您可以将它们合并成一个一维数组,应用boxcox,然后恢复形状,如下所示。

以二维数组的形式获取值:

In [63]: data = df[['SPEED','CAP']].values

将数据传递给boxcox;在传入数据之前,使用.ravel() 方法将data 扁平化为一维数组:

In [64]: result1d, lam = stats.boxcox(data.ravel())

In [65]: lam
Out[65]: -0.02063317824310837

result1d 重塑回原来的二维形状:

In [66]: result = result1d.reshape(data.shape)

In [67]: result.shape
Out[67]: (91, 2)

In [68]: result[:8]
Out[68]: 
array([[-1.82384013,  7.23194418],
       [-4.09393704,  3.25939313],
       [-3.80017243,  4.39314839],
       [-3.80017243,  4.39314839],
       [-3.80017243,  4.39314839],
       [-3.80017243,  4.39314839],
       [-3.11153324,  5.01897958],
       [-3.11153324,  5.01897958]])

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 2014-12-11
    • 2015-07-13
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2020-09-22
    相关资源
    最近更新 更多