我正在研究一个财务问题,我要实现一个函数,在每只股票的信号回报率的正态分布之间使用Kolmogorov-Smirnov检验(KS-test)。我将对每个股票的信号回报率在正态分布上运行KS测试,对于这个测试,我将使用scipy.stats.kstest来执行KS测试。在建议我迭代groupby函数
我被要求只使用熊猫,纽比和希比。在
我的职能如下:def calculate_kstest(long_short_signal_returns):
"""
Calculate the KS-Test against the signal returns with a long or short signal.
Parameters
----------
long_short_signal_returns : DataFrame
The signal returns which have a signal.
This DataFrame contains two columns, "ticker" and "signal_return"
Returns
-------
ks_values : Pandas Series
KS static for all the tickers
p_values : Pandas Series
P value for all the tickers
"""
#TODO: Implement function
ks_v = []
p_v = []
#print(long_short_signal_returns)
column = []
df = long_short_signal_returns.copy()
print(df)
#df['signal_return'] = (df['signal_return'] - df['signal_return'].mean()) / (df['signal_return'].max() - df['signal_return'].min())
for name, group in df.groupby('ticker'):
sub_group = group['signal_return'].values
ks,p = kstest(sub_group,'norm')
ks_v.append(ks)
p_v.append(p)
column.append(name)
ks_values = pd.Series(ks_v,column)
p_values = pd.Series(p_v, column)
return ks_values, p_values
然而,我的回答与预期的产出不符。在
输入是:
^{pr2}$
我的输出是:OUTPUT ks_values:
DNTM 0.20326939
EHX 0.34826827
VWER 0.60256811
dtype: float64
OUTPUT p_values:
DNTM 0.98593727
EHX 0.48009144
VWER 0.02898631
dtype: float64
预期产出为:EXPECTED OUTPUT FOR ks_values:
DNTM 0.28999582
EHX 0.34484969
VWER 0.63466098
dtype: float64
EXPECTED OUTPUT FOR p_values:
DNTM 0.73186935
EHX 0.49345487
VWER 0.01775987
dtype: float64
我被告知在获得正确的p_值和ks_值之前使用适当的规范化,但我不明白这种正确的规范化意味着什么以及如何解决这个问题。有人能帮忙吗??在