1.判别分析:根据已知分类建立判别方法
距离判别法:
计算距离:dist()
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
x表示数据矩阵;method用于指定计算方法,默认“euclidean”为欧氏距离,“manhattan”绝对值距离,“maximum”切比雪夫距离,“minkowski”闵可夫斯基距离,“canberra”兰氏距离,“binary”定性样本的距离;diag为TRUE,输出距离矩阵的对角线;upper为TRUE,输出距离矩阵的上三角部分。
马氏距离:mahalanobis()
mahalanobis(x, center, cov, inverted = FALSE,...)
x是样本数据的向量或矩阵;center是分布的均值;cov是分布的协方差矩阵,通常用样本值做估计;inverted是逻辑值,若为TRUE则cov应包含协方差矩阵的逆。
距离判别分析:wmd():WMDB包,自动计算马氏距离判别分析
wmd(TrnX, TrnG, Tweight = NULL, TstX = NULL, var.equal = F)
TrnX是训练样本的矩阵或数据框;TrnG用于表示已知的训练样本的分类,必须为因子向量;Tweight指定权重;TstX是待测数据的矩阵或数据框,默认为NULL,对训练样本进行判别分析;var.equal指定总体是否具有相等的协方差阵,默认为FALSE
Fisher判别法
lda():MASS包,最常用的判别分析
lda(formula, data, ..., subset, na.action)
formula是形如groups~x1+x2的公式,左侧表示分组(因子),右侧指定指标变量(非因子);data指定数据集;subset是索引向量,指定训练样本;na.action指定对缺失值的处理方式;
lda(x, grouping, ..., subset, na.action)
x是包含解释变量的矩阵或数据框;grouping是一个因子向量,指定每个观察值的类别
使用lda进行判别模型的建立,然后使用predict()对新数据进行分类。
可以对训练样本进行判别,然后用卡房检验chisq.test(class,class.pre)对准确度进行检验
贝叶斯判别法
dbayes():WMDB包
dbayes(TrnX, TrnG, p = rep(1, length(levels(TrnG))), TstX = NULL, var.equal = FALSE)
用法类似于wmd();TrnX是训练样本的矩阵或数据框;TrnG用于表示已知的训练样本的分类,必须为因子向量;p是指定先验概率的向量;TstX是待测数据的矩阵或数据框,默认为NULL,对训练样本进行判别分析;var.equal指定总体是否具有相等的协方差阵,默认为FALSE
2.聚类分析
分层聚类
hclust()
hclust(d, method = "complete", members = NULL)
d是dist()返回的距离对象;method指定系统聚类的方法,默认是complete,最长距离法,“ward”离差平方和法,“single”最短距离法,“median”中间距离法;members默认为NULL,或与d长度相等的向量。
可以使用plot()或plclust()绘制谱系图
plot(x, labels = NULL, hang = 0.1, axes = TRUE, frame.plot = FALSE, ann = TRUE,...)
x是分层聚类的对象;labels表示是否显示标签;hang表示谱系图中各类别所在的位置,hang为负时,将从底部开始绘制谱系图的类。
可以使用cutree()将数据分类
K均值聚类
kmeans()
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "Macqueen"))
x是待研究的数据矩阵;centers是指定分类个数的数值或指定聚类中心的初值;centers指定了聚类个数则nstart表示选取的随机集个数;iter.max是最大迭代数,默认为10;algorithm表示具体的算法,默认为“Hartigan-Wong”
可用sort(KM$culster)对分类情况排序