ValueError: матрицы endog и exog имеют разные размеры - как поместить данные только в определенные столбцы? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь запустить многопараметрическую регрессию и получаю сообщение об ошибке:

"ValueError: матрицы endog и exog имеют разные размеры"

Мой фрагмент кода ниже:

df_raw = pd.DataFrame(data=df_raw)

y = (df_raw['daily pct return']).astype(float)
x1 = (df_raw['Excess daily return']).astype(float)
x2 = (df_raw['Excess weekly return']).astype(float)
x3 = (df_raw['Excess monthly return']).astype(float)
x4 = (df_raw['Trading vol / mkt cap']).astype(float)
x5 = (df_raw['Std dev']).astype(float)
x6 = (df_raw['Residual risk']).astype(float)

y = y.replace([np.inf, -np.inf],np.nan).dropna()

print(y.shape)
print(x1.shape)
print(x2.shape)
print(x3.shape)
print(x4.shape)
print(x5.shape)
print(x6.shape)


df_raw.to_csv('Raw_final.csv', header=True)

result = smf.OLS(exog=y, endog=[x1, x2, x3, x4, x5, x6]).fit()
print(result.params)
print(result.summary())

Как вы можете видеть из моего кода, я проверяю «форму» каждой переменной.Я получаю следующий вывод, который указывает на причину ошибки: переменная y имеет только 48392 значения, тогда как все остальные имеют 48393:

(48392,) (48393,) (48393,) (48393,)(48393,) (48393,) (48393,)

Мой фрейм данных выглядит примерно так:

  daily pct return | Excess daily return | weekly pct return | index weekly pct return | Excess weekly return | monthly pct return | index monthly pct return | Excess monthly return | Trading vol / mkt cap |   Std dev   
 ------------------|---------------------|-------------------|-------------------------|----------------------|--------------------|--------------------------|-----------------------|-----------------------|------------- 
                   |                     |                   |                         |                      |                    |                          |                       |           0.207582827 |             
       0.262658228 |         0.322397801 |                   |                         |                      |                    |                          |                       |           0.285585677 |             
       0.072681704 |         0.126445534 |                   |                         |                      |                    |                          |                       |           0.272920624 |             
       0.135514019 |         0.068778682 |                   |                         |                      |                    |                          |                       |           0.213149083 |             
      -0.115226337 |        -0.173681889 |                   |                         |                      |                    |                          |                       |           0.155653699 |             
      -0.165116279 |        -0.176569405 |                   |                         |                      |                    |                          |                       |           0.033925024 |             
       0.125348189 |         0.079889239 |                   |                         |                      |                    |                          |                       |           0.030968484 | 0.544133212 
       0.022277228 |        -0.044949678 |                   |                         |                      |                    |                          |                       |           0.020735381 | 0.385659608 
       0.150121065 |         0.102119782 |                   |                         |                      |                    |                          |                       |           0.063563881 | 0.430868447 
       0.336842105 |         0.333590483 |                   |                         |                      |                    |                          |                       |           0.210193049 | 0.893734807 
       0.011023622 |        -0.011860658 |       0.320987654 |            -0.657089012 |          0.978076666 |                    |                          |                       |           0.100468109 | 1.137976483 
        0.37694704 |         0.308505907 |                   |                         |                      |                    |                          |                       |           0.135828281 | 1.867394416 

У кого-нибудь есть элегантное решение для выравнивания размеров матриц, чтобы ябольше не получите эту ошибку?Я думаю, что мне нужно удалить первый ряд значений APART из переменной y («ежедневный возврат в процентах»), но я не уверен, как мне этого добиться?

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Наконец дошли до проблемы!Было три проблемы:

1) Переменная y имела размер 48392, тогда как все остальные 6 переменных имели размер 48393. Чтобы исправить это, я включил следующую строку кода для удаления 1-й строки:

df_raw = df_raw.drop([0])

2) В моем информационном кадре было много пустых ячеек.Вы не можете выполнить регрессию, если в каждой ячейке нет значения.Поэтому я включил некоторый код, чтобы заменить все инфы и пустые ячейки на NaN, а затем заполнить все NaN значением 0.Фрагмент кода:

df_raw ['daily pct return']= df_raw ['daily pct return'].replace([np.inf, -np.inf],np.nan)
df_raw = df_raw.replace(r'\s+', np.nan, regex=True).replace('', np.nan)
df_raw.fillna(value=0, axis=1,inplace=True)

3) Я неправильно написал формулу мультирегрессии.Я исправил это следующим образом:

result = smf.ols(formula='y ~ x1 + x2 + x3 + x4 + x5 + x6', data=df_raw).fit()

Итак, в общем, мой обновленный код теперь выглядит следующим образом:

df_raw = pd.DataFrame(data=df_raw)
df_raw = df_raw.drop([0])
df_raw ['daily pct return']= df_raw ['daily pct return'].replace([np.inf, -np.inf],np.nan)
df_raw = df_raw.replace(r'\s+', np.nan, regex=True).replace('', np.nan)
df_raw.fillna(value=0, axis=1,inplace=True)
df_raw.to_csv('Raw_final.csv', header=True)


# Define variables for regression
y = (df_raw['daily pct return']).astype(float)
x1 = (df_raw['Excess daily return']).astype(float)
x2 = (df_raw['Excess weekly return']).astype(float)
x3 = (df_raw['Excess monthly return']).astype(float)
x4 = (df_raw['Trading vol / mkt cap']).astype(float)
x5 = (df_raw['Std dev']).astype(float)
x6 = (df_raw['Residual risk']).astype(float)

# Check shape of variables to confirm they are of the same size
print(y.shape)
print(x1.shape)
print(x2.shape)
print(x3.shape)
print(x4.shape)
print(x5.shape)
print(x6.shape)

# Perform regression
result = smf.ols(formula='y ~ x1 + x2 + x3 + x4 + x5 + x6', data=df_raw).fit()
print(result.params)
print(result.summary())
0 голосов
/ 08 декабря 2018

Я бы предположил, что вы захотите выбросить все данные, связанные с вашим значением y, которое равно бесконечности.

df_raw = pd.DataFrame(data=df_raw)

df_raw['daily pct return']) = df_raw['daily pct return']).astype(float).replace([np.inf, -np.inf],np.nan)
df_raw = df_raw.dropna()

Затем продолжите, как хотите, для регрессии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...