说明:
- DEMATEL法过程中,使用行最大值法进行了标准化。
- 代码运行后得到的权重(即归一化后的中心度)应该不能直接理解成影响因素的重要性;关键影响因素的确定应该综合考虑中心度、原因度、影响度和被影响度,具体确认方法可以参考《情报科学》上的一些论文,例如:DOI,10.13833/j.issn.1007-7634.2023.09.006
代码包含了绘制因果关系图的功能。具体代码(python)如下:
使用方法是:将analytic_matrix修改成自己的直接影响矩阵就行。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["Songti SC"] #设置字体,注意Windows这里可以换成SimHei。(主要是换成自己系统有的字体)
plt.rcParams["axes.unicode_minus"]=False #正常显示负号
def dematel(analytic_matrix):
"""
执行DEMATEL分析。
参数:
- analytic_matrix: numpy数组,表示元素间的直接关系矩阵。
返回值:
- D: 表示总关系矩阵行和的numpy数组,指示影响程度。
- R: 表示总关系矩阵列和的numpy数组,指示被影响程度。
- D_plus_R: 表示元素的总重要性的numpy数组;中心度
- D_minus_R: 表示元素间因果关系的numpy数组;原因度
- priority: 权重,D+R的归一化 (注:这个权重应该不能直接理解成重要性;关键影响因素的确定应该综合考虑中心度、原因度、影响度和被影响度,具体确认方法可以参考《情报科学》上的一些论文,例如:DOI,10.13833/j.issn.1007-7634.2023.09.006)
- status: 字符串,指示分析的成功或失败状态。
"""
# 步骤1: 标准化矩阵
# 对每一行求和,找到和的最大值
max_row_sum = np.max(analytic_matrix.sum(axis=1))
print(max_row_sum)
# 使用最大行和的值进行标准化
normalized_matrix = analytic_matrix / max_row_sum
# 步骤2: 计算总关系矩阵
identity_matrix = np.eye(len(normalized_matrix)) # 与分析矩阵同维度的单位矩阵
print(identity_matrix)
try:
inv_matrix = np.linalg.inv(identity_matrix - normalized_matrix) # 计算逆矩阵
total_relation_matrix = np.dot(normalized_matrix,