首页 > 解决方案 > Python - 为相同/或不同数据帧/秒内的多个回归创建一个 For 循环

问题描述

希望有人可以帮助我,这是我在这里的第一个问题。

我有一个数据框,其中日期(索引)作为 Y 轴,X 轴(列)包含所有因变量(目标变量)以及 X 轴(列)上的 4 个回归量(自变量),例如:

Date          XYZ    ABC    DEF    'regressor1'    'regessors2'    'regressor3'    'regressor4'
03/01/2020      1    1.5    1.6        5.3              4.3            3.1              3.3
02/01/2020    0.8    1.3    1.3        5.2              4.2            3.7              3.4    
31/12/2019    0.7    1.1    1.4        5.11             4.1            3.8              3.09

有 289 个因变量(XYZ、ABC、DEF ......“289th V”)和 4 个回归量。我有数据框,其中 DV 和 IV 是分开的,也有一个。

我需要创建一个 For 循环,该循环采用目标变量的第一列并对所有 4 个回归量进行回归,然后采用目标变量的第二列并回归,然后是第三列,以此类推,直到第 289 个目标变量。

作为输出,我需要一个截取列表,最好采用这种格式:

Date          "INTERCEPT"    
03/01/2020           1.3    
02/01/2020           0.8    
31/12/2019           0.7   
""""
""""
""""
"289th date"         1.3

以及每个目标变量的常规回归输出(摘要),例如:

## # A tibble: 4 x 5
##   term        estimate std.error statistic p.value
##   <chr>          <dbl>     <dbl>     <dbl>   <dbl>
## 1 (Intercept)  0.00112   0.00100     1.12  0.265  
## 2 mkt_excess   0.888     0.0234     37.9   0      
## 3 smb          0.0301    0.0345      0.873 0.383  
## 4 hml         -0.110     0.0357     -3.07  0.00227

我需要的最重要的事情是每个变量的显着性和截距(残差)系数。

对不起,如果这很长,如果有人感兴趣,它类似于 Fama-French 回归,但使用基金回报来理解一些实证研究的相关性。

我有两种尝试方法:

fundlist = []

for x in range(1, len(yycolumns)):
    fundlist[x] = sm.ols(formula='yy[x].iloc[:,0] ~ X_1', data=yycolumns[x]).fit()
    x2 = model5.params['const']
    fundlist.append(x)
    fundlist.append(x2)
    
return

这个只是运行,但从不显示任何内容....

第二种方法:

fundlist = []

x = 0
for x in enumerate(yycolumns):
    model5 = smf.OLS(yy.iloc[:,int(x)], carhart4).fit()
    x2 = model5.params['const']
    fundlist.append(x)
    fundlist.append(x2)
    x+=1
return

这给出了这个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-40-56e49c1e4c74> in <module>
      6 for x in enumerate(yycolumns):
----> 7     model5 = smf.OLS(yy.iloc[:,int(x)], carhart4).fit()
      8     x2 = model5.params['const']
      9     fundlist.append(x)

TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'

任何帮助将非常感激。

标签: pythonloopsstatisticstime-seriesregression

解决方案


推荐阅读