Bonjour,
Je tiens � pr�ciser que je commence � coder en Python et suis donc en mode "perroquet" pour trouver des solutions � mes probl�mes. Je trouve un bout de code sur le net et essaye de l'adapter � mon besoin, alors d�soler d'avance si les r�ponses � mes questions sont triviales.
Voil� sur quoi je bloque depuis 2jr.
J'arrive � calculer une regression lin�aire entre 2 s�ries contenus dans un dataframe et � mettre le r�sultat dans une nouvelle colonne du dataframe par contre je n'arrive pas � le faire sur des sous group de ce dataframe. J'ai r�ussi le calcul de quintiles en sous groupe puis int�gration au dataframe mais pas la regression. Je suppose que mon pb vient de mon manque de ma�trise des objets python et de leur manipulation.
-- Package
-- Declaration de mes fonctions
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 import pandas as pd from collections import OrderedDict import statsmodels.api as sm import numpy as np from sklearn.linear_model import LinearRegression
-- Creation de mon dataframe
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 def regress(data, yvar, xvars): Y = data[yvar] X = data[xvars] X['intercept'] = 1. result = sm.OLS(Y, X).fit() y_pred = result.predict() residual = Y - y_pred return residual def Reg_func(x,y): # Cross Sectional Regression x = np.array(x).reshape((-1,1)) y = np.array(y) model = LinearRegression().fit(x, y) y_pred = model.intercept_ + np.sum(model.coef_ * x,axis=1) residual = y - y_pred return residual
Si vous avez une mani�re plus simple de le cr�er je suis preneur, j'ai essay� plein de choses mais sans succ�s
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 ind = ['I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'I10', 'I11', 'I12', 'I13', 'I14', 'I15', 'I16', 'I17', 'I18', 'I19', 'I20'] Axe = ['A', 'A', 'B', 'A', 'A', 'A', 'A', 'B', 'A', 'A', 'A', 'B', 'B', 'A', 'B', 'B', 'B', 'B', 'B', 'B'] df = pd.DataFrame(np.random.randn(20, 2), index = ind, columns=['C1', 'C2']) df.insert(0,'Axe',Axe).
-- Calculs
Quintiles
QC1 respecte la structure de df et peut donc y �tre facilement int�gr�
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 # Quintile groupé par Axe QC1 = df.groupby(['Axe'])['C1'].apply(lambda x: pd.qcut(x, 5, labels=False)+1) print(QC1)
Regressions Simple
Pas de soucis pour int�grer le r�sultat � df en faisant un insert
Code : S�lectionner tout - Visualiser dans une fen�tre � part res_reg = Reg_func(newdf['C1'], newdf['C2'])
Je n'arrive pas � le faire avec la fonction regress j'ai systh�matiquement des erreurs
Regressions par sous groupe 'Axe'
Je ne vois pas comment r�cup�rer mes data pour les int�grer � df vu la structure de l'objet res_reg_group
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 # Regression par axes 1 res_reg_group = (df.groupby('Axe').apply(lambda x: Reg_func(x['C1'], x['C2']))) print(res_reg_group)
Probl�me avec cette fonction c'est que je n'arrive pas � l'utiliser pour une regression simple et que je ne suis pas sur de r�ussir � int�grer les resultats � df.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 # Regression par axes avec fonction regress res_reg_SN3 = df.groupby('Axe').apply(regress, 'C1', ['C2']) print(res_reg_SN3)
Comme la mani�re de faire sur les quintiles permet de garder la structure, je suppose que c'est gr�ce �, j'ai essay� de r�pliquer avec mes 2 focntions de regressions en faisant un
Code : S�lectionner tout - Visualiser dans une fen�tre � part groupby(['Axe'])['C1']mais j'ai aussi des erreurs.
Code : S�lectionner tout - Visualiser dans une fen�tre � part groupby(['Axe'])['C1', 'C2']
J'esp�re avoir �t� claire.
Merci d'avance
Partager