参考文献
- 偏斜度
- 色度
coskew
我对偏斜的解释是一个序列与另一个序列的方差之间的“相关性”。这样,根据我们要计算其方差的序列,实际上可以有两种类型的偏斜。维基百科显示了这两个公式
'left'
'right'
幸运的是,当我们计算倾斜矩阵时,一个是另一个的转置。
示范def coskew(df, bias=False): v = df.values s1 = sigma = v.std(0, keepdims=True) means = v.mean(0, keepdims=True) # means is 1 x n (n is number of columns # this difference broacasts appropriately v1 = v - means s2 = sigma ** 2 v2 = v1 ** 2 m = v.shape[0] skew = pd.Dataframe(v2.T.dot(v1) / s2.T.dot(s1) / m, df.columns, df.columns) if not bias: skew *= ((m - 1) * m) ** .5 / (m - 2) return skew
coskew(df) a ba -0.369380 0.096974b 0.325311 0.067020
我们可以对此进行比较
df.skew()并检查对角线是否相同
计算中df.skew()a -0.36938b 0.06702dtype: float64
cokurtosis
我对色度的解释是以下两种之一
- 一个系列与另一个系列的偏斜之间的“相关性”
- 两个系列的方差之间的“相关性”
对于选项1,我们再次具有左右变体,它们在矩阵形式中是彼此的转置。因此,我们仅关注左侧变体。剩下的就是计算总共两个变体。
'left'
'middle'
示范def cokurt(df, bias=False, fisher=True, variant='middle'): v = df.values s1 = sigma = v.std(0, keepdims=True) means = v.mean(0, keepdims=True) # means is 1 x n (n is number of columns # this difference broacasts appropriately v1 = v - means s2 = sigma ** 2 s3 = sigma ** 3 v2 = v1 ** 2 v3 = v1 ** 3 m = v.shape[0] if variant in ['left', 'right']: kurt = pd.Dataframe(v3.T.dot(v1) / s3.T.dot(s1) / m, df.columns, df.columns) if variant == 'right': kurt = kurt.T elif variant == 'middle': kurt = pd.Dataframe(v2.T.dot(v2) / s2.T.dot(s2) / m, df.columns, df.columns) if not bias: kurt = kurt * (m ** 2 - 1) / (m - 2) / (m - 3) - 3 * (m - 1) ** 2 / (m - 2) / (m - 3) if not fisher: kurt += 3 return kurt
cokurt(df, variant='middle', bias=False, fisher=False) a ba 1.882817 0.86649b 0.866490 1.63200cokurt(df, variant='left', bias=False, fisher=False) a ba 1.882817 0.19175b -0.020567 1.63200
对角线应等于
kurtosis
df.kurtosis() + 3a 1.882817b 1.632000dtype: float64
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)