Наконец дошли до проблемы!Было три проблемы:
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())