Skip to content
AA

DEMATELab — Cause-and-Effect Analysis Toolkit

Desktop application for DEMATEL cause-and-effect analysis and its fuzzy, grey, and Z-number extensions — interactive multi-expert input, four solver types, result visualizations, and AI-generated interpretations.

6 min read

DEMATEL (Decision-Making Trial and Evaluation Laboratory) is a structural modelling method for untangling cause-and-effect relationships between factors. In practice it usually lives in fragile, hand-built spreadsheets that break down the moment you add a second expert or switch from crisp numbers to fuzzy or grey ones. DEMATELab turns the whole pipeline — linguistic input, expert weighting, threshold selection, the total-relation matrix, and clustering — into one desktop GUI, with four solver families behind a single interface.

Problem

A real DEMATEL study rarely uses one expert and one number scheme. Researchers need to:

Doing this by hand means re-deriving the matrix algebra for each variant and re-doing it every time an expert's input changes. The math is identical in shape but different enough per variant (fuzzy arithmetic, grey bounds, Z-number reliability) that spreadsheets become error-prone and unauditable.

Approach

The app is organised as a linear workflow — Setup → Input Forms → Matrix Editor → Run Analysis → Results — so the method's steps map directly onto the UI.

Four solver types share one interface, each handling its own arithmetic:

Five threshold methods decide which influences survive into the causal diagram: Average, First Quartile, Median, Third Quartile, and Maximum Mean De-Entropy (MMDE) — the last computing the cut-off from the information content of the matrix rather than a fixed percentile.

Multi-expert support lets each expert have a name and weight; the matrix editor presents linguistic dropdowns per expert so judgments are entered in words, not raw numbers.

Results are split across tabs — Summary, Matrices, R/C scores (prominence and relation), Causal Diagram, and Heatmap — plus K-Means clustering over the total-relation matrix to group factors. Everything exports to XLSX, and visualizations export to PNG.

AI explanation is optional: the AI tab sends the computed results to an LLM (Gemini, OpenAI, OpenRouter, or Groq) and returns an academic-style narrative interpretation. API keys are held in memory for the session only and never written to disk.

Linguistic Scales

The same linguistic label maps to a different numeric representation depending on the chosen solver:

LabelCrispFuzzy (l, m, u)Grey [l, u]
No influence0(0.00, 0.00, 0.25)[0.00, 0.00]
Low influence1(0.00, 0.25, 0.50)[0.00, 0.25]
Medium influence2(0.25, 0.50, 0.75)[0.25, 0.50]
High influence3(0.50, 0.75, 1.00)[0.50, 0.75]
Extreme influence4(0.75, 1.00, 1.00)[0.75, 1.00]

Fuzzy Z-DEMATEL layers a reliability term on top of these influence judgments.

What It Delivers

Tradeoffs

What I'd Do Differently

Known Limitations

Architecture

Setup panel  (solver type + threshold method + #experts + #factors)
   └─ Input Forms  (factor names, expert names + weights)
        └─ Matrix Editor  (linguistic dropdowns, one matrix per expert)
             └─ Solver  (Classical | Fuzzy | Grey | Fuzzy-Z)
                  ├─ aggregate experts by weight  → direct relation matrix
                  ├─ normalize → total relation matrix (T)
                  ├─ R / C vectors  (row + column sums of T)
                  ├─ threshold (Average | Q1 | Median | Q3 | MMDE)
                  └─ K-Means clustering over T
                       └─ Results tabs  (Summary, Matrices, R/C, Causal, Heatmap)
                            ├─ export → XLSX / PNG
                            └─ AI tab → LLM → narrative interpretation

Stack

ToolVersionRole
Python3.10+Language / runtime
PySide6latestNative desktop GUI, matrix editor, tabs
NumPylatestMatrix algebra for all four solvers
scikit-learnlatestK-Means clustering of the total-relation matrix
MatplotliblatestCausal diagram + heatmap rendering / PNG export
openpyxllatestXLSX export of results
LLM APIsGemini / OpenAI / OpenRouter / Groq interpretation