2016-07-07 5 views
0

Ich versuche, die Koeffizienten mit multivariaten linearen Regression zu berechnen. Ich verwende die statsmodels Bibliothek, um die Koeffizienten zu berechnen. Das Problem ist, dass ich mit diesem Code den Fehler ValueError: endog and exog matrices are different sizes bekomme. Ich bekomme diesen Fehler, weil in diesem Beispiel der y Satz 4 Elemente hat und der X Satz eine Liste mit 7 ndarrays innerhalb hat, wobei jede Liste 5 Elemente hat.Koeffizienten in einer multivariaten linearen Regression berechnen

Aber was ich nicht verstehe, ist, dass die x Satz (nicht X) ist eine Liste mit 4 Listen innen (y hat 4 Elemente), wobei jede Liste von 7 Variablen zusammengesetzt ist. Für mich haben die x und y die gleiche Anzahl von Elementen.

Wie kann ich diesen Fehler beheben?

import numpy as np 
import statsmodels.api as sm 

def test_linear_regression(): 
    x = [[0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102259506.0, 44049537.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], [0.0, 1102259506.0, 44049537.0, 10.0, 2.0, 32000.0, 49222464.0]] 

    y = [71.7554421425, 37.5205008984, 44.9945571423, 53.5441429615] 
    reg_m(y, x) 

def reg_m(y, x): 
    ones = np.ones(len(x[0])) 
    X = sm.add_constant(np.column_stack((x[0], ones))) 
    y.append(1) 
    for ele in x[1:]: 
     X = sm.add_constant(np.column_stack((ele, X))) 
    results = sm.OLS(y, X).fit() 
    return results 


if __name__ == "__main__": 
    test_linear_regression() 
+0

Ich denke, Sie eine wirklich gute haben Verständnis für dieses Problem. Jede Liste in 'x' (kleines x) hat sieben Elemente, während Ihr' y' ein einzelnes Element in Bezug auf jede Liste in 'x' ist. Am Ende hat 'X' (großes X) eine Form von (7, 5), aber dein' y' (welches eine Liste ist) hat eine Länge von 5. Da eine Regression die gleiche Anzahl an Samples haben muss, versuche es Vorhersage von 5 Elementen (y) für 7 Proben wird nicht funktionieren. Was versuchst du zu machen? Wollen Sie, dass die 7 Elemente in jeder Liste von 'x'' y' vorhersagen? – Jarad

Antwort

1

jede Liste in x Unter der Annahme, entspricht jedem Wert von y:

x = [[0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], 
    [0.0, 1102259506.0, 44049537.0, 9.0, 2.0, 32000.0, 49222464.0], 
    [0.0, 1102249463.0, 44055788.0, 9.0, 2.0, 32000.0, 49222464.0], 
    [0.0, 1102259506.0, 44049537.0, 10.0, 2.0, 32000.0, 49222464.0] 
    ] 

y = [71.7554421425, 37.5205008984, 44.9945571423, 53.5441429615] 

def reg_m(x, y): 
    x = np.array(x) 
    y = np.array(y) 

    # adds a constant of ones for y intercept 
    X = np.insert(x, 0, np.ones((1,)), axis=1) 

    # or, if you REALLY want to use add_constant, to add ones, use this 
    # X = sm.add_constant(x, has_constant='add') 

    return sm.OLS(y, X).fit() 

model = reg_m(x, y) 

Um eine Zusammenfassung Ausdruck des Modells zu sehen, nur model.summary()

""" 
          OLS Regression Results        
============================================================================== 
Dep. Variable:      y R-squared:      0.450 
Model:       OLS Adj. R-squared:     -0.649 
Method:     Least Squares F-statistic:     0.4096 
Date:    Thu, 07 Jul 2016 Prob (F-statistic):    0.741 
Time:      21:50:12 Log-Likelihood:    -14.665 
No. Observations:     4 AIC:        35.33 
Df Residuals:      1 BIC:        33.49 
Df Model:       2           
Covariance Type:   nonrobust           
============================================================================== 
       coef std err   t  P>|t|  [95.0% Conf. Int.] 
------------------------------------------------------------------------------ 
const  -1.306e-07 2.18e-07  -0.599  0.657  -2.9e-06 2.64e-06 
x1   -3.086e-11 5.15e-11  -0.599  0.657  -6.86e-10 6.24e-10 
x2   -0.0001  0.000  -0.900  0.534  -0.002  0.002 
x3    0.0031  0.003  0.900  0.534  -0.041  0.047 
x4   16.0236  26.761  0.599  0.657  -324.006 356.053 
x5   8.321e-12 9.25e-12  0.900  0.534  -1.09e-10 1.26e-10 
x6   1.331e-07 1.48e-07  0.900  0.534  -1.75e-06 2.01e-06 
x7    0.0002  0.000  0.900  0.534  -0.003  0.003 
============================================================================== 
Omnibus:       nan Durbin-Watson:     1.500 
Prob(Omnibus):     nan Jarque-Bera (JB):    0.167 
Skew:       -0.000 Prob(JB):      0.920 
Kurtosis:      2.000 Cond. No.       inf 
============================================================================== 

Warnings: 
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified. 
[2] The input rank is higher than the number of observations. 
[3] The smallest eigenvalue is  0. This might indicate that there are 
strong multicollinearity problems or that the design matrix is singular. 
""" 
+0

zu betonen: siehe Warnungen (2) und (3), die Schätzungen basieren auf der verallgemeinerten Inversen, pinv, und die Parameter sind nicht identifiziert. – user333700

Verwandte Themen