VIF = np.diag(C).round(2) print('VIF:', VIF) #38.5 254.42 46.87 282.51 df_scaled = (df - df.mean()) / df.std() A_scaled = np.array(df_scaled) #print(A_scaled) #ndarray,not dataframe x1x2 = A_scaled[:, [1, 2]] x3x4 = A_scaled[:, [3, 4]] A = np.array(df) X = A[:, 1:] #print(X) B = np.dot(X.T, X) ev, evct = np.linalg.eig(B) kk = ev.max() / ev.min() print('lambda1/lambda2:', kk) #423.7 lr1 = OLS(dfy, add_constant(x1x2)).fit() lr2 = OLS(dfy, add_constant(x3x4)).fit() print('AIC:', lr1.aic, lr2.aic) #x1x2=62.31 x3x4=76.74 x2x4=97.51 xmin = A_scaled[:, :] nmin = sets lrmin = OLS(dfy, add_constant(xmin)).fit() for n in subsets(sets)[1:-1]: xx = A_scaled[:, n] lr = OLS(dfy, add_constant(xx)).fit() # print(lr.aic) if lr.aic < lrmin.aic: lrmin.aic = lr.aic nmin = n print('AICmin:', lrmin.aic, 'Combination:', nmin) #x1,x2,x3,x4