HTML_TAG_98_📋 Copia Tutti i modelli di statistiche
Statsmodels Cheatsheet¶
Installazione¶
Tabella_104_ Requirements: Python 3.8+, NumPy >= 1.18, SciPy >= 1.4, Pandas >= 1.0, Patsy >= 0.5.2
Comandi di base¶
Tabella_105_
Uso avanzato - Modelli di regressione¶
Tabella_106_
Uso avanzato - Analisi delle serie temporali¶
Tabella_107_
Uso avanzato - Test statistici¶
Tabella_108_
Uso avanzato - Sopravvivenza e nonparametrica¶
Tabella_109_
Configurazione¶
Model Formula Syntax (R-style)¶
# Basic formula syntax
'y ~ x1 + x2' # Multiple predictors
'y ~ x1 + x2 + x1:x2' # With interaction term
'y ~ x1 * x2' # Shorthand for x1 + x2 + x1:x2
'y ~ C(category)' # Categorical variable
'y ~ np.log(x1) + np.sqrt(x2)' # Transformations
'y ~ x1 + I(x1**2)' # Polynomial terms
Opzioni di montaggio del modello¶
# Common fitting parameters
results = model.fit(
method='lbfgs', # Optimization method
maxiter=1000, # Maximum iterations
disp=True, # Display convergence messages
cov_type='HC3' # Robust covariance type
)
# Time series specific
results = model.fit(
start_params=None, # Initial parameter values
method='css-mle', # Estimation method
trend='c', # Trend component
solver='lbfgs', # Optimization solver
maxiter=500, # Maximum iterations
full_output=True # Return additional information
)
Opzioni di visualizzazione¶
import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.precision', 4)
# Statsmodels summary options
results.summary(
alpha=0.05, # Significance level
title='Model Results', # Custom title
xname=['Var1', 'Var2'] # Custom variable names
)
Common Use Cases¶
Use Case 1: Analisi della regressione lineare¶
import statsmodels.api as sm
import pandas as pd
# Load data
df = pd.read_csv('data.csv')
# Prepare variables
X = df[['feature1', 'feature2', 'feature3']]
y = df['target']
X = sm.add_constant(X) # Add intercept
# Fit model
model = sm.OLS(y, X)
results = model.fit()
# Display results
print(results.summary())
# Check assumptions
print(f"Jarque-Bera test: {sm.stats.jarque_bera(results.resid)}")
print(f"Durbin-Watson: {sm.stats.durbin_watson(results.resid)}")
# Make predictions
predictions = results.predict(X_new)
Use Case 2: Time Series Forecasting with ARIMA¶
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
# Load time series data
ts_data = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
# Check stationarity
adf_result = adfuller(ts_data['value'])
print(f'ADF Statistic: {adf_result[0]:.4f}')
print(f'p-value: {adf_result[1]:.4f}')
# Plot ACF and PACF to determine order
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
plot_acf(ts_data['value'], lags=40, ax=axes[0])
plot_pacf(ts_data['value'], lags=40, ax=axes[1])
plt.show()
# Fit ARIMA model
model = ARIMA(ts_data['value'], order=(1, 1, 1))
results = model.fit()
print(results.summary())
# Forecast
forecast = results.forecast(steps=12)
print(forecast)
# Plot diagnostics
results.plot_diagnostics(figsize=(15, 10))
plt.show()
Use Case 3: Logistic Regression for Classification¶
import statsmodels.formula.api as smf
import pandas as pd
# Load data
df = pd.read_csv('classification_data.csv')
# Fit logistic regression
model = smf.logit('outcome ~ age + income + education', data=df)
results = model.fit()
# Display results
print(results.summary())
# Get odds ratios
odds_ratios = pd.DataFrame({
'OR': results.params.apply(lambda x: np.exp(x)),
'CI_lower': results.conf_int()[0].apply(lambda x: np.exp(x)),
'CI_upper': results.conf_int()[1].apply(lambda x: np.exp(x))
})
print(odds_ratios)
# Predict probabilities
df['predicted_prob'] = results.predict(df)
# Classification accuracy
df['predicted_class'] = (df['predicted_prob'] > 0.5).astype(int)
accuracy = (df['outcome'] == df['predicted_class']).mean()
print(f"Accuracy: {accuracy:.2%}")
Use Case 4: Analisi dei dati del pannello¶
import pandas as pd
from statsmodels.regression.linear_model import PanelOLS
# Load panel data (MultiIndex: entity, time)
df = pd.read_csv('panel_data.csv')
df = df.set_index(['entity_id', 'time'])
# Prepare variables
y = df['dependent_var']
X = df[['var1', 'var2', 'var3']]
# Fixed effects model
fe_model = PanelOLS(y, X, entity_effects=True, time_effects=True)
fe_results = fe_model.fit()
print(fe_results.summary)
# Extract fixed effects
entity_effects = fe_results.estimated_effects
print(entity_effects.head())
Use Case 5: Vector Autoregression (VAR) per Multivariate Time Series¶
import pandas as pd
from statsmodels.tsa.vector_ar.var_model import VAR
from statsmodels.tsa.stattools import adfuller
# Load multivariate time series
df = pd.read_csv('multivariate_ts.csv', index_col='date', parse_dates=True)
# Check stationarity for all variables
for col in df.columns:
result = adfuller(df[col])
print(f'{col}: ADF = {result[0]:.4f}, p-value = {result[1]:.4f}')
# Fit VAR model
model = VAR(df)
results = model.fit(maxlags=5, ic='aic')
print(results.summary())
# Granger causality test
granger_results = results.test_causality('var1', ['var2', 'var3'], kind='f')
print(granger_results)
# Impulse response analysis
irf = results.irf(10)
irf.plot(orth=True)
# Forecast
forecast = results.forecast(df.values[-results.k_ar:], steps=12)
forecast_df = pd.DataFrame(forecast, columns=df.columns)
print(forecast_df)
Migliori Pratiche¶
-
Aggiungi sempre il termine costante # Usa
sm.add_constant(X)quando si utilizza l'API basata su array per includere l'intercettazione nei modelli di regressione¶ - ** Controllare le ipotesi del modello**: Convalida residui per normalità, omosessualità e autocorrelazione utilizzando test diagnostici
- ** Utilizzare formula API per la leggibilità**: Preferisci
smf.ols('y ~ x1 + x2', data=df)su API basata su array per un codice più chiaro e mantenibile - **Test per la cancelleria nella serie del tempo ** Sempre eseguire
adfuller()test prima di montare i modelli ARIMA; dati di differenza se non stazionarioplot_pacf()_ per determinare i parametri appropriati dell'ordine ARIMA - ** Modelli completi con criteri di informazione**: Utilizzare AIC/BIC per la selezione dei modelli; i valori inferiori indicano una migliore vestibilità con parsimonia
- Validate out-of-sample: dividere i dati in gruppi di prova e valutare l'accuratezza delle previsioni sui dati di attesa
-
Handle multicollinearity # Controllare VIF (Variance Inflation Factor) per i predittori altamente correlati nei modelli di regressione¶
- ** Utilizzare gli errori standard robusti**: Applicare
cov_type='HC3'in.fit()_ per l'inferenza eteroscedasticity-robust - ** Specifiche del modello del documento**: Tenere chiare registrazioni di ordini modello, trasformazioni e criteri di selezione per la riproducibilità
- Visualizzare la diagnostica. Eseguire sempre
results.plot_diagnostics()per modelli di serie temporali per controllare i modelli residui
Risoluzione dei problemi¶
Traduzione: ImportError per dipendenze facoltative | Installare pacchetti mancanti: pip install matplotlib scipy patsy o utilizzare pip install statsmodels[all]