Spaces:
Runtime error
Runtime error
Upload 2222 files
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +19 -0
- Dockerfile +18 -0
- app.py +45 -0
- port.json +5 -0
- requirements.txt +10 -0
- run_docker.ps1 +26 -0
- run_docker.sh +75 -0
- statsmodels/.DS_Store +0 -0
- statsmodels/mcp_output/README_MCP.md +150 -0
- statsmodels/mcp_output/analysis.json +0 -0
- statsmodels/mcp_output/diff_report.md +129 -0
- statsmodels/mcp_output/mcp_plugin/__init__.py +0 -0
- statsmodels/mcp_output/mcp_plugin/adapter.py +281 -0
- statsmodels/mcp_output/mcp_plugin/main.py +13 -0
- statsmodels/mcp_output/mcp_plugin/mcp_service.py +308 -0
- statsmodels/mcp_output/requirements.txt +10 -0
- statsmodels/mcp_output/start_mcp.py +30 -0
- statsmodels/mcp_output/workflow_summary.json +244 -0
- statsmodels/source/.DS_Store +0 -0
- statsmodels/source/.codacy.yml +7 -0
- statsmodels/source/.flake8 +22 -0
- statsmodels/source/.mailmap +97 -0
- statsmodels/source/.pep8speaks.yml +9 -0
- statsmodels/source/CHANGES.md +4 -0
- statsmodels/source/CITATION.cff +38 -0
- statsmodels/source/CONTRIBUTING.rst +73 -0
- statsmodels/source/COPYRIGHTS.txt +249 -0
- statsmodels/source/INSTALL.txt +122 -0
- statsmodels/source/LICENSE.txt +34 -0
- statsmodels/source/MANIFEST.in +29 -0
- statsmodels/source/README.rst +207 -0
- statsmodels/source/README_l1.txt +40 -0
- statsmodels/source/__init__.py +4 -0
- statsmodels/source/archive/README.md +15 -0
- statsmodels/source/archive/docs/GLMNotes.lyx +1155 -0
- statsmodels/source/archive/docs/GLMNotes.pdf +0 -0
- statsmodels/source/archive/docs/fix_longtable.py +22 -0
- statsmodels/source/archive/docs/source/genericmle.rst.TXT +0 -0
- statsmodels/source/archive/tsa/ex_arma.py +99 -0
- statsmodels/source/archive/tsa/notes_organize.txt +227 -0
- statsmodels/source/azure-pipelines.yml +36 -0
- statsmodels/source/codecov.yml +16 -0
- statsmodels/source/docs/Makefile +44 -0
- statsmodels/source/docs/README.md +37 -0
- statsmodels/source/docs/make.bat +58 -0
- statsmodels/source/docs/source/_static/blogger.png +0 -0
- statsmodels/source/docs/source/_static/blogger_sm.png +0 -0
- statsmodels/source/docs/source/_static/bullet.gif +0 -0
- statsmodels/source/docs/source/_static/closelabel.png +0 -0
- statsmodels/source/docs/source/_static/facebox.css +80 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,22 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
statsmodels/source/docs/source/_static/images/markov_autoregression.png filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
statsmodels/source/docs/source/_static/images/mstl_decomposition.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
statsmodels/source/docs/source/_static/images/recursive_ls.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
statsmodels/source/docs/source/_static/images/statespace_bayesian_sarimax.png filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
statsmodels/source/docs/source/_static/images/statespace_chandrasekhar.png filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
statsmodels/source/docs/source/_static/images/statespace_concentrated_scale.png filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
statsmodels/source/docs/source/_static/images/statespace_cycles.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
statsmodels/source/docs/source/_static/images/statespace_forecasting.png filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
statsmodels/source/docs/source/_static/images/statespace_sarimax_internet.png filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
statsmodels/source/docs/source/_static/images/statespace_sarimax_pymc3.png filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
statsmodels/source/docs/source/_static/images/statespace_sarimax_stata.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
statsmodels/source/docs/source/_static/images/statespace_structural_harvey_jaeger.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
statsmodels/source/docs/source/_static/images/statespace_tvpvar_mcmc_cfa.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
statsmodels/source/docs/source/_static/images/stats_poisson.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
statsmodels/source/docs/source/_static/images/stl_decomposition.png filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
statsmodels/source/examples/notebooks/star_diagram.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
statsmodels/source/statsmodels/datasets/macrodata/src/macrodata.xls/macrodata.xls filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
statsmodels/source/statsmodels/tsa/statespace/tests/results/frbny_nowcast/Nowcasting/data/US/2016-06-29.xls filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
statsmodels/source/statsmodels/tsa/statespace/tests/results/frbny_nowcast/Nowcasting/data/US/2016-07-29.xls filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.10
|
| 2 |
+
|
| 3 |
+
RUN useradd -m -u 1000 user && python -m pip install --upgrade pip
|
| 4 |
+
USER user
|
| 5 |
+
ENV PATH="/home/user/.local/bin:$PATH"
|
| 6 |
+
|
| 7 |
+
WORKDIR /app
|
| 8 |
+
|
| 9 |
+
COPY --chown=user ./requirements.txt requirements.txt
|
| 10 |
+
RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
| 11 |
+
|
| 12 |
+
COPY --chown=user . /app
|
| 13 |
+
ENV MCP_TRANSPORT=http
|
| 14 |
+
ENV MCP_PORT=7860
|
| 15 |
+
|
| 16 |
+
EXPOSE 7860
|
| 17 |
+
|
| 18 |
+
CMD ["python", "statsmodels/mcp_output/start_mcp.py"]
|
app.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
import os
|
| 3 |
+
import sys
|
| 4 |
+
|
| 5 |
+
mcp_plugin_path = os.path.join(os.path.dirname(__file__), "statsmodels", "mcp_output", "mcp_plugin")
|
| 6 |
+
sys.path.insert(0, mcp_plugin_path)
|
| 7 |
+
|
| 8 |
+
app = FastAPI(
|
| 9 |
+
title="Statsmodels MCP Service",
|
| 10 |
+
description="Auto-generated MCP service for statsmodels",
|
| 11 |
+
version="1.0.0"
|
| 12 |
+
)
|
| 13 |
+
|
| 14 |
+
@app.get("/")
|
| 15 |
+
def root():
|
| 16 |
+
return {
|
| 17 |
+
"service": "Statsmodels MCP Service",
|
| 18 |
+
"version": "1.0.0",
|
| 19 |
+
"status": "running",
|
| 20 |
+
"transport": os.environ.get("MCP_TRANSPORT", "http")
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
@app.get("/health")
|
| 24 |
+
def health_check():
|
| 25 |
+
return {"status": "healthy", "service": "statsmodels MCP"}
|
| 26 |
+
|
| 27 |
+
@app.get("/tools")
|
| 28 |
+
def list_tools():
|
| 29 |
+
try:
|
| 30 |
+
from mcp_service import create_app
|
| 31 |
+
mcp_app = create_app()
|
| 32 |
+
tools = []
|
| 33 |
+
for tool_name, tool_func in mcp_app.tools.items():
|
| 34 |
+
tools.append({
|
| 35 |
+
"name": tool_name,
|
| 36 |
+
"description": tool_func.__doc__ or "No description available"
|
| 37 |
+
})
|
| 38 |
+
return {"tools": tools}
|
| 39 |
+
except Exception as e:
|
| 40 |
+
return {"error": f"Failed to load tools: {str(e)}"}
|
| 41 |
+
|
| 42 |
+
if __name__ == "__main__":
|
| 43 |
+
import uvicorn
|
| 44 |
+
port = int(os.environ.get("PORT", 7860))
|
| 45 |
+
uvicorn.run(app, host="0.0.0.0", port=port)
|
port.json
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"repo": "statsmodels",
|
| 3 |
+
"port": 7975,
|
| 4 |
+
"timestamp": 1773410883
|
| 5 |
+
}
|
requirements.txt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastmcp
|
| 2 |
+
fastapi
|
| 3 |
+
uvicorn[standard]
|
| 4 |
+
pydantic>=2.0.0
|
| 5 |
+
numpy>=1.22.3,<3 # released March 2022
|
| 6 |
+
scipy>=1.8,!=1.9.2 # released Feb 2022, 1.9.2 blocked due to bug
|
| 7 |
+
pandas>=1.4,!=2.1.0 # released Feb 2022, 2.1.0 blocked due to bug
|
| 8 |
+
patsy>=0.5.6 # released December 2023
|
| 9 |
+
packaging>=21.3 # released Nov 2021
|
| 10 |
+
formulaic>=1.1.0 # released December 2024
|
run_docker.ps1
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cd $PSScriptRoot
|
| 2 |
+
$ErrorActionPreference = "Stop"
|
| 3 |
+
$entryName = if ($env:MCP_ENTRY_NAME) { $env:MCP_ENTRY_NAME } else { "statsmodels" }
|
| 4 |
+
$entryUrl = if ($env:MCP_ENTRY_URL) { $env:MCP_ENTRY_URL } else { "http://localhost:7975/mcp" }
|
| 5 |
+
$imageName = if ($env:MCP_IMAGE_NAME) { $env:MCP_IMAGE_NAME } else { "statsmodels-mcp" }
|
| 6 |
+
$mcpDir = Join-Path $env:USERPROFILE ".cursor"
|
| 7 |
+
$mcpPath = Join-Path $mcpDir "mcp.json"
|
| 8 |
+
if (!(Test-Path $mcpDir)) { New-Item -ItemType Directory -Path $mcpDir | Out-Null }
|
| 9 |
+
$config = @{}
|
| 10 |
+
if (Test-Path $mcpPath) {
|
| 11 |
+
try { $config = Get-Content $mcpPath -Raw | ConvertFrom-Json } catch { $config = @{} }
|
| 12 |
+
}
|
| 13 |
+
$serversOrdered = [ordered]@{}
|
| 14 |
+
if ($config -and ($config.PSObject.Properties.Name -contains "mcpServers") -and $config.mcpServers) {
|
| 15 |
+
$existing = $config.mcpServers
|
| 16 |
+
if ($existing -is [pscustomobject]) {
|
| 17 |
+
foreach ($p in $existing.PSObject.Properties) { if ($p.Name -ne $entryName) { $serversOrdered[$p.Name] = $p.Value } }
|
| 18 |
+
} elseif ($existing -is [System.Collections.IDictionary]) {
|
| 19 |
+
foreach ($k in $existing.Keys) { if ($k -ne $entryName) { $serversOrdered[$k] = $existing[$k] } }
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
$serversOrdered[$entryName] = @{ url = $entryUrl }
|
| 23 |
+
$config = @{ mcpServers = $serversOrdered }
|
| 24 |
+
$config | ConvertTo-Json -Depth 10 | Set-Content -Path $mcpPath -Encoding UTF8
|
| 25 |
+
docker build -t $imageName .
|
| 26 |
+
docker run --rm -p 7975:7860 $imageName
|
run_docker.sh
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
cd "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
| 4 |
+
mcp_entry_name="${MCP_ENTRY_NAME:-statsmodels}"
|
| 5 |
+
mcp_entry_url="${MCP_ENTRY_URL:-http://localhost:7975/mcp}"
|
| 6 |
+
mcp_dir="${HOME}/.cursor"
|
| 7 |
+
mcp_path="${mcp_dir}/mcp.json"
|
| 8 |
+
mkdir -p "${mcp_dir}"
|
| 9 |
+
if command -v python3 >/dev/null 2>&1; then
|
| 10 |
+
python3 - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY'
|
| 11 |
+
import json, os, sys
|
| 12 |
+
path, name, url = sys.argv[1:4]
|
| 13 |
+
cfg = {"mcpServers": {}}
|
| 14 |
+
if os.path.exists(path):
|
| 15 |
+
try:
|
| 16 |
+
with open(path, "r", encoding="utf-8") as f:
|
| 17 |
+
cfg = json.load(f)
|
| 18 |
+
except Exception:
|
| 19 |
+
cfg = {"mcpServers": {}}
|
| 20 |
+
if not isinstance(cfg, dict):
|
| 21 |
+
cfg = {"mcpServers": {}}
|
| 22 |
+
servers = cfg.get("mcpServers")
|
| 23 |
+
if not isinstance(servers, dict):
|
| 24 |
+
servers = {}
|
| 25 |
+
ordered = {}
|
| 26 |
+
for k, v in servers.items():
|
| 27 |
+
if k != name:
|
| 28 |
+
ordered[k] = v
|
| 29 |
+
ordered[name] = {"url": url}
|
| 30 |
+
cfg = {"mcpServers": ordered}
|
| 31 |
+
with open(path, "w", encoding="utf-8") as f:
|
| 32 |
+
json.dump(cfg, f, indent=2, ensure_ascii=False)
|
| 33 |
+
PY
|
| 34 |
+
elif command -v python >/dev/null 2>&1; then
|
| 35 |
+
python - "${mcp_path}" "${mcp_entry_name}" "${mcp_entry_url}" <<'PY'
|
| 36 |
+
import json, os, sys
|
| 37 |
+
path, name, url = sys.argv[1:4]
|
| 38 |
+
cfg = {"mcpServers": {}}
|
| 39 |
+
if os.path.exists(path):
|
| 40 |
+
try:
|
| 41 |
+
with open(path, "r", encoding="utf-8") as f:
|
| 42 |
+
cfg = json.load(f)
|
| 43 |
+
except Exception:
|
| 44 |
+
cfg = {"mcpServers": {}}
|
| 45 |
+
if not isinstance(cfg, dict):
|
| 46 |
+
cfg = {"mcpServers": {}}
|
| 47 |
+
servers = cfg.get("mcpServers")
|
| 48 |
+
if not isinstance(servers, dict):
|
| 49 |
+
servers = {}
|
| 50 |
+
ordered = {}
|
| 51 |
+
for k, v in servers.items():
|
| 52 |
+
if k != name:
|
| 53 |
+
ordered[k] = v
|
| 54 |
+
ordered[name] = {"url": url}
|
| 55 |
+
cfg = {"mcpServers": ordered}
|
| 56 |
+
with open(path, "w", encoding="utf-8") as f:
|
| 57 |
+
json.dump(cfg, f, indent=2, ensure_ascii=False)
|
| 58 |
+
PY
|
| 59 |
+
elif command -v jq >/dev/null 2>&1; then
|
| 60 |
+
name="${mcp_entry_name}"; url="${mcp_entry_url}"
|
| 61 |
+
if [ -f "${mcp_path}" ]; then
|
| 62 |
+
tmp="$(mktemp)"
|
| 63 |
+
jq --arg name "$name" --arg url "$url" '
|
| 64 |
+
.mcpServers = (.mcpServers // {})
|
| 65 |
+
| .mcpServers as $s
|
| 66 |
+
| ($s | with_entries(select(.key != $name))) as $base
|
| 67 |
+
| .mcpServers = ($base + {($name): {"url": $url}})
|
| 68 |
+
' "${mcp_path}" > "${tmp}" && mv "${tmp}" "${mcp_path}"
|
| 69 |
+
else
|
| 70 |
+
printf '{ "mcpServers": { "%s": { "url": "%s" } } }
|
| 71 |
+
' "$name" "$url" > "${mcp_path}"
|
| 72 |
+
fi
|
| 73 |
+
fi
|
| 74 |
+
docker build -t statsmodels-mcp .
|
| 75 |
+
docker run --rm -p 7975:7860 statsmodels-mcp
|
statsmodels/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
statsmodels/mcp_output/README_MCP.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Statsmodels MCP (Model Context Protocol) Service README
|
| 2 |
+
|
| 3 |
+
## 1) Project Introduction
|
| 4 |
+
|
| 5 |
+
This MCP (Model Context Protocol) service provides a developer-friendly interface to core `statsmodels` capabilities for statistical modeling, inference, and forecasting.
|
| 6 |
+
|
| 7 |
+
Main functions:
|
| 8 |
+
- Run classical regression (OLS/WLS/GLS), GLM, and discrete models (Logit/Probit/Poisson)
|
| 9 |
+
- Execute time-series workflows (ARIMA, SARIMAX, decomposition, forecasting)
|
| 10 |
+
- Access statistical tests and diagnostics
|
| 11 |
+
- Load built-in datasets for rapid experimentation
|
| 12 |
+
- Return structured model summaries, parameters, predictions, and diagnostics
|
| 13 |
+
|
| 14 |
+
Repository: https://github.com/statsmodels/statsmodels
|
| 15 |
+
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
## 2) Installation Method
|
| 19 |
+
|
| 20 |
+
### Requirements
|
| 21 |
+
- Python 3.9+ recommended
|
| 22 |
+
- Core dependencies:
|
| 23 |
+
- `numpy`
|
| 24 |
+
- `scipy`
|
| 25 |
+
- `pandas`
|
| 26 |
+
- `patsy`
|
| 27 |
+
- `packaging`
|
| 28 |
+
- Optional (feature-dependent):
|
| 29 |
+
- `matplotlib` (plots)
|
| 30 |
+
- `cvxopt` (some optimization paths)
|
| 31 |
+
- `joblib` (parallel helpers)
|
| 32 |
+
- `x13as` external binary (for X13 seasonal adjustment workflows)
|
| 33 |
+
|
| 34 |
+
### Install
|
| 35 |
+
pip install statsmodels numpy scipy pandas patsy packaging
|
| 36 |
+
|
| 37 |
+
Optional extras:
|
| 38 |
+
pip install matplotlib joblib cvxopt
|
| 39 |
+
|
| 40 |
+
Environment check:
|
| 41 |
+
python -m statsmodels.tools.print_version
|
| 42 |
+
|
| 43 |
+
---
|
| 44 |
+
|
| 45 |
+
## 3) Quick Start
|
| 46 |
+
|
| 47 |
+
### Basic import path
|
| 48 |
+
Use high-level APIs:
|
| 49 |
+
- `statsmodels.api` (general models/stats)
|
| 50 |
+
- `statsmodels.tsa.api` (time-series)
|
| 51 |
+
- `statsmodels.stats.api` (tests/inference)
|
| 52 |
+
- `statsmodels.formula.api` (formula syntax)
|
| 53 |
+
|
| 54 |
+
### Typical service flow
|
| 55 |
+
1. Load/receive dataset
|
| 56 |
+
2. Choose model family (`OLS`, `GLM`, `Logit`, `ARIMA`, `SARIMAX`, etc.)
|
| 57 |
+
3. Fit model
|
| 58 |
+
4. Return:
|
| 59 |
+
- coefficients
|
| 60 |
+
- confidence intervals
|
| 61 |
+
- p-values
|
| 62 |
+
- model diagnostics
|
| 63 |
+
- predictions/forecasts
|
| 64 |
+
|
| 65 |
+
### Example call patterns (conceptual)
|
| 66 |
+
- Regression: fit OLS and return summary + residual diagnostics
|
| 67 |
+
- Classification/count: fit Logit/Poisson and return marginal effects
|
| 68 |
+
- Forecasting: fit ARIMA/SARIMAX and return horizon forecasts with intervals
|
| 69 |
+
|
| 70 |
+
---
|
| 71 |
+
|
| 72 |
+
## 4) Available Tools and Endpoints List
|
| 73 |
+
|
| 74 |
+
Recommended MCP (Model Context Protocol) service endpoints:
|
| 75 |
+
|
| 76 |
+
- `health_check`
|
| 77 |
+
- Verifies runtime, package availability, and version metadata.
|
| 78 |
+
|
| 79 |
+
- `get_version_info`
|
| 80 |
+
- Returns Python/statsmodels/dependency versions (similar to `print_version`).
|
| 81 |
+
|
| 82 |
+
- `list_datasets`
|
| 83 |
+
- Lists built-in datasets available from `statsmodels.datasets`.
|
| 84 |
+
|
| 85 |
+
- `load_dataset`
|
| 86 |
+
- Loads a selected built-in dataset and returns schema/sample rows.
|
| 87 |
+
|
| 88 |
+
- `fit_ols`
|
| 89 |
+
- Fits OLS/WLS/GLS/GLSAR models; returns coefficients and inference statistics.
|
| 90 |
+
|
| 91 |
+
- `fit_glm`
|
| 92 |
+
- Fits GLM with configurable family/link; returns fit metrics and inference.
|
| 93 |
+
|
| 94 |
+
- `fit_discrete_model`
|
| 95 |
+
- Fits `Logit`, `Probit`, `MNLogit`, `Poisson`, `NegativeBinomial`.
|
| 96 |
+
|
| 97 |
+
- `fit_arima`
|
| 98 |
+
- Fits ARIMA models for univariate time series.
|
| 99 |
+
|
| 100 |
+
- `fit_sarimax`
|
| 101 |
+
- Fits SARIMAX (seasonality + exogenous regressors + state space engine).
|
| 102 |
+
|
| 103 |
+
- `forecast`
|
| 104 |
+
- Produces out-of-sample predictions/forecast intervals for fitted time-series models.
|
| 105 |
+
|
| 106 |
+
- `run_stat_tests`
|
| 107 |
+
- Executes common tests (normality, heteroskedasticity, autocorrelation, proportions/power, etc.).
|
| 108 |
+
|
| 109 |
+
- `model_summary`
|
| 110 |
+
- Standardized textual/structured summary extraction from fitted results objects.
|
| 111 |
+
|
| 112 |
+
- `predict`
|
| 113 |
+
- In-sample or out-of-sample prediction for regression/discrete/GLM models.
|
| 114 |
+
|
| 115 |
+
---
|
| 116 |
+
|
| 117 |
+
## 5) Common Issues and Notes
|
| 118 |
+
|
| 119 |
+
- Binary/scientific stack issues:
|
| 120 |
+
- Use a clean virtual environment.
|
| 121 |
+
- Upgrade `pip`, `setuptools`, and `wheel` if installation fails.
|
| 122 |
+
|
| 123 |
+
- Formula models:
|
| 124 |
+
- `patsy` is required for formula APIs.
|
| 125 |
+
|
| 126 |
+
- Time-series advanced features:
|
| 127 |
+
- Some workflows (e.g., X13) require external binaries not installed by pip.
|
| 128 |
+
|
| 129 |
+
- Performance:
|
| 130 |
+
- Large state-space or high-dimensional models can be expensive.
|
| 131 |
+
- Prefer smaller parameter grids and constrained iteration settings in service contexts.
|
| 132 |
+
|
| 133 |
+
- Numerical convergence:
|
| 134 |
+
- Non-convergence can occur for complex models.
|
| 135 |
+
- Expose optimizer options (maxiter, method, tolerance) in endpoint inputs.
|
| 136 |
+
|
| 137 |
+
- Reproducibility:
|
| 138 |
+
- Set random seeds where simulation/resampling is involved.
|
| 139 |
+
- Return model config + versions in every response payload.
|
| 140 |
+
|
| 141 |
+
---
|
| 142 |
+
|
| 143 |
+
## 6) Reference Links / Documentation
|
| 144 |
+
|
| 145 |
+
- Statsmodels repository: https://github.com/statsmodels/statsmodels
|
| 146 |
+
- Official docs: https://www.statsmodels.org/
|
| 147 |
+
- API reference (entry point): https://www.statsmodels.org/stable/api.html
|
| 148 |
+
- Time series docs: https://www.statsmodels.org/stable/tsa.html
|
| 149 |
+
- Installation notes: https://www.statsmodels.org/stable/install.html
|
| 150 |
+
- Developer docs directory in repo: `docs/`
|
statsmodels/mcp_output/analysis.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
statsmodels/mcp_output/diff_report.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Difference Report — `statsmodels`
|
| 2 |
+
|
| 3 |
+
## 1) Project Overview
|
| 4 |
+
- **Repository:** `statsmodels`
|
| 5 |
+
- **Project Type:** Python library
|
| 6 |
+
- **Feature Scope:** Basic functionality
|
| 7 |
+
- **Report Time:** 2026-03-13 22:07:09
|
| 8 |
+
- **Intrusiveness:** None (non-invasive changes)
|
| 9 |
+
- **Workflow Status:** ✅ Success
|
| 10 |
+
- **Test Status:** ❌ Failed
|
| 11 |
+
|
| 12 |
+
---
|
| 13 |
+
|
| 14 |
+
## 2) Change Summary
|
| 15 |
+
| Metric | Value |
|
| 16 |
+
|---|---|
|
| 17 |
+
| New files | 8 |
|
| 18 |
+
| Modified files | 0 |
|
| 19 |
+
| Deleted files | 0 (not reported) |
|
| 20 |
+
| Net impact | Additive-only update |
|
| 21 |
+
|
| 22 |
+
**Interpretation:**
|
| 23 |
+
This update introduces new artifacts without altering existing tracked files, indicating low direct regression risk from code modifications—but possible integration or configuration issues due to added assets.
|
| 24 |
+
|
| 25 |
+
---
|
| 26 |
+
|
| 27 |
+
## 3) Difference Analysis
|
| 28 |
+
### 3.1 File-Level Difference Pattern
|
| 29 |
+
- **Only new files added (8).**
|
| 30 |
+
- **No existing file edits**, suggesting:
|
| 31 |
+
- New modules/tests/docs/configs added in parallel
|
| 32 |
+
- No refactor/rewrite in existing logic paths
|
| 33 |
+
- Potentially incomplete wiring into package/test system
|
| 34 |
+
|
| 35 |
+
### 3.2 Functional Impact (Basic Functionality Context)
|
| 36 |
+
Given the “basic functionality” scope:
|
| 37 |
+
- Likely introduces baseline components (e.g., utility modules, starter tests, templates, docs, CI metadata).
|
| 38 |
+
- Since no files were modified, newly added functionality may not yet be invoked by existing workflows unless auto-discovered.
|
| 39 |
+
|
| 40 |
+
### 3.3 Risk Posture
|
| 41 |
+
- **Code intrusion risk:** Low
|
| 42 |
+
- **Integration risk:** Medium
|
| 43 |
+
- **CI/test reliability risk:** High (because tests failed despite successful workflow execution)
|
| 44 |
+
|
| 45 |
+
---
|
| 46 |
+
|
| 47 |
+
## 4) Technical Analysis
|
| 48 |
+
## 4.1 Workflow vs Test Outcome
|
| 49 |
+
A **successful workflow** with **failed tests** typically means:
|
| 50 |
+
1. Build/lint/package steps passed, but runtime assertions failed.
|
| 51 |
+
2. New tests were discovered and failed due to:
|
| 52 |
+
- Missing fixtures/data
|
| 53 |
+
- Environment/version assumptions
|
| 54 |
+
- Numerical tolerance issues (common in stats libraries)
|
| 55 |
+
- Optional dependency gaps
|
| 56 |
+
3. Test matrix mismatch (e.g., py version, BLAS/LAPACK backend, platform-specific numerics).
|
| 57 |
+
|
| 58 |
+
## 4.2 Probable Failure Classes for `statsmodels`
|
| 59 |
+
For this project profile, frequent failure vectors include:
|
| 60 |
+
- **Floating-point tolerance drift** (`assert_allclose` thresholds too strict)
|
| 61 |
+
- **Randomized test non-determinism** (seed not fixed)
|
| 62 |
+
- **Pandas/NumPy/SciPy compatibility edge cases**
|
| 63 |
+
- **Import path/package discovery** for newly added files
|
| 64 |
+
- **Doctest/examples failing under strict warning policies**
|
| 65 |
+
|
| 66 |
+
---
|
| 67 |
+
|
| 68 |
+
## 5) Recommendations & Improvements
|
| 69 |
+
## 5.1 Immediate Actions (Priority Ordered)
|
| 70 |
+
1. **Collect failing test signatures**
|
| 71 |
+
- Extract exact test names, stack traces, and environment metadata.
|
| 72 |
+
2. **Classify failures**
|
| 73 |
+
- Deterministic logic error vs environment/config error.
|
| 74 |
+
3. **Validate discovery/registration**
|
| 75 |
+
- Ensure new files are correctly included in package/test manifests (`pyproject.toml`, `setup.cfg`, `MANIFEST.in`, pytest config as applicable).
|
| 76 |
+
4. **Stabilize numerics**
|
| 77 |
+
- Adjust tolerance bands only with statistical justification.
|
| 78 |
+
5. **Re-run targeted subset**
|
| 79 |
+
- `pytest -k <failing_area> -vv` to shorten feedback loop.
|
| 80 |
+
|
| 81 |
+
## 5.2 Quality Hardening
|
| 82 |
+
- Add/verify **seed control** in stochastic tests.
|
| 83 |
+
- Enforce **cross-version compatibility gates** for NumPy/Pandas/SciPy.
|
| 84 |
+
- Introduce **smoke tests** for new files to verify importability and minimal execution path.
|
| 85 |
+
- Add **CI artifact upload** for failure logs to accelerate triage.
|
| 86 |
+
|
| 87 |
+
---
|
| 88 |
+
|
| 89 |
+
## 6) Deployment / Release Information
|
| 90 |
+
- **Deployment readiness:** ⚠️ Not release-ready (tests failing)
|
| 91 |
+
- **Recommended release gate:** Block merge/release until:
|
| 92 |
+
- All failing tests are triaged
|
| 93 |
+
- Root cause fixed or quarantined with justified xfail
|
| 94 |
+
- Full CI matrix passes (or documented temporary exceptions approved)
|
| 95 |
+
|
| 96 |
+
- **Change type:** Safe additive structure, but operationally blocked by test failures.
|
| 97 |
+
|
| 98 |
+
---
|
| 99 |
+
|
| 100 |
+
## 7) Future Planning
|
| 101 |
+
## 7.1 Short-Term (Next 24–72h)
|
| 102 |
+
- Complete failure triage and patch.
|
| 103 |
+
- Add regression tests tied directly to identified root causes.
|
| 104 |
+
- Re-run full matrix on Linux/macOS/Windows (if supported).
|
| 105 |
+
|
| 106 |
+
## 7.2 Mid-Term (1–2 sprints)
|
| 107 |
+
- Improve test determinism and numerical robustness policy.
|
| 108 |
+
- Add compatibility CI lanes for upcoming dependency versions.
|
| 109 |
+
- Formalize “new file checklist” (imports, packaging, docs, tests, CI hooks).
|
| 110 |
+
|
| 111 |
+
## 7.3 Long-Term
|
| 112 |
+
- Establish statistical tolerance governance (per-model/per-solver thresholds).
|
| 113 |
+
- Expand observability of CI failures (structured reporting dashboard).
|
| 114 |
+
- Periodic dependency modernization with pre-merge canary runs.
|
| 115 |
+
|
| 116 |
+
---
|
| 117 |
+
|
| 118 |
+
## 8) Suggested Report Addendum (Data Needed)
|
| 119 |
+
To produce a more precise diff report, include:
|
| 120 |
+
- Names/paths of the 8 new files
|
| 121 |
+
- Full failed test log excerpts
|
| 122 |
+
- Python + dependency versions
|
| 123 |
+
- OS/architecture and BLAS backend
|
| 124 |
+
- Whether failures are new vs pre-existing baseline
|
| 125 |
+
|
| 126 |
+
---
|
| 127 |
+
|
| 128 |
+
## 9) Executive Conclusion
|
| 129 |
+
This change set is **additive and non-intrusive** at the file-modification level, but **quality gates are not met** due to failed tests. The current state is best treated as an **integration-incomplete update**. Prioritize targeted test triage, package/test registration verification, and numerical stability checks before merge or release.
|
statsmodels/mcp_output/mcp_plugin/__init__.py
ADDED
|
File without changes
|
statsmodels/mcp_output/mcp_plugin/adapter.py
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import sys
|
| 3 |
+
import traceback
|
| 4 |
+
import importlib
|
| 5 |
+
from typing import Any, Dict, List, Optional
|
| 6 |
+
|
| 7 |
+
source_path = os.path.join(
|
| 8 |
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
| 9 |
+
"source",
|
| 10 |
+
)
|
| 11 |
+
sys.path.insert(0, source_path)
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
class Adapter:
|
| 15 |
+
"""
|
| 16 |
+
Import-mode adapter for the statsmodels repository.
|
| 17 |
+
|
| 18 |
+
This adapter attempts to load modules from the local source tree (source/statsmodels).
|
| 19 |
+
It exposes utility methods that wrap commonly useful entry points identified in analysis:
|
| 20 |
+
- statsmodels.api
|
| 21 |
+
- statsmodels.formula.api
|
| 22 |
+
- statsmodels.tsa.api
|
| 23 |
+
- statsmodels.stats.api
|
| 24 |
+
- statsmodels.graphics.api
|
| 25 |
+
- statsmodels.tools.print_version (diagnostic module)
|
| 26 |
+
|
| 27 |
+
All methods return a unified dictionary format:
|
| 28 |
+
{
|
| 29 |
+
"status": "success" | "error" | "fallback",
|
| 30 |
+
"message": str,
|
| 31 |
+
...additional fields...
|
| 32 |
+
}
|
| 33 |
+
"""
|
| 34 |
+
|
| 35 |
+
def __init__(self) -> None:
|
| 36 |
+
self.mode = "import"
|
| 37 |
+
self._modules: Dict[str, Any] = {}
|
| 38 |
+
self._import_errors: Dict[str, str] = {}
|
| 39 |
+
self._initialize_imports()
|
| 40 |
+
|
| 41 |
+
# -------------------------------------------------------------------------
|
| 42 |
+
# Internal helpers
|
| 43 |
+
# -------------------------------------------------------------------------
|
| 44 |
+
def _ok(self, message: str, **kwargs: Any) -> Dict[str, Any]:
|
| 45 |
+
payload = {"status": "success", "message": message}
|
| 46 |
+
payload.update(kwargs)
|
| 47 |
+
return payload
|
| 48 |
+
|
| 49 |
+
def _err(self, message: str, **kwargs: Any) -> Dict[str, Any]:
|
| 50 |
+
payload = {"status": "error", "message": message}
|
| 51 |
+
payload.update(kwargs)
|
| 52 |
+
return payload
|
| 53 |
+
|
| 54 |
+
def _fallback(self, message: str, **kwargs: Any) -> Dict[str, Any]:
|
| 55 |
+
payload = {"status": "fallback", "message": message}
|
| 56 |
+
payload.update(kwargs)
|
| 57 |
+
return payload
|
| 58 |
+
|
| 59 |
+
def _safe_import(self, module_path: str, alias: str) -> None:
|
| 60 |
+
try:
|
| 61 |
+
self._modules[alias] = importlib.import_module(module_path)
|
| 62 |
+
except Exception as exc:
|
| 63 |
+
self._modules[alias] = None
|
| 64 |
+
self._import_errors[alias] = f"{type(exc).__name__}: {exc}"
|
| 65 |
+
|
| 66 |
+
def _initialize_imports(self) -> None:
|
| 67 |
+
self._safe_import("statsmodels", "statsmodels_root")
|
| 68 |
+
self._safe_import("statsmodels.api", "sm_api")
|
| 69 |
+
self._safe_import("statsmodels.formula.api", "smf_api")
|
| 70 |
+
self._safe_import("statsmodels.tsa.api", "tsa_api")
|
| 71 |
+
self._safe_import("statsmodels.stats.api", "stats_api")
|
| 72 |
+
self._safe_import("statsmodels.graphics.api", "graphics_api")
|
| 73 |
+
self._safe_import("statsmodels.tools.print_version", "print_version_mod")
|
| 74 |
+
|
| 75 |
+
def _require_module(self, alias: str, guidance: Optional[str] = None) -> Dict[str, Any]:
|
| 76 |
+
mod = self._modules.get(alias)
|
| 77 |
+
if mod is not None:
|
| 78 |
+
return self._ok("Module is available.", module=alias)
|
| 79 |
+
msg = self._import_errors.get(alias, "Module import failed for unknown reasons.")
|
| 80 |
+
help_msg = guidance or "Verify local source path and required dependencies are installed."
|
| 81 |
+
return self._fallback(
|
| 82 |
+
f"Module '{alias}' is unavailable. {msg}",
|
| 83 |
+
guidance=help_msg,
|
| 84 |
+
import_error=msg,
|
| 85 |
+
module=alias,
|
| 86 |
+
)
|
| 87 |
+
|
| 88 |
+
# -------------------------------------------------------------------------
|
| 89 |
+
# Health / diagnostics
|
| 90 |
+
# -------------------------------------------------------------------------
|
| 91 |
+
def health_check(self) -> Dict[str, Any]:
|
| 92 |
+
available = [k for k, v in self._modules.items() if v is not None]
|
| 93 |
+
unavailable = {k: self._import_errors.get(k, "Unknown error") for k, v in self._modules.items() if v is None}
|
| 94 |
+
return self._ok(
|
| 95 |
+
"Adapter initialized.",
|
| 96 |
+
mode=self.mode,
|
| 97 |
+
source_path=source_path,
|
| 98 |
+
available_modules=available,
|
| 99 |
+
unavailable_modules=unavailable,
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
def get_version(self) -> Dict[str, Any]:
|
| 103 |
+
mod = self._modules.get("statsmodels_root")
|
| 104 |
+
if mod is None:
|
| 105 |
+
return self._require_module("statsmodels_root", "Ensure source/statsmodels is present and importable.")
|
| 106 |
+
version = getattr(mod, "__version__", None)
|
| 107 |
+
return self._ok("Version retrieved.", version=version)
|
| 108 |
+
|
| 109 |
+
def call_print_version_module(self) -> Dict[str, Any]:
|
| 110 |
+
check = self._require_module("print_version_mod", "Try importing statsmodels.tools.print_version directly.")
|
| 111 |
+
if check["status"] != "success":
|
| 112 |
+
return check
|
| 113 |
+
mod = self._modules["print_version_mod"]
|
| 114 |
+
attrs = [a for a in dir(mod) if not a.startswith("_")]
|
| 115 |
+
return self._ok(
|
| 116 |
+
"Diagnostic module loaded.",
|
| 117 |
+
module="statsmodels.tools.print_version",
|
| 118 |
+
public_attributes=attrs,
|
| 119 |
+
note="This module is intended for environment/version diagnostics.",
|
| 120 |
+
)
|
| 121 |
+
|
| 122 |
+
# -------------------------------------------------------------------------
|
| 123 |
+
# API module accessors
|
| 124 |
+
# -------------------------------------------------------------------------
|
| 125 |
+
def instance_statsmodels_api(self) -> Dict[str, Any]:
|
| 126 |
+
return self._require_module("sm_api", "Install required dependencies: numpy, scipy, pandas, patsy, packaging.")
|
| 127 |
+
|
| 128 |
+
def instance_formula_api(self) -> Dict[str, Any]:
|
| 129 |
+
return self._require_module("smf_api", "Ensure patsy is installed for formula support.")
|
| 130 |
+
|
| 131 |
+
def instance_tsa_api(self) -> Dict[str, Any]:
|
| 132 |
+
return self._require_module("tsa_api", "Ensure time-series dependencies are available (numpy/scipy/pandas).")
|
| 133 |
+
|
| 134 |
+
def instance_stats_api(self) -> Dict[str, Any]:
|
| 135 |
+
return self._require_module("stats_api", "Ensure core scientific dependencies are available.")
|
| 136 |
+
|
| 137 |
+
def instance_graphics_api(self) -> Dict[str, Any]:
|
| 138 |
+
return self._require_module("graphics_api", "Install matplotlib for plotting-related features.")
|
| 139 |
+
|
| 140 |
+
# -------------------------------------------------------------------------
|
| 141 |
+
# Dynamic class/function execution utilities
|
| 142 |
+
# -------------------------------------------------------------------------
|
| 143 |
+
def create_instance(self, module_alias: str, class_name: str, *args: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 144 |
+
"""
|
| 145 |
+
Create an instance of a class from an imported module alias.
|
| 146 |
+
|
| 147 |
+
Parameters:
|
| 148 |
+
module_alias: One of the imported aliases (e.g., 'sm_api', 'tsa_api').
|
| 149 |
+
class_name: Exact class name to instantiate.
|
| 150 |
+
*args, **kwargs: Constructor parameters.
|
| 151 |
+
|
| 152 |
+
Returns:
|
| 153 |
+
Unified status dictionary with created instance (if successful).
|
| 154 |
+
"""
|
| 155 |
+
check = self._require_module(module_alias)
|
| 156 |
+
if check["status"] != "success":
|
| 157 |
+
return check
|
| 158 |
+
mod = self._modules[module_alias]
|
| 159 |
+
try:
|
| 160 |
+
cls = getattr(mod, class_name)
|
| 161 |
+
instance = cls(*args, **kwargs)
|
| 162 |
+
return self._ok(
|
| 163 |
+
"Class instance created.",
|
| 164 |
+
module_alias=module_alias,
|
| 165 |
+
class_name=class_name,
|
| 166 |
+
instance=instance,
|
| 167 |
+
)
|
| 168 |
+
except AttributeError:
|
| 169 |
+
return self._err(
|
| 170 |
+
f"Class '{class_name}' was not found in module alias '{module_alias}'.",
|
| 171 |
+
guidance="Verify class name and module alias.",
|
| 172 |
+
)
|
| 173 |
+
except Exception as exc:
|
| 174 |
+
return self._err(
|
| 175 |
+
f"Failed to instantiate class '{class_name}'.",
|
| 176 |
+
error=f"{type(exc).__name__}: {exc}",
|
| 177 |
+
traceback=traceback.format_exc(),
|
| 178 |
+
)
|
| 179 |
+
|
| 180 |
+
def call_function(self, module_alias: str, function_name: str, *args: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 181 |
+
"""
|
| 182 |
+
Call a function from an imported module alias.
|
| 183 |
+
|
| 184 |
+
Parameters:
|
| 185 |
+
module_alias: One of the imported aliases (e.g., 'sm_api', 'smf_api', 'tsa_api').
|
| 186 |
+
function_name: Function name to call.
|
| 187 |
+
*args, **kwargs: Function parameters.
|
| 188 |
+
|
| 189 |
+
Returns:
|
| 190 |
+
Unified status dictionary with function result.
|
| 191 |
+
"""
|
| 192 |
+
check = self._require_module(module_alias)
|
| 193 |
+
if check["status"] != "success":
|
| 194 |
+
return check
|
| 195 |
+
mod = self._modules[module_alias]
|
| 196 |
+
try:
|
| 197 |
+
fn = getattr(mod, function_name)
|
| 198 |
+
result = fn(*args, **kwargs)
|
| 199 |
+
return self._ok(
|
| 200 |
+
"Function executed successfully.",
|
| 201 |
+
module_alias=module_alias,
|
| 202 |
+
function_name=function_name,
|
| 203 |
+
result=result,
|
| 204 |
+
)
|
| 205 |
+
except AttributeError:
|
| 206 |
+
return self._err(
|
| 207 |
+
f"Function '{function_name}' was not found in module alias '{module_alias}'.",
|
| 208 |
+
guidance="Verify function name and module alias.",
|
| 209 |
+
)
|
| 210 |
+
except Exception as exc:
|
| 211 |
+
return self._err(
|
| 212 |
+
f"Function '{function_name}' execution failed.",
|
| 213 |
+
error=f"{type(exc).__name__}: {exc}",
|
| 214 |
+
traceback=traceback.format_exc(),
|
| 215 |
+
)
|
| 216 |
+
|
| 217 |
+
# -------------------------------------------------------------------------
|
| 218 |
+
# Convenience wrappers for common statsmodels usage
|
| 219 |
+
# -------------------------------------------------------------------------
|
| 220 |
+
def list_public_members(self, module_alias: str) -> Dict[str, Any]:
|
| 221 |
+
check = self._require_module(module_alias)
|
| 222 |
+
if check["status"] != "success":
|
| 223 |
+
return check
|
| 224 |
+
mod = self._modules[module_alias]
|
| 225 |
+
public = [a for a in dir(mod) if not a.startswith("_")]
|
| 226 |
+
return self._ok("Public members listed.", module_alias=module_alias, members=public)
|
| 227 |
+
|
| 228 |
+
def run_module_function(self, full_module_path: str, function_name: str, *args: Any, **kwargs: Any) -> Dict[str, Any]:
|
| 229 |
+
"""
|
| 230 |
+
Import any module by full path and execute one function.
|
| 231 |
+
|
| 232 |
+
Parameters:
|
| 233 |
+
full_module_path: e.g., 'statsmodels.tools.print_version'
|
| 234 |
+
function_name: function to call inside module
|
| 235 |
+
*args, **kwargs: function arguments
|
| 236 |
+
|
| 237 |
+
Returns:
|
| 238 |
+
Unified status dictionary.
|
| 239 |
+
"""
|
| 240 |
+
try:
|
| 241 |
+
mod = importlib.import_module(full_module_path)
|
| 242 |
+
fn = getattr(mod, function_name)
|
| 243 |
+
result = fn(*args, **kwargs)
|
| 244 |
+
return self._ok(
|
| 245 |
+
"Module function executed successfully.",
|
| 246 |
+
module=full_module_path,
|
| 247 |
+
function=function_name,
|
| 248 |
+
result=result,
|
| 249 |
+
)
|
| 250 |
+
except ModuleNotFoundError:
|
| 251 |
+
return self._fallback(
|
| 252 |
+
f"Module '{full_module_path}' could not be imported.",
|
| 253 |
+
guidance="Check source path and ensure repository source files are available.",
|
| 254 |
+
)
|
| 255 |
+
except AttributeError:
|
| 256 |
+
return self._err(
|
| 257 |
+
f"Function '{function_name}' was not found in module '{full_module_path}'.",
|
| 258 |
+
guidance="Verify function name and module path.",
|
| 259 |
+
)
|
| 260 |
+
except Exception as exc:
|
| 261 |
+
return self._err(
|
| 262 |
+
f"Execution failed for '{full_module_path}.{function_name}'.",
|
| 263 |
+
error=f"{type(exc).__name__}: {exc}",
|
| 264 |
+
traceback=traceback.format_exc(),
|
| 265 |
+
)
|
| 266 |
+
|
| 267 |
+
def supported_modules(self) -> Dict[str, Any]:
|
| 268 |
+
return self._ok(
|
| 269 |
+
"Supported module aliases returned.",
|
| 270 |
+
aliases={
|
| 271 |
+
"statsmodels_root": "statsmodels",
|
| 272 |
+
"sm_api": "statsmodels.api",
|
| 273 |
+
"smf_api": "statsmodels.formula.api",
|
| 274 |
+
"tsa_api": "statsmodels.tsa.api",
|
| 275 |
+
"stats_api": "statsmodels.stats.api",
|
| 276 |
+
"graphics_api": "statsmodels.graphics.api",
|
| 277 |
+
"print_version_mod": "statsmodels.tools.print_version",
|
| 278 |
+
},
|
| 279 |
+
required_dependencies=["numpy", "scipy", "pandas", "patsy", "packaging"],
|
| 280 |
+
optional_dependencies=["matplotlib", "cvxopt", "joblib", "pytest", "x13as external binary"],
|
| 281 |
+
)
|
statsmodels/mcp_output/mcp_plugin/main.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
MCP Service Auto-Wrapper - Auto-generated
|
| 3 |
+
"""
|
| 4 |
+
from mcp_service import create_app
|
| 5 |
+
|
| 6 |
+
def main():
|
| 7 |
+
"""Main entry point"""
|
| 8 |
+
app = create_app()
|
| 9 |
+
return app
|
| 10 |
+
|
| 11 |
+
if __name__ == "__main__":
|
| 12 |
+
app = main()
|
| 13 |
+
app.run()
|
statsmodels/mcp_output/mcp_plugin/mcp_service.py
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import sys
|
| 3 |
+
from typing import Any, Dict, List, Optional
|
| 4 |
+
|
| 5 |
+
source_path = os.path.join(
|
| 6 |
+
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
|
| 7 |
+
"source",
|
| 8 |
+
)
|
| 9 |
+
if source_path not in sys.path:
|
| 10 |
+
sys.path.insert(0, source_path)
|
| 11 |
+
|
| 12 |
+
from fastmcp import FastMCP
|
| 13 |
+
import numpy as np
|
| 14 |
+
import pandas as pd
|
| 15 |
+
import statsmodels.api as sm
|
| 16 |
+
from statsmodels.tsa.api import ARIMA
|
| 17 |
+
from statsmodels.stats.diagnostic import acorr_ljungbox
|
| 18 |
+
from statsmodels.stats.stattools import jarque_bera
|
| 19 |
+
|
| 20 |
+
mcp = FastMCP("statsmodels_service")
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def _ok(result: Any) -> Dict[str, Any]:
|
| 24 |
+
return {"success": True, "result": result, "error": None}
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
def _err(exc: Exception) -> Dict[str, Any]:
|
| 28 |
+
return {"success": False, "result": None, "error": str(exc)}
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
@mcp.tool(name="ols_fit", description="Fit an OLS regression model and return summary metrics.")
|
| 32 |
+
def ols_fit(
|
| 33 |
+
y: List[float],
|
| 34 |
+
X: List[List[float]],
|
| 35 |
+
add_constant: bool = True,
|
| 36 |
+
) -> Dict[str, Any]:
|
| 37 |
+
"""
|
| 38 |
+
Fit an Ordinary Least Squares (OLS) model.
|
| 39 |
+
|
| 40 |
+
Parameters:
|
| 41 |
+
- y: Dependent variable values.
|
| 42 |
+
- X: 2D feature matrix where each inner list is one observation.
|
| 43 |
+
- add_constant: If True, prepends an intercept column.
|
| 44 |
+
|
| 45 |
+
Returns:
|
| 46 |
+
- Dictionary with success/result/error fields. Result contains coefficients,
|
| 47 |
+
p-values, R-squared, adjusted R-squared, AIC, BIC, and observation count.
|
| 48 |
+
"""
|
| 49 |
+
try:
|
| 50 |
+
y_arr = np.asarray(y, dtype=float)
|
| 51 |
+
X_arr = np.asarray(X, dtype=float)
|
| 52 |
+
if add_constant:
|
| 53 |
+
X_arr = sm.add_constant(X_arr, has_constant="add")
|
| 54 |
+
model = sm.OLS(y_arr, X_arr).fit()
|
| 55 |
+
return _ok(
|
| 56 |
+
{
|
| 57 |
+
"params": model.params.tolist(),
|
| 58 |
+
"pvalues": model.pvalues.tolist(),
|
| 59 |
+
"rsquared": float(model.rsquared),
|
| 60 |
+
"rsquared_adj": float(model.rsquared_adj),
|
| 61 |
+
"aic": float(model.aic),
|
| 62 |
+
"bic": float(model.bic),
|
| 63 |
+
"nobs": int(model.nobs),
|
| 64 |
+
}
|
| 65 |
+
)
|
| 66 |
+
except Exception as exc:
|
| 67 |
+
return _err(exc)
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
@mcp.tool(name="glm_fit", description="Fit a GLM model for common families (gaussian, binomial, poisson).")
|
| 71 |
+
def glm_fit(
|
| 72 |
+
y: List[float],
|
| 73 |
+
X: List[List[float]],
|
| 74 |
+
family: str = "gaussian",
|
| 75 |
+
add_constant: bool = True,
|
| 76 |
+
) -> Dict[str, Any]:
|
| 77 |
+
"""
|
| 78 |
+
Fit a Generalized Linear Model (GLM).
|
| 79 |
+
|
| 80 |
+
Parameters:
|
| 81 |
+
- y: Response values.
|
| 82 |
+
- X: 2D feature matrix.
|
| 83 |
+
- family: One of 'gaussian', 'binomial', 'poisson'.
|
| 84 |
+
- add_constant: If True, prepends an intercept column.
|
| 85 |
+
|
| 86 |
+
Returns:
|
| 87 |
+
- Dictionary with success/result/error fields. Result contains coefficients,
|
| 88 |
+
standard errors, p-values, deviance, and observation count.
|
| 89 |
+
"""
|
| 90 |
+
try:
|
| 91 |
+
fam = family.lower().strip()
|
| 92 |
+
if fam == "gaussian":
|
| 93 |
+
fam_obj = sm.families.Gaussian()
|
| 94 |
+
elif fam == "binomial":
|
| 95 |
+
fam_obj = sm.families.Binomial()
|
| 96 |
+
elif fam == "poisson":
|
| 97 |
+
fam_obj = sm.families.Poisson()
|
| 98 |
+
else:
|
| 99 |
+
raise ValueError("family must be one of: gaussian, binomial, poisson")
|
| 100 |
+
|
| 101 |
+
y_arr = np.asarray(y, dtype=float)
|
| 102 |
+
X_arr = np.asarray(X, dtype=float)
|
| 103 |
+
if add_constant:
|
| 104 |
+
X_arr = sm.add_constant(X_arr, has_constant="add")
|
| 105 |
+
model = sm.GLM(y_arr, X_arr, family=fam_obj).fit()
|
| 106 |
+
return _ok(
|
| 107 |
+
{
|
| 108 |
+
"params": model.params.tolist(),
|
| 109 |
+
"bse": model.bse.tolist(),
|
| 110 |
+
"pvalues": model.pvalues.tolist(),
|
| 111 |
+
"deviance": float(model.deviance),
|
| 112 |
+
"nobs": int(model.nobs),
|
| 113 |
+
}
|
| 114 |
+
)
|
| 115 |
+
except Exception as exc:
|
| 116 |
+
return _err(exc)
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
@mcp.tool(name="logit_fit", description="Fit a logistic regression model.")
|
| 120 |
+
def logit_fit(
|
| 121 |
+
y: List[int],
|
| 122 |
+
X: List[List[float]],
|
| 123 |
+
add_constant: bool = True,
|
| 124 |
+
maxiter: int = 100,
|
| 125 |
+
) -> Dict[str, Any]:
|
| 126 |
+
"""
|
| 127 |
+
Fit a Logit (binary logistic regression) model.
|
| 128 |
+
|
| 129 |
+
Parameters:
|
| 130 |
+
- y: Binary response values (0/1).
|
| 131 |
+
- X: 2D feature matrix.
|
| 132 |
+
- add_constant: If True, prepends an intercept column.
|
| 133 |
+
- maxiter: Maximum optimizer iterations.
|
| 134 |
+
|
| 135 |
+
Returns:
|
| 136 |
+
- Dictionary with success/result/error fields. Result contains coefficients,
|
| 137 |
+
p-values, pseudo R-squared, log-likelihood, and convergence flag.
|
| 138 |
+
"""
|
| 139 |
+
try:
|
| 140 |
+
y_arr = np.asarray(y, dtype=float)
|
| 141 |
+
X_arr = np.asarray(X, dtype=float)
|
| 142 |
+
if add_constant:
|
| 143 |
+
X_arr = sm.add_constant(X_arr, has_constant="add")
|
| 144 |
+
model = sm.Logit(y_arr, X_arr).fit(disp=0, maxiter=maxiter)
|
| 145 |
+
return _ok(
|
| 146 |
+
{
|
| 147 |
+
"params": model.params.tolist(),
|
| 148 |
+
"pvalues": model.pvalues.tolist(),
|
| 149 |
+
"prsquared": float(model.prsquared),
|
| 150 |
+
"llf": float(model.llf),
|
| 151 |
+
"converged": bool(model.mle_retvals.get("converged", False)),
|
| 152 |
+
}
|
| 153 |
+
)
|
| 154 |
+
except Exception as exc:
|
| 155 |
+
return _err(exc)
|
| 156 |
+
|
| 157 |
+
|
| 158 |
+
@mcp.tool(name="arima_fit_forecast", description="Fit ARIMA model and forecast future values.")
|
| 159 |
+
def arima_fit_forecast(
|
| 160 |
+
y: List[float],
|
| 161 |
+
p: int = 1,
|
| 162 |
+
d: int = 0,
|
| 163 |
+
q: int = 0,
|
| 164 |
+
steps: int = 5,
|
| 165 |
+
) -> Dict[str, Any]:
|
| 166 |
+
"""
|
| 167 |
+
Fit an ARIMA model and produce forecasts.
|
| 168 |
+
|
| 169 |
+
Parameters:
|
| 170 |
+
- y: Univariate time series.
|
| 171 |
+
- p: AR order.
|
| 172 |
+
- d: Differencing order.
|
| 173 |
+
- q: MA order.
|
| 174 |
+
- steps: Number of forecast steps.
|
| 175 |
+
|
| 176 |
+
Returns:
|
| 177 |
+
- Dictionary with success/result/error fields. Result includes fitted params,
|
| 178 |
+
AIC/BIC, and forecast values.
|
| 179 |
+
"""
|
| 180 |
+
try:
|
| 181 |
+
y_arr = np.asarray(y, dtype=float)
|
| 182 |
+
model = ARIMA(y_arr, order=(p, d, q)).fit()
|
| 183 |
+
forecast = model.forecast(steps=steps)
|
| 184 |
+
return _ok(
|
| 185 |
+
{
|
| 186 |
+
"params": model.params.tolist(),
|
| 187 |
+
"aic": float(model.aic),
|
| 188 |
+
"bic": float(model.bic),
|
| 189 |
+
"forecast": np.asarray(forecast).tolist(),
|
| 190 |
+
}
|
| 191 |
+
)
|
| 192 |
+
except Exception as exc:
|
| 193 |
+
return _err(exc)
|
| 194 |
+
|
| 195 |
+
|
| 196 |
+
@mcp.tool(name="seasonal_decompose", description="Perform additive or multiplicative seasonal decomposition.")
|
| 197 |
+
def seasonal_decompose(
|
| 198 |
+
y: List[float],
|
| 199 |
+
period: int,
|
| 200 |
+
model: str = "additive",
|
| 201 |
+
) -> Dict[str, Any]:
|
| 202 |
+
"""
|
| 203 |
+
Decompose a time series into trend/seasonal/residual components.
|
| 204 |
+
|
| 205 |
+
Parameters:
|
| 206 |
+
- y: Univariate time series.
|
| 207 |
+
- period: Seasonal period length.
|
| 208 |
+
- model: 'additive' or 'multiplicative'.
|
| 209 |
+
|
| 210 |
+
Returns:
|
| 211 |
+
- Dictionary with success/result/error fields. Result contains trend,
|
| 212 |
+
seasonal, and residual arrays (NaNs converted to None).
|
| 213 |
+
"""
|
| 214 |
+
try:
|
| 215 |
+
from statsmodels.tsa.seasonal import seasonal_decompose as sm_seasonal_decompose
|
| 216 |
+
|
| 217 |
+
y_arr = pd.Series(np.asarray(y, dtype=float))
|
| 218 |
+
dec = sm_seasonal_decompose(y_arr, model=model, period=period, extrapolate_trend="freq")
|
| 219 |
+
|
| 220 |
+
def clean(values: pd.Series) -> List[Optional[float]]:
|
| 221 |
+
out: List[Optional[float]] = []
|
| 222 |
+
for v in values.to_numpy():
|
| 223 |
+
out.append(None if pd.isna(v) else float(v))
|
| 224 |
+
return out
|
| 225 |
+
|
| 226 |
+
return _ok(
|
| 227 |
+
{
|
| 228 |
+
"trend": clean(dec.trend),
|
| 229 |
+
"seasonal": clean(dec.seasonal),
|
| 230 |
+
"resid": clean(dec.resid),
|
| 231 |
+
}
|
| 232 |
+
)
|
| 233 |
+
except Exception as exc:
|
| 234 |
+
return _err(exc)
|
| 235 |
+
|
| 236 |
+
|
| 237 |
+
@mcp.tool(name="diagnostic_tests", description="Run Jarque-Bera and Ljung-Box diagnostic tests.")
|
| 238 |
+
def diagnostic_tests(
|
| 239 |
+
residuals: List[float],
|
| 240 |
+
lags: int = 10,
|
| 241 |
+
) -> Dict[str, Any]:
|
| 242 |
+
"""
|
| 243 |
+
Run common residual diagnostics.
|
| 244 |
+
|
| 245 |
+
Parameters:
|
| 246 |
+
- residuals: Residual series from a fitted model.
|
| 247 |
+
- lags: Number of lags for Ljung-Box test.
|
| 248 |
+
|
| 249 |
+
Returns:
|
| 250 |
+
- Dictionary with success/result/error fields. Result contains Jarque-Bera
|
| 251 |
+
statistic/p-value/skew/kurtosis and Ljung-Box test table.
|
| 252 |
+
"""
|
| 253 |
+
try:
|
| 254 |
+
resid = np.asarray(residuals, dtype=float)
|
| 255 |
+
jb_stat, jb_pvalue, skew, kurt = jarque_bera(resid)
|
| 256 |
+
lb = acorr_ljungbox(resid, lags=[lags], return_df=True)
|
| 257 |
+
return _ok(
|
| 258 |
+
{
|
| 259 |
+
"jarque_bera": {
|
| 260 |
+
"statistic": float(jb_stat),
|
| 261 |
+
"pvalue": float(jb_pvalue),
|
| 262 |
+
"skew": float(skew),
|
| 263 |
+
"kurtosis": float(kurt),
|
| 264 |
+
},
|
| 265 |
+
"ljung_box": lb.reset_index().to_dict(orient="records"),
|
| 266 |
+
}
|
| 267 |
+
)
|
| 268 |
+
except Exception as exc:
|
| 269 |
+
return _err(exc)
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
@mcp.tool(name="load_dataset", description="Load a built-in statsmodels dataset as records.")
|
| 273 |
+
def load_dataset(
|
| 274 |
+
dataset_name: str,
|
| 275 |
+
max_rows: int = 20,
|
| 276 |
+
) -> Dict[str, Any]:
|
| 277 |
+
"""
|
| 278 |
+
Load a built-in dataset from statsmodels.datasets.
|
| 279 |
+
|
| 280 |
+
Parameters:
|
| 281 |
+
- dataset_name: Dataset module name (e.g., 'longley', 'macrodata', 'sunspots').
|
| 282 |
+
- max_rows: Maximum number of rows to return.
|
| 283 |
+
|
| 284 |
+
Returns:
|
| 285 |
+
- Dictionary with success/result/error fields. Result contains dataset
|
| 286 |
+
metadata and sample records.
|
| 287 |
+
"""
|
| 288 |
+
try:
|
| 289 |
+
import importlib
|
| 290 |
+
|
| 291 |
+
ds_module = importlib.import_module(f"statsmodels.datasets.{dataset_name}.data")
|
| 292 |
+
loaded = ds_module.load_pandas()
|
| 293 |
+
df = loaded.data.copy()
|
| 294 |
+
sample = df.head(max_rows).to_dict(orient="records")
|
| 295 |
+
return _ok(
|
| 296 |
+
{
|
| 297 |
+
"dataset_name": dataset_name,
|
| 298 |
+
"columns": list(df.columns),
|
| 299 |
+
"nrows": int(df.shape[0]),
|
| 300 |
+
"sample": sample,
|
| 301 |
+
}
|
| 302 |
+
)
|
| 303 |
+
except Exception as exc:
|
| 304 |
+
return _err(exc)
|
| 305 |
+
|
| 306 |
+
|
| 307 |
+
def create_app() -> FastMCP:
|
| 308 |
+
return mcp
|
statsmodels/mcp_output/requirements.txt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastmcp
|
| 2 |
+
fastapi
|
| 3 |
+
uvicorn[standard]
|
| 4 |
+
pydantic>=2.0.0
|
| 5 |
+
numpy>=1.22.3,<3 # released March 2022
|
| 6 |
+
scipy>=1.8,!=1.9.2 # released Feb 2022, 1.9.2 blocked due to bug
|
| 7 |
+
pandas>=1.4,!=2.1.0 # released Feb 2022, 2.1.0 blocked due to bug
|
| 8 |
+
patsy>=0.5.6 # released December 2023
|
| 9 |
+
packaging>=21.3 # released Nov 2021
|
| 10 |
+
formulaic>=1.1.0 # released December 2024
|
statsmodels/mcp_output/start_mcp.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
"""
|
| 3 |
+
MCP Service Startup Entry
|
| 4 |
+
"""
|
| 5 |
+
import sys
|
| 6 |
+
import os
|
| 7 |
+
|
| 8 |
+
project_root = os.path.dirname(os.path.abspath(__file__))
|
| 9 |
+
mcp_plugin_dir = os.path.join(project_root, "mcp_plugin")
|
| 10 |
+
if mcp_plugin_dir not in sys.path:
|
| 11 |
+
sys.path.insert(0, mcp_plugin_dir)
|
| 12 |
+
|
| 13 |
+
from mcp_service import create_app
|
| 14 |
+
|
| 15 |
+
def main():
|
| 16 |
+
"""Start FastMCP service"""
|
| 17 |
+
app = create_app()
|
| 18 |
+
# Use environment variable to configure port, default 8000
|
| 19 |
+
port = int(os.environ.get("MCP_PORT", "8000"))
|
| 20 |
+
|
| 21 |
+
# Choose transport mode based on environment variable
|
| 22 |
+
transport = os.environ.get("MCP_TRANSPORT", "stdio")
|
| 23 |
+
if transport == "http":
|
| 24 |
+
app.run(transport="http", host="0.0.0.0", port=port)
|
| 25 |
+
else:
|
| 26 |
+
# Default to STDIO mode
|
| 27 |
+
app.run()
|
| 28 |
+
|
| 29 |
+
if __name__ == "__main__":
|
| 30 |
+
main()
|
statsmodels/mcp_output/workflow_summary.json
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"repository": {
|
| 3 |
+
"name": "statsmodels",
|
| 4 |
+
"url": "https://github.com/statsmodels/statsmodels",
|
| 5 |
+
"local_path": "/Users/ghh/Documents/Code/Code2MCP-private/workspace/statsmodels",
|
| 6 |
+
"description": "Python library",
|
| 7 |
+
"features": "Basic functionality",
|
| 8 |
+
"tech_stack": "Python",
|
| 9 |
+
"stars": 0,
|
| 10 |
+
"forks": 0,
|
| 11 |
+
"language": "Python",
|
| 12 |
+
"last_updated": "",
|
| 13 |
+
"complexity": "medium",
|
| 14 |
+
"intrusiveness_risk": "low"
|
| 15 |
+
},
|
| 16 |
+
"execution": {
|
| 17 |
+
"start_time": 1773410486.756045,
|
| 18 |
+
"end_time": 1773410695.732192,
|
| 19 |
+
"duration": 208.97614693641663,
|
| 20 |
+
"status": "success",
|
| 21 |
+
"workflow_status": "success",
|
| 22 |
+
"nodes_executed": [
|
| 23 |
+
"download",
|
| 24 |
+
"analysis",
|
| 25 |
+
"env",
|
| 26 |
+
"generate",
|
| 27 |
+
"run",
|
| 28 |
+
"review",
|
| 29 |
+
"finalize"
|
| 30 |
+
],
|
| 31 |
+
"total_files_processed": 30,
|
| 32 |
+
"environment_type": "unknown",
|
| 33 |
+
"llm_calls": 0,
|
| 34 |
+
"deepwiki_calls": 0
|
| 35 |
+
},
|
| 36 |
+
"tests": {
|
| 37 |
+
"original_project": {
|
| 38 |
+
"passed": false,
|
| 39 |
+
"details": {},
|
| 40 |
+
"test_coverage": "100%",
|
| 41 |
+
"execution_time": 0,
|
| 42 |
+
"test_files": []
|
| 43 |
+
},
|
| 44 |
+
"mcp_plugin": {
|
| 45 |
+
"passed": true,
|
| 46 |
+
"details": {},
|
| 47 |
+
"service_health": "healthy",
|
| 48 |
+
"startup_time": 0,
|
| 49 |
+
"transport_mode": "stdio",
|
| 50 |
+
"fastmcp_version": "unknown",
|
| 51 |
+
"mcp_version": "unknown"
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"analysis": {
|
| 55 |
+
"structure": {
|
| 56 |
+
"packages": [
|
| 57 |
+
"deployment.statsmodels.source",
|
| 58 |
+
"mcp_output.mcp_plugin",
|
| 59 |
+
"source.statsmodels",
|
| 60 |
+
"source.statsmodels._build",
|
| 61 |
+
"source.statsmodels.base",
|
| 62 |
+
"source.statsmodels.compat",
|
| 63 |
+
"source.statsmodels.datasets",
|
| 64 |
+
"source.statsmodels.discrete",
|
| 65 |
+
"source.statsmodels.distributions",
|
| 66 |
+
"source.statsmodels.duration",
|
| 67 |
+
"source.statsmodels.emplike",
|
| 68 |
+
"source.statsmodels.formula",
|
| 69 |
+
"source.statsmodels.gam",
|
| 70 |
+
"source.statsmodels.genmod",
|
| 71 |
+
"source.statsmodels.graphics",
|
| 72 |
+
"source.statsmodels.imputation",
|
| 73 |
+
"source.statsmodels.includes",
|
| 74 |
+
"source.statsmodels.iolib",
|
| 75 |
+
"source.statsmodels.miscmodels",
|
| 76 |
+
"source.statsmodels.multivariate",
|
| 77 |
+
"source.statsmodels.nonparametric",
|
| 78 |
+
"source.statsmodels.othermod",
|
| 79 |
+
"source.statsmodels.regression",
|
| 80 |
+
"source.statsmodels.robust",
|
| 81 |
+
"source.statsmodels.sandbox",
|
| 82 |
+
"source.statsmodels.stats",
|
| 83 |
+
"source.statsmodels.tests",
|
| 84 |
+
"source.statsmodels.tools",
|
| 85 |
+
"source.statsmodels.treatment",
|
| 86 |
+
"source.statsmodels.tsa"
|
| 87 |
+
]
|
| 88 |
+
},
|
| 89 |
+
"dependencies": {
|
| 90 |
+
"has_environment_yml": false,
|
| 91 |
+
"has_requirements_txt": true,
|
| 92 |
+
"pyproject": true,
|
| 93 |
+
"setup_cfg": false,
|
| 94 |
+
"setup_py": false
|
| 95 |
+
},
|
| 96 |
+
"entry_points": {
|
| 97 |
+
"imports": [],
|
| 98 |
+
"cli": [],
|
| 99 |
+
"modules": []
|
| 100 |
+
},
|
| 101 |
+
"risk_assessment": {
|
| 102 |
+
"import_feasibility": 0.95,
|
| 103 |
+
"intrusiveness_risk": "low",
|
| 104 |
+
"complexity": "medium"
|
| 105 |
+
},
|
| 106 |
+
"deepwiki_analysis": {
|
| 107 |
+
"repo_url": "https://github.com/statsmodels/statsmodels",
|
| 108 |
+
"repo_name": "statsmodels",
|
| 109 |
+
"error": "DeepWiki analysis failed",
|
| 110 |
+
"model": "gpt-5.3-codex",
|
| 111 |
+
"source": "llm_direct_analysis",
|
| 112 |
+
"success": false
|
| 113 |
+
},
|
| 114 |
+
"code_complexity": {
|
| 115 |
+
"cyclomatic_complexity": "medium",
|
| 116 |
+
"cognitive_complexity": "medium",
|
| 117 |
+
"maintainability_index": 75
|
| 118 |
+
},
|
| 119 |
+
"security_analysis": {
|
| 120 |
+
"vulnerabilities_found": 0,
|
| 121 |
+
"security_score": 85,
|
| 122 |
+
"recommendations": []
|
| 123 |
+
}
|
| 124 |
+
},
|
| 125 |
+
"plugin_generation": {
|
| 126 |
+
"files_created": [
|
| 127 |
+
"mcp_output/start_mcp.py",
|
| 128 |
+
"mcp_output/mcp_plugin/__init__.py",
|
| 129 |
+
"mcp_output/mcp_plugin/mcp_service.py",
|
| 130 |
+
"mcp_output/mcp_plugin/adapter.py",
|
| 131 |
+
"mcp_output/mcp_plugin/main.py",
|
| 132 |
+
"mcp_output/requirements.txt",
|
| 133 |
+
"mcp_output/README_MCP.md"
|
| 134 |
+
],
|
| 135 |
+
"main_entry": "start_mcp.py",
|
| 136 |
+
"requirements": [
|
| 137 |
+
"fastmcp>=0.1.0",
|
| 138 |
+
"pydantic>=2.0.0"
|
| 139 |
+
],
|
| 140 |
+
"readme_path": "/Users/ghh/Documents/Code/Code2MCP-private/workspace/statsmodels/mcp_output/README_MCP.md",
|
| 141 |
+
"adapter_mode": "import",
|
| 142 |
+
"total_lines_of_code": 0,
|
| 143 |
+
"generated_files_size": 0,
|
| 144 |
+
"tool_endpoints": 0,
|
| 145 |
+
"supported_features": [
|
| 146 |
+
"Basic functionality"
|
| 147 |
+
],
|
| 148 |
+
"generated_tools": [
|
| 149 |
+
"Basic tools",
|
| 150 |
+
"Health check tools",
|
| 151 |
+
"Version info tools"
|
| 152 |
+
]
|
| 153 |
+
},
|
| 154 |
+
"code_review": {},
|
| 155 |
+
"errors": [],
|
| 156 |
+
"warnings": [],
|
| 157 |
+
"recommendations": [
|
| 158 |
+
"add a minimal smoke test suite for MCP endpoints (fit/predict roundtrips for OLS/GLM/ARIMA/SARIMAX) since test status is empty",
|
| 159 |
+
"add input/output pydantic schemas per endpoint (typed params",
|
| 160 |
+
"defaults",
|
| 161 |
+
"validation errors) to reduce runtime misuse",
|
| 162 |
+
"pin and sync dependency ranges between root `pyproject.toml` and `mcp_output/requirements.txt` (including compatible numpy/scipy/pandas windows)",
|
| 163 |
+
"implement robust exception mapping in `mcp_service.py` (user error vs numerical convergence vs internal error) with consistent error payloads",
|
| 164 |
+
"add timeout and resource guards for heavy models (especially SARIMAX/ARIMA) to prevent long-running MCP calls",
|
| 165 |
+
"include deterministic tiny built-in datasets/fixtures for endpoint tests to avoid flaky external dependencies",
|
| 166 |
+
"add CI workflow specifically for `mcp_output` (lint",
|
| 167 |
+
"type-check",
|
| 168 |
+
"unit tests",
|
| 169 |
+
"import test against released statsmodels)",
|
| 170 |
+
"expand endpoint coverage beyond class constructors to practical operations (`fit`",
|
| 171 |
+
"`summary`",
|
| 172 |
+
"`predict`",
|
| 173 |
+
"`get_prediction`) as explicit tools",
|
| 174 |
+
"create version compatibility checks at server startup (report statsmodels/numpy/scipy versions and warn on unsupported combos)",
|
| 175 |
+
"add structured logging and request IDs in adapter/service layers for debuggability",
|
| 176 |
+
"document endpoint parameter conventions and common gotchas in `README_MCP.md` with copy-paste examples",
|
| 177 |
+
"introduce mypy/ruff on plugin code to catch interface drift early",
|
| 178 |
+
"add contract tests that compare MCP outputs to direct statsmodels calls for the same seed/data",
|
| 179 |
+
"implement graceful degradation for optional features (e.g.",
|
| 180 |
+
"x13-dependent functionality) with clear capability flags",
|
| 181 |
+
"add basic performance benchmarks for key endpoints (latency/memory on small/medium datasets) and track regressions in CI"
|
| 182 |
+
],
|
| 183 |
+
"performance_metrics": {
|
| 184 |
+
"memory_usage_mb": 0,
|
| 185 |
+
"cpu_usage_percent": 0,
|
| 186 |
+
"response_time_ms": 0,
|
| 187 |
+
"throughput_requests_per_second": 0
|
| 188 |
+
},
|
| 189 |
+
"deployment_info": {
|
| 190 |
+
"supported_platforms": [
|
| 191 |
+
"Linux",
|
| 192 |
+
"Windows",
|
| 193 |
+
"macOS"
|
| 194 |
+
],
|
| 195 |
+
"python_versions": [
|
| 196 |
+
"3.8",
|
| 197 |
+
"3.9",
|
| 198 |
+
"3.10",
|
| 199 |
+
"3.11",
|
| 200 |
+
"3.12"
|
| 201 |
+
],
|
| 202 |
+
"deployment_methods": [
|
| 203 |
+
"Docker",
|
| 204 |
+
"pip",
|
| 205 |
+
"conda"
|
| 206 |
+
],
|
| 207 |
+
"monitoring_support": true,
|
| 208 |
+
"logging_configuration": "structured"
|
| 209 |
+
},
|
| 210 |
+
"execution_analysis": {
|
| 211 |
+
"success_factors": [
|
| 212 |
+
"End-to-end workflow status is success, and all planned nodes executed (download, analysis, env, generate, run, review, finalize).",
|
| 213 |
+
"Import-based adapter strategy was feasible for statsmodels (import feasibility ~0.95), reducing integration friction.",
|
| 214 |
+
"Generated MCP service started healthy over stdio transport, indicating baseline runtime viability.",
|
| 215 |
+
"Repository analysis correctly identified core modules and generated endpoint set aligned with common statsmodels classes (OLS/GLM/Logit/ARIMA/SARIMAX)."
|
| 216 |
+
],
|
| 217 |
+
"failure_reasons": [
|
| 218 |
+
"No hard workflow failure occurred.",
|
| 219 |
+
"Validation depth is insufficient: original project tests show passed=false with empty details, and MCP tests are effectively absent (no concrete endpoint test evidence).",
|
| 220 |
+
"Observability gaps (resource metrics all zero/empty, generated LOC/size recorded as zero) indicate instrumentation/reporting defects.",
|
| 221 |
+
"DeepWiki analysis failed, reducing external semantic enrichment for generation confidence."
|
| 222 |
+
],
|
| 223 |
+
"overall_assessment": "good",
|
| 224 |
+
"node_performance": {
|
| 225 |
+
"download_time": "Completed successfully; likely moderate due to large repo (1441 files) imported via zip fallback.",
|
| 226 |
+
"analysis_time": "Completed successfully with broad structural/dependency mapping; likely the dominant step given repository size and package breadth.",
|
| 227 |
+
"generation_time": "Completed successfully; plugin scaffold and core service files created, but metadata quality is weak (0 LOC/size/tool endpoint counts).",
|
| 228 |
+
"test_time": "Service health check passed, but functional test coverage is effectively missing; quality signal is low despite green status."
|
| 229 |
+
},
|
| 230 |
+
"resource_usage": {
|
| 231 |
+
"memory_efficiency": "Not assessable from provided metrics (reported as 0). Add real memory profiling during analysis/generation/run.",
|
| 232 |
+
"cpu_efficiency": "Not assessable from provided metrics (reported as 0). Capture per-node CPU utilization and hotspots.",
|
| 233 |
+
"disk_usage": "Repo is large; generated artifact footprint appears underreported (size=0). Add artifact size accounting and cache usage stats."
|
| 234 |
+
}
|
| 235 |
+
},
|
| 236 |
+
"technical_quality": {
|
| 237 |
+
"code_quality_score": 72,
|
| 238 |
+
"architecture_score": 78,
|
| 239 |
+
"performance_score": 60,
|
| 240 |
+
"maintainability_score": 70,
|
| 241 |
+
"security_score": 85,
|
| 242 |
+
"scalability_score": 68
|
| 243 |
+
}
|
| 244 |
+
}
|
statsmodels/source/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
statsmodels/source/.codacy.yml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
engines:
|
| 3 |
+
pylint:
|
| 4 |
+
enabled: true
|
| 5 |
+
python_version: 3
|
| 6 |
+
exclude_paths:
|
| 7 |
+
- '**/_version.py'
|
statsmodels/source/.flake8
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[flake8]
|
| 2 |
+
exclude = .git,build,docs,archive
|
| 3 |
+
max-line-length = 88
|
| 4 |
+
extend-select =
|
| 5 |
+
B904,
|
| 6 |
+
# B905, # Enable when Python 3.10 is the minimum
|
| 7 |
+
|
| 8 |
+
extend-ignore =
|
| 9 |
+
# Required to allow black formatting
|
| 10 |
+
E203,
|
| 11 |
+
# E203: Whitespace before ':' (Needed for black)
|
| 12 |
+
E501,
|
| 13 |
+
# E501: Line too long (### > 88 characters) (Needed for black)
|
| 14 |
+
E701,
|
| 15 |
+
# E701: Multiple statements on one line (colon) (Needed for black)
|
| 16 |
+
|
| 17 |
+
per-file-ignores =
|
| 18 |
+
statsmodels/examples/tests/test_notebooks.py: F401
|
| 19 |
+
statsmodels/discrete/tests/results/results_predict.py: E131, E251
|
| 20 |
+
statsmodels/discrete/tests/results/results_truncated_st.py: E131, E251
|
| 21 |
+
statsmodels/treatment/tests/results/results_teffects.py: E124, E128, E131
|
| 22 |
+
|
statsmodels/source/.mailmap
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Alexander W Blocker <ablocker@gmail.com> Alexander W Blocker <ablocker@gmail.com>
|
| 2 |
+
Alex Griffing <argriffi@ncsu.edu> alex <argriffi@ncsu.edu>
|
| 3 |
+
Alexis Roche <alexis.roche@gmail.com> Alexis Roche <alexis.roche@gmail.com>
|
| 4 |
+
Ana Martinez Pardo <anamartinezpardo@gmail.com> Ana Martinez Pardo <anamartinezpardo@gmail.com>
|
| 5 |
+
Ana Martinez Pardo <anamartinezpardo@gmail.com> Ana Martinez Pardo <anamartinezpardo@gmailcom>
|
| 6 |
+
anov <novikova.go.zoom@gmail.com> anov <novikova.go.zoom@gmail.com>
|
| 7 |
+
avishaylivne <avishay.livne@gmail.com> avishaylivne <avishay.livne@gmail.com>
|
| 8 |
+
Bart Baker <bartbkr@gmail.com> Bart Baker <bartbkr@gmail.com>
|
| 9 |
+
Bart Baker <bartbkr@gmail.com> bartbkr <bartbkr@gmail.com>
|
| 10 |
+
Bart Baker <bartbkr@gmail.com> bartbkr@gmail.com <bart@bart-Inspiron-1525.(none)>
|
| 11 |
+
Ben Duffield <bduffield@palantir.com> benduffield <bduffield@palantir.com>
|
| 12 |
+
Benjamin Thyreau <benjamin@neron> benjamin.thyreau <>
|
| 13 |
+
brian.hawthorne <> brian.hawthorne <>
|
| 14 |
+
Bruno Rodrigues <rodrigues.bruno@aquitania.org> Bruno Rodrigues <rodrigues.bruno@aquitania.org>
|
| 15 |
+
Carl Vogel <carljv@gmail.com> Carl Vogel <carljv@gmail.com>
|
| 16 |
+
Chad Fulton <chad@chadfulton.com> Chad Fulton <chad@chadfulton.com>
|
| 17 |
+
Chris Jordan-Squire <cjordan1@uw.edu> Chris Jordan-Squire <cjordan1@uw.edu>
|
| 18 |
+
Christian Prinoth <christian@prinoth.name> Christian Prinoth <christian@prinoth.name>
|
| 19 |
+
Christopher Burns cburns <>
|
| 20 |
+
Christopher Burns <cburns@localhost.localdomain> Chris <cburns@localhost.localdomain>
|
| 21 |
+
Christopher Burns <cburns@berkeley.edu> Christopher Burns <cburns@berkeley.edu>
|
| 22 |
+
Cindee Madison <cindee@berkeley.edu> Cindee Madison <cindeem@8d8.local>
|
| 23 |
+
Daniel B. Smith <neuromathdan@gmail.com> Daniel B. Smith <neuromathdan@gmail.com>
|
| 24 |
+
davclark <> davclark <>
|
| 25 |
+
dengemann <denis.engemann@gmail.com> dengemann <denis.engemann@gmail.com>
|
| 26 |
+
Dieter Vandenbussche <dvandenbussche@axioma.com> Dieter Vandenbussche <dvandenbussche@axioma.com>
|
| 27 |
+
Dougal Sutherland <dougal@gmail.com> Dougal Sutherland <dougal@gmail.com>
|
| 28 |
+
Enrico Giampieri <enrico.giampieri@unibo.it> Enrico Giampieri <enrico.giampieri@unibo.it>
|
| 29 |
+
Eric Chiang <eric.chiang.m@gmail.com> ericchiang <eric.chiang.m@gmail.com>
|
| 30 |
+
evelynmitchell <efm-github@linsomniac.com> evelynmitchell <efm-github@linsomniac.com>
|
| 31 |
+
Evgeni Burovski <evgeni@burovski.me> Zhenya <evgeni@burovski.me>
|
| 32 |
+
Fernando Perez <Fernando.Perez@berkeley.edu> fdo.perez <>
|
| 33 |
+
Fernando Perez <Fernando.Perez@berkeley.edu> Fernando Perez <Fernando.Perez@berkeley.edu>
|
| 34 |
+
Gael Varoquaux <gael.varoquaux@normalesup.org> Gael Varoquaux <gael.varoquaux@normalesup.org>
|
| 35 |
+
George Panterov <econgpanterov@gmail.com> George Panterov <econgpanterov@gmail.com>
|
| 36 |
+
Grayson <graysonbadgley@gmail.com> Grayson <graysonbadgley@gmail.com>
|
| 37 |
+
Jan Schulz <jasc@gmx.net> Jan Schulz <jasc@gmx.net>
|
| 38 |
+
Jarrod Millman <jarrod.millman@gmail.com> jarrod.millman <>
|
| 39 |
+
Jarrod Millman <jarrod.millman@gmail.com> Jarrod Millman <millman@berkeley.edu>
|
| 40 |
+
Jeff Reback <jeff@reback.net> jreback <jeff@reback.net>
|
| 41 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> jonathan.taylor <>
|
| 42 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> Jonathan Taylor <jonathan.taylor@stanford.edu>
|
| 43 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> Jonathan Taylor <jtaylo@dell-desktop>
|
| 44 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> Jonathan Taylor <jtaylo@grf>
|
| 45 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> Jonathan Taylor <jtaylo@kff>
|
| 46 |
+
Jonathan Taylor <jtaylo@miller.stanford.edu> jtaylo <jtaylo@ubuntu.dms.umontreal.ca>
|
| 47 |
+
Josef Perktold <josef.pktd@gmail.com> Josef Perktold <josef.pktd@gmail.com>
|
| 48 |
+
Justin Grana <jg3705a@student.american.edu> Justin Grana <jg3705a@student.american.edu>
|
| 49 |
+
langmore <ianlangmore@gmail.com> langmore <ianlangmore@gmail.com>
|
| 50 |
+
Matthew Brett <matthew.brett@gmail.com> matthew.brett <>
|
| 51 |
+
Matthew Brett <matthew.brett@gmail.com> Matthew Brett <>
|
| 52 |
+
Matthew Brett <matthew.brett@gmail.com> Matthew Brett <matthew.brett@gmail.com>
|
| 53 |
+
Matthew Brett <matthew.brett@gmail.com> Matthew Brett <mb312@millroad>
|
| 54 |
+
Matthieu Brucher <matthieu.brucher@gmail.com> Matthieu Brucher <matthieu.brucher@gmail.com>
|
| 55 |
+
michael.castelle <> michael.castelle <>
|
| 56 |
+
Mike Crowe <m.j.a.crowe@gmail.com> Mike Crowe <m.j.a.crowe@gmail.com>
|
| 57 |
+
Mike Crowe <m.j.a.crowe@gmail.com> Mike Crowe <m.j.a.crowe@googlemail.com>
|
| 58 |
+
Mike Crowe <m.j.a.crowe@gmail.com> Mike <m.j.a.crowe@googlemail.com>
|
| 59 |
+
Nathaniel J. Smith <njs@pobox.com> Nathaniel J. Smith <njs@pobox.com>
|
| 60 |
+
otterb <itoi@live.com> otterb <itoi@live.com>
|
| 61 |
+
Padarn Wilson <padarn@wilsonp.anu.edu.au> padarn <padarn@wilsonp.anu.edu.au>
|
| 62 |
+
Padarn Wilson <padarn@gmail.com> Padarn <padarn@Padarns-MacBook-Air.local>
|
| 63 |
+
Paris Sprint Account <paris@grf> Paris Sprint Account <paris@grf>
|
| 64 |
+
Paul Hobson <pmhobson@gmail.com> Paul Hobson <pmhobson@gmail.com>
|
| 65 |
+
Peter Prettenhofer <peter.prettenhofer@gmail.com> Peter Prettenhofer <peter.prettenhofer@gmail.com>
|
| 66 |
+
Pietro Battiston <me@pietrobattiston.it> Pietro Battiston <me@pietrobattiston.it>
|
| 67 |
+
Ralf Gommers <ralf.gommers@googlemail.com> Ralf Gommers <ralf.gommers@googlemail.com>
|
| 68 |
+
Richard T. Guy <richardtguy84@gmail.com> Richard T. Guy <richardtguy84@gmail.com>
|
| 69 |
+
Robert Cimrman <cimrman3@ntc.zcu.cz> Robert Cimrman <cimrman3@ntc.zcu.cz>
|
| 70 |
+
Roger Lew <rogerlew@gmail.com> Roger Lew <rogerlew@gmail.com>
|
| 71 |
+
scottpiraino <scottpiraino@gmail.com> scottpiraino <scottpiraino@gmail.com>
|
| 72 |
+
sebastien.meriaux <> sebastien.meriaux <>
|
| 73 |
+
Skipper Seabold <jsseabold@gmail.com> jsseabold <>
|
| 74 |
+
Skipper Seabold <jsseabold@gmail.com> jsseabold <jsseabold@gmail.com>
|
| 75 |
+
Skipper Seabold <jsseabold@gmail.com> Skipper Seabold <jsseabold@gmail.com>
|
| 76 |
+
skipper seabold <skipper@linux-laptop> skipper seabold <skipper@linux-laptop>
|
| 77 |
+
Skipper Seabold <jsseabold@gmail.com> skipper <skipper@linux-desktop>
|
| 78 |
+
Skipper Seabold <jsseabold@gmail.com> skipper <skipper@linux-econ2>
|
| 79 |
+
Steve Genoud <sgenoud@ethz.ch> Steve Genoud <sgenoud@ethz.ch>
|
| 80 |
+
Thomas Haslwanter <thomas.haslwanter@fh-linz.at> Thomas Haslwanter <thomas.haslwanter@fh-linz.at>
|
| 81 |
+
Thomas Kluyver <takowl@gmail.com> Thomas Kluyver <takowl@gmail.com>
|
| 82 |
+
tim.leslie <> tim.leslie <>
|
| 83 |
+
timmie <timmichelsen@gmx-topmail.de> timmie <timmichelsen@gmx-topmail.de>
|
| 84 |
+
Tom Augspurger <thomas-augspurger@uiowa.edu> TomAugspurger <thomas-augspurger@uiowa.edu>
|
| 85 |
+
Tom Augspurger <thomas-augspurger@uiowa.edu> Tom Augspurger <tom.augspurger88@gmail.com>
|
| 86 |
+
Tom Waite <twaite@berkeley.edu> Tom Waite <twaite@berkeley.edu>
|
| 87 |
+
Tom Waite <twaite@berkeley.edu> twaite <twaite@TOM-DUAL>
|
| 88 |
+
Trent Hauck <trent.hauck@gmail.com> Trent Hauck <trent.hauck@gmail.com>
|
| 89 |
+
Trent Hauck <trent.hauck@gmail.com> tshauck <trent.hauck@gmail.com>
|
| 90 |
+
tylerhartley <tyleha@gmail.com> tylerhartley <tyleha@gmail.com>
|
| 91 |
+
Vincent Arel-Bundock <varel@umich.edu> Vincent Arel-Bundock <varel@umich.edu>
|
| 92 |
+
Vincent Davis <vincent@vincentdavis.net> Vincent Davis <vincent@vincentdavis.net>
|
| 93 |
+
VirgileFritsch <virgile.fritsch@gmail.com> VirgileFritsch <virgile.fritsch@gmail.com>
|
| 94 |
+
Wes McKinney <wesmckinn@gmail.com> Wes McKinney <wesmckinn@gmail.com>
|
| 95 |
+
Wes McKinney <wesmckinn@gmail.com> Wes McKinney <wesm@wesm-desktop>
|
| 96 |
+
Yaroslav Halchenko <debian@onerussian.com> Yaroslav Halchenko <debian@onerussian.com>
|
| 97 |
+
zed <arn.zart+github@gmail.com> zed <arn.zart+github@gmail.com>
|
statsmodels/source/.pep8speaks.yml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
scanner:
|
| 2 |
+
diff_only: True
|
| 3 |
+
linter: flake8
|
| 4 |
+
|
| 5 |
+
flake8:
|
| 6 |
+
max-line-length: 79
|
| 7 |
+
ignore: # Errors and warnings to ignore
|
| 8 |
+
- W503
|
| 9 |
+
- W504
|
statsmodels/source/CHANGES.md
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Release Notes
|
| 2 |
+
=============
|
| 3 |
+
|
| 4 |
+
The list of changes for each statsmodels release can be found [here](https://www.statsmodels.org/devel/release/index.html). Full details are available in the [commit logs](https://github.com/statsmodels/statsmodels).
|
statsmodels/source/CITATION.cff
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cff-version: 1.2.0
|
| 2 |
+
title: statsmodels
|
| 3 |
+
message: >-
|
| 4 |
+
Please use following citation to cite statsmodels in
|
| 5 |
+
scientific publications
|
| 6 |
+
type: software
|
| 7 |
+
authors:
|
| 8 |
+
- given-names: Seabold
|
| 9 |
+
family-names: Skipper
|
| 10 |
+
- given-names: Perktold
|
| 11 |
+
family-names: Josef
|
| 12 |
+
repository-code: 'https://github.com/statsmodels/statsmodels'
|
| 13 |
+
url: 'https://www.statsmodels.org/'
|
| 14 |
+
keywords:
|
| 15 |
+
- python
|
| 16 |
+
- data-science
|
| 17 |
+
- statistics
|
| 18 |
+
- prediction
|
| 19 |
+
- econometrics
|
| 20 |
+
- forecasting
|
| 21 |
+
- data-analysis
|
| 22 |
+
- regression-models
|
| 23 |
+
- hypothesis-testing
|
| 24 |
+
- generalized-linear-models
|
| 25 |
+
- timeseries-analysis
|
| 26 |
+
- robust-estimation
|
| 27 |
+
- count-model
|
| 28 |
+
license: BSD-3-Clause
|
| 29 |
+
preferred-citation:
|
| 30 |
+
type: article
|
| 31 |
+
authors:
|
| 32 |
+
- given-names: Seabold
|
| 33 |
+
family-names: Skipper
|
| 34 |
+
- given-names: Perktold
|
| 35 |
+
family-names: Josef
|
| 36 |
+
title: "statsmodels: Econometric and statistical modeling with python"
|
| 37 |
+
journal: "9th Python in Science Conference"
|
| 38 |
+
year: 2010
|
statsmodels/source/CONTRIBUTING.rst
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Contributing guidelines
|
| 2 |
+
=======================
|
| 3 |
+
|
| 4 |
+
This page explains how you can contribute to the development of `statsmodels`
|
| 5 |
+
by submitting patches, statistical tests, new models, or examples.
|
| 6 |
+
|
| 7 |
+
`statsmodels` is developed on `Github <https://github.com/statsmodels/statsmodels>`_
|
| 8 |
+
using the `Git <https://git-scm.com/>`_ version control system.
|
| 9 |
+
|
| 10 |
+
Submitting a Bug Report
|
| 11 |
+
~~~~~~~~~~~~~~~~~~~~~~~
|
| 12 |
+
|
| 13 |
+
- Include a short, self-contained code snippet that reproduces the problem
|
| 14 |
+
- Specify the statsmodels version used. You can do this with ``sm.version.full_version``
|
| 15 |
+
- If the issue looks to involve other dependencies, also include the output of ``sm.show_versions()``
|
| 16 |
+
|
| 17 |
+
Making Changes to the Code
|
| 18 |
+
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| 19 |
+
|
| 20 |
+
For a pull request to be accepted, you must meet the below requirements. This greatly helps in keeping the job of maintaining and releasing the software a shared effort.
|
| 21 |
+
|
| 22 |
+
- **One branch. One feature.** Branches are cheap and github makes it easy to merge and delete branches with a few clicks. Avoid the temptation to lump in a bunch of unrelated changes when working on a feature, if possible. This helps us keep track of what has changed when preparing a release.
|
| 23 |
+
- Commit messages should be clear and concise. This means a subject line of less than 80 characters, and, if necessary, a blank line followed by a commit message body. We have an `informal commit format standard <https://www.statsmodels.org/devel/dev/maintainer_notes.html#commit-comments>`_ that we try to adhere to. You can see what this looks like in practice by ``git log --oneline -n 10``. If your commit references or closes a specific issue, you can close it by mentioning it in the `commit message <https://help.github.com/articles/closing-issues-via-commit-messages>`_. (*For maintainers*: These suggestions go for Merge commit comments too. These are partially the record for release notes.)
|
| 24 |
+
- Code submissions must always include tests. See our `notes on testing <https://www.statsmodels.org/devel/dev/test_notes.html>`_.
|
| 25 |
+
- Each function, class, method, and attribute needs to be documented using docstrings. We conform to the `numpy docstring standard <https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard>`_.
|
| 26 |
+
- If you are adding new functionality, you need to add it to the documentation by editing (or creating) the appropriate file in ``docs/source``.
|
| 27 |
+
- Make sure your documentation changes parse correctly. Change into the top-level ``docs/`` directory and type::
|
| 28 |
+
|
| 29 |
+
make clean
|
| 30 |
+
make html
|
| 31 |
+
|
| 32 |
+
Check that the build output does not have *any* warnings due to your changes.
|
| 33 |
+
- Finally, please add your changes to the release notes. Open the ``docs/source/release/versionX.X.rst`` file that has the version number of the next release and add your changes to the appropriate section.
|
| 34 |
+
|
| 35 |
+
Linting
|
| 36 |
+
~~~~~~~
|
| 37 |
+
|
| 38 |
+
Due to the way we have the CI builds set up, the linter will not do anything unless the environmental variable $LINT is set to a truthy value.
|
| 39 |
+
|
| 40 |
+
- On MacOS/Linux
|
| 41 |
+
|
| 42 |
+
LINT=true ./lint.sh
|
| 43 |
+
|
| 44 |
+
- Dependencies: flake8, git
|
| 45 |
+
|
| 46 |
+
How to Submit a Pull Request
|
| 47 |
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| 48 |
+
|
| 49 |
+
So you want to submit a patch to `statsmodels` but are not too familiar with github? Here are the steps you need to take.
|
| 50 |
+
|
| 51 |
+
1. `Fork <https://help.github.com/articles/fork-a-repo>`_ the `statsmodels repository <https://github.com/statsmodels/statsmodels>`_ on Github.
|
| 52 |
+
2. `Create a new feature branch <https://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging>`_. Each branch must be self-contained, with a single new feature or bugfix.
|
| 53 |
+
3. Make sure the test suite passes. This includes testing on Python 3. The easiest way to do this is to make a pull request and let the bot check for you. This can be slow, and if you are unsure about the fix or enhancement, it is best to run pytest locally.
|
| 54 |
+
4. Document your changes by editing the appropriate file in ``docs/source/``. If it is a big, new feature add a note and an example to the latest ``docs/source/release/versionX.X.rst`` file. See older versions for examples. If it's a minor change, it will be included automatically in our release notes.
|
| 55 |
+
5. Add an example. If it is a big, new feature please submit an example notebook by following `these instructions <https://www.statsmodels.org/devel/dev/examples.html>`_.
|
| 56 |
+
6. `Submit a pull request <https://help.github.com/articles/using-pull-requests>`_
|
| 57 |
+
|
| 58 |
+
Mailing List
|
| 59 |
+
~~~~~~~~~~~~
|
| 60 |
+
|
| 61 |
+
Conversations about development take place on the `statsmodels mailing list <https://groups.google.com/group/pystatsmodels?hl=en>`__.
|
| 62 |
+
|
| 63 |
+
Learn More
|
| 64 |
+
~~~~~~~~~~
|
| 65 |
+
|
| 66 |
+
The ``statsmodels`` documentation's `developer page <https://www.statsmodels.org/stable/dev/index.html>`_
|
| 67 |
+
offers much more detailed information about the process.
|
| 68 |
+
|
| 69 |
+
License
|
| 70 |
+
~~~~~~~
|
| 71 |
+
|
| 72 |
+
statsmodels is released under the
|
| 73 |
+
`Modified (3-clause) BSD license <https://www.opensource.org/licenses/BSD-3-Clause>`_.
|
statsmodels/source/COPYRIGHTS.txt
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
The license of statsmodels can be found in LICENSE.txt
|
| 3 |
+
|
| 4 |
+
statsmodels contains code or derivative code from several other
|
| 5 |
+
packages. Some modules also note the author of individual contributions, or
|
| 6 |
+
author of code that formed the basis for the derived or translated code.
|
| 7 |
+
The copyright statements for the datasets are attached to the individual
|
| 8 |
+
datasets, most datasets are in public domain, and we do not claim any copyright
|
| 9 |
+
on any of them.
|
| 10 |
+
|
| 11 |
+
In the following, we collect copyright statements of code from other packages,
|
| 12 |
+
all of which are either a version of BSD or MIT licensed:
|
| 13 |
+
|
| 14 |
+
numpy
|
| 15 |
+
scipy
|
| 16 |
+
pandas
|
| 17 |
+
matplotlib
|
| 18 |
+
scikit-learn
|
| 19 |
+
qsturng-py http://code.google.com/p/qsturng-py/
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
numpy (statsmodels.compatnp contains copy of entire model)
|
| 23 |
+
----------------------------------------------------------
|
| 24 |
+
Copyright (c) 2005-2009, NumPy Developers.
|
| 25 |
+
All rights reserved.
|
| 26 |
+
|
| 27 |
+
Redistribution and use in source and binary forms, with or without
|
| 28 |
+
modification, are permitted provided that the following conditions are
|
| 29 |
+
met:
|
| 30 |
+
|
| 31 |
+
* Redistributions of source code must retain the above copyright
|
| 32 |
+
notice, this list of conditions and the following disclaimer.
|
| 33 |
+
|
| 34 |
+
* Redistributions in binary form must reproduce the above
|
| 35 |
+
copyright notice, this list of conditions and the following
|
| 36 |
+
disclaimer in the documentation and/or other materials provided
|
| 37 |
+
with the distribution.
|
| 38 |
+
|
| 39 |
+
* Neither the name of the NumPy Developers nor the names of any
|
| 40 |
+
contributors may be used to endorse or promote products derived
|
| 41 |
+
from this software without specific prior written permission.
|
| 42 |
+
|
| 43 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 44 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 45 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| 46 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 47 |
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 48 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| 49 |
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 50 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 51 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 52 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| 53 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 54 |
+
---------------------------------------------------------------------
|
| 55 |
+
|
| 56 |
+
scipy
|
| 57 |
+
-----
|
| 58 |
+
Copyright (c) 2001, 2002 Enthought, Inc.
|
| 59 |
+
All rights reserved.
|
| 60 |
+
|
| 61 |
+
Copyright (c) 2003-2009 SciPy Developers.
|
| 62 |
+
All rights reserved.
|
| 63 |
+
|
| 64 |
+
Redistribution and use in source and binary forms, with or without
|
| 65 |
+
modification, are permitted provided that the following conditions are met:
|
| 66 |
+
|
| 67 |
+
a. Redistributions of source code must retain the above copyright notice,
|
| 68 |
+
this list of conditions and the following disclaimer.
|
| 69 |
+
b. Redistributions in binary form must reproduce the above copyright
|
| 70 |
+
notice, this list of conditions and the following disclaimer in the
|
| 71 |
+
documentation and/or other materials provided with the distribution.
|
| 72 |
+
c. Neither the name of the Enthought nor the names of its contributors
|
| 73 |
+
may be used to endorse or promote products derived from this software
|
| 74 |
+
without specific prior written permission.
|
| 75 |
+
|
| 76 |
+
|
| 77 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| 78 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| 79 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| 80 |
+
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
| 81 |
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
| 82 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 83 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 84 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 85 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
| 86 |
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
| 87 |
+
DAMAGE.
|
| 88 |
+
---------------------------------------------------------------------------
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
pandas
|
| 92 |
+
------
|
| 93 |
+
|
| 94 |
+
Copyright (c) 2008-2009 AQR Capital Management, LLC
|
| 95 |
+
All rights reserved.
|
| 96 |
+
|
| 97 |
+
Redistribution and use in source and binary forms, with or without
|
| 98 |
+
modification, are permitted provided that the following conditions are
|
| 99 |
+
met:
|
| 100 |
+
|
| 101 |
+
* Redistributions of source code must retain the above copyright
|
| 102 |
+
notice, this list of conditions and the following disclaimer.
|
| 103 |
+
|
| 104 |
+
* Redistributions in binary form must reproduce the above
|
| 105 |
+
copyright notice, this list of conditions and the following
|
| 106 |
+
disclaimer in the documentation and/or other materials provided
|
| 107 |
+
with the distribution.
|
| 108 |
+
|
| 109 |
+
* Neither the name of the copyright holder nor the names of any
|
| 110 |
+
contributors may be used to endorse or promote products derived
|
| 111 |
+
from this software without specific prior written permission.
|
| 112 |
+
|
| 113 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
|
| 114 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 115 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| 116 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| 117 |
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| 118 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| 119 |
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 120 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 121 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 122 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| 123 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 124 |
+
----------------------------------------------------------------------
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
matplotlib (copied from license.py)
|
| 128 |
+
-----------------------------------
|
| 129 |
+
|
| 130 |
+
|
| 131 |
+
LICENSE AGREEMENT FOR MATPLOTLIB %(version)s
|
| 132 |
+
--------------------------------------
|
| 133 |
+
|
| 134 |
+
1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the
|
| 135 |
+
Individual or Organization ("Licensee") accessing and otherwise using
|
| 136 |
+
matplotlib software in source or binary form and its associated
|
| 137 |
+
documentation.
|
| 138 |
+
|
| 139 |
+
2. Subject to the terms and conditions of this License Agreement, JDH
|
| 140 |
+
hereby grants Licensee a nonexclusive, royalty-free, world-wide license
|
| 141 |
+
to reproduce, analyze, test, perform and/or display publicly, prepare
|
| 142 |
+
derivative works, distribute, and otherwise use matplotlib %(version)s
|
| 143 |
+
alone or in any derivative version, provided, however, that JDH's
|
| 144 |
+
License Agreement and JDH's notice of copyright, i.e., "Copyright (c)
|
| 145 |
+
2002-%(year)d John D. Hunter; All Rights Reserved" are retained in
|
| 146 |
+
matplotlib %(version)s alone or in any derivative version prepared by
|
| 147 |
+
Licensee.
|
| 148 |
+
|
| 149 |
+
3. In the event Licensee prepares a derivative work that is based on or
|
| 150 |
+
incorporates matplotlib %(version)s or any part thereof, and wants to
|
| 151 |
+
make the derivative work available to others as provided herein, then
|
| 152 |
+
Licensee hereby agrees to include in any such work a brief summary of
|
| 153 |
+
the changes made to matplotlib %(version)s.
|
| 154 |
+
|
| 155 |
+
4. JDH is making matplotlib %(version)s available to Licensee on an "AS
|
| 156 |
+
IS" basis. JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
| 157 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND
|
| 158 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
| 159 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB %(version)s
|
| 160 |
+
WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
|
| 161 |
+
|
| 162 |
+
5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB
|
| 163 |
+
%(version)s FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
|
| 164 |
+
LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING
|
| 165 |
+
MATPLOTLIB %(version)s, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF
|
| 166 |
+
THE POSSIBILITY THEREOF.
|
| 167 |
+
|
| 168 |
+
6. This License Agreement will automatically terminate upon a material
|
| 169 |
+
breach of its terms and conditions.
|
| 170 |
+
|
| 171 |
+
7. Nothing in this License Agreement shall be deemed to create any
|
| 172 |
+
relationship of agency, partnership, or joint venture between JDH and
|
| 173 |
+
Licensee. This License Agreement does not grant permission to use JDH
|
| 174 |
+
trademarks or trade name in a trademark sense to endorse or promote
|
| 175 |
+
products or services of Licensee, or any third party.
|
| 176 |
+
|
| 177 |
+
8. By copying, installing or otherwise using matplotlib %(version)s,
|
| 178 |
+
Licensee agrees to be bound by the terms and conditions of this License
|
| 179 |
+
Agreement.
|
| 180 |
+
--------------------------------------------------------------------------
|
| 181 |
+
|
| 182 |
+
scikits-learn
|
| 183 |
+
-------------
|
| 184 |
+
|
| 185 |
+
New BSD License
|
| 186 |
+
|
| 187 |
+
Copyright (c) 2007 - 2010 Scikit-Learn Developers.
|
| 188 |
+
All rights reserved.
|
| 189 |
+
|
| 190 |
+
|
| 191 |
+
Redistribution and use in source and binary forms, with or without
|
| 192 |
+
modification, are permitted provided that the following conditions are met:
|
| 193 |
+
|
| 194 |
+
a. Redistributions of source code must retain the above copyright notice,
|
| 195 |
+
this list of conditions and the following disclaimer.
|
| 196 |
+
b. Redistributions in binary form must reproduce the above copyright
|
| 197 |
+
notice, this list of conditions and the following disclaimer in the
|
| 198 |
+
documentation and/or other materials provided with the distribution.
|
| 199 |
+
c. Neither the name of the Scikit-learn Developers nor the names of
|
| 200 |
+
its contributors may be used to endorse or promote products
|
| 201 |
+
derived from this software without specific prior written
|
| 202 |
+
permission.
|
| 203 |
+
|
| 204 |
+
|
| 205 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| 206 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| 207 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| 208 |
+
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
|
| 209 |
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
| 210 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 211 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 212 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 213 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
| 214 |
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
| 215 |
+
DAMAGE.
|
| 216 |
+
---------------------------------------------------------------------------
|
| 217 |
+
|
| 218 |
+
qsturng-py (code included in statsmodels.stats.libqsturng)
|
| 219 |
+
--------------------------------------------------------------
|
| 220 |
+
Copyright (c) 2011, Roger Lew [see LICENSE.txt]
|
| 221 |
+
All rights reserved.
|
| 222 |
+
|
| 223 |
+
Redistribution and use in source and binary forms, with or without
|
| 224 |
+
modification, are permitted provided that the following conditions
|
| 225 |
+
are met:
|
| 226 |
+
* Redistributions of source code must retain the above copyright
|
| 227 |
+
notice, this list of conditions and the following disclaimer.
|
| 228 |
+
* Redistributions in binary form must reproduce the above
|
| 229 |
+
copyright notice, this list of conditions and the following
|
| 230 |
+
disclaimer in the documentation and/or other materials provided
|
| 231 |
+
with the distribution.
|
| 232 |
+
* Neither the name of the organizations affiliated with the
|
| 233 |
+
contributors or the names of its contributors themselves may be
|
| 234 |
+
used to endorse or promote products derived from this software
|
| 235 |
+
without specific prior written permission.
|
| 236 |
+
|
| 237 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| 238 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| 239 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
| 240 |
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
| 241 |
+
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| 242 |
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
| 243 |
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| 244 |
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 245 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 246 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
| 247 |
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
| 248 |
+
POSSIBILITY OF SUCH DAMAGE.
|
| 249 |
+
----------------------------------------------------------
|
statsmodels/source/INSTALL.txt
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Dependencies
|
| 2 |
+
------------
|
| 3 |
+
|
| 4 |
+
python >= 3.9
|
| 5 |
+
|
| 6 |
+
www.python.org
|
| 7 |
+
|
| 8 |
+
numpy >= 1.22
|
| 9 |
+
|
| 10 |
+
www.numpy.org
|
| 11 |
+
|
| 12 |
+
scipy >= 1.7
|
| 13 |
+
|
| 14 |
+
www.scipy.org
|
| 15 |
+
|
| 16 |
+
pandas >= 1.3
|
| 17 |
+
|
| 18 |
+
pandas.pydata.org
|
| 19 |
+
|
| 20 |
+
patsy >= 0.5.5
|
| 21 |
+
|
| 22 |
+
patsy.readthedocs.org
|
| 23 |
+
|
| 24 |
+
cython >= 0.29.33 and < 4.0.0
|
| 25 |
+
|
| 26 |
+
https://cython.org/
|
| 27 |
+
|
| 28 |
+
Cython is required if you are building the source from github. However,
|
| 29 |
+
if you have are building from source distribution archive then the
|
| 30 |
+
generated C files are included and Cython is not necessary. Earlier
|
| 31 |
+
versions may be ok for earlier versions of Python.
|
| 32 |
+
|
| 33 |
+
Optional Dependencies
|
| 34 |
+
---------------------
|
| 35 |
+
|
| 36 |
+
X-12-ARIMA or X-13ARIMA-SEATS
|
| 37 |
+
|
| 38 |
+
https://www.census.gov/srd/www/x13as/
|
| 39 |
+
|
| 40 |
+
If available, time-series analysis can be conducted using either
|
| 41 |
+
X-12-ARIMA or the newer X-13ARIMA-SEATS. You should place the
|
| 42 |
+
appropriate executable on your PATH or set the X12PATH or X13PATH
|
| 43 |
+
environmental variable to take advantage.
|
| 44 |
+
|
| 45 |
+
matplotlib >= 3
|
| 46 |
+
|
| 47 |
+
https://matplotlib.org/
|
| 48 |
+
|
| 49 |
+
Matplotlib is needed for plotting functionality and running many of the
|
| 50 |
+
examples.
|
| 51 |
+
|
| 52 |
+
sphinx >= 1.3
|
| 53 |
+
|
| 54 |
+
http://sphinx.pocoo.org/
|
| 55 |
+
|
| 56 |
+
Sphinx is used to build the documentation.
|
| 57 |
+
|
| 58 |
+
pytest >= 6
|
| 59 |
+
|
| 60 |
+
http://readthedocs.org/docs/pytest/en/latest/
|
| 61 |
+
|
| 62 |
+
Pytest is needed to run the tests.
|
| 63 |
+
|
| 64 |
+
IPython >= 6
|
| 65 |
+
|
| 66 |
+
Needed to build the docs.
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
Installing
|
| 70 |
+
----------
|
| 71 |
+
|
| 72 |
+
To get the latest release using pip
|
| 73 |
+
|
| 74 |
+
python -m pip install statsmodels --upgrade-strategy only-if-needed
|
| 75 |
+
|
| 76 |
+
The additional parameter pip --upgrade-strategy only-if-needed will ensure
|
| 77 |
+
that dependencies, e.g. NumPy or pandas, are not upgraded unless required.
|
| 78 |
+
|
| 79 |
+
Ubuntu/Debian
|
| 80 |
+
-------------
|
| 81 |
+
|
| 82 |
+
On Ubuntu you can get dependencies through:
|
| 83 |
+
|
| 84 |
+
sudo apt-get install python python-dev python-setuptools python-numpy python-scipy
|
| 85 |
+
python -m pip install cython pandas
|
| 86 |
+
|
| 87 |
+
Alternatively, you can install from the NeuroDebian repository:
|
| 88 |
+
|
| 89 |
+
http://neuro.debian.net
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
Installing from Source
|
| 93 |
+
----------------------
|
| 94 |
+
|
| 95 |
+
Download and extract the source distribution from PyPI or github
|
| 96 |
+
|
| 97 |
+
https://pypi.python.org/pypi/statsmodels
|
| 98 |
+
https://github.com/statsmodels/statsmodels/tags
|
| 99 |
+
|
| 100 |
+
Or clone the bleeding edge code from our repository on github at
|
| 101 |
+
|
| 102 |
+
git clone git://github.com/statsmodels/statsmodels.git
|
| 103 |
+
|
| 104 |
+
In the statsmodels directory do (with proper permissions)
|
| 105 |
+
|
| 106 |
+
python -m pip install .
|
| 107 |
+
|
| 108 |
+
You will need a C compiler installed.
|
| 109 |
+
|
| 110 |
+
Installing from Source on Windows
|
| 111 |
+
---------------------------------
|
| 112 |
+
|
| 113 |
+
See https://www.statsmodels.org/devel/install.html#windows.
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
Documentation
|
| 117 |
+
-------------
|
| 118 |
+
|
| 119 |
+
You may find more information about the project and installation in our
|
| 120 |
+
documentation
|
| 121 |
+
|
| 122 |
+
https://www.statsmodels.org/devel/install.html
|
statsmodels/source/LICENSE.txt
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (C) 2006, Jonathan E. Taylor
|
| 2 |
+
All rights reserved.
|
| 3 |
+
|
| 4 |
+
Copyright (c) 2006-2008 Scipy Developers.
|
| 5 |
+
All rights reserved.
|
| 6 |
+
|
| 7 |
+
Copyright (c) 2009-2018 statsmodels Developers.
|
| 8 |
+
All rights reserved.
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
Redistribution and use in source and binary forms, with or without
|
| 12 |
+
modification, are permitted provided that the following conditions are met:
|
| 13 |
+
|
| 14 |
+
a. Redistributions of source code must retain the above copyright notice,
|
| 15 |
+
this list of conditions and the following disclaimer.
|
| 16 |
+
b. Redistributions in binary form must reproduce the above copyright
|
| 17 |
+
notice, this list of conditions and the following disclaimer in the
|
| 18 |
+
documentation and/or other materials provided with the distribution.
|
| 19 |
+
c. Neither the name of statsmodels nor the names of its contributors
|
| 20 |
+
may be used to endorse or promote products derived from this software
|
| 21 |
+
without specific prior written permission.
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| 25 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| 26 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| 27 |
+
ARE DISCLAIMED. IN NO EVENT SHALL STATSMODELS OR CONTRIBUTORS BE LIABLE FOR
|
| 28 |
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
| 29 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 30 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 31 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 32 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
| 33 |
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
| 34 |
+
DAMAGE.
|
statsmodels/source/MANIFEST.in
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
global-include *.csv *.py *.txt *.pyx *.pyx.in *.pxd *.pxi *.c *.h *.pkl
|
| 2 |
+
include statsmodels/_version.py
|
| 3 |
+
include MANIFEST.in
|
| 4 |
+
include README.rst
|
| 5 |
+
|
| 6 |
+
recursive-exclude build *
|
| 7 |
+
recursive-exclude dist *
|
| 8 |
+
recursive-exclude tools *
|
| 9 |
+
|
| 10 |
+
graft statsmodels/datasets
|
| 11 |
+
graft statsmodels/sandbox/regression/data
|
| 12 |
+
graft statsmodels/sandbox/tests
|
| 13 |
+
graft statsmodels/sandbox/tsa/examples
|
| 14 |
+
recursive-include docs/source *
|
| 15 |
+
exclude docs/source/generated/*
|
| 16 |
+
recursive-include docs/sphinxext *
|
| 17 |
+
recursive-include docs/themes *
|
| 18 |
+
recursive-exclude docs/build *
|
| 19 |
+
recursive-exclude docs/build/htmlhelp *
|
| 20 |
+
include statsmodels/statsmodelsdoc.chm
|
| 21 |
+
include docs/make.bat
|
| 22 |
+
include docs/Makefile
|
| 23 |
+
|
| 24 |
+
recursive-include examples *
|
| 25 |
+
|
| 26 |
+
prune */__pycache__
|
| 27 |
+
|
| 28 |
+
global-exclude *~ *.swp *.pyc *.pyo *.bak
|
| 29 |
+
include statsmodels/_version.py
|
statsmodels/source/README.rst
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.. image:: docs/source/images/statsmodels-logo-v2-horizontal.svg
|
| 2 |
+
:alt: Statsmodels logo
|
| 3 |
+
|
| 4 |
+
|PyPI Version| |Conda Version| |License| |Azure CI Build Status|
|
| 5 |
+
|Codecov Coverage| |Coveralls Coverage| |PyPI downloads| |Conda downloads|
|
| 6 |
+
|
| 7 |
+
About statsmodels
|
| 8 |
+
=================
|
| 9 |
+
|
| 10 |
+
statsmodels is a Python package that provides a complement to scipy for
|
| 11 |
+
statistical computations including descriptive statistics and estimation
|
| 12 |
+
and inference for statistical models.
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
Documentation
|
| 16 |
+
=============
|
| 17 |
+
|
| 18 |
+
The documentation for the latest release is at
|
| 19 |
+
|
| 20 |
+
https://www.statsmodels.org/stable/
|
| 21 |
+
|
| 22 |
+
The documentation for the development version is at
|
| 23 |
+
|
| 24 |
+
https://www.statsmodels.org/dev/
|
| 25 |
+
|
| 26 |
+
Recent improvements are highlighted in the release notes
|
| 27 |
+
|
| 28 |
+
https://www.statsmodels.org/stable/release/
|
| 29 |
+
|
| 30 |
+
Backups of documentation are available at https://statsmodels.github.io/stable/
|
| 31 |
+
and https://statsmodels.github.io/dev/.
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
Main Features
|
| 35 |
+
=============
|
| 36 |
+
|
| 37 |
+
* Linear regression models:
|
| 38 |
+
|
| 39 |
+
- Ordinary least squares
|
| 40 |
+
- Generalized least squares
|
| 41 |
+
- Weighted least squares
|
| 42 |
+
- Least squares with autoregressive errors
|
| 43 |
+
- Quantile regression
|
| 44 |
+
- Recursive least squares
|
| 45 |
+
|
| 46 |
+
* Mixed Linear Model with mixed effects and variance components
|
| 47 |
+
* GLM: Generalized linear models with support for all of the one-parameter
|
| 48 |
+
exponential family distributions
|
| 49 |
+
* Bayesian Mixed GLM for Binomial and Poisson
|
| 50 |
+
* GEE: Generalized Estimating Equations for one-way clustered or longitudinal data
|
| 51 |
+
* Discrete models:
|
| 52 |
+
|
| 53 |
+
- Logit and Probit
|
| 54 |
+
- Multinomial logit (MNLogit)
|
| 55 |
+
- Poisson and Generalized Poisson regression
|
| 56 |
+
- Negative Binomial regression
|
| 57 |
+
- Zero-Inflated Count models
|
| 58 |
+
|
| 59 |
+
* RLM: Robust linear models with support for several M-estimators.
|
| 60 |
+
* Time Series Analysis: models for time series analysis
|
| 61 |
+
|
| 62 |
+
- Complete StateSpace modeling framework
|
| 63 |
+
|
| 64 |
+
- Seasonal ARIMA and ARIMAX models
|
| 65 |
+
- VARMA and VARMAX models
|
| 66 |
+
- Dynamic Factor models
|
| 67 |
+
- Unobserved Component models
|
| 68 |
+
|
| 69 |
+
- Markov switching models (MSAR), also known as Hidden Markov Models (HMM)
|
| 70 |
+
- Univariate time series analysis: AR, ARIMA
|
| 71 |
+
- Vector autoregressive models, VAR and structural VAR
|
| 72 |
+
- Vector error correction model, VECM
|
| 73 |
+
- exponential smoothing, Holt-Winters
|
| 74 |
+
- Hypothesis tests for time series: unit root, cointegration and others
|
| 75 |
+
- Descriptive statistics and process models for time series analysis
|
| 76 |
+
|
| 77 |
+
* Survival analysis:
|
| 78 |
+
|
| 79 |
+
- Proportional hazards regression (Cox models)
|
| 80 |
+
- Survivor function estimation (Kaplan-Meier)
|
| 81 |
+
- Cumulative incidence function estimation
|
| 82 |
+
|
| 83 |
+
* Multivariate:
|
| 84 |
+
|
| 85 |
+
- Principal Component Analysis with missing data
|
| 86 |
+
- Factor Analysis with rotation
|
| 87 |
+
- MANOVA
|
| 88 |
+
- Canonical Correlation
|
| 89 |
+
|
| 90 |
+
* Nonparametric statistics: Univariate and multivariate kernel density estimators
|
| 91 |
+
* Datasets: Datasets used for examples and in testing
|
| 92 |
+
* Statistics: a wide range of statistical tests
|
| 93 |
+
|
| 94 |
+
- diagnostics and specification tests
|
| 95 |
+
- goodness-of-fit and normality tests
|
| 96 |
+
- functions for multiple testing
|
| 97 |
+
- various additional statistical tests
|
| 98 |
+
|
| 99 |
+
* Imputation with MICE, regression on order statistic and Gaussian imputation
|
| 100 |
+
* Mediation analysis
|
| 101 |
+
* Graphics includes plot functions for visual analysis of data and model results
|
| 102 |
+
|
| 103 |
+
* I/O
|
| 104 |
+
|
| 105 |
+
- Tools for reading Stata .dta files, but pandas has a more recent version
|
| 106 |
+
- Table output to ascii, latex, and html
|
| 107 |
+
|
| 108 |
+
* Miscellaneous models
|
| 109 |
+
* Sandbox: statsmodels contains a sandbox folder with code in various stages of
|
| 110 |
+
development and testing which is not considered "production ready". This covers
|
| 111 |
+
among others
|
| 112 |
+
|
| 113 |
+
- Generalized method of moments (GMM) estimators
|
| 114 |
+
- Kernel regression
|
| 115 |
+
- Various extensions to scipy.stats.distributions
|
| 116 |
+
- Panel data models
|
| 117 |
+
- Information theoretic measures
|
| 118 |
+
|
| 119 |
+
How to get it
|
| 120 |
+
=============
|
| 121 |
+
The main branch on GitHub is the most up to date code
|
| 122 |
+
|
| 123 |
+
https://www.github.com/statsmodels/statsmodels
|
| 124 |
+
|
| 125 |
+
Source download of release tags are available on GitHub
|
| 126 |
+
|
| 127 |
+
https://github.com/statsmodels/statsmodels/tags
|
| 128 |
+
|
| 129 |
+
Binaries and source distributions are available from PyPi
|
| 130 |
+
|
| 131 |
+
https://pypi.org/project/statsmodels/
|
| 132 |
+
|
| 133 |
+
Binaries can be installed in Anaconda
|
| 134 |
+
|
| 135 |
+
conda install statsmodels
|
| 136 |
+
|
| 137 |
+
|
| 138 |
+
Getting the latest code
|
| 139 |
+
=======================
|
| 140 |
+
|
| 141 |
+
Installing the most recent nightly wheel
|
| 142 |
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| 143 |
+
The most recent nightly wheel can be installed using pip.
|
| 144 |
+
|
| 145 |
+
.. code:: bash
|
| 146 |
+
|
| 147 |
+
python -m pip install -i https://pypi.anaconda.org/scientific-python-nightly-wheels/simple statsmodels --upgrade --use-deprecated=legacy-resolver
|
| 148 |
+
|
| 149 |
+
Installing from sources
|
| 150 |
+
~~~~~~~~~~~~~~~~~~~~~~~
|
| 151 |
+
|
| 152 |
+
See INSTALL.txt for requirements or see the documentation
|
| 153 |
+
|
| 154 |
+
https://statsmodels.github.io/dev/install.html
|
| 155 |
+
|
| 156 |
+
Contributing
|
| 157 |
+
============
|
| 158 |
+
Contributions in any form are welcome, including:
|
| 159 |
+
|
| 160 |
+
* Documentation improvements
|
| 161 |
+
* Additional tests
|
| 162 |
+
* New features to existing models
|
| 163 |
+
* New models
|
| 164 |
+
|
| 165 |
+
https://www.statsmodels.org/stable/dev/test_notes
|
| 166 |
+
|
| 167 |
+
for instructions on installing statsmodels in *editable* mode.
|
| 168 |
+
|
| 169 |
+
License
|
| 170 |
+
=======
|
| 171 |
+
|
| 172 |
+
Modified BSD (3-clause)
|
| 173 |
+
|
| 174 |
+
Discussion and Development
|
| 175 |
+
==========================
|
| 176 |
+
|
| 177 |
+
Discussions take place on the mailing list
|
| 178 |
+
|
| 179 |
+
https://groups.google.com/group/pystatsmodels
|
| 180 |
+
|
| 181 |
+
and in the issue tracker. We are very interested in feedback
|
| 182 |
+
about usability and suggestions for improvements.
|
| 183 |
+
|
| 184 |
+
Bug Reports
|
| 185 |
+
===========
|
| 186 |
+
|
| 187 |
+
Bug reports can be submitted to the issue tracker at
|
| 188 |
+
|
| 189 |
+
https://github.com/statsmodels/statsmodels/issues
|
| 190 |
+
|
| 191 |
+
.. |Azure CI Build Status| image:: https://dev.azure.com/statsmodels/statsmodels-testing/_apis/build/status/statsmodels.statsmodels?branchName=main
|
| 192 |
+
:target: https://dev.azure.com/statsmodels/statsmodels-testing/_build/latest?definitionId=1&branchName=main
|
| 193 |
+
.. |Codecov Coverage| image:: https://codecov.io/gh/statsmodels/statsmodels/branch/main/graph/badge.svg
|
| 194 |
+
:target: https://codecov.io/gh/statsmodels/statsmodels
|
| 195 |
+
.. |Coveralls Coverage| image:: https://coveralls.io/repos/github/statsmodels/statsmodels/badge.svg?branch=main
|
| 196 |
+
:target: https://coveralls.io/github/statsmodels/statsmodels?branch=main
|
| 197 |
+
.. |PyPI downloads| image:: https://img.shields.io/pypi/dm/statsmodels?label=PyPI%20Downloads
|
| 198 |
+
:alt: PyPI - Downloads
|
| 199 |
+
:target: https://pypi.org/project/statsmodels/
|
| 200 |
+
.. |Conda downloads| image:: https://img.shields.io/conda/dn/conda-forge/statsmodels.svg?label=Conda%20downloads
|
| 201 |
+
:target: https://anaconda.org/conda-forge/statsmodels/
|
| 202 |
+
.. |PyPI Version| image:: https://img.shields.io/pypi/v/statsmodels.svg
|
| 203 |
+
:target: https://pypi.org/project/statsmodels/
|
| 204 |
+
.. |Conda Version| image:: https://anaconda.org/conda-forge/statsmodels/badges/version.svg
|
| 205 |
+
:target: https://anaconda.org/conda-forge/statsmodels/
|
| 206 |
+
.. |License| image:: https://img.shields.io/pypi/l/statsmodels.svg
|
| 207 |
+
:target: https://github.com/statsmodels/statsmodels/blob/main/LICENSE.txt
|
statsmodels/source/README_l1.txt
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
What the l1 addition is
|
| 2 |
+
=======================
|
| 3 |
+
A slight modification that allows l1 regularized LikelihoodModel.
|
| 4 |
+
|
| 5 |
+
Regularization is handled by a fit_regularized method.
|
| 6 |
+
|
| 7 |
+
Main Files
|
| 8 |
+
==========
|
| 9 |
+
|
| 10 |
+
l1_demo/demo.py
|
| 11 |
+
$ python demo.py --get_l1_slsqp_results logit
|
| 12 |
+
does a quick demo of the regularization using logistic regression.
|
| 13 |
+
|
| 14 |
+
l1_demo/sklearn_compare.py
|
| 15 |
+
$ python sklearn_compare.py
|
| 16 |
+
Plots a comparison of regularization paths. Modify the source to use
|
| 17 |
+
different datasets.
|
| 18 |
+
|
| 19 |
+
statsmodels/base/l1_cvxopt.py
|
| 20 |
+
fit_l1_cvxopt_cp()
|
| 21 |
+
Fit likelihood model using l1 regularization. Use the CVXOPT package.
|
| 22 |
+
Lots of small functions supporting fit_l1_cvxopt_cp
|
| 23 |
+
|
| 24 |
+
statsmodels/base/l1_slsqp.py
|
| 25 |
+
fit_l1_slsqp()
|
| 26 |
+
Fit likelihood model using l1 regularization. Use scipy.optimize
|
| 27 |
+
Lots of small functions supporting fit_l1_slsqp
|
| 28 |
+
|
| 29 |
+
statsmodels/base/l1_solvers_common.py
|
| 30 |
+
Common methods used by l1 solvers
|
| 31 |
+
|
| 32 |
+
statsmodels/base/model.py
|
| 33 |
+
Likelihoodmodel.fit()
|
| 34 |
+
3 lines modified to allow for importing and calling of l1 fitting functions
|
| 35 |
+
|
| 36 |
+
statsmodels/discrete/discrete_model.py
|
| 37 |
+
L1MultinomialResults class
|
| 38 |
+
Child of MultinomialResults
|
| 39 |
+
MultinomialModel.fit()
|
| 40 |
+
3 lines re-directing l1 fit results to the L1MultinomialResults class
|
statsmodels/source/__init__.py
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
statsmodels Project Package Initialization File
|
| 4 |
+
"""
|
statsmodels/source/archive/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Deprecated Legacy Code Archive
|
| 2 |
+
|
| 3 |
+
This directory contains historical code that was previously part of
|
| 4 |
+
statsmodels but is **no longer maintained or supported**.
|
| 5 |
+
|
| 6 |
+
## Purpose
|
| 7 |
+
- Preserve Git history for reference
|
| 8 |
+
- Maintain backward compatibility in version control
|
| 9 |
+
|
| 10 |
+
## Important Notes
|
| 11 |
+
⚠️ **Do not use** these files in production
|
| 12 |
+
⚠️ Code is provided **as-is** without maintenance
|
| 13 |
+
⚠️ No bug fixes or security updates will be provided
|
| 14 |
+
|
| 15 |
+
For current implementations, please refer to the active codebase.
|
statsmodels/source/archive/docs/GLMNotes.lyx
ADDED
|
@@ -0,0 +1,1155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
|
| 2 |
+
\lyxformat 345
|
| 3 |
+
\begin_document
|
| 4 |
+
\begin_header
|
| 5 |
+
\textclass article
|
| 6 |
+
\use_default_options true
|
| 7 |
+
\language english
|
| 8 |
+
\inputencoding auto
|
| 9 |
+
\font_roman default
|
| 10 |
+
\font_sans default
|
| 11 |
+
\font_typewriter default
|
| 12 |
+
\font_default_family default
|
| 13 |
+
\font_sc false
|
| 14 |
+
\font_osf false
|
| 15 |
+
\font_sf_scale 100
|
| 16 |
+
\font_tt_scale 100
|
| 17 |
+
|
| 18 |
+
\graphics default
|
| 19 |
+
\paperfontsize default
|
| 20 |
+
\spacing single
|
| 21 |
+
\use_hyperref false
|
| 22 |
+
\papersize default
|
| 23 |
+
\use_geometry true
|
| 24 |
+
\use_amsmath 1
|
| 25 |
+
\use_esint 1
|
| 26 |
+
\cite_engine basic
|
| 27 |
+
\use_bibtopic false
|
| 28 |
+
\paperorientation portrait
|
| 29 |
+
\leftmargin 1in
|
| 30 |
+
\topmargin 1in
|
| 31 |
+
\rightmargin 1in
|
| 32 |
+
\bottommargin 1in
|
| 33 |
+
\secnumdepth 3
|
| 34 |
+
\tocdepth 3
|
| 35 |
+
\paragraph_separation indent
|
| 36 |
+
\defskip medskip
|
| 37 |
+
\quotes_language english
|
| 38 |
+
\papercolumns 1
|
| 39 |
+
\papersides 1
|
| 40 |
+
\paperpagestyle default
|
| 41 |
+
\tracking_changes false
|
| 42 |
+
\output_changes false
|
| 43 |
+
\author ""
|
| 44 |
+
\author ""
|
| 45 |
+
\end_header
|
| 46 |
+
|
| 47 |
+
\begin_body
|
| 48 |
+
|
| 49 |
+
\begin_layout Standard
|
| 50 |
+
Variance Functions:
|
| 51 |
+
\end_layout
|
| 52 |
+
|
| 53 |
+
\begin_layout Standard
|
| 54 |
+
Constant:
|
| 55 |
+
\begin_inset Formula $\boldsymbol{1}$
|
| 56 |
+
\end_inset
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
\end_layout
|
| 60 |
+
|
| 61 |
+
\begin_layout Standard
|
| 62 |
+
Power:
|
| 63 |
+
\begin_inset Formula $\boldsymbol{X}^{2}$
|
| 64 |
+
\end_inset
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
\end_layout
|
| 68 |
+
|
| 69 |
+
\begin_layout Standard
|
| 70 |
+
Binomial:
|
| 71 |
+
\begin_inset Formula $np(1-p)\text{ where }p=\frac{\mu}{n};\,\, V(\mu)=np(1-p)$
|
| 72 |
+
\end_inset
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
\end_layout
|
| 76 |
+
|
| 77 |
+
\begin_layout Standard
|
| 78 |
+
\begin_inset Formula $\frac{\partial\mu}{\partial\eta}$
|
| 79 |
+
\end_inset
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
\end_layout
|
| 83 |
+
|
| 84 |
+
\begin_layout Standard
|
| 85 |
+
Links: initialization of base class returns the actual mean vector
|
| 86 |
+
\begin_inset Formula $\boldsymbol{\mu}$
|
| 87 |
+
\end_inset
|
| 88 |
+
|
| 89 |
+
;
|
| 90 |
+
\begin_inset Formula $p$
|
| 91 |
+
\end_inset
|
| 92 |
+
|
| 93 |
+
in the logit and subclasses;
|
| 94 |
+
\begin_inset Formula $x$
|
| 95 |
+
\end_inset
|
| 96 |
+
|
| 97 |
+
elsewhere.
|
| 98 |
+
\end_layout
|
| 99 |
+
|
| 100 |
+
\begin_layout Standard
|
| 101 |
+
\begin_inset Float table
|
| 102 |
+
placement H
|
| 103 |
+
wide false
|
| 104 |
+
sideways false
|
| 105 |
+
status open
|
| 106 |
+
|
| 107 |
+
\begin_layout Plain Layout
|
| 108 |
+
\begin_inset Tabular
|
| 109 |
+
<lyxtabular version="3" rows="11" columns="4">
|
| 110 |
+
<features>
|
| 111 |
+
<column alignment="center" valignment="top" width="0">
|
| 112 |
+
<column alignment="center" valignment="top" width="0">
|
| 113 |
+
<column alignment="center" valignment="top" width="0">
|
| 114 |
+
<column alignment="center" valignment="top" width="0">
|
| 115 |
+
<row>
|
| 116 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 117 |
+
\begin_inset Text
|
| 118 |
+
|
| 119 |
+
\begin_layout Plain Layout
|
| 120 |
+
|
| 121 |
+
\end_layout
|
| 122 |
+
|
| 123 |
+
\end_inset
|
| 124 |
+
</cell>
|
| 125 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 126 |
+
\begin_inset Text
|
| 127 |
+
|
| 128 |
+
\begin_layout Plain Layout
|
| 129 |
+
Link
|
| 130 |
+
\begin_inset Formula $g(p)$
|
| 131 |
+
\end_inset
|
| 132 |
+
|
| 133 |
+
|
| 134 |
+
\end_layout
|
| 135 |
+
|
| 136 |
+
\end_inset
|
| 137 |
+
</cell>
|
| 138 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 139 |
+
\begin_inset Text
|
| 140 |
+
|
| 141 |
+
\begin_layout Plain Layout
|
| 142 |
+
Inverse
|
| 143 |
+
\begin_inset Formula $g^{-1}(p)$
|
| 144 |
+
\end_inset
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
\end_layout
|
| 148 |
+
|
| 149 |
+
\end_inset
|
| 150 |
+
</cell>
|
| 151 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 152 |
+
\begin_inset Text
|
| 153 |
+
|
| 154 |
+
\begin_layout Plain Layout
|
| 155 |
+
Analytic Derivative
|
| 156 |
+
\begin_inset Formula $g^{\prime}(p)$
|
| 157 |
+
\end_inset
|
| 158 |
+
|
| 159 |
+
|
| 160 |
+
\end_layout
|
| 161 |
+
|
| 162 |
+
\end_inset
|
| 163 |
+
</cell>
|
| 164 |
+
</row>
|
| 165 |
+
<row>
|
| 166 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 167 |
+
\begin_inset Text
|
| 168 |
+
|
| 169 |
+
\begin_layout Plain Layout
|
| 170 |
+
|
| 171 |
+
\end_layout
|
| 172 |
+
|
| 173 |
+
\end_inset
|
| 174 |
+
</cell>
|
| 175 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 176 |
+
\begin_inset Text
|
| 177 |
+
|
| 178 |
+
\begin_layout Plain Layout
|
| 179 |
+
|
| 180 |
+
\end_layout
|
| 181 |
+
|
| 182 |
+
\end_inset
|
| 183 |
+
</cell>
|
| 184 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 185 |
+
\begin_inset Text
|
| 186 |
+
|
| 187 |
+
\begin_layout Plain Layout
|
| 188 |
+
|
| 189 |
+
\end_layout
|
| 190 |
+
|
| 191 |
+
\end_inset
|
| 192 |
+
</cell>
|
| 193 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 194 |
+
\begin_inset Text
|
| 195 |
+
|
| 196 |
+
\begin_layout Plain Layout
|
| 197 |
+
|
| 198 |
+
\end_layout
|
| 199 |
+
|
| 200 |
+
\end_inset
|
| 201 |
+
</cell>
|
| 202 |
+
</row>
|
| 203 |
+
<row>
|
| 204 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 205 |
+
\begin_inset Text
|
| 206 |
+
|
| 207 |
+
\begin_layout Plain Layout
|
| 208 |
+
Logit
|
| 209 |
+
\end_layout
|
| 210 |
+
|
| 211 |
+
\end_inset
|
| 212 |
+
</cell>
|
| 213 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 214 |
+
\begin_inset Text
|
| 215 |
+
|
| 216 |
+
\begin_layout Plain Layout
|
| 217 |
+
\begin_inset Formula $z=\log\frac{p}{1-p}$
|
| 218 |
+
\end_inset
|
| 219 |
+
|
| 220 |
+
|
| 221 |
+
\end_layout
|
| 222 |
+
|
| 223 |
+
\end_inset
|
| 224 |
+
</cell>
|
| 225 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 226 |
+
\begin_inset Text
|
| 227 |
+
|
| 228 |
+
\begin_layout Plain Layout
|
| 229 |
+
\begin_inset Formula $p=\frac{e^{z}}{1+e^{z}}$
|
| 230 |
+
\end_inset
|
| 231 |
+
|
| 232 |
+
|
| 233 |
+
\end_layout
|
| 234 |
+
|
| 235 |
+
\end_inset
|
| 236 |
+
</cell>
|
| 237 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 238 |
+
\begin_inset Text
|
| 239 |
+
|
| 240 |
+
\begin_layout Plain Layout
|
| 241 |
+
\begin_inset Formula $g^{\prime}(p)=\frac{1}{p(1-p)}$
|
| 242 |
+
\end_inset
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
\end_layout
|
| 246 |
+
|
| 247 |
+
\end_inset
|
| 248 |
+
</cell>
|
| 249 |
+
</row>
|
| 250 |
+
<row>
|
| 251 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 252 |
+
\begin_inset Text
|
| 253 |
+
|
| 254 |
+
\begin_layout Plain Layout
|
| 255 |
+
Power
|
| 256 |
+
\end_layout
|
| 257 |
+
|
| 258 |
+
\end_inset
|
| 259 |
+
</cell>
|
| 260 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 261 |
+
\begin_inset Text
|
| 262 |
+
|
| 263 |
+
\begin_layout Plain Layout
|
| 264 |
+
\begin_inset Formula $z=x^{\text{pow}}$
|
| 265 |
+
\end_inset
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
\end_layout
|
| 269 |
+
|
| 270 |
+
\end_inset
|
| 271 |
+
</cell>
|
| 272 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 273 |
+
\begin_inset Text
|
| 274 |
+
|
| 275 |
+
\begin_layout Plain Layout
|
| 276 |
+
\begin_inset Formula $x=z^{\frac{1}{\text{pow}}}$
|
| 277 |
+
\end_inset
|
| 278 |
+
|
| 279 |
+
|
| 280 |
+
\end_layout
|
| 281 |
+
|
| 282 |
+
\end_inset
|
| 283 |
+
</cell>
|
| 284 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 285 |
+
\begin_inset Text
|
| 286 |
+
|
| 287 |
+
\begin_layout Plain Layout
|
| 288 |
+
\begin_inset Formula $g^{\prime}(x)=\text{pow}\cdot x^{\text{power}-1}$
|
| 289 |
+
\end_inset
|
| 290 |
+
|
| 291 |
+
|
| 292 |
+
\end_layout
|
| 293 |
+
|
| 294 |
+
\end_inset
|
| 295 |
+
</cell>
|
| 296 |
+
</row>
|
| 297 |
+
<row>
|
| 298 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 299 |
+
\begin_inset Text
|
| 300 |
+
|
| 301 |
+
\begin_layout Plain Layout
|
| 302 |
+
Inverse
|
| 303 |
+
\end_layout
|
| 304 |
+
|
| 305 |
+
\end_inset
|
| 306 |
+
</cell>
|
| 307 |
+
<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 308 |
+
\begin_inset Text
|
| 309 |
+
|
| 310 |
+
\begin_layout Plain Layout
|
| 311 |
+
same as above with
|
| 312 |
+
\begin_inset Formula $\text{pow}=-1$
|
| 313 |
+
\end_inset
|
| 314 |
+
|
| 315 |
+
|
| 316 |
+
\end_layout
|
| 317 |
+
|
| 318 |
+
\end_inset
|
| 319 |
+
</cell>
|
| 320 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 321 |
+
\begin_inset Text
|
| 322 |
+
|
| 323 |
+
\begin_layout Plain Layout
|
| 324 |
+
|
| 325 |
+
\end_layout
|
| 326 |
+
|
| 327 |
+
\end_inset
|
| 328 |
+
</cell>
|
| 329 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 330 |
+
\begin_inset Text
|
| 331 |
+
|
| 332 |
+
\begin_layout Plain Layout
|
| 333 |
+
|
| 334 |
+
\end_layout
|
| 335 |
+
|
| 336 |
+
\end_inset
|
| 337 |
+
</cell>
|
| 338 |
+
</row>
|
| 339 |
+
<row>
|
| 340 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 341 |
+
\begin_inset Text
|
| 342 |
+
|
| 343 |
+
\begin_layout Plain Layout
|
| 344 |
+
Square Root
|
| 345 |
+
\end_layout
|
| 346 |
+
|
| 347 |
+
\end_inset
|
| 348 |
+
</cell>
|
| 349 |
+
<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 350 |
+
\begin_inset Text
|
| 351 |
+
|
| 352 |
+
\begin_layout Plain Layout
|
| 353 |
+
\begin_inset Formula $\text{pow}=0.5$
|
| 354 |
+
\end_inset
|
| 355 |
+
|
| 356 |
+
|
| 357 |
+
\end_layout
|
| 358 |
+
|
| 359 |
+
\end_inset
|
| 360 |
+
</cell>
|
| 361 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 362 |
+
\begin_inset Text
|
| 363 |
+
|
| 364 |
+
\begin_layout Plain Layout
|
| 365 |
+
|
| 366 |
+
\end_layout
|
| 367 |
+
|
| 368 |
+
\end_inset
|
| 369 |
+
</cell>
|
| 370 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 371 |
+
\begin_inset Text
|
| 372 |
+
|
| 373 |
+
\begin_layout Plain Layout
|
| 374 |
+
|
| 375 |
+
\end_layout
|
| 376 |
+
|
| 377 |
+
\end_inset
|
| 378 |
+
</cell>
|
| 379 |
+
</row>
|
| 380 |
+
<row>
|
| 381 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 382 |
+
\begin_inset Text
|
| 383 |
+
|
| 384 |
+
\begin_layout Plain Layout
|
| 385 |
+
Identity
|
| 386 |
+
\end_layout
|
| 387 |
+
|
| 388 |
+
\end_inset
|
| 389 |
+
</cell>
|
| 390 |
+
<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 391 |
+
\begin_inset Text
|
| 392 |
+
|
| 393 |
+
\begin_layout Plain Layout
|
| 394 |
+
\begin_inset Formula $\text{pow}=1$
|
| 395 |
+
\end_inset
|
| 396 |
+
|
| 397 |
+
|
| 398 |
+
\end_layout
|
| 399 |
+
|
| 400 |
+
\end_inset
|
| 401 |
+
</cell>
|
| 402 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" usebox="none">
|
| 403 |
+
\begin_inset Text
|
| 404 |
+
|
| 405 |
+
\begin_layout Plain Layout
|
| 406 |
+
|
| 407 |
+
\end_layout
|
| 408 |
+
|
| 409 |
+
\end_inset
|
| 410 |
+
</cell>
|
| 411 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 412 |
+
\begin_inset Text
|
| 413 |
+
|
| 414 |
+
\begin_layout Plain Layout
|
| 415 |
+
|
| 416 |
+
\end_layout
|
| 417 |
+
|
| 418 |
+
\end_inset
|
| 419 |
+
</cell>
|
| 420 |
+
</row>
|
| 421 |
+
<row>
|
| 422 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 423 |
+
\begin_inset Text
|
| 424 |
+
|
| 425 |
+
\begin_layout Plain Layout
|
| 426 |
+
Log
|
| 427 |
+
\end_layout
|
| 428 |
+
|
| 429 |
+
\end_inset
|
| 430 |
+
</cell>
|
| 431 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 432 |
+
\begin_inset Text
|
| 433 |
+
|
| 434 |
+
\begin_layout Plain Layout
|
| 435 |
+
\begin_inset Formula $z=\log x$
|
| 436 |
+
\end_inset
|
| 437 |
+
|
| 438 |
+
|
| 439 |
+
\end_layout
|
| 440 |
+
|
| 441 |
+
\end_inset
|
| 442 |
+
</cell>
|
| 443 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" usebox="none">
|
| 444 |
+
\begin_inset Text
|
| 445 |
+
|
| 446 |
+
\begin_layout Plain Layout
|
| 447 |
+
\begin_inset Formula $g^{-1}(z)=e^{z}$
|
| 448 |
+
\end_inset
|
| 449 |
+
|
| 450 |
+
|
| 451 |
+
\end_layout
|
| 452 |
+
|
| 453 |
+
\end_inset
|
| 454 |
+
</cell>
|
| 455 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 456 |
+
\begin_inset Text
|
| 457 |
+
|
| 458 |
+
\begin_layout Plain Layout
|
| 459 |
+
\begin_inset Formula $g^{\prime}(x)=\frac{1}{x}$
|
| 460 |
+
\end_inset
|
| 461 |
+
|
| 462 |
+
|
| 463 |
+
\end_layout
|
| 464 |
+
|
| 465 |
+
\end_inset
|
| 466 |
+
</cell>
|
| 467 |
+
</row>
|
| 468 |
+
<row>
|
| 469 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 470 |
+
\begin_inset Text
|
| 471 |
+
|
| 472 |
+
\begin_layout Plain Layout
|
| 473 |
+
CDFLink/Probit
|
| 474 |
+
\end_layout
|
| 475 |
+
|
| 476 |
+
\end_inset
|
| 477 |
+
</cell>
|
| 478 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 479 |
+
\begin_inset Text
|
| 480 |
+
|
| 481 |
+
\begin_layout Plain Layout
|
| 482 |
+
\begin_inset Formula $z=\Phi^{-1}(p)$
|
| 483 |
+
\end_inset
|
| 484 |
+
|
| 485 |
+
|
| 486 |
+
\end_layout
|
| 487 |
+
|
| 488 |
+
\end_inset
|
| 489 |
+
</cell>
|
| 490 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" usebox="none">
|
| 491 |
+
\begin_inset Text
|
| 492 |
+
|
| 493 |
+
\begin_layout Plain Layout
|
| 494 |
+
\begin_inset Formula $p=\Phi(z)$
|
| 495 |
+
\end_inset
|
| 496 |
+
|
| 497 |
+
|
| 498 |
+
\end_layout
|
| 499 |
+
|
| 500 |
+
\end_inset
|
| 501 |
+
</cell>
|
| 502 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 503 |
+
\begin_inset Text
|
| 504 |
+
|
| 505 |
+
\begin_layout Plain Layout
|
| 506 |
+
\begin_inset Formula $g^{\prime}(x)=\frac{1}{\int_{-\infty}^{p}f(t)dt}$
|
| 507 |
+
\end_inset
|
| 508 |
+
|
| 509 |
+
|
| 510 |
+
\end_layout
|
| 511 |
+
|
| 512 |
+
\end_inset
|
| 513 |
+
</cell>
|
| 514 |
+
</row>
|
| 515 |
+
<row>
|
| 516 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 517 |
+
\begin_inset Text
|
| 518 |
+
|
| 519 |
+
\begin_layout Plain Layout
|
| 520 |
+
Cauchy
|
| 521 |
+
\end_layout
|
| 522 |
+
|
| 523 |
+
\end_inset
|
| 524 |
+
</cell>
|
| 525 |
+
<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 526 |
+
\begin_inset Text
|
| 527 |
+
|
| 528 |
+
\begin_layout Plain Layout
|
| 529 |
+
same as the above with the Cauchy distribution
|
| 530 |
+
\end_layout
|
| 531 |
+
|
| 532 |
+
\end_inset
|
| 533 |
+
</cell>
|
| 534 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" usebox="none">
|
| 535 |
+
\begin_inset Text
|
| 536 |
+
|
| 537 |
+
\begin_layout Plain Layout
|
| 538 |
+
|
| 539 |
+
\end_layout
|
| 540 |
+
|
| 541 |
+
\end_inset
|
| 542 |
+
</cell>
|
| 543 |
+
<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 544 |
+
\begin_inset Text
|
| 545 |
+
|
| 546 |
+
\begin_layout Plain Layout
|
| 547 |
+
|
| 548 |
+
\end_layout
|
| 549 |
+
|
| 550 |
+
\end_inset
|
| 551 |
+
</cell>
|
| 552 |
+
</row>
|
| 553 |
+
<row>
|
| 554 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 555 |
+
\begin_inset Text
|
| 556 |
+
|
| 557 |
+
\begin_layout Plain Layout
|
| 558 |
+
CLogLog
|
| 559 |
+
\end_layout
|
| 560 |
+
|
| 561 |
+
\end_inset
|
| 562 |
+
</cell>
|
| 563 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 564 |
+
\begin_inset Text
|
| 565 |
+
|
| 566 |
+
\begin_layout Plain Layout
|
| 567 |
+
\begin_inset Formula $z=\log(-\log p)$
|
| 568 |
+
\end_inset
|
| 569 |
+
|
| 570 |
+
|
| 571 |
+
\end_layout
|
| 572 |
+
|
| 573 |
+
\end_inset
|
| 574 |
+
</cell>
|
| 575 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" usebox="none">
|
| 576 |
+
\begin_inset Text
|
| 577 |
+
|
| 578 |
+
\begin_layout Plain Layout
|
| 579 |
+
\begin_inset Formula $p=e^{-e^{z}}$
|
| 580 |
+
\end_inset
|
| 581 |
+
|
| 582 |
+
|
| 583 |
+
\end_layout
|
| 584 |
+
|
| 585 |
+
\end_inset
|
| 586 |
+
</cell>
|
| 587 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 588 |
+
\begin_inset Text
|
| 589 |
+
|
| 590 |
+
\begin_layout Plain Layout
|
| 591 |
+
\begin_inset Formula $g^{\prime}(p)=-\frac{1}{p\log p}$
|
| 592 |
+
\end_inset
|
| 593 |
+
|
| 594 |
+
|
| 595 |
+
\end_layout
|
| 596 |
+
|
| 597 |
+
\end_inset
|
| 598 |
+
</cell>
|
| 599 |
+
</row>
|
| 600 |
+
</lyxtabular>
|
| 601 |
+
|
| 602 |
+
\end_inset
|
| 603 |
+
|
| 604 |
+
|
| 605 |
+
\end_layout
|
| 606 |
+
|
| 607 |
+
\begin_layout Plain Layout
|
| 608 |
+
\begin_inset Caption
|
| 609 |
+
|
| 610 |
+
\begin_layout Plain Layout
|
| 611 |
+
Link Functions
|
| 612 |
+
\end_layout
|
| 613 |
+
|
| 614 |
+
\end_inset
|
| 615 |
+
|
| 616 |
+
|
| 617 |
+
\end_layout
|
| 618 |
+
|
| 619 |
+
\end_inset
|
| 620 |
+
|
| 621 |
+
|
| 622 |
+
\end_layout
|
| 623 |
+
|
| 624 |
+
\begin_layout Standard
|
| 625 |
+
Initializing the family sets a link property and a variance based on the
|
| 626 |
+
link(?)
|
| 627 |
+
\end_layout
|
| 628 |
+
|
| 629 |
+
\begin_layout Standard
|
| 630 |
+
\begin_inset Float table
|
| 631 |
+
placement H
|
| 632 |
+
wide false
|
| 633 |
+
sideways false
|
| 634 |
+
status open
|
| 635 |
+
|
| 636 |
+
\begin_layout Plain Layout
|
| 637 |
+
\begin_inset Tabular
|
| 638 |
+
<lyxtabular version="3" rows="8" columns="6">
|
| 639 |
+
<features>
|
| 640 |
+
<column alignment="center" valignment="top" width="0.75in">
|
| 641 |
+
<column alignment="center" valignment="top" width="0">
|
| 642 |
+
<column alignment="center" valignment="top" width="0">
|
| 643 |
+
<column alignment="center" valignment="top" width="0">
|
| 644 |
+
<column alignment="center" valignment="top" width="0">
|
| 645 |
+
<column alignment="center" valignment="top" width="0">
|
| 646 |
+
<row>
|
| 647 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 648 |
+
\begin_inset Text
|
| 649 |
+
|
| 650 |
+
\begin_layout Plain Layout
|
| 651 |
+
Family
|
| 652 |
+
\end_layout
|
| 653 |
+
|
| 654 |
+
\end_inset
|
| 655 |
+
</cell>
|
| 656 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 657 |
+
\begin_inset Text
|
| 658 |
+
|
| 659 |
+
\begin_layout Plain Layout
|
| 660 |
+
Weights
|
| 661 |
+
\end_layout
|
| 662 |
+
|
| 663 |
+
\end_inset
|
| 664 |
+
</cell>
|
| 665 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 666 |
+
\begin_inset Text
|
| 667 |
+
|
| 668 |
+
\begin_layout Plain Layout
|
| 669 |
+
Deviance
|
| 670 |
+
\end_layout
|
| 671 |
+
|
| 672 |
+
\end_inset
|
| 673 |
+
</cell>
|
| 674 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 675 |
+
\begin_inset Text
|
| 676 |
+
|
| 677 |
+
\begin_layout Plain Layout
|
| 678 |
+
DevResid
|
| 679 |
+
\end_layout
|
| 680 |
+
|
| 681 |
+
\end_inset
|
| 682 |
+
</cell>
|
| 683 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 684 |
+
\begin_inset Text
|
| 685 |
+
|
| 686 |
+
\begin_layout Plain Layout
|
| 687 |
+
Fitted
|
| 688 |
+
\end_layout
|
| 689 |
+
|
| 690 |
+
\end_inset
|
| 691 |
+
</cell>
|
| 692 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 693 |
+
\begin_inset Text
|
| 694 |
+
|
| 695 |
+
\begin_layout Plain Layout
|
| 696 |
+
Predict
|
| 697 |
+
\end_layout
|
| 698 |
+
|
| 699 |
+
\end_inset
|
| 700 |
+
</cell>
|
| 701 |
+
</row>
|
| 702 |
+
<row>
|
| 703 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 704 |
+
\begin_inset Text
|
| 705 |
+
|
| 706 |
+
\begin_layout Plain Layout
|
| 707 |
+
Base Class
|
| 708 |
+
\end_layout
|
| 709 |
+
|
| 710 |
+
\end_inset
|
| 711 |
+
</cell>
|
| 712 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 713 |
+
\begin_inset Text
|
| 714 |
+
|
| 715 |
+
\begin_layout Plain Layout
|
| 716 |
+
\begin_inset Formula $\frac{1}{(g^{\prime}(\mu))^{2}\cdot V(\mu)}$
|
| 717 |
+
\end_inset
|
| 718 |
+
|
| 719 |
+
|
| 720 |
+
\end_layout
|
| 721 |
+
|
| 722 |
+
\end_inset
|
| 723 |
+
</cell>
|
| 724 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 725 |
+
\begin_inset Text
|
| 726 |
+
|
| 727 |
+
\begin_layout Plain Layout
|
| 728 |
+
\begin_inset Formula $\frac{\sum_{i}\text{DevResid}^{2}}{\text{scale}}$
|
| 729 |
+
\end_inset
|
| 730 |
+
|
| 731 |
+
|
| 732 |
+
\end_layout
|
| 733 |
+
|
| 734 |
+
\end_inset
|
| 735 |
+
</cell>
|
| 736 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 737 |
+
\begin_inset Text
|
| 738 |
+
|
| 739 |
+
\begin_layout Plain Layout
|
| 740 |
+
\begin_inset Formula $\left(Y-\mu\right)\cdot\sqrt{\text{weights}}$
|
| 741 |
+
\end_inset
|
| 742 |
+
|
| 743 |
+
|
| 744 |
+
\end_layout
|
| 745 |
+
|
| 746 |
+
\end_inset
|
| 747 |
+
</cell>
|
| 748 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 749 |
+
\begin_inset Text
|
| 750 |
+
|
| 751 |
+
\begin_layout Plain Layout
|
| 752 |
+
\begin_inset Formula $\mu=g^{-1}(\eta)$
|
| 753 |
+
\end_inset
|
| 754 |
+
|
| 755 |
+
*
|
| 756 |
+
\end_layout
|
| 757 |
+
|
| 758 |
+
\end_inset
|
| 759 |
+
</cell>
|
| 760 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 761 |
+
\begin_inset Text
|
| 762 |
+
|
| 763 |
+
\begin_layout Plain Layout
|
| 764 |
+
\begin_inset Formula $\eta=g(\mu)$
|
| 765 |
+
\end_inset
|
| 766 |
+
|
| 767 |
+
|
| 768 |
+
\end_layout
|
| 769 |
+
|
| 770 |
+
\end_inset
|
| 771 |
+
</cell>
|
| 772 |
+
</row>
|
| 773 |
+
<row>
|
| 774 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 775 |
+
\begin_inset Text
|
| 776 |
+
|
| 777 |
+
\begin_layout Plain Layout
|
| 778 |
+
Poisson
|
| 779 |
+
\end_layout
|
| 780 |
+
|
| 781 |
+
\end_inset
|
| 782 |
+
</cell>
|
| 783 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 784 |
+
\begin_inset Text
|
| 785 |
+
|
| 786 |
+
\begin_layout Plain Layout
|
| 787 |
+
|
| 788 |
+
\end_layout
|
| 789 |
+
|
| 790 |
+
\end_inset
|
| 791 |
+
</cell>
|
| 792 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 793 |
+
\begin_inset Text
|
| 794 |
+
|
| 795 |
+
\begin_layout Plain Layout
|
| 796 |
+
|
| 797 |
+
\end_layout
|
| 798 |
+
|
| 799 |
+
\end_inset
|
| 800 |
+
</cell>
|
| 801 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 802 |
+
\begin_inset Text
|
| 803 |
+
|
| 804 |
+
\begin_layout Plain Layout
|
| 805 |
+
\begin_inset Formula $\text{sign}\left(Y-\mu\right)\sqrt{2Y\log\frac{Y}{\mu}-2(Y-\mu)}$
|
| 806 |
+
\end_inset
|
| 807 |
+
|
| 808 |
+
|
| 809 |
+
\end_layout
|
| 810 |
+
|
| 811 |
+
\end_inset
|
| 812 |
+
</cell>
|
| 813 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 814 |
+
\begin_inset Text
|
| 815 |
+
|
| 816 |
+
\begin_layout Plain Layout
|
| 817 |
+
|
| 818 |
+
\end_layout
|
| 819 |
+
|
| 820 |
+
\end_inset
|
| 821 |
+
</cell>
|
| 822 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 823 |
+
\begin_inset Text
|
| 824 |
+
|
| 825 |
+
\begin_layout Plain Layout
|
| 826 |
+
|
| 827 |
+
\end_layout
|
| 828 |
+
|
| 829 |
+
\end_inset
|
| 830 |
+
</cell>
|
| 831 |
+
</row>
|
| 832 |
+
<row>
|
| 833 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 834 |
+
\begin_inset Text
|
| 835 |
+
|
| 836 |
+
\begin_layout Plain Layout
|
| 837 |
+
Gaussian
|
| 838 |
+
\end_layout
|
| 839 |
+
|
| 840 |
+
\end_inset
|
| 841 |
+
</cell>
|
| 842 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 843 |
+
\begin_inset Text
|
| 844 |
+
|
| 845 |
+
\begin_layout Plain Layout
|
| 846 |
+
|
| 847 |
+
\end_layout
|
| 848 |
+
|
| 849 |
+
\end_inset
|
| 850 |
+
</cell>
|
| 851 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 852 |
+
\begin_inset Text
|
| 853 |
+
|
| 854 |
+
\begin_layout Plain Layout
|
| 855 |
+
|
| 856 |
+
\end_layout
|
| 857 |
+
|
| 858 |
+
\end_inset
|
| 859 |
+
</cell>
|
| 860 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 861 |
+
\begin_inset Text
|
| 862 |
+
|
| 863 |
+
\begin_layout Plain Layout
|
| 864 |
+
\begin_inset Formula $\frac{\left(Y-\mu\right)}{\text{\sqrt{\text{scale}\cdot V\left(\mu\right)}}}$
|
| 865 |
+
\end_inset
|
| 866 |
+
|
| 867 |
+
|
| 868 |
+
\end_layout
|
| 869 |
+
|
| 870 |
+
\end_inset
|
| 871 |
+
</cell>
|
| 872 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 873 |
+
\begin_inset Text
|
| 874 |
+
|
| 875 |
+
\begin_layout Plain Layout
|
| 876 |
+
|
| 877 |
+
\end_layout
|
| 878 |
+
|
| 879 |
+
\end_inset
|
| 880 |
+
</cell>
|
| 881 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 882 |
+
\begin_inset Text
|
| 883 |
+
|
| 884 |
+
\begin_layout Plain Layout
|
| 885 |
+
|
| 886 |
+
\end_layout
|
| 887 |
+
|
| 888 |
+
\end_inset
|
| 889 |
+
</cell>
|
| 890 |
+
</row>
|
| 891 |
+
<row>
|
| 892 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 893 |
+
\begin_inset Text
|
| 894 |
+
|
| 895 |
+
\begin_layout Plain Layout
|
| 896 |
+
Gamma
|
| 897 |
+
\end_layout
|
| 898 |
+
|
| 899 |
+
\end_inset
|
| 900 |
+
</cell>
|
| 901 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 902 |
+
\begin_inset Text
|
| 903 |
+
|
| 904 |
+
\begin_layout Plain Layout
|
| 905 |
+
|
| 906 |
+
\end_layout
|
| 907 |
+
|
| 908 |
+
\end_inset
|
| 909 |
+
</cell>
|
| 910 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 911 |
+
\begin_inset Text
|
| 912 |
+
|
| 913 |
+
\begin_layout Plain Layout
|
| 914 |
+
|
| 915 |
+
\end_layout
|
| 916 |
+
|
| 917 |
+
\end_inset
|
| 918 |
+
</cell>
|
| 919 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 920 |
+
\begin_inset Text
|
| 921 |
+
|
| 922 |
+
\begin_layout Plain Layout
|
| 923 |
+
Bug?
|
| 924 |
+
\end_layout
|
| 925 |
+
|
| 926 |
+
\end_inset
|
| 927 |
+
</cell>
|
| 928 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 929 |
+
\begin_inset Text
|
| 930 |
+
|
| 931 |
+
\begin_layout Plain Layout
|
| 932 |
+
|
| 933 |
+
\end_layout
|
| 934 |
+
|
| 935 |
+
\end_inset
|
| 936 |
+
</cell>
|
| 937 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 938 |
+
\begin_inset Text
|
| 939 |
+
|
| 940 |
+
\begin_layout Plain Layout
|
| 941 |
+
|
| 942 |
+
\end_layout
|
| 943 |
+
|
| 944 |
+
\end_inset
|
| 945 |
+
</cell>
|
| 946 |
+
</row>
|
| 947 |
+
<row>
|
| 948 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 949 |
+
\begin_inset Text
|
| 950 |
+
|
| 951 |
+
\begin_layout Plain Layout
|
| 952 |
+
Binomial
|
| 953 |
+
\end_layout
|
| 954 |
+
|
| 955 |
+
\end_inset
|
| 956 |
+
</cell>
|
| 957 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 958 |
+
\begin_inset Text
|
| 959 |
+
|
| 960 |
+
\begin_layout Plain Layout
|
| 961 |
+
|
| 962 |
+
\end_layout
|
| 963 |
+
|
| 964 |
+
\end_inset
|
| 965 |
+
</cell>
|
| 966 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 967 |
+
\begin_inset Text
|
| 968 |
+
|
| 969 |
+
\begin_layout Plain Layout
|
| 970 |
+
|
| 971 |
+
\end_layout
|
| 972 |
+
|
| 973 |
+
\end_inset
|
| 974 |
+
</cell>
|
| 975 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 976 |
+
\begin_inset Text
|
| 977 |
+
|
| 978 |
+
\begin_layout Plain Layout
|
| 979 |
+
\begin_inset Formula $\text{sign}\left(Y-\mu\right)\sqrt{-2Y\log\frac{\mu}{n}+\left(n-Y\right)\log\left(1-\frac{\mu}{n}\right)}$
|
| 980 |
+
\end_inset
|
| 981 |
+
|
| 982 |
+
|
| 983 |
+
\end_layout
|
| 984 |
+
|
| 985 |
+
\end_inset
|
| 986 |
+
</cell>
|
| 987 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 988 |
+
\begin_inset Text
|
| 989 |
+
|
| 990 |
+
\begin_layout Plain Layout
|
| 991 |
+
|
| 992 |
+
\end_layout
|
| 993 |
+
|
| 994 |
+
\end_inset
|
| 995 |
+
</cell>
|
| 996 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 997 |
+
\begin_inset Text
|
| 998 |
+
|
| 999 |
+
\begin_layout Plain Layout
|
| 1000 |
+
|
| 1001 |
+
\end_layout
|
| 1002 |
+
|
| 1003 |
+
\end_inset
|
| 1004 |
+
</cell>
|
| 1005 |
+
</row>
|
| 1006 |
+
<row>
|
| 1007 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 1008 |
+
\begin_inset Text
|
| 1009 |
+
|
| 1010 |
+
\begin_layout Plain Layout
|
| 1011 |
+
Inverse Gaussian
|
| 1012 |
+
\end_layout
|
| 1013 |
+
|
| 1014 |
+
\end_inset
|
| 1015 |
+
</cell>
|
| 1016 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 1017 |
+
\begin_inset Text
|
| 1018 |
+
|
| 1019 |
+
\begin_layout Plain Layout
|
| 1020 |
+
|
| 1021 |
+
\end_layout
|
| 1022 |
+
|
| 1023 |
+
\end_inset
|
| 1024 |
+
</cell>
|
| 1025 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 1026 |
+
\begin_inset Text
|
| 1027 |
+
|
| 1028 |
+
\begin_layout Plain Layout
|
| 1029 |
+
|
| 1030 |
+
\end_layout
|
| 1031 |
+
|
| 1032 |
+
\end_inset
|
| 1033 |
+
</cell>
|
| 1034 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 1035 |
+
\begin_inset Text
|
| 1036 |
+
|
| 1037 |
+
\begin_layout Plain Layout
|
| 1038 |
+
?
|
| 1039 |
+
\end_layout
|
| 1040 |
+
|
| 1041 |
+
\end_inset
|
| 1042 |
+
</cell>
|
| 1043 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
|
| 1044 |
+
\begin_inset Text
|
| 1045 |
+
|
| 1046 |
+
\begin_layout Plain Layout
|
| 1047 |
+
|
| 1048 |
+
\end_layout
|
| 1049 |
+
|
| 1050 |
+
\end_inset
|
| 1051 |
+
</cell>
|
| 1052 |
+
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
|
| 1053 |
+
\begin_inset Text
|
| 1054 |
+
|
| 1055 |
+
\begin_layout Plain Layout
|
| 1056 |
+
|
| 1057 |
+
\end_layout
|
| 1058 |
+
|
| 1059 |
+
\end_inset
|
| 1060 |
+
</cell>
|
| 1061 |
+
</row>
|
| 1062 |
+
<row>
|
| 1063 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 1064 |
+
\begin_inset Text
|
| 1065 |
+
|
| 1066 |
+
\begin_layout Plain Layout
|
| 1067 |
+
|
| 1068 |
+
\end_layout
|
| 1069 |
+
|
| 1070 |
+
\end_inset
|
| 1071 |
+
</cell>
|
| 1072 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 1073 |
+
\begin_inset Text
|
| 1074 |
+
|
| 1075 |
+
\begin_layout Plain Layout
|
| 1076 |
+
|
| 1077 |
+
\end_layout
|
| 1078 |
+
|
| 1079 |
+
\end_inset
|
| 1080 |
+
</cell>
|
| 1081 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 1082 |
+
\begin_inset Text
|
| 1083 |
+
|
| 1084 |
+
\begin_layout Plain Layout
|
| 1085 |
+
|
| 1086 |
+
\end_layout
|
| 1087 |
+
|
| 1088 |
+
\end_inset
|
| 1089 |
+
</cell>
|
| 1090 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 1091 |
+
\begin_inset Text
|
| 1092 |
+
|
| 1093 |
+
\begin_layout Plain Layout
|
| 1094 |
+
|
| 1095 |
+
\end_layout
|
| 1096 |
+
|
| 1097 |
+
\end_inset
|
| 1098 |
+
</cell>
|
| 1099 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
|
| 1100 |
+
\begin_inset Text
|
| 1101 |
+
|
| 1102 |
+
\begin_layout Plain Layout
|
| 1103 |
+
|
| 1104 |
+
\end_layout
|
| 1105 |
+
|
| 1106 |
+
\end_inset
|
| 1107 |
+
</cell>
|
| 1108 |
+
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
|
| 1109 |
+
\begin_inset Text
|
| 1110 |
+
|
| 1111 |
+
\begin_layout Plain Layout
|
| 1112 |
+
|
| 1113 |
+
\end_layout
|
| 1114 |
+
|
| 1115 |
+
\end_inset
|
| 1116 |
+
</cell>
|
| 1117 |
+
</row>
|
| 1118 |
+
</lyxtabular>
|
| 1119 |
+
|
| 1120 |
+
\end_inset
|
| 1121 |
+
|
| 1122 |
+
|
| 1123 |
+
\end_layout
|
| 1124 |
+
|
| 1125 |
+
\begin_layout Plain Layout
|
| 1126 |
+
\begin_inset Caption
|
| 1127 |
+
|
| 1128 |
+
\begin_layout Plain Layout
|
| 1129 |
+
Families
|
| 1130 |
+
\end_layout
|
| 1131 |
+
|
| 1132 |
+
\end_inset
|
| 1133 |
+
|
| 1134 |
+
|
| 1135 |
+
\end_layout
|
| 1136 |
+
|
| 1137 |
+
\begin_layout Plain Layout
|
| 1138 |
+
*
|
| 1139 |
+
\begin_inset Formula $\eta$
|
| 1140 |
+
\end_inset
|
| 1141 |
+
|
| 1142 |
+
is the linear predictor ie.,
|
| 1143 |
+
\begin_inset Formula $X\beta$
|
| 1144 |
+
\end_inset
|
| 1145 |
+
|
| 1146 |
+
in the generalized linear model
|
| 1147 |
+
\end_layout
|
| 1148 |
+
|
| 1149 |
+
\end_inset
|
| 1150 |
+
|
| 1151 |
+
|
| 1152 |
+
\end_layout
|
| 1153 |
+
|
| 1154 |
+
\end_body
|
| 1155 |
+
\end_document
|
statsmodels/source/archive/docs/GLMNotes.pdf
ADDED
|
Binary file (76.8 kB). View file
|
|
|
statsmodels/source/archive/docs/fix_longtable.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
import sys
|
| 3 |
+
import os
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
BUILDDIR = sys.argv[-1]
|
| 7 |
+
read_file_path = os.path.join(BUILDDIR,'latex','statsmodels.tex')
|
| 8 |
+
write_file_path = os.path.join(BUILDDIR, 'latex','statsmodels_tmp.tex')
|
| 9 |
+
|
| 10 |
+
read_file = open(read_file_path, encoding="utf-8")
|
| 11 |
+
write_file = open(write_file_path, 'w', encoding="utf-8")
|
| 12 |
+
|
| 13 |
+
for line in read_file:
|
| 14 |
+
if 'longtable}{LL' in line:
|
| 15 |
+
line = line.replace('longtable}{LL', 'longtable}{|l|l|')
|
| 16 |
+
write_file.write(line)
|
| 17 |
+
|
| 18 |
+
read_file.close()
|
| 19 |
+
write_file.close()
|
| 20 |
+
|
| 21 |
+
os.remove(read_file_path)
|
| 22 |
+
os.rename(write_file_path, read_file_path)
|
statsmodels/source/archive/docs/source/genericmle.rst.TXT
ADDED
|
File without changes
|
statsmodels/source/archive/tsa/ex_arma.py
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'''
|
| 2 |
+
|
| 3 |
+
does not seem to work so well anymore even with nobs=1000 ???
|
| 4 |
+
works ok if noise variance is large
|
| 5 |
+
'''
|
| 6 |
+
|
| 7 |
+
import numpy as np
|
| 8 |
+
import statsmodels.api as sm
|
| 9 |
+
from statsmodels.tsa.arima_process import arma_generate_sample
|
| 10 |
+
from statsmodels.tsa.arma_mle import Arma as Arma
|
| 11 |
+
from statsmodels.tsa.arima_process import ARIMA as ARIMA_old
|
| 12 |
+
from statsmodels.sandbox.tsa.garch import Arma as Armamle_old
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
print("\nExample 1")
|
| 16 |
+
ar = [1.0, -0.6, 0.1]
|
| 17 |
+
ma = [1.0, 0.5, 0.3]
|
| 18 |
+
nobs = 1000
|
| 19 |
+
y22 = arma_generate_sample(ar, ma, nobs+1000, 0.5)[-nobs:]
|
| 20 |
+
y22 -= y22.mean()
|
| 21 |
+
start_params = [0.1, 0.1, 0.1, 0.1]
|
| 22 |
+
start_params_lhs = [-0.1, -0.1, 0.1, 0.1]
|
| 23 |
+
|
| 24 |
+
print('truelhs', np.r_[ar[1:], ma[1:]])
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
###bug in current version, fixed in Skipper and 1 more
|
| 31 |
+
###arr[1:q,:] = params[p+k:p+k+q] # p to p+q short params are MA coeffs
|
| 32 |
+
###ValueError: array dimensions are not compatible for copy
|
| 33 |
+
##from statsmodels.tsa.arima import ARMA as ARMA_kf
|
| 34 |
+
##arma22 = ARMA_kf(y22, constant=False, order=(2,2))
|
| 35 |
+
##res = arma22.fit(start_params=start_params)
|
| 36 |
+
##print res.params
|
| 37 |
+
|
| 38 |
+
print('\nARIMA new')
|
| 39 |
+
arest2 = Arma(y22)
|
| 40 |
+
|
| 41 |
+
naryw = 4 #= 30
|
| 42 |
+
resyw = sm.regression.yule_walker(y22, order=naryw, inv=True)
|
| 43 |
+
arest2.nar = naryw
|
| 44 |
+
arest2.nma = 0
|
| 45 |
+
e = arest2.geterrors(np.r_[1, -resyw[0]])
|
| 46 |
+
x=sm.tsa.tsatools.lagmat2ds(np.column_stack((y22,e)),3,dropex=1,
|
| 47 |
+
trim='both')
|
| 48 |
+
yt = x[:,0]
|
| 49 |
+
xt = x[:,1:]
|
| 50 |
+
res_ols = sm.OLS(yt, xt).fit()
|
| 51 |
+
print('hannan_rissannen')
|
| 52 |
+
print(res_ols.params)
|
| 53 |
+
start_params = res_ols.params
|
| 54 |
+
start_params_mle = np.r_[-res_ols.params[:2],
|
| 55 |
+
res_ols.params[2:],
|
| 56 |
+
#res_ols.scale]
|
| 57 |
+
#areste.var()]
|
| 58 |
+
np.sqrt(res_ols.scale)]
|
| 59 |
+
#need to iterate, ar1 too large ma terms too small
|
| 60 |
+
#fix large parameters, if hannan_rissannen are too large
|
| 61 |
+
start_params_mle[:-1] = (np.sign(start_params_mle[:-1])
|
| 62 |
+
* np.minimum(np.abs(start_params_mle[:-1]),0.75))
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
print('conditional least-squares')
|
| 66 |
+
|
| 67 |
+
#print rhohat2
|
| 68 |
+
print('with mle')
|
| 69 |
+
arest2.nar = 2
|
| 70 |
+
arest2.nma = 2
|
| 71 |
+
#
|
| 72 |
+
res = arest2.fit_mle(start_params=start_params_mle, method='nm') #no order in fit
|
| 73 |
+
print(res.params)
|
| 74 |
+
rhohat2, cov_x2a, infodict, mesg, ier = arest2.fit((2,2))
|
| 75 |
+
print('\nARIMA_old')
|
| 76 |
+
arest = ARIMA_old(y22)
|
| 77 |
+
rhohat1, cov_x1, infodict, mesg, ier = arest.fit((2,0,2))
|
| 78 |
+
print(rhohat1)
|
| 79 |
+
print(np.sqrt(np.diag(cov_x1)))
|
| 80 |
+
err1 = arest.errfn(x=y22)
|
| 81 |
+
print(np.var(err1))
|
| 82 |
+
print('bse ls, formula not checked')
|
| 83 |
+
print(np.sqrt(np.diag(cov_x1))*err1.std())
|
| 84 |
+
print('bsejac for mle')
|
| 85 |
+
#print arest2.bsejac
|
| 86 |
+
#TODO:check bsejac raises singular matrix linalg error
|
| 87 |
+
#in model.py line620: return np.linalg.inv(np.dot(jacv.T, jacv))
|
| 88 |
+
|
| 89 |
+
print('\nyule-walker')
|
| 90 |
+
print(sm.regression.yule_walker(y22, order=2, inv=True))
|
| 91 |
+
|
| 92 |
+
print('\nArmamle_old')
|
| 93 |
+
arma1 = Armamle_old(y22)
|
| 94 |
+
arma1.nar = 2
|
| 95 |
+
arma1.nma = 2
|
| 96 |
+
#arma1res = arma1.fit(start_params=np.r_[-0.5, -0.1, 0.1, 0.1, 0.5], method='fmin')
|
| 97 |
+
# maxfun=1000)
|
| 98 |
+
arma1res = arma1.fit(start_params=res.params*0.7, method='fmin')
|
| 99 |
+
print(arma1res.params)
|
statsmodels/source/archive/tsa/notes_organize.txt
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
scikits.statsmodels.sandbox.tsa.kalmanf
|
| 5 |
+
---------------------------------------
|
| 6 |
+
ARMA : ARMA model using the exact Kalman Filter
|
| 7 |
+
StateSpaceModel :
|
| 8 |
+
kalmanfilter : Returns the negative log-likelihood of y
|
| 9 |
+
conditional on the information set
|
| 10 |
+
kalmansmooth :
|
| 11 |
+
updatematrices : TODO: change API, update names
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
scikits.statsmodels.sandbox.tsa.arima
|
| 15 |
+
-------------------------------------
|
| 16 |
+
|
| 17 |
+
runs ok, no refactoring bugs
|
| 18 |
+
has examples and monte carlo that can be split up into example files
|
| 19 |
+
|
| 20 |
+
ARIMA : currently ARMA only, no differencing used - no I
|
| 21 |
+
arma2ar : get the AR representation of an ARMA process
|
| 22 |
+
arma2ma : get the impulse response function (MA representation) for
|
| 23 |
+
ARMA process
|
| 24 |
+
arma_acf : theoretical autocovariance function of ARMA process
|
| 25 |
+
arma_acovf : theoretical autocovariance function of ARMA process
|
| 26 |
+
arma_generate_sample : generate an random sample of an ARMA process
|
| 27 |
+
arma_impulse_response : get the impulse response function (MA
|
| 28 |
+
representation) for ARMA process
|
| 29 |
+
arma_pacf : partial autocorrelation function of an ARMA process
|
| 30 |
+
deconvolve : Deconvolves divisor out of signal, division of
|
| 31 |
+
polynomials for n terms
|
| 32 |
+
index2lpol : expand coefficients to lag poly
|
| 33 |
+
lpol2index : remove zeros from lagpolynomial, squeezed
|
| 34 |
+
representation with index
|
| 35 |
+
mcarma22 : run Monte Carlo for ARMA(2,2)
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
scikits.statsmodels.sandbox.tsa.varma
|
| 39 |
+
-------------------------------------
|
| 40 |
+
|
| 41 |
+
just filter experiments
|
| 42 |
+
needed to fix import for acf example
|
| 43 |
+
|
| 44 |
+
VAR : multivariate linear filter
|
| 45 |
+
VARMA : multivariate linear filter
|
| 46 |
+
|
| 47 |
+
scikits.statsmodels.sandbox.tsa.varma_tools
|
| 48 |
+
-------------------------------------------
|
| 49 |
+
|
| 50 |
+
Helper and filter functions for VAR and VARMA, and basic VAR class
|
| 51 |
+
needed import fix in top of module
|
| 52 |
+
maybe rename to varma_process
|
| 53 |
+
in "main" example for VarmaPoly, and some Var fit
|
| 54 |
+
Var could be used for Granger Causality tests, otherwise it's pretty limited
|
| 55 |
+
|
| 56 |
+
Var :
|
| 57 |
+
simultaneous OLS estimation
|
| 58 |
+
VarmaPoly : class to keep track of Varma polynomial format
|
| 59 |
+
working with and transforming VARMA Lag-Polynomials (3d)
|
| 60 |
+
ar2full : make reduced lagpolynomial into a right side lagpoly array
|
| 61 |
+
ar2lhs : convert full (rhs) lagpolynomial into a reduced, left side
|
| 62 |
+
lagpoly array
|
| 63 |
+
padone : pad with zeros along one axis, currently only axis=0
|
| 64 |
+
trimone : trim number of array elements along one axis
|
| 65 |
+
varfilter : apply an autoregressive filter to a series x
|
| 66 |
+
vargenerate : generate an VAR process with errors u
|
| 67 |
+
varinversefilter : creates inverse ar filter (MA representation) recursively
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
scikits.statsmodels.sandbox.tsa.try_fi
|
| 71 |
+
--------------------------------------
|
| 72 |
+
|
| 73 |
+
(not included by script that generates this list)
|
| 74 |
+
various functions to build lag-polynomials for fractional and seasonal integration
|
| 75 |
+
and function ar2arma minimizes distance in terms of impulse response function
|
| 76 |
+
|
| 77 |
+
move these to a module or rename
|
| 78 |
+
|
| 79 |
+
scikits.statsmodels.sandbox.tsa.try_var_convolve.py
|
| 80 |
+
---------------------------------------------------
|
| 81 |
+
|
| 82 |
+
(not included by script that generates this list)
|
| 83 |
+
two functions:
|
| 84 |
+
arfilter : autoregressive filter for 1d, 2d and 3d
|
| 85 |
+
fftconvolve : multidimensional filtering using fft
|
| 86 |
+
|
| 87 |
+
many examples, but I'm not sure this (fft) is correct
|
| 88 |
+
incompletely copied for interpreter session
|
| 89 |
+
currently raises exception because a variable (imp) is not defined
|
| 90 |
+
|
| 91 |
+
scikits.statsmodels.sandbox.tsa.try_var_convolve.py
|
| 92 |
+
---------------------------------------------------
|
| 93 |
+
|
| 94 |
+
(not included by script that generates this list)
|
| 95 |
+
includes functions for
|
| 96 |
+
detrending,
|
| 97 |
+
(theoretical) acovf and similar for special cases
|
| 98 |
+
acf plot functions
|
| 99 |
+
|
| 100 |
+
(partially copied from matplotlib.mlab)
|
| 101 |
+
|
| 102 |
+
currently exception: FIXED
|
| 103 |
+
uses arima.ARIMA class without data in constructor, and order now has 3 values and
|
| 104 |
+
is keyword with tuple as value
|
| 105 |
+
|
| 106 |
+
move plot function to new graphics directory ?
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
scikits.statsmodels.sandbox.regression.mle
|
| 110 |
+
------------------------------------------
|
| 111 |
+
|
| 112 |
+
one refactoring bug fixed, because arima.ARIMA needs data, use class method instead
|
| 113 |
+
runs without exception, but I did not look at any results
|
| 114 |
+
"main" has quite a lot
|
| 115 |
+
|
| 116 |
+
AR : Notes
|
| 117 |
+
Arma : univariate Autoregressive Moving Average model
|
| 118 |
+
Garch : Garch model gjrgarch (t-garch)
|
| 119 |
+
Garch0 : Garch model,
|
| 120 |
+
GarchX : Garch model,
|
| 121 |
+
LikelihoodModel : Likelihood model is a subclass of Model.
|
| 122 |
+
TSMLEModel : univariate time series model for estimation with
|
| 123 |
+
maximum likelihood
|
| 124 |
+
garchplot :
|
| 125 |
+
generate_garch : simulate standard garch
|
| 126 |
+
generate_gjrgarch : simulate gjr garch process
|
| 127 |
+
generate_kindofgarch : simulate garch like process but not squared
|
| 128 |
+
errors in arma
|
| 129 |
+
gjrconvertparams : flat to matrix
|
| 130 |
+
loglike_GARCH11 :
|
| 131 |
+
miso_lfilter : use nd convolution to merge inputs,
|
| 132 |
+
normloglike :
|
| 133 |
+
test_gjrgarch :
|
| 134 |
+
test_misofilter :
|
| 135 |
+
|
| 136 |
+
Other
|
| 137 |
+
-----
|
| 138 |
+
diffusion: continuous time processes, produce nice graphs but parameterization is
|
| 139 |
+
a bit inconsistent.
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
script files
|
| 143 |
+
============
|
| 144 |
+
|
| 145 |
+
sandbox/tsa/try_arma_more.py
|
| 146 |
+
----------------------------
|
| 147 |
+
|
| 148 |
+
imports scikits.talkbox which is not compiled against my current numpy and does not
|
| 149 |
+
run
|
| 150 |
+
contains
|
| 151 |
+
arma_periodogram : theoretical periodogram
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
Proposed Structure (preliminary)
|
| 155 |
+
================================
|
| 156 |
+
|
| 157 |
+
arima_estimation
|
| 158 |
+
----------------
|
| 159 |
+
ARIMA class for estimation, wrapper or containing different estimators
|
| 160 |
+
other wrappers: here or in separate ???
|
| 161 |
+
- support for choosing lag-length
|
| 162 |
+
|
| 163 |
+
|
| 164 |
+
arma_process
|
| 165 |
+
------------
|
| 166 |
+
all theoretical properties for given parameters
|
| 167 |
+
simulation method with options: initial conditions, errors, (?) not sure what else
|
| 168 |
+
|
| 169 |
+
varma_process
|
| 170 |
+
-------------
|
| 171 |
+
including VarmaPoly and impulse response functions
|
| 172 |
+
|
| 173 |
+
filters
|
| 174 |
+
-------
|
| 175 |
+
miso_filter (should be in cython eventually)
|
| 176 |
+
ar_filter : fast VAR filter with convolution or fft convolution
|
| 177 |
+
(not sure what's the relationship between the two)
|
| 178 |
+
others ???
|
| 179 |
+
|
| 180 |
+
stattools
|
| 181 |
+
---------
|
| 182 |
+
empirical properties
|
| 183 |
+
acf, ...
|
| 184 |
+
|
| 185 |
+
tsatools
|
| 186 |
+
--------
|
| 187 |
+
helper functions
|
| 188 |
+
lagmat
|
| 189 |
+
detrend ???
|
| 190 |
+
|
| 191 |
+
others, unclear
|
| 192 |
+
---------------
|
| 193 |
+
???
|
| 194 |
+
|
| 195 |
+
open questions
|
| 196 |
+
==============
|
| 197 |
+
|
| 198 |
+
support for exog
|
| 199 |
+
----------------
|
| 200 |
+
is incomplete or missing from some implementations
|
| 201 |
+
not clear parameterization
|
| 202 |
+
- ARMAX A(L)y_t = C(L)x_t + B(L)e_t
|
| 203 |
+
- ARMAX-simple A(L)y_t = beta x_t + B(L)e_t
|
| 204 |
+
Note: covers previous version by extending x_t
|
| 205 |
+
|
| 206 |
+
- ARMA residuals y_t = beta x_t + u_t, and A(L)u_t = B(L)e_t
|
| 207 |
+
- ARMAX 2-step A(L)(y_t - beta x_t) = B(L)e_t
|
| 208 |
+
Note: looks the same as ARMA residuals, implies
|
| 209 |
+
A(L)y_t = A(L)x_t + B(L)e_t
|
| 210 |
+
|
| 211 |
+
- ARMAX A(L)(y_t - A^{-1}(L) C(L) x_t) = B(L)e_t
|
| 212 |
+
this does not look useful, unless we cutoff A^{-1}(L)
|
| 213 |
+
|
| 214 |
+
problem: signal.lfilter can only handle ARMAX residuals model (I think)
|
| 215 |
+
deterministic trend have ARMAX-simple model, e.g. in unit root tests
|
| 216 |
+
|
| 217 |
+
|
| 218 |
+
support for seasonal and "sparse" lag-polynomials
|
| 219 |
+
-------------------------------------------------
|
| 220 |
+
- fit functions need support for different lag structures,
|
| 221 |
+
e.g. zeros, multiplicative
|
| 222 |
+
- support for pre-filters, e.g. (seasonal) differencing
|
| 223 |
+
|
| 224 |
+
|
| 225 |
+
|
| 226 |
+
|
| 227 |
+
|
statsmodels/source/azure-pipelines.yml
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#passing-parameters
|
| 2 |
+
|
| 3 |
+
trigger:
|
| 4 |
+
- main
|
| 5 |
+
schedules:
|
| 6 |
+
- cron: "0 6 * * 1" # Each Monday at 06:00 UTC
|
| 7 |
+
displayName: Weekly scheduled run
|
| 8 |
+
branches:
|
| 9 |
+
include: [main, maintenance/0.13.x]
|
| 10 |
+
always: true
|
| 11 |
+
|
| 12 |
+
variables:
|
| 13 |
+
MKL_NUM_THREADS: 1
|
| 14 |
+
NUMEXPR_NUM_THREADS: 1
|
| 15 |
+
OMP_NUM_THREADS: 1
|
| 16 |
+
VML_NUM_THREADS: 1
|
| 17 |
+
OPENBLAS_NUM_THREADS: 1
|
| 18 |
+
PYTHONHASHSEED: 0 # Ensure tests are correctly gathered by xdist
|
| 19 |
+
USE_MATPLOTLIB: true
|
| 20 |
+
|
| 21 |
+
jobs:
|
| 22 |
+
|
| 23 |
+
- template: tools/ci/azure/azure_template_posix.yml
|
| 24 |
+
parameters:
|
| 25 |
+
name: Linux
|
| 26 |
+
vmImage: ubuntu-latest
|
| 27 |
+
|
| 28 |
+
- template: tools/ci/azure/azure_template_posix.yml
|
| 29 |
+
parameters:
|
| 30 |
+
name: macOS
|
| 31 |
+
vmImage: macOS-latest
|
| 32 |
+
|
| 33 |
+
- template: tools/ci/azure/azure_template_windows.yml
|
| 34 |
+
parameters:
|
| 35 |
+
name: Windows
|
| 36 |
+
vmImage: windows-latest
|
statsmodels/source/codecov.yml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
codecov:
|
| 2 |
+
branch: main
|
| 3 |
+
notify:
|
| 4 |
+
require_ci_to_pass: no
|
| 5 |
+
after_n_builds: 1
|
| 6 |
+
|
| 7 |
+
comment: off
|
| 8 |
+
|
| 9 |
+
coverage:
|
| 10 |
+
status:
|
| 11 |
+
project:
|
| 12 |
+
default:
|
| 13 |
+
target: '82'
|
| 14 |
+
patch:
|
| 15 |
+
default:
|
| 16 |
+
target: '50'
|
statsmodels/source/docs/Makefile
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Minimal makefile for Sphinx documentation
|
| 2 |
+
#
|
| 3 |
+
|
| 4 |
+
# You can set these variables from the command line, and also
|
| 5 |
+
# from the environment for the first two.
|
| 6 |
+
SPHINXOPTS ?=
|
| 7 |
+
SPHINXBUILD ?= sphinx-build
|
| 8 |
+
SOURCEDIR = source
|
| 9 |
+
BUILDDIR = build
|
| 10 |
+
|
| 11 |
+
PAPER =
|
| 12 |
+
TOOLSPATH = ../tools/
|
| 13 |
+
DATASETBUILD = dataset_rst.py
|
| 14 |
+
NOTEBOOKBUILD = nbgenerate.py
|
| 15 |
+
|
| 16 |
+
# Internal variables.
|
| 17 |
+
PAPEROPT_a4 = -D latex_paper_size=a4
|
| 18 |
+
PAPEROPT_letter = -D latex_paper_size=letter
|
| 19 |
+
|
| 20 |
+
# Put it first so that "make" without argument is like "make help".
|
| 21 |
+
help:
|
| 22 |
+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(O)
|
| 23 |
+
|
| 24 |
+
.PHONY: help Makefile
|
| 25 |
+
|
| 26 |
+
html:
|
| 27 |
+
# make directories for images
|
| 28 |
+
@echo "Make static directory for images"
|
| 29 |
+
mkdir -p $(BUILDDIR)/html/_static
|
| 30 |
+
# generate the examples rst files
|
| 31 |
+
@echo "Generating datasets from installed statsmodels.datasets"
|
| 32 |
+
$(TOOLSPATH)$(DATASETBUILD)
|
| 33 |
+
@echo "Executing notebooks from examples/notebooks folder"
|
| 34 |
+
mkdir -p $(BUILDDIR)/source/examples/notebooks/generated
|
| 35 |
+
# Black list notebooks from doc build here
|
| 36 |
+
$(TOOLSPATH)$(NOTEBOOKBUILD) --parallel --report-errors --skip-existing --execute-only --execution-blacklist statespace_custom_models
|
| 37 |
+
@echo "Running sphinx-build"
|
| 38 |
+
@echo @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(O)
|
| 39 |
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(O)
|
| 40 |
+
|
| 41 |
+
# Catch-all target: route all unknown targets to Sphinx using the new
|
| 42 |
+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
| 43 |
+
%: Makefile
|
| 44 |
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(O)
|
statsmodels/source/docs/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Documentation Guidelines: Sphinx and Jupyter Notebooks Integration
|
| 2 |
+
|
| 3 |
+
We use a combination of sphinx and Jupyter notebooks for the documentation.
|
| 4 |
+
Jupyter notebooks should be used for longer, self-contained examples demonstrating
|
| 5 |
+
a topic.
|
| 6 |
+
Sphinx is nice because we get the tables of contents and API documentation.
|
| 7 |
+
|
| 8 |
+
## Build Process
|
| 9 |
+
|
| 10 |
+
Building the docs requires a few additional dependencies. You can get most
|
| 11 |
+
of these with
|
| 12 |
+
|
| 13 |
+
```bash
|
| 14 |
+
|
| 15 |
+
python -m pip install -e .[docs]
|
| 16 |
+
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
From the root of the project.
|
| 20 |
+
Some of the examples rely on `rpy2` to execute R code from the notebooks.
|
| 21 |
+
It's not included in the setup requires since it's known to be difficult to
|
| 22 |
+
install.
|
| 23 |
+
|
| 24 |
+
To generate the HTML docs, run ``make html`` from the ``docs`` directory.
|
| 25 |
+
This executes a few distinct builds
|
| 26 |
+
|
| 27 |
+
1. datasets
|
| 28 |
+
2. notebooks
|
| 29 |
+
3. sphinx
|
| 30 |
+
|
| 31 |
+
# Notebook Builds
|
| 32 |
+
|
| 33 |
+
We're using `nbconvert` to execute the notebooks, and then convert them
|
| 34 |
+
to HTML. The conversion is handled by `statsmodels/tools/nbgenerate.py`.
|
| 35 |
+
The default python kernel (embedded in the notebook) is `python3`.
|
| 36 |
+
You need at least `nbconvert==4.2.0` to specify a non-default kernel,
|
| 37 |
+
which can be passed in the Makefile.
|
statsmodels/source/docs/make.bat
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@ECHO OFF
|
| 2 |
+
|
| 3 |
+
pushd %~dp0
|
| 4 |
+
|
| 5 |
+
REM Command file for Sphinx documentation
|
| 6 |
+
|
| 7 |
+
if "%SPHINXBUILD%" == "" (
|
| 8 |
+
set SPHINXBUILD=sphinx-build
|
| 9 |
+
)
|
| 10 |
+
set SOURCEDIR=source
|
| 11 |
+
set BUILDDIR=build
|
| 12 |
+
|
| 13 |
+
set TOOLSPATH=../tools
|
| 14 |
+
set DATASETBUILD=dataset_rst.py
|
| 15 |
+
set NOTEBOOKBUILD=nbgenerate.py
|
| 16 |
+
|
| 17 |
+
if "%1" == "" goto help
|
| 18 |
+
|
| 19 |
+
%SPHINXBUILD% >NUL 2>NUL
|
| 20 |
+
if errorlevel 9009 (
|
| 21 |
+
echo.
|
| 22 |
+
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
| 23 |
+
echo.installed, then set the SPHINXBUILD environment variable to point
|
| 24 |
+
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
| 25 |
+
echo.may add the Sphinx directory to PATH.
|
| 26 |
+
echo.
|
| 27 |
+
echo.If you don't have Sphinx installed, grab it from
|
| 28 |
+
echo.http://sphinx-doc.org/
|
| 29 |
+
exit /b 1
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
if "%1" == "html" (
|
| 33 |
+
echo mkdir %BUILDDIR%\html\_static
|
| 34 |
+
mkdir %BUILDDIR%\html\_static
|
| 35 |
+
echo python %TOOLSPATH%/%NOTEBOOKBUILD% --parallel --report-errors --skip-existing
|
| 36 |
+
rem Black list notebooks from doc build here
|
| 37 |
+
python %TOOLSPATH%/%NOTEBOOKBUILD% --parallel --report-errors --skip-existing --execution-blacklist statespace_custom_models
|
| 38 |
+
echo python %TOOLSPATH%/%DATASETBUILD%
|
| 39 |
+
python %TOOLSPATH%/%DATASETBUILD%
|
| 40 |
+
)
|
| 41 |
+
|
| 42 |
+
echo %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
| 43 |
+
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
| 44 |
+
goto end
|
| 45 |
+
|
| 46 |
+
if "%1" == "html" (
|
| 47 |
+
echo xcopy /s /y source\examples\notebooks\generated\*.html %BUILDDIR%\html\examples\notebooks\generated\*.html
|
| 48 |
+
xcopy /s /y source\examples\notebooks\generated\*.html %BUILDDIR%\html\examples\notebooks\generated\*.html
|
| 49 |
+
if NOT EXIST %BUILDDIR%/html/examples/notebooks/generated mkdir %BUILDDIR%\html\examples\notebooks\generated
|
| 50 |
+
)
|
| 51 |
+
|
| 52 |
+
goto end
|
| 53 |
+
|
| 54 |
+
:help
|
| 55 |
+
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
| 56 |
+
|
| 57 |
+
:end
|
| 58 |
+
popd
|
statsmodels/source/docs/source/_static/blogger.png
ADDED
|
statsmodels/source/docs/source/_static/blogger_sm.png
ADDED
|
statsmodels/source/docs/source/_static/bullet.gif
ADDED
|
statsmodels/source/docs/source/_static/closelabel.png
ADDED
|
statsmodels/source/docs/source/_static/facebox.css
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#facebox {
|
| 2 |
+
position: absolute;
|
| 3 |
+
top: 0;
|
| 4 |
+
left: 0;
|
| 5 |
+
z-index: 100;
|
| 6 |
+
text-align: left;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
#facebox .popup{
|
| 11 |
+
position:relative;
|
| 12 |
+
border:3px solid rgba(0,0,0,0);
|
| 13 |
+
-webkit-border-radius:5px;
|
| 14 |
+
-moz-border-radius:5px;
|
| 15 |
+
border-radius:5px;
|
| 16 |
+
-webkit-box-shadow:0 0 18px rgba(0,0,0,0.4);
|
| 17 |
+
-moz-box-shadow:0 0 18px rgba(0,0,0,0.4);
|
| 18 |
+
box-shadow:0 0 18px rgba(0,0,0,0.4);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
#facebox .content {
|
| 22 |
+
display:table;
|
| 23 |
+
width: 370px;
|
| 24 |
+
padding: 10px;
|
| 25 |
+
background: #fff;
|
| 26 |
+
-webkit-border-radius:4px;
|
| 27 |
+
-moz-border-radius:4px;
|
| 28 |
+
border-radius:4px;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
#facebox .content > p:first-child{
|
| 32 |
+
margin-top:0;
|
| 33 |
+
}
|
| 34 |
+
#facebox .content > p:last-child{
|
| 35 |
+
margin-bottom:0;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
#facebox .close{
|
| 39 |
+
position:absolute;
|
| 40 |
+
top:5px;
|
| 41 |
+
right:5px;
|
| 42 |
+
padding:2px;
|
| 43 |
+
background:#fff;
|
| 44 |
+
}
|
| 45 |
+
#facebox .close img{
|
| 46 |
+
opacity:0.3;
|
| 47 |
+
}
|
| 48 |
+
#facebox .close:hover img{
|
| 49 |
+
opacity:1.0;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
#facebox .loading {
|
| 53 |
+
text-align: center;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
#facebox .image {
|
| 57 |
+
text-align: center;
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
#facebox img {
|
| 61 |
+
border: 0;
|
| 62 |
+
margin: 0;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
#facebox_overlay {
|
| 66 |
+
position: fixed;
|
| 67 |
+
top: 0px;
|
| 68 |
+
left: 0px;
|
| 69 |
+
height:100%;
|
| 70 |
+
width:100%;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.facebox_hide {
|
| 74 |
+
z-index:-100;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
.facebox_overlayBG {
|
| 78 |
+
background-color: #000;
|
| 79 |
+
z-index: 99;
|
| 80 |
+
}
|