Agent API (window.midas)
AI エージェントや Playwright などの外部ツールから MIDAS をプログラムで操作するための API です。
概要
window.midas は、ブラウザの DevTools コンソールや Playwright などの自動化ツールから MIDAS の機能にアクセスするための JavaScript API です。データセットの操作、タブの管理、統計モデルの実行、レポートの編集などを行えます。
API が利用可能なタイミング
- プロジェクト画面: すべてのメソッドが利用可能
- ランチャー画面:
help()のみ利用可能。他のメソッドはNO_PROJECTエラーを返す
プロジェクトの作成と開始は GUI で行います。Playwright で自動化する場合は、GUI 操作でプロジェクトを開いた後に API を使用してください。
使い方
DevTools コンソールから使う
ブラウザの DevTools を開き、コンソールで直接呼び出します。
// プロジェクトの状態を確認
const result = await window.midas.status();
console.log(result.data);
// { datasets: 3, tabs: 2, models: 1, ... }
Playwright から使う
const result = await page.evaluate(async () => {
return await window.midas.datasets.list();
});
console.log(result.data);
// [{ id: '...', name: 'Iris', rows: 150, columns: 5, type: 'primary' }, ...]
ヘルプを表示する
help() メソッドで、利用可能なメソッドの一覧とシグネチャを確認できます。
const help = window.midas.help();
console.log(help);
レスポンス形式
help() を除くすべてのメソッドは非同期で、APIResult<T> 型の統一されたレスポンスを返します。help() のみ同期メソッドで、HelpInfo オブジェクトを直接返します。
// 成功時
{
success: true,
message: "Found 3 datasets",
data: [...]
}
// 失敗時
{
success: false,
message: "Dataset not found",
error: {
code: "DATASET_NOT_FOUND",
message: "No dataset with ID 'abc'",
suggestion: "Use datasets.list() to see available datasets"
}
}
warnings フィールドが含まれる場合もあります。処理自体は成功していますが、注意が必要な点を示します。たとえば models.run() ではデータ準備段階の警告がトップレベルの warnings に、モデル実行時の警告が data.warnings に格納されます。
// warnings を含む成功レスポンスの例
{
success: true,
message: "Model run completed",
warnings: ["3 rows with missing values were excluded from analysis"],
data: {
runId: '...',
warnings: ["Convergence achieved but Hessian is nearly singular"],
...
}
}
メソッド一覧
status()
プロジェクトの状態を取得します。
const result = await window.midas.status();
// result.data:
// {
// datasets: 3,
// derivedDatasets: 1,
// tabs: 2,
// models: 1,
// reports: 1,
// activeDatasetId: 'ds_001',
// activeTabId: 'tab_001'
// }
project
project.save()
プロジェクトをブラウザストレージに保存します。保存先の詳細はプライバシーとセキュリティを参照してください。
await window.midas.project.save();
サンドボックスモード(デモやトライアルなど、永続化が無効なプロジェクト)では SANDBOX_MODE エラーを返します。
project.exportMds()
プロジェクトを MDS(MIDAS のプロジェクトファイル形式)バイナリとしてエクスポートします。エクスポートされたデータは ArrayBuffer として返されます。
const result = await window.midas.project.exportMds();
// result.data: { data: ArrayBuffer, size: 12345, suggestedFilename: 'MyProject.mds' }
project.downloadMds()
プロジェクトを MDS ファイルとしてブラウザからダウンロードします。
const result = await window.midas.project.downloadMds();
// result.data: { filename: 'MyProject.mds' }
datasets
datasets.list()
プロジェクト内のデータセット一覧を取得します。
const result = await window.midas.datasets.list();
// result.data: [{ id, name, rows, columns, type, parentIds? }, ...]
type は 'primary'(読み込んだデータ)、'derived'(SQL やその他の操作で作成)、'ephemeral'(一時的)のいずれかです。parentIds は派生データセットの場合に、元となったデータセットの ID を含みます。
datasets.describe(id)
データセットの詳細情報を取得します。
const result = await window.midas.datasets.describe('ds_001');
// result.data:
// {
// id: 'ds_001',
// name: 'Iris',
// type: 'primary',
// rowCount: 150,
// columns: [
// { id: 'col_001', name: 'sepal_length', type: 'float64', scale: 'ratio' },
// { id: 'col_002', name: 'species', type: 'string', scale: 'nominal', enumName: 'species_enum' },
// ...
// ]
// }
columns の各要素には id、name、type が含まれます。scale と enumName はオプショナルです。enumName は列の型が enum の場合に、対応する enum 定義の名前を返します。
datasets.query(sql, name, options?)
SQL クエリを実行し、結果を新しい派生データセットとして保存します。SQL は DuckDB の構文に従います。
const result = await window.midas.datasets.query(
'SELECT species, AVG(sepal_length) as avg_sl FROM Iris GROUP BY species',
'Species Averages'
);
// result.data: { datasetId: 'derived_...', name: 'Species Averages', rowCount: 3, columnCount: 2, overwrote: false }
テーブル名はデータセット名から自動解決されます(大文字小文字を区別しません)。日本語やスペースを含むデータセット名は、SQL 内でダブルクォートで囲んでください(例: SELECT * FROM "売上データ")。デフォルトでは同名の派生データセットが存在する場合に in-place で更新します。既存のデータセット ID が維持されるため、そのデータセットを参照しているタブや依存する派生データセットは影響を受けません。options.overwrite を false にすると、同名の派生データセットが既に存在する場合にエラーを返します。
出力名が SQL の FROM / JOIN で参照しているデータセット、またはそれらの祖先(参照先データセットの派生元)のいずれかと同じ ID に解決される場合、依存関係の循環を生む操作になるため SELF_REFERENCE エラーを返します(例: query('SELECT species, COUNT(*) FROM Iris GROUP BY species', 'Iris')、または Iris → A → B のチェーンで query('SELECT * FROM B', 'A'))。また、出力名がプライマリデータセットの名前と一致する場合は NAME_CONFLICT エラーを返します(プライマリを派生で上書きしません)。同名の派生データセットが異なるメソッドで作成されている場合(例: addColumns で作成したデータセットを query で上書きしようとした場合)は OPERATION_TYPE_MISMATCH エラーを返します。
受け付けられるのは単一の SELECT 文のみです。セミコロン区切りの複数ステートメントや DML/DDL は拒否されます。外部からデータを取り込む場合は datasets.importFromURL または datasets.importFromBuffer を使ってください。
datasets.importFromURL(url, options?)
外部 URL から CSV/TSV ファイルをフェッチしてデータセットとして取り込みます。
const result = await window.midas.datasets.importFromURL(
'https://example.com/data.csv'
);
// result.data: { datasetId: 'ds_...', name: 'data', rowCount: 100, columnCount: 5 }
options の name プロパティで取り込み後のデータセット名を指定できます。省略した場合は URL から推測されます。同名のデータセットが既に存在する場合はエラー(DATASET_ALREADY_EXISTS)を返します。options.overwrite を true にすると、既存のデータセットを in-place で置き換えます(ID が維持されます)。importFromURL / importFromBuffer はプライマリデータセットも上書きできます(派生系メソッドとの非対称性)。
CSV パースに失敗した場合(空データ、ヘッダー行が空、行ごとの列数が食い違う、URL バリデーション失敗、Content-Type 不正など)は INVALID_INPUT エラーを返します。ネットワーク障害やタイムアウトは EXECUTION_ERROR を返します。
URL のバリデーションとセキュリティ制限が適用されます。プロトコルは HTTP/HTTPS のみ許可され、クラウドメタデータエンドポイントへのアクセスはブロックされます。信頼済み URL リストに含まれない URL に対しては警告が発生し、設定で「信頼されていないドメインへの接続をブロック」を有効にしている場合はエラーになります。詳細はプライバシーとセキュリティを参照してください。
datasets.importFromBuffer(data, options?)
ArrayBuffer または TypedArray(Uint8Array、Node.js の Buffer など)から CSV/TSV データをデータセットとして取り込みます。Playwright のテストから HTTP サーバーを立てずにローカル CSV を読み込みたい場合に使用します。
// Playwright: ローカル CSV を page.evaluate で読み込む
import { readFileSync } from 'fs';
const csvBytes = Array.from(readFileSync('fixtures/sales.csv'));
const result = await page.evaluate(async (bytes) => {
const buffer = new Uint8Array(bytes).buffer;
return await window.midas.datasets.importFromBuffer(buffer, {
name: 'Sales',
});
}, csvBytes);
// result.data: { datasetId: 'ds_...', name: 'Sales', rowCount: 500, columnCount: 7 }
data は ArrayBuffer または ArrayBufferView(Uint8Array、DataView、Node.js の Buffer 等)を受け付けます。options のプロパティは次のとおりです。
name: 取り込み後のデータセット名。省略時は"Untitled"hasHeader: 先頭行をヘッダーとして扱うか。省略時はtrueencoding: 文字エンコーディング("utf-8"、"shift_jis"、"euc-jp")。省略時はバイト列から自動判定overwrite: 同名のデータセットが存在する場合に上書きするか。省略時はfalse
区切り文字は PapaParse が自動判定するため、CSV と TSV のどちらも渡せます。データセットには MIDAS が自動で行番号列(Row#)を追加するため、返却される columnCount は元ファイルの列数に 1 を加えた値になります。
同名のデータセットが既に存在する場合はエラー(DATASET_ALREADY_EXISTS)を返します。overwrite: true で既存を in-place で置き換えられます(ID 維持)。importFromBuffer はプライマリデータセットも上書きできます(派生系メソッドとの非対称性)。CSV パースに失敗した場合(空データ、ヘッダー行が空、行ごとの列数が食い違う、など)は INVALID_INPUT エラーを返します。
datasets.addColumns(datasetId, input)
計算列をデータセットに追加します。結果は新しい派生データセットとして作成されます。expression は DuckDB の SQL 式構文に従います。CASE WHEN や CAST 等の SQL 関数も使用できます。
const result = await window.midas.datasets.addColumns('ds_001', {
columns: [
{ name: 'bmi', expression: 'weight / (height * height)' }
]
});
// result.data: { datasetId: 'derived_...', name: '...', rowCount: 150, columnCount: 6 }
outputName で出力データセット名を指定できます。同名の派生データセットが存在する場合は in-place で更新し、既存のデータセット ID を維持します。outputName がソース datasetId またはその祖先(派生元のデータセット)のいずれかに解決される場合、依存関係の循環を防ぐため SELF_REFERENCE エラーを返します。同名のプライマリデータセットと衝突する場合は NAME_CONFLICT エラーを返します。同名の派生データセットが異なるメソッドで作成されている場合は OPERATION_TYPE_MISMATCH エラーを返します。
datasets.addOrthogonalPolynomials(datasetId, input)
直交多項式列をデータセットに追加します。多項式回帰の説明変数として使用します。
const result = await window.midas.datasets.addOrthogonalPolynomials('ds_001', {
column: 'temperature',
degree: 3
});
// result.data: { datasetId: 'derived_...', name: '...', rowCount: 150, columnCount: 8, columnNames: ['temperature_poly1', 'temperature_poly2', 'temperature_poly3'] }
degree の最大値は 30 です。outputName で出力データセット名を指定できます。outputName がソース datasetId またはその祖先(派生元のデータセット)のいずれかに解決される場合、依存関係の循環を防ぐため SELF_REFERENCE エラーを返します。同名のプライマリデータセットと衝突する場合は NAME_CONFLICT エラーを返します。同名の派生データセットが異なるメソッドで作成されている場合は OPERATION_TYPE_MISMATCH エラーを返します。
datasets.setColumnSchema(datasetId, columnId, schema)
列のデータ型、測定尺度、enum 定義を変更します。
const result = await window.midas.datasets.setColumnSchema('ds_001', 'col_002', {
type: 'enum',
scale: 'nominal',
enumName: 'species_enum'
});
// result.data: { datasetId: 'ds_001', columnId: 'col_002', createdDerived: true, derivedDatasetId: 'derived_...', overwrote: false }
schema には type、scale、enumName を指定できます。少なくとも1つは必須です。データ型の変更は SQL による型変換を伴うため、新しい派生データセットが作成されます。同名の出力データセットが既に存在する場合は in-place で更新し、既存のデータセット ID を維持します。outputName がソースデータセット自身またはその祖先(派生元のデータセット)を指す場合、依存関係の循環を防ぐため SELF_REFERENCE エラーを返します。同名のプライマリデータセットと衝突する場合は NAME_CONFLICT エラーを返します。同名の派生データセットが異なるメソッドで作成されている場合は OPERATION_TYPE_MISMATCH エラーを返します。測定尺度のみの変更はメタデータの更新のみで、派生データセットは作成されません。
enum 型への変換では、列の値が全て enum 定義内または NULL である必要があります。定義外の値が存在する場合は ENUM_VALUE_MISMATCH で拒否されます。事前に Convert Column Types タブで不要な値を NULL 化または除外するか、enums.update で定義に値を追加してください。
enums
enums.create(name, values)
enum 定義を作成します。値は最大 50 個まで設定できます。
const result = await window.midas.enums.create('color', ['red', 'green', 'blue']);
// result.data: { name: 'color', valueCount: 3 }
enums.list()
enum 定義の一覧を取得します。
const result = await window.midas.enums.list();
// result.data: [{ name: 'color', values: ['red', 'green', 'blue'] }, ...]
enums.update(name, values)
既存の enum 定義の値を更新します。
await window.midas.enums.update('color', ['red', 'green', 'blue', 'yellow']);
値は最大 50 個まで設定できます。値を削除する場合、この enum 型の列を持つデータセットに削除対象の値が残っていれば ENUM_VALUE_MISMATCH で拒否されます。enum 列の値は常に定義内または NULL である不変条件を維持するためです。先に Convert Column Types タブで該当値を NULL 化または除外するか、値を残したまま定義に保持してください。
enums.remove(name)
enum 定義を削除します。列がまだこの enum を参照している場合は警告が返されます。
await window.midas.enums.remove('color');
tabs
tabs.list()
開いているタブの一覧を取得します。
const result = await window.midas.tabs.list();
// result.data: [{ id, type, title }, ...]
tabs.open(config)
新しいタブを開きます。
// Graph Builder を開く
const result = await window.midas.tabs.open({
type: 'graph-builder',
title: 'My Graph',
datasetId: 'ds_001'
});
// result.data: { tabId: 'tab_...', type: 'graph-builder', title: 'My Graph' }
// SQL Editor を開く
const result2 = await window.midas.tabs.open({
type: 'sql-editor',
initialQuery: 'SELECT * FROM Iris LIMIT 10',
initialOutputName: 'Preview'
});
利用可能なタブタイプ:
| タイプ | 説明 |
|---|---|
graph-builder | Graph Builder |
sql-editor | SQL Editor |
glm | GLM |
glmm | GLMM |
random-forest | Random Forest |
linear-regression | 線形回帰 |
pca | 主成分分析 |
statistics | 記述統計 |
crosstab | クロス集計 |
anova | ANOVA |
kaplan-meier | Kaplan-Meier |
cox-regression | Cox 回帰 |
doe-analysis | 実験計画法 |
data-table | データテーブル |
report | レポート(reportId が必要) |
computed-column | 計算列 |
dummy-coding | ダミーコーディング |
orthogonal-polynomials | 直交多項式 |
reshape | データ整形 |
column-type-conversion | 型変換 |
enum-definition | enum 定義 |
project-overview | プロジェクト概要 |
project-lineage | データ系譜 |
selected-rows | 選択行 |
excluded-rows | 除外行 |
filtered-data | フィルタ済みデータ |
model-detail | モデル詳細 |
glm-diagnostics | GLM 診断 |
glm-prediction | GLM 予測 |
sql-query-viewer | SQL クエリビューア |
project-diff | プロジェクト差分 |
help | ヘルプ |
tabs.close(id)
タブを閉じます。
await window.midas.tabs.close('tab_001');
tabs.closeOthers(keepTabId)
指定したタブ以外をすべて閉じます。
const result = await window.midas.tabs.closeOthers('tab_001');
// result.data: { closedCount: 3 }
tabs.getGraphBuilder(tabId)
Graph Builder タブの設定を取得します。
const result = await window.midas.tabs.getGraphBuilder('tab_001');
// result.data: { tabId, graphType, datasetId, config, aspectRatio }
tabs.addGraphLayer(tabId, layer)
カスタムグラフにレイヤーを追加します。graphType が 'custom' のタブでのみ使用できます。
const result = await window.midas.tabs.addGraphLayer('tab_001', {
geom: { type: 'point' },
aes: { x: 'sepal_length', y: 'sepal_width', color: 'species' }
});
// result.data: { layerIndex: 0 }
Aesthetic マッピング (aes) ではカラム名またはカラム ID を指定します。カラム名は大文字小文字を区別せずに解決されます。利用可能なプロパティは x、y、color、fill、stroke、size、shape、alpha、linetype、ymin、ymax、group です。すべてのプロパティがすべての geom type で使えるわけではありません。例えば Point と Line は fill に対応していません。固定色を使う場合は { fixedColor: '#FF0000' } 形式で、固定サイズは数値で指定できます。stats を省略した場合はデフォルトで identity が設定されます。
利用可能な geom、stat、position の一覧は Custom Graph リファレンスを参照してください。各 Statistic の params は TypeScript 型とデフォルト値とともに同ページに掲載しています。
tabs.updateGraphLayer(tabId, layerIndex, layer)
既存のレイヤーを部分更新します。
await window.midas.tabs.updateGraphLayer('tab_001', 0, {
geom: { type: 'line' }
});
tabs.removeGraphLayer(tabId, layerIndex)
レイヤーを削除します。
await window.midas.tabs.removeGraphLayer('tab_001', 0);
tabs.moveToPane(tabId, toPaneId)
タブを別のペインに移動します。layout.split() で作成したペインの ID を指定します。
await window.midas.tabs.moveToPane('tab_001', 'pane_002');
tabs.setDataset(tabId, datasetId)
タブのデータセットを切り替えます。
await window.midas.tabs.setDataset('tab_001', 'ds_002');
tabs.configureGraph(tabId, config)
Graph Builder タブを一括設定します。グラフタイプ、データセット、レイヤー、アスペクト比などを一度に指定できます。カラム名は大文字小文字を区別せずに解決されます。
await window.midas.tabs.configureGraph('tab_001', {
graphType: 'custom',
datasetId: 'ds_001',
layers: [
{ geom: { type: 'point' }, aes: { x: 'weight', y: 'height', color: 'group' } }
],
aspectRatio: '4:3'
});
models
models.list()
訓練済みモデルの一覧を取得します。
const result = await window.midas.models.list();
// result.data: [{ id, type, name, datasetId, family }, ...]
models.run(config)
GLM を実行します。カラムは名前で指定でき、大文字小文字を区別しません。結果はタブを開かず直接返されます。models.list() や models.describe() で後から参照するには、返された runId を models.save() に渡してモデルを保存してください。未保存の実行結果はメモリ上に最大 20 件保持され、ページリロードで消失します。
現在は type: 'glm' のみ対応しています。
const result = await window.midas.models.run({
type: 'glm',
datasetId: 'ds_001',
yColumn: 'sepal_length',
xColumns: ['sepal_width', 'petal_length'],
family: 'gaussian'
});
// result.data:
// {
// runId: '...',
// coefficients: [
// { variable: '(Intercept)', estimate: 2.25, se: 1.02, testStatistic: 2.21, p: 0.029, ciLower: 0.23, ciUpper: 4.27 },
// ...
// ],
// inference: { distribution: 't', df: 147 },
// fit: { deviance: 42.3, nullDeviance: 234.7, aic: 183.94, bic: 193.47, iterations: 5, converged: true },
// diagnosticSummary: { nObservations: 150, nIncomplete: 0, degreesOfFreedom: 147, dispersionParameter: 0.29 },
// warnings: []
// }
係数の testStatistic フィールドは Wald 検定統計量 estimate / se です。inference は testStatistic、p、ciLower、ciUpper の計算に使われた参照分布を表します。distribution: 't' のとき自由度 df の t 分布、distribution: 'normal' のとき標準正規分布で、後者では df は null になります。
family ごとの対応は次のとおりです。β̂/SE が t(n−p) に厳密に従うのは Gaussian + identity link のみで、他の分散パラメータ推定族は有限標本補正の慣習として t 分布を適用します。漸近と書かれた family は標準正規近似です。
| family | link | 参照分布 | 性質 |
|---|---|---|---|
gaussian | identity | t(n−p) | 厳密 |
gaussian | 非 identity | t(n−p) | 有限標本補正の慣習 |
gamma | 任意 | t(n−p) | 有限標本補正の慣習 |
negative-binomial | 任意(θ 固定) | t(n−p) | 有限標本補正の慣習 |
poisson | 任意 | 標準正規 | 漸近 |
binomial | 任意 | 標準正規 | 漸近 |
negative-binomial | 任意(θ 推定) | 標準正規 | 漸近 |
ciLower と ciUpper は各係数の 95% Wald 信頼区間 estimate ± criticalValue × se です。臨界値は inference の参照分布の 0.975 分位点を使います。
レスポンスには2種類の warnings が含まれる場合があります。トップレベルの result.warnings にはデータ準備段階の警告(欠測行の除外など)、result.data.warnings にはモデル実行時の警告(収束の問題など)が格納されます。応答変数と説明変数のいずれかに欠測がある行は分析から除外されます。除外された行数は diagnosticSummary.nIncomplete で確認できます。
family は 'gaussian'(デフォルト)、'binomial'、'poisson'、'gamma'、'negative-binomial' から選択します。link でリンク関数を指定できます。省略した場合は family に応じたデフォルトが使われます。
| family | デフォルト link | 利用可能な link |
|---|---|---|
gaussian | identity | identity, log |
binomial | logit | logit, probit |
poisson | log | log, identity |
gamma | inverse | inverse, log, identity |
negative-binomial | log | log |
オプションパラメータ:
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
includeIntercept | boolean | true | 切片の有無 |
maxIterations | number | 25 | 最大反復回数 |
tolerance | number | 1e-8 | 収束判定の許容誤差 |
binomialResponse | object | - | 二項応答の形式。下記参照 |
theta | number | - | 負の二項分布の過分散パラメータ。省略した場合はプロファイル尤度で自動推定される |
offsetColumn | string | - | オフセット列(ポアソン回帰での exposure 等) |
binomialResponse の指定:
family: 'binomial' の場合に応答変数の形式を指定します。binomialResponse を省略した場合は binary として扱われます。
{ format: 'binary' }-- 0/1 の二値データ。yColumnで応答変数を指定します{ format: 'grouped', successesColumn: '...', trialsColumn: '...' }-- 成功数/試行数のペア。この場合yColumnは省略できます
// Grouped Binomial の例
const result = await window.midas.models.run({
type: 'glm',
datasetId: 'ds_001',
binomialResponse: { format: 'grouped', successesColumn: 'defects', trialsColumn: 'inspected' },
xColumns: ['temperature', 'pressure'],
family: 'binomial',
link: 'logit'
});
models.save(runId, name?)
モデルの実行結果をプロジェクトに保存します。保存後、models.list() や models.describe() で参照できます。
const run = await window.midas.models.run({ ... });
const saved = await window.midas.models.save(run.data.runId, 'My Model');
// saved.data: { modelId: '...', name: 'My Model' }
診断データセットは GLM Diagnostics タブを開いた時点で自動作成されます。含まれる主な列は fitted_values、deviance_residuals、pearson_residuals、standardized_residuals、leverage、cooks_distance です。これらを reports.addGraph() や Graph Builder で可視化して残差分析や診断プロットに使用できます。
models.describe(id)
モデルの詳細を取得します。GLM、GLMM、Random Forest に対応しています。レスポンス構造はモデルタイプにより異なります(result.data.type で判別)。GLMM と Random Forest のモデルは GUI から作成し、API では describe() で結果を参照できます。
GLM: 係数、適合度指標(AIC, BIC, deviance)、診断サマリー、メタデータを返します。
GLMM: 固定効果(GLM の係数と同形式)、ランダム効果(グループ変数、分散、ICC、BLUP)、適合度指標(AIC, BIC, deviance, 対数尤度)、診断サマリーを返します。
Random Forest: タスクタイプ(classification/regression)、ハイパーパラメータ、変数重要度(保存されている場合)を返します。
const result = await window.midas.models.describe('model_001');
// GLM の例 - result.data:
// {
// type: 'glm',
// id: 'model_001',
// name: 'My Model',
// metadata: {
// createdAt: '2025-01-15T10:30:00Z',
// trainingDatasetId: 'ds_001',
// predictors: ['sepal_width', 'petal_length'],
// response: 'sepal_length',
// sampleSize: 150
// },
// coefficients: [
// { variable: '(Intercept)', estimate: 2.25, se: 1.02, testStatistic: 2.21, p: 0.029, ciLower: 0.23, ciUpper: 4.27 },
// { variable: 'sepal_width', estimate: 0.60, se: 0.24, testStatistic: 2.50, p: 0.014, ciLower: 0.13, ciUpper: 1.07 },
// ...
// ],
// inference: { distribution: 't', df: 147 },
// fit: { deviance: 42.3, nullDeviance: 234.7, aic: 183.94, bic: 193.47, iterations: 5, converged: true },
// diagnosticSummary: { ... }
// }
GLMM の場合は fixedEffects 配下の係数が ModelCoefficientInfo と同形式になり、inference は常に { distribution: 'normal', df: null } です。Random Forest には inference フィールドはありません。
// GLMM の例 - result.data:
// {
// type: 'glmm',
// id: 'model_002',
// name: 'Mixed Model',
// metadata: { createdAt: '2025-01-15T10:30:00Z', trainingDatasetId: 'ds_001', predictors: ['x1'], response: 'y', sampleSize: 200 },
// fixedEffects: [
// { variable: '(Intercept)', estimate: 3.14, se: 0.85, testStatistic: 3.69, p: 0.0002, ciLower: 1.47, ciUpper: 4.81 },
// { variable: 'x1', estimate: 0.52, se: 0.18, testStatistic: 2.89, p: 0.004, ciLower: 0.17, ciUpper: 0.87 }
// ],
// inference: { distribution: 'normal', df: null },
// randomEffects: {
// groupColumn: 'school',
// variance: 1.23,
// residualVariance: 4.56,
// icc: 0.212,
// blup: [{ groupId: 'A', value: 0.45 }, { groupId: 'B', value: -0.32 }]
// },
// fit: { deviance: 892.1, aic: 902.1, bic: 915.3, logLikelihood: -447.05, iterations: 12, converged: true },
// diagnosticSummary: { nObservations: 200, nGroups: 10, nFixedEffects: 2, degreesOfFreedom: 198, nIncomplete: 0, groupSizes: { min: 15, max: 25, mean: 20 } }
// }
models.configure(tabId, config)
GLM タブを設定します。family、link 関数、目的変数、説明変数を指定できます。カラム名は大文字小文字を区別せずに解決されます。
await window.midas.models.configure('glm_001', {
family: 'binomial',
link: 'logit',
yColumn: 'outcome',
xColumns: ['age', 'treatment'],
});
reports
reports.create(name, description?)
レポートを新規作成します。
const result = await window.midas.reports.create('Analysis Report');
// result.data: { reportId: 'report_...', name: 'Analysis Report' }
reports.list()
レポートの一覧を取得します。
const result = await window.midas.reports.list();
// result.data: [{ id, name, elementCount }, ...]
reports.getContent(reportId)
レポートの内容を取得します。
const result = await window.midas.reports.getContent('report_001');
// result.data: { content: '## Analysis Results\n...', elements: [{ id, type, title }, ...] }
reports.setContent(reportId, content)
レポートのテキスト内容を全体置換します。addContent() や addModelSummary() で追加済みのテキストも置き換えられます。
const result = await window.midas.reports.setContent('report_001', '## Updated Results\n...');
// result.data: { contentLength: 42 }
reports.addContent(reportId, markdown)
レポートの末尾に Markdown テキストを追記します。
await window.midas.reports.addContent('report_001', '## Analysis Results\n\nThe model shows...');
reports.addModelSummary(reportId, modelId)
モデルのサマリーをレポートに追加します。GLM、GLMM、Linear Regression、Random Forest に対応しています。
全モデルタイプで要素参照方式を使用します(addGraph と同じ方式)。GLM / GLMM / Linear Regression の係数テーブルは DataTableElement として report.elements に追加され、レポート本文には {{data_table:elementId}} の参照が挿入されます。Random Forest の Feature Importance も DataTableElement(2 列: Feature, Importance、重要度降順ソート済み)として追加されます(featureImportances がある場合)。テーブルの実体は DerivedDataSet として project.datasets に登録されるため、Data タブの一覧にも表示されます。同一モデルに対して複数回呼び出した場合、係数 DerivedDataSet は name と operation が完全一致する既存 DerivedDataSet があれば再利用されます。同名で operation が異なる場合(fit 条件を変えた後に呼ぶなど)は Dataset with name "X" already exists エラーで APIResult.success === false が返ります。設定違いのサマリーを並存させたい場合は、旧モデルを削除するか、新モデルを別名で Save してから呼んでください。レポート要素(DataTableElement、ModelStatsElement 等)とテキストは毎回新規追加されます。モデルを削除すると関連する係数 DerivedDataSet も自動的に削除され、削除された dataset / model を参照するレポート要素 (DataTableElement / ModelStatsElement / GraphBuilderElement / CrosstabElement / CrossDatasetComparisonElement / StatisticsSummaryElement) がレポートから取り除かれます。reports.addModelSummary() を呼ぶ際、引数 modelId が実在する model を指していないと APIResult.success === false でエラーが返ります。
GLM / GLMM / Linear Regression の Model Fit / Random Effects / OLS Fit は、ModelStatsElement (type: 'model_stats') として report.elements に登録され、本文には {{model_stats:elementId}} の参照が挿入されます。要素はモデル ID のみ保持し、描画時に project.models[modelId] から値を動的に解決します。したがって、同じモデル ID で再学習して project.models が上書きされた場合、既存のレポートも自動で新しい値を表示します。レポート作成後にモデルを削除すると、ModelStatsElement は "Model not found" プレースホルダを表示します。
GLM と GLMM の係数テーブルは共通の列構成です: Variable, Estimate, Std. Error, Test Statistic, Distribution, DF, P-value, Lower 95%, Upper 95%。Linear Regression の係数テーブルはこれに加えて Std. Coef. と VIF を持ちます。Distribution 列は検定統計量と p 値の参照分布(t または normal)を、DF 列は t 分布参照時の自由度を示します(normal のときは null)。GLM の参照分布は family と link から決まります(models.run() の節の対応表を参照)。GLMM の固定効果は、MIDAS の実装選択として常に漸近正規分布(normal)を用います。Linear Regression は常に t 分布を用います。信頼区間はすべて Wald 型(estimate ± criticalValue × SE、臨界値は Distribution/DF 列が示す分布の 0.975 分位点)です。
モデル別の描画内容:
- GLM: ModelStatsElement の Model Fit セクションに AIC, BIC, Deviance, Null Deviance, Converged, iterations を表示します
- GLMM: ModelStatsElement の Random Effects セクションに Group Variable, Number of Groups, Random Intercept Variance, Residual Variance (LMM のみ), ICC を、Model Fit セクションに AIC, BIC, Deviance, Log-Likelihood, Converged, iterations を表示します。LMM(Gaussian + identity link)では AIC (REML), BIC (REML), REML Log-Likelihood, ICC と表記し、それ以外の GLMM では AIC, BIC, Log-Likelihood (Laplace), ICC (latent scale) と表記します
- Linear Regression: 5 つの要素を登録します — 係数テーブル、ANOVA Type I、ANOVA Type III、Prediction Intervals (per-observation 予測区間/信頼区間)、ModelStatsElement。ModelStatsElement の OLS Fit セクションに R², Adjusted R², F-statistic, F p-value, RMSE, N observations を、Information Criteria セクションに AIC, BIC を表示します。Converged / iterations は OLS では自明なので表示しません
- Random Forest: featureImportances がある場合は Feature Importance
DataTableElement(2 列: Feature, Importance、重要度降順ソート済み)を、Model Configuration(Task Type, Number of Estimators, Max Depth, Min Samples Split, Min Samples Leaf, Max Features)と OOB Score をModelStatsElementとして登録します
const result = await window.midas.reports.addModelSummary('report_001', 'model_001');
// result.data: { reportId, addedText, elementId?, statsElementId?, anovaTypeIElementId?, anovaTypeIIIElementId?, predictionIntervalsElementId? }
// elementId / statsElementId は GLM / GLMM / Linear Regression / Random Forest のときに返される
// - elementId: 係数 / Feature Importance DataTableElement の id (RF: featureImportances が非空のときのみ)
// - statsElementId: Model Fit / Random Effects / OLS Fit / Model Configuration を描画する ModelStatsElement の id
// anovaTypeIElementId / anovaTypeIIIElementId / predictionIntervalsElementId は Linear Regression のみ
reports.addGraph(reportId, config)
レポートにグラフをレポート要素として追加します。タブを開かずに Custom Graph を宣言的に作成します。カラム名は大文字小文字を区別せずに解決されます。
const result = await window.midas.reports.addGraph('report_001', {
datasetId: 'ds_001',
layers: [
{ geom: { type: 'point' }, aes: { x: 'weight', y: 'height' } }
],
title: 'Weight vs Height',
height: 500,
});
// result.data: { elementId, reportId }
グラフはレポート要素として保存され、レポートの content に {{graph_builder:elementId}} の参照が追記されます。height パラメータはグラフの高さをピクセル単位で指定します。デフォルトは 400、最小値は 200、最大値は 5000 です。
aspectRatio には '16:9'、'4:3'、'1:1'、'3:4'、'9:16'、'custom' を指定できます。'custom' 以外のプリセット値を指定した場合、アスペクト比が表示時の高さを決定するため height は描画に使用されません。'custom' の場合は height で高さを指定します。
layout
layout.split(config)
ペインを分割して新しい領域を作成します。
const result = await window.midas.layout.split({
tabId: 'tab_001',
direction: 'horizontal' // 'horizontal' または 'vertical'
});
// result.data: { newPaneId: 'pane_...', originalPaneId: 'pane_...' }
返された newPaneId を tabs.moveToPane() に渡すことで、タブを新しいペインに配置できます。
エラーコード
| コード | 説明 |
|---|---|
ERROR | 汎用エラー |
NO_PROJECT | プロジェクトが読み込まれていない |
NOT_FOUND | 指定したリソースが見つからない |
DATASET_NOT_FOUND | テーブル名に一致するデータセットが見つからない |
COLUMN_NOT_FOUND | カラムが見つからない |
INVALID_TAB_TYPE | タブタイプが無効 |
INVALID_TAB_TYPE_FOR_OPERATION | タブタイプがこの操作に対応していない |
INVALID_GRAPH_TYPE | カスタムグラフ以外でレイヤー操作を試みた |
INVALID_INPUT | 入力パラメータが無効 |
INDEX_OUT_OF_RANGE | レイヤーインデックスが範囲外 |
DATASET_ALREADY_EXISTS | 同名のデータセットが既に存在する(overwrite: false 時) |
SELF_REFERENCE | 上書き対象が操作自身の依存先(祖先)である |
NAME_CONFLICT | 派生系メソッドの出力名が既存プライマリデータセットと衝突する |
OPERATION_TYPE_MISMATCH | 上書き対象の派生データセットが異なるメソッド(operation type)で作成されている |
AMBIGUOUS_TABLE_NAME | テーブル名に case-insensitive で複数のデータセットがマッチした |
EXECUTION_ERROR | SQL 実行エラー |
UNSUPPORTED_MODEL_TYPE | 未対応のモデルタイプ |
MODEL_EXECUTION_ERROR | モデル実行エラー |
NUMERICAL_ERROR | 数値計算エラー(行列の特異性など) |
INSUFFICIENT_DATA | 有効な観測数が不足 |
NO_DATA | データセットにデータがロードされていない |
NO_CONTAINER | アクティブなコンテナがない |
NO_TARGET | SQL にテーブル参照がない |
NO_CONFIG | Graph Builder 設定がない |
SPLIT_FAILED | ペイン分割に失敗 |
SANDBOX_MODE | サンドボックスモードで保存不可 |
ENUM_ALREADY_EXISTS | enum 定義が既に存在する |
ENUM_NOT_FOUND | enum 定義が見つからない |
ENUM_IN_USE | enum 定義が列から参照されている |
参考
- ライブリファレンス: プロジェクト画面で
window.midas.help()を実行