Bonjour,
J'essaye de faire une régression linéaire multiple.
Soit deux paramètres que je fais varier (dH et ddV) pour m'en donner un autre : phi
J'ai calculer à la main 36 valeurs de phi en faisant varier dH et ddV
J'aimerais trouver une fonction telle que phi=f(dH, ddV)
En regardant le plot 3D des différentes mesures, il semble que tout s'ajuste plus ou moins suivant un plan légèrement courbé.
Je me suis inspiré de ce code pour réaliser une régression linéaire multiple
http://www.scipy-lectures.org/packag...ession_3d.html
me retournant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #usr/bin/python # -*- coding: utf-8 -*- # Python 3 import numpy as np import matplotlib.pyplot as plt import pandas from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm from mpl_toolkits.mplot3d import Axes3D data = np.loadtxt('Data_Phi_dH_ddV_M40-48') #signal_1=np.loadtxt(namefile1) phi=data[:,0]/364 dH=data[:,1] ddV=data[:,2] # Plot the data fig = plt.figure() ax = fig.gca(projection='3d') surf = ax.plot_surface(dH, ddV, phi, cmap=plt.cm.coolwarm) ax.set_xlabel('dH') ax.set_ylabel('ddV') ax.set_zlabel('phi') ############################################################################## # Multilinear regression model, calculating fit, P-values, confidence # intervals etc. # Convert the data into a Pandas DataFrame to use the formulas framework # in statsmodels # First we need to flatten the data: it's 2D layout is not relevent. dH = dH.flatten() ddV = ddV.flatten() phi = phi.flatten() data = pandas.DataFrame({'x': dH, 'y': ddV, 'z': phi}) # Fit the model model = ols("z ~ x + y", data).fit() print result.summary() plt.show()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 OLS Regression Results ============================================================================== Dep. Variable: z R-squared: 0.970 Model: OLS Adj. R-squared: 0.968 Method: Least Squares F-statistic: 528.2 Date: Fri, 12 May 2017 Prob (F-statistic): 8.73e-26 Time: 17:57:19 Log-Likelihood: 80.588 No. Observations: 36 AIC: -155.2 Df Residuals: 33 BIC: -150.4 Df Model: 2 Covariance Type: nonrobust ============================================================================== coef std err t P>|t| [95.0% Conf. Int.] ------------------------------------------------------------------------------ Intercept 0.0200 0.008 2.556 0.015 0.004 0.036 x 0.0023 7.53e-05 31.103 0.000 0.002 0.002 y 4.456e-05 7.16e-05 0.622 0.538 -0.000 0.000 ============================================================================== Omnibus: 33.046 Durbin-Watson: 1.880 Prob(Omnibus): 0.000 Jarque-Bera (JB): 100.560 Skew: 2.032 Prob(JB): 1.46e-22 Kurtosis: 10.108 Cond. No. 185. ==============================================================================
Et j'ai alors deux problèmes :
1/ Premièrement il m'ouvre une figure pour:
mais vide, sans aucune valeur dedans...
Code : Sélectionner tout - Visualiser dans une fenêtre à part surf = ax.plot_surface(dH, ddV, phi, cmap=plt.cm.coolwarm)
2/ Deuxièmement, j'imagine que l'équation d'après les paramètres donnés serait:
phi=0.0023*dH+0.00004456*ddV+0.002
Mais en faite pas du tout puisqu'en recalculant sur mes mesures, ça me donne pas la même chose.
J'ai du me tromper dans l'interprétation des résultats ou le code en lui même mais je ne vois pas où.
et j'aurais également une autre question :
Apparemment on peut aussi utiliser scikit-learn pour les regressions linéaires multiples mais en essayant d'importer :
il me retourne
Code : Sélectionner tout - Visualiser dans une fenêtre à part from sklearn import linear_model
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 from sklearn import linear_model ImportError: No module named sklearn
Merci par avance de toutes aides.
PS, pour info voici le fichier de data:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 49 50 0 90 100 0 1 0 42 51 50 42 93 100 42 5 0 167 60 50 167 106 100 167 40 30 0 -48 -50 42 2 0 42 43 50 42 -44 -50 167 11 0 167 52 50 167 -88 -160 42 -38 -50 42 3 0 42 -84 -100 167 -29 -50 167 16 0 167 50 50 0 91 100 0 4 0 125 59 50 125 105 100 125 41 50 0 -46 -50 125 9 0 125 55 50 125 -87 -100 125 -32 -50 125 13 0 125 55 50 0 100 100 0 46 50 0
Partager