大熊猫如何计算偏斜

piR*_*red 10 python pandas

我正在计算一个coskew矩阵,并希望用pandas内置skew方法仔细检查我的计算.我无法调和大熊猫如何执行计算.

将我的系列定义为:

import pandas as pd

series = pd.Series(
    {0: -0.051917457635120283,
     1: -0.070071606515280632,
     2: -0.11204865874074735,
     3: -0.14679988245503134,
     4: -0.088062467095565145,
     5: 0.17579741198527793,
     6: -0.10765856028420773,
     7: -0.11971470229167547,
     8: -0.15169210769159247,
     9: -0.038616800990881606,
     10: 0.16988162977411481,
     11: 0.092999418364443032}
)
Run Code Online (Sandbox Code Playgroud)

我比较了以下计算,并期望它们是相同的.

大熊猫

series.skew()

1.1119637586658944
Run Code Online (Sandbox Code Playgroud)

(((series - series.mean()) / series.std(ddof=0)) ** 3).mean()

0.967840223081231
Run Code Online (Sandbox Code Playgroud)

我 - 拿2

这是显着不同的.我认为这可能是Fisher-Pearson系数.所以我做了:

n = len(series)
skew = series.sub(series.mean()).div(series.std(ddof=0)).apply(lambda x: x ** 3).mean()
skew * (n * (n - 1)) ** 0.5 / (n - 1)

1.0108761442417222
Run Code Online (Sandbox Code Playgroud)

仍然相当多.

大熊猫如何计算偏斜?

jez*_*ael 8

我发现scipy.stats.skew参数bias=False返回相等的输出,所以我认为pandas skewbias=False默认情况下:

偏见:布尔

如果为假,则针对统计偏差校正计算.

import pandas as pd
import scipy.stats.stats as stats

series = pd.Series(
    {0: -0.051917457635120283,
     1: -0.070071606515280632,
     2: -0.11204865874074735,
     3: -0.14679988245503134,
     4: -0.088062467095565145,
     5: 0.17579741198527793,
     6: -0.10765856028420773,
     7: -0.11971470229167547,
     8: -0.15169210769159247,
     9: -0.038616800990881606,
     10: 0.16988162977411481,
     11: 0.092999418364443032}
)

print (series.skew())
1.11196375867

print (stats.skew(series, bias=False))
1.1119637586658944
Run Code Online (Sandbox Code Playgroud)

不确定100%,但我想我在代码中找到它


编辑(piRSquared)

scipy skew代码

if not bias:
    can_correct = (n > 2) & (m2 > 0)
    if can_correct.any():
        m2 = np.extract(can_correct, m2)
        m3 = np.extract(can_correct, m3)
        nval = ma.sqrt((n-1.0)*n)/(n-2.0)*m3/m2**1.5
        np.place(vals, can_correct, nval)
return vals
Run Code Online (Sandbox Code Playgroud)

调整为(n * (n - 1)) ** 0.5 / (n - 2)(n * (n - 1)) ** 0.5 / (n - 1)

  • pandas 使用 nanskew 函数来计算偏度,并在 [pandas GitHub 存储库](https://github.com/pandas-dev/pandas/blob/a00154dcfe5057cb3fd86653172e74b6893e337d/pandas/core/nanops.py#L540 中进行了描述)。它基本上是偏度 [维基百科页面](https://en.wikipedia.org/wiki/Skewness#Sample_skewness) 中的 G1。 (3认同)
  • 谢谢@jezrael。现在这就引出了 scipy 如何调整偏差的问题。另外,没有偏差参数的“stats.skew(series)”与我的计算相匹配。 (2认同)