| プラットフォーム | コマンド |
|---|
| Ubuntu/Debian | pip install statsmodels or sudo apt-get install python3-statsmodels |
| macOS | pip install statsmodels or conda install -c conda-forge statsmodels |
| Windows | pip install statsmodels or conda install -c conda-forge statsmodels |
| With all dependencies | pip install statsmodels[all] |
| With plotting support | pip install statsmodels[plotting] |
| From source (latest) | git clone https://github.com/statsmodels/statsmodels.git && cd statsmodels && pip install . |
| Docker | docker run -it python:3.9-slim bash -c "pip install statsmodels pandas numpy" |
| コマンド | 説明 |
|---|
import statsmodels.api as sm | statsmodels メインAPIをインポート |
import statsmodels.formula.api as smf | Import formula API (R形式の構文) |
sm.add_constant(X) | 特徴量行列に切片列を追加する |
sm.OLS(y, X).fit() | 通常最小二乗法(Ordinary Least Squares)回帰モデルを適合させる |
smf.ols('y ~ x1 + x2', data=df).fit() | 式表記を使用して最小二乗法(OLS)を適用する |
results.summary() | 包括的なモデル概要を表示 |
results.params | モデルの係数/パラメータを取得 |
results.pvalues | 係数の p 値を取得する |
results.rsquared | R-二乗値を取得 |
results.aic | Akaike Information Criterionを取得 |
results.bic | ベイズ情報量基準を取得 |
results.resid | モデルの残差を取得 |
results.fittedvalues | 推定値/予測値を取得 |
results.predict(X_new) | 新しいデータで予測を行う |
results.conf_int() | パラメータの信頼区間を取得する |
smf.logit('y ~ x1 + x2', data=df).fit() | ロジスティック回帰モデルを適合させる |
sm.datasets.get_rdataset('mtcars') | サンプルデータセットを読み込む |
results.get_prediction(X_new).summary_frame() | 信頼区間を含む予測を取得する |
| コマンド | 説明 |
|---|
sm.WLS(y, X, weights=w).fit() | 重み付き最小二乗回帰 |
sm.GLS(y, X, sigma=sigma).fit() | 一般化最小二乗法回帰 |
sm.RLM(y, X, M=sm.robust.norms.HuberT()).fit() | 外れ値に対して頑健な線形モデル (Robust Linear Model) |
smf.quantreg('y ~ x', data=df).fit(q=0.5) | 分位数回帰(メディアン回帰) |
smf.mixedlm('y ~ x', data=df, groups=groups).fit() | 混合線形モデル(ランダム効果) |
sm.PanelOLS(y, X, entity_effects=True).fit() | パネルデータ固定効果モデル |
smf.glm('y ~ x', data=df, family=sm.families.Poisson()).fit() | ポアソン回帰(GLM) |
smf.glm('y ~ x', data=df, family=sm.families.Gamma()).fit() | ガンマ回帰(GLM) |
smf.glm('y ~ x', data=df, family=sm.families.NegativeBinomial()).fit() | 負の二項回帰 |
sm.MNLogit(y, X).fit() | 多項ロジスティック回帰 |
sm.Probit(y, X).fit() | プロビット回帰モデル |
| コマンド | 説明 |
|---|
ARIMA(data, order=(p,d,q)).fit() | 指定された次数でARIMAモデルを適合させる |
SARIMAX(data, order=(p,d,q), seasonal_order=(P,D,Q,s)).fit() | 外生変数を伴う季節性ARIMA |
adfuller(timeseries) | 拡張ディッキー・フラー定常性検定 |
acf(timeseries, nlags=40) | 自己相関関数を計算する |
pacf(timeseries, nlags=40) | 部分自己相関関数を計算する |
plot_acf(timeseries, lags=40) | プロット自己相関関数 |
plot_pacf(timeseries, lags=40) | プロット部分自己相関関数 |
VAR(data).fit(maxlags=5) | Fit Vector Autoregression モデル |
results.irf(10).plot() | インパルス応答関数をプロット |
results.fevd(10) | 予測誤差分散分解 |
UnobservedComponents(data, level='local linear trend').fit() | 構造的時系列モデル |
ExponentialSmoothing(data, seasonal='add', seasonal_periods=12).fit() | 指数平滑法(ホルト・ウィンターズ法) |
results.forecast(steps=10) | 将来の期間の予測を生成する |
results.plot_diagnostics() | 時系列モデルの診断プロットを作成する |
| コマンド | 説明 |
|---|
jarque_bera(residuals) | Jarque-Beraの正規性検定 |
durbin_watson(residuals) | Durbin-Watson自己相関検定 |
het_breuschpagan(residuals, X) | Breusch-Pagan 不均一分散性検定 |
acorr_ljungbox(residuals, lags=10) | Ljung-Box自己相関検定 |
omni_normtest(residuals) | オムニバス正規性検定 |
pairwise_tukeyhsd(data, groups) | Tukeyの多重比較検定 |
anova_lm(model1, model2) | モデル比較のための分散分析 (ANOVA) |
results.test_causality('var1', ['var2']) | グランジャー因果性検定(VARモデル) |
proportions_ztest(counts, nobs) | 比率のZ検定 |
ttest_ind(sample1, sample2) | 独立サンプルt検定 |
| コマンド | 説明 |
|---|
SurvfuncRight(durations, status).plot() | カプラン・マイヤー生存曲線 |
PHReg(durations, X, status=status).fit() | Cox比例ハザードモデル |
KDEUnivariate(data).fit() | カーネル密度推定 |
KernelReg(y, X, var_type='c').fit() | カーネル回帰(ノンパラメトリック) |
lowess(y, x, frac=0.1) | LOWESS スムージング |
PCA(data, ncomp=3, standardize=True) | 主成分分析(Principal Component Analysis) |
Factor(data, n_factor=2).fit() | 因子分析 |
# 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
```## 高度な使用法 - 統計的検定
```python
# 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
)
```## 高度な使用法 - サバイバル & ノンパラメトリック
```python
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
)
```## 設定
```python
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)
```### モデル式の構文(R形式)
```python
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()
```### モデルフィッティングオプション
```python
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%}")
```### 表示オプション
```python
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())
```## 一般的なユースケース
```python
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)
```### ユースケース1: 線形回帰分析
`sm.add_constant(X)`### ユースケース2: ARIMAによる時系列予測
`smf.ols('y ~ x1 + x2', data=df)`### ユースケース3: 分類のためのロジスティック回帰
`adfuller()`### ユースケース4: パネルデータ分析
`plot_acf()`### ユースケース5: 多変量時系列のためのベクター自己回帰(VAR)
`plot_pacf()`ARIMA次数パラメータを決定するために
- **情報基準でモデルを比較**: モデル選択にAIC/BICを使用;低い値はパーシモニーの良いフィッティングを示す
- **サンプル外を検証**: データをトレーニング/テストセットに分割し、ホールドアウトデータで予測精度を評価
- **多重共線性を処理**: 回帰モデルの高度に相関する予測変数のためにVIF(分散拡大係数)をチェック
- **頑健な標準誤差を使用**: 適用
`cov_type='HC3'`に
`.fit()`不均一分散に対して頑健な推論のために
- **モデル仕様を文書化**: 再現性のためにモデルの次数、変換、選択基準を明確に記録
- **診断を可視化**: 常に実行`results.plot_diagnostics()`残差パターンをチェックするための時系列モデル
## トラブルシューティング
| 問題 | ソリューション |
|-------|----------|
| **LinAlgError: Singular matrix** | Check for perfect multicollinearity; remove redundant variables or use `sm.add_constant()` only once |
| **Convergence not achieved** | Increase `maxiter` parameter, try different optimization method (`method='bfgs'`), or scale/standardize features |
| **Perfect separation in logistic regression** | Use penalized regression (`method='l1'`), remove problematic predictors, or collect more diverse data |
| **ARIMA model won't fit** | Verify data is stationary with `adfuller()`, try different order parameters, or check for missing values |
| **ValueError: endog and exog matrices are different sizes** | XとyがObservationsの数が同じであることを確認し、欠損値を確認してインデックスを揃える |
| **Non-stationary time series warnings** | Difference the series (`df.diff().dropna()`), set `enforce_stationarity=False`, or transform data (log, Box-Cox) |
| **Memory error with large datasets** | Use chunking, reduce lag order in VAR/ARIMA, or consider `statsmodels.tsa.statespace` for state space models |
| **Negative R-squared values** | モデルは平均ベースラインより悪い;モデル仕様を確認し、関連する特徴量を追加するか、異なるモデルタイプを試してください |
| **Heteroscedasticity detected** | Use WLS with appropriate weights, apply robust standard errors (`cov_type='HC3'`), or transform dependent variable |
| **High VIF values (>10)** | 相関のある予測変数を削除または結合し、次元削減のためにPCAを使用するか、リッジ回帰を適用する |
| **Residuals show patterns** | 多項式項、交互作用効果を追加するか、カーネル回帰などの非パラメトリック手法を使用する || **オプションの依存関係のImportError** | 不足しているパッケージをインストール:`pip install matplotlib scipy patsy`または使用`pip install statsmodels[all]` |