コード例 #1
0
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