第八章 中医证型关联规则挖掘

8.1 背景与挖掘目标

1)借助病理信息,挖掘患者的症状与中医证型之间的关联关系;
2)对截断治疗提供依据,挖掘潜证性证素。

8.2 分析方法与过程

数据获取

由问卷调查得到各个辨证的分型,主要以定类数据作为主要的数据类型,在这里,TNM分期是癌症分期的基本原则。将问卷得到的结果进行整理后得到:

R语言 医学图形 r语言与医学统计图形pdf_R语言 医学图形


为了更好的反映中医证素分布的特征,用证型系数代替具体的证素得分:R语言 医学图形 r语言与医学统计图形pdf_数据_02,得到属性数据集。

R语言 医学图形 r语言与医学统计图形pdf_数据分析_03


因为Apriori关联规则算法无法处理连续型数值,所以需要对数据进行离散化处理。书中采用聚类算法对数据进行离散化处理,将每个属性都聚成4类,然后以字符编码代替分类离散结果:

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter8/示例程序")
# 读取数据  
datafile <- read.csv("./data/data.csv",header=T) 
# 参数初始化
type <- 4  # 数据离散化的分组个数
index <- 8  # TNM分期数据所在列
typelabel <- c("A", "B", "C", "D", "E", "F")  # 数据离散化后的标识前缀
set.seed(1234)  # 固定随机化种子
cols <- ncol(datafile[, 1:6])  # 取六种证型列数
rows <- nrow(datafile[, 1:6])  # 行数
disdata <- matrix(NA, rows, cols + 1)  # 初始化
# 聚类离散化
for (i in 1:cols) {
  cl <- kmeans(datafile[, i], type, nstart = 20)  # 对单个属性列进行聚类
  disdata[, i] <- paste(typelabel[i], cl$cluster) 
}
disdata[, cols + 1] <- datafile[,index]
disdata[, cols + 1] <- paste("H", disdata[, cols + 1], seq = "")
# 导出数据
colnames(disdata) <- c("肝气郁结证型系数", "热毒蕴结证型系数", 
                       "冲任失调证型系数", "气血两虚证型系数", 
                       "脾胃虚弱证型系数", "肝肾阴虚证型系数", "TNM分期")
write.csv(disdata, file = "./tmp/processedfile.csv", quote = F, row.names = F)

对数据进行离散化处理的方法还有:等距、等频、决策树、基于卡方检验等。
模型构建
Apriori关联规则需要设置“最小支持度”和“最小置信度”,得到中医证型和TNM分期的关联关系:

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter8/示例程序")
library(arules)
# 读入数据
a <- read.csv("./data/processedfile.csv", header = TRUE) # 读入数据
trans <- as(a, "transactions")  # 将数据转换为transactions格式
inspect(trans[1:5])  # 观测trans数据集中前5行数据items
# 调用Apriori算法
rules <- apriori(trans, parameter = list(support = 0.06, confidence = 0.75)) 
# 生成关联规则rules
rules  # 显示rules中关联规则条数
inspect(rules)  # 观测rules中关联规则