Условные корреляции с использованием оператора IF - Python - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь выполнить оператор IF для оценки условных пороговых корреляций.Уравнение выглядит следующим образом:

Threshold Correlation

Я пытался сделать оператор IF, но он не работает.Мне как-то удалось сделать это с pandas, но это был бы действительно плохой код.

p = np.arange(0.1,1,0.1)

r1 = log_r['AEX']; r2 = log_r['MBI10']
np.quantile(r1, p[0])

corrcoef = pd.Series()
if r1<np.quantile(r1,p[0]) & r2<np.quantile(r2,p[0]) & p[0]<0.5:
    corrcoef[0] = np.corrcoef(r1,r2) 

В качестве альтернативы я сделал следующее:

df = pd.DataFrame(pd.concat([log_r['AEX'],log_r['MBI10']],axis=1))
df['p0.1 AEX'] = (df['AEX'] < np.quantile(df['AEX'], p[0]))*df['AEX']    
df['p0.1 MBI10'] = (df['MBI10'] < np.quantile(df['MBI10'], p[0]))*df['MBI10']
np.corrcoef(df['p0.1 AEX'],df['p0.1 MBI10'])

Это работает, однакоэто было бы очень грязно, так как мне нужно было бы сделать это не только для p[0], но и для всего np.arange, а также AEX и MBI10 - только 2/36 пар, которые у меня есть, поэтому я действительно ищу более элегантное решениек этому.Спасибо!

Я пытаюсь получить коэффициент корреляции в первом ряду corrcoef.Я получаю следующую ошибку при попытке выполнить цикл for:

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]

1 Ответ

1 голос
/ 31 мая 2019

Битовый оператор AND & имеет приоритет над < (в отличие от логического оператора and, который связывает слабее, чем <), поэтому это выражение не анализируется так, как вы намеревались.

r1<np.quantile(r1,p[0]) & r2<np.quantile(r2,p[0]) & p[0]<0.5

эквивалентно

r1 < (np.quantile(r1,p[0]) & r2) < (np.quantile(r2,p[0]) & p[0]) < 0.5

(Примечание: в Python a < b < c является синтаксическим сокращением для a < b and b < c, которое объясняет, почему это все еще интерпретируется как допустимое выражение.)

...