2013年 第 3 期
(总 第 125 期 )
信 息 通 信
INFORMA TION & COM M UNICATION S
2O13
(Sum. No 125)
R语言 与 EM 算法
李 欢
(宁波职业技术学院 ,浙江 宁波 315800)
摘要 :R语言是一个开放 的统计编程环境 ,提供一种集成的统计 工具 。随着互联 网的发展 ,数据量越来越 大,缺夫
象也越 来越 多。如何在数据丢失的情况下 ,将数据分析 结果达到 最优 ,文章探 讨 R软件 的强大计算 、统计功能应用与 EM
算法 中,使缺失数据分析达到最优化。
关键词:R语 言;EM 算法;统计分析
中图分类号 :O211.62
文献标识码 :A
文章编号 :1673.1131(2013)03.0006—02
1 R简介
R是 一 种 语 言 ,一 个 开 放 的统 计 编 程 环 境 ,是 由 Bell实验
室 开 发 的一 种 方 言 (dialect)之 一 ,是 一 种 集 统 计 分 析 与 图 形 直
观 显 示 于 一 体 的统 计 分 析 软 件 ,它 是一 套 完 整 的数 据 处 理 、计
算和制 图软件系统 ,R是一种数学计算 的环境 ,它可 以提供一
些 集 成 的统 计 工 具 ,但 更 大 量 的 是 它提 供 各 种 数 学计 算 、统 计
计算的函数,从而使使用者能灵活机动地进行数据分析 ,甚至
创 造 出 符 合 需 要 的 新 的 统 计 计 算 方 法 。在 R 网站 上提 供 了 统
计 及 各 个 有 关 应 用 领 域 几 乎 所 有 最 新 的 成 果 和代 码 公 开 的 软
件 包 。 到 2010年 底 R 的 供 使 用 的 软 件包 数 量 已经 超 过 2700
个 ,其中 700个是最近半年增加的;例如仅仅空间统计一个方
向 的软 件 包 就有 20多 个 。
2 EM 简 介
3.1用 R 实现 聚类 分析
聚 类 分 析 是 以数 据 间 的相 似程 度 ,或 者 说是 数据 间 的 距
离 为基础 的 。利用 hclust功能聚类样品集。样品集 是否聚类
到 一起 ? 通 过 改 变 hclust中的 参 数 试 用 不 同 的 类 间距 离 进 行
训 练 。
在 dist中 通 过 改 变 method参 数 试 用 不 同 的基 因距 离进 行
训 练 ,下 面 是 R 的 训练 过 程 。
(1)利用相关系数和最大类间距离对 A样品进行系统聚类
分析,再用 欧式距离和平均类间距类对样 品进行系统聚类分析,
利 用 stats包 中 的 heatmap功 能 ,可 以得 到 聚类 分 析 的 图像 但
是要注意,这个功能是对数据执行聚类分析,如果数据 的数量过
大,会导致这个方法运行缓慢 。为 了说 明问题 ,我们仅选择 100
个数据 为例 。(2)我们尝试不同的聚类分裂方法,利用相关 系数
作为基 因距离对样 品进行 Knleans聚类 分析 。利用 cluster包
EM (Expectatioin.Maximalization)算法即期望最大算法 ,
中的 PAM 功能对 样品进行“Partition Around Medoids”分析,
被誉为是数据挖掘的十大算法之一 。它是在概率模型中寻找
参数最大似然估计 的算法 ,其 中概率模型依赖于无法观测到
利 用 som 包 中 的 自组 织 映射 分 析 方 法 (SoM)对 样 品 进 行 聚 类
分析 。 (3)在 方 差 的基 础 上 选 择 前 100个 数 据 ,执 行 上 面 所 述
的隐变量 。最大 期望算法经过两个步骤交替进行计算 ,第一
的各种聚类分析方法 。注意在数据 的选择过程 中没有 使用任
步 是计算期望 (E),也就是将隐藏变量象能够观测 到的一样包
含在 内,从而计算最大似然 的期望值;另外一步是最大化 (M),
也就是最大化在 E步上找到的最大似然 的期望值 从而计算参
数的最大似然估计 。M 步上找到 的参数然后用于另外一个 E
步计算 ,这个 过程 不断交替进行 。对 于信 息缺 失的数据来说 ,
EM 算法是一种极有效的工具 。
3 R在 EM 算 法 中的应 用
何 同样 品有关 的信 息。statgnames功 能能够根据选择 的统计
量将基因排序 ,在 本例 中统计量就是方差 。
3.2 用 cbind0和 rbindO构 建分 块矩 阵
可 以利 用 R 中的 函数 cbind0 和 rbindO 把 向量 和 矩 阵拼
成一 个 新 的矩 阵 。概 略 地 说 ,cbind()把矩 阵 横 行 地 合 并 成 一
个 大矩 阵 (列 方 式 ),而 rbindO 是 纵 向 合 并 (行 方 式 )。
在 命 令 中 :
· + ”+ “+ 一+ ··+ ”+ ”+ ”+ *+ 一+ 一—+一一+ 一十 一—■卜“+ ”+ ”—+一一--—卜 ”— ●一一—■一一—-+一”—+一-—·+一u—-·卜 ”—-·卜 ”—+一”—+-”— 卜_-.——●一”—-—卜 一—-+一”+ *—+一一—+一
··—-●一_ —·-一-
3.2设 计方 法 的应 用
灵活使用 。功能测试或是软件测试更 多的参考 和依据是 《软
在 功 能 测 试 中 为 了提 高 测 试 覆 盖 面 ,多 采 用 几 种 测 试 用
件 需 求说 明书 》和 《数 据 规 格 说 明 书》,尽 早 地 加 入 到 项 目中对
例设计方法结合使用 。一般情况下 :
于测试质量 的提 高和软件质量 的提 高会 有很大的帮助 。
(1)页商3I{i局检查:场景法 ;
(2)页 面 元 素校 验 :等 价类 划 分 法 、边 界值 分 析法 、正 交法 、
分类树法等:
(3)功 能 检 查 :等 价 类 划 分 法 、边 界 分 析 法 、错 误 推 测 法 、场
景 法 、因果 图法 、判 定 表 法 、组 合 测 试 法 、花 瓣法 、最 长 测 试 法 、
最少测试法 、异常测试法、肥皂剧测试法 、快递测试法 等。
4 结语
软件测试用例 设计 的质量和效果在一定程度上直接影响
了测 试 过 程韵 开 展 和 最 终 的 测试 结 果 。测 试 用 例 设 计 方 法 的
参 考 文 献 :
[I】 惠特 克 .探 索 式软 件 测 试 [M】.北 京 :清 华 大 学 出 版 社 ,2010
[2] 顾海花 .软件测试技术基础教程[M].北京 :电子工业 出版
社 ,2011
[31 马均飞,郑文强.软件测试设计[M 北 京:电子工业 出版社,
2011
[4】 陈 能技 ,软 件 测试 技 术 大全 【M] E京 :人 民 邮 电 出版 社 ,2011
作 者 简 介 :梁彦 (1985一),女 ,重 庆 人 ,助 理 工 程 师 ,研 究 方 向 为
使 用 方 法 和 组 合 很 多 ,在 测 试 用 例 的 设计 和执 行过 程 中 可 以
软 件 测 试 。
6
信息通信
李欢 :R语言与 EM 算法
>X (_cbind(arg
l,arg
_
_
2,arg
_ 3,…)
索 引最有 效。
cbind()的 参 数 要 么 是 任 何 长 度 的 向量 ,要 么 是 列 大 小 一
3.4 模式 和 长度
致 的矩 阵 , 也 就 是 有 一 样 的 行 数 。结 果 将 是 一 个 合 并 arg 1,
arg 2
的 列 形 成 的 矩 阵 。
_
…
.
R操作 的实体在技术上 来说就是对象 。如实数 或复数 向
量 ,逻 辑 向量 和 字 符 串 向量 等 对 象 属 于“原 子 ”(atomic)结 构 的
如 果 cbind()的 参 数 中有 一 些 比其 他 矩 阵 参 数 的列 长 度 短
对象 ,因为它们的元素都是一样的类型或模式,R 的对象类型
的向量,它们将会被循环使用 以吻合矩阵的列长度 。(在没有
矩 阵的情况下,吻合其 中最长 的向量 的长度)
包 括 数值 型 (numeric),复数 型 (complex),逻 辑 型 (1ogica1),字
符型 (character)~1原味型 (raw)。向量必须保证它 的所有元素
函数 rbind()对行进行类似 的操作 。其中任何 向量参数都
是一样 的模式 。因此任 何给定 的向量必须 明确属 于逻辑性 ,
会 被 当 作行 向 量 且 可 能被 循环 使用 。
数值 型 ,复 数 型 ,字 符 型 或 者 原 味 型 。(这 里 有 个 特 定 的 例 外 就
假 定 X1和 X2有 一 样 的行 数 。下面 的命 令 会 把 它 们 的 列
是“值 ”为 NA 的元 素 ,实 际 上 有 好 几 种 形 式 的 NA。)注 意 空 向
合 并 以得 到 矩 阵 x,同 时要 求起 始 列 都 是 1
量也有 自己的模式 。例如 ,空的字符 串向量将会被显示为 char-
>X <-cbind(1,X1,X2)
acter(0),空 的数 值 向量 会 显 示 为 numeric(O)。
rbind()或 者 cbindO返 回值 常 常 是矩 阵 形 式 。因此 ,cbind
R 同 样操 作被 称 为 列表 的 对 象 。 这种 对 象 在 R 里 面 是 一
(x)和 rbind(x)可能是把 向量 X分别转换成列或者行 向量最 简
种列表 (1ist)模式 。这 些是可 以为任何模式的对象 的有序序列 。
单 的方 法 。
列 表 被 认 为 是 一种 “递 归 ”结构 而 不 是 原 子 结 构 ,因 为它 们 的
3I3 用 R 的函数 apply()处理 不规 则数 组
元 素 可 以用 它 们 各 自的方 式 单独 列 出 。
假 定 我 们 有 一 组 数 据 并 且 保 存 在 另 外 一 个 向量 中
另 外两 种 递 归 结 构 是 函数 (function)和 表达 式 (ex.
>incomes<-c(60,49,40,61,64,60,59,54,62,69,70,42,56,
pression)。 构 成 R系 统 一 部 分 的 函数 对 象 以及 其 他 类 似 的用
61,61,61,58,51,48,65,49,49,41,48,52,46,
户 定 义 的 函数 对 象 都 将 在 后 面 的 内容 中深 入 讨 论 。表 达 式 对
59,46,58,43)
象 是 R 的高 级 部 分 ,不 是本 文档 的重 点 ,我 们 只 是在 讨论 R统
为 计 算 样 本 中平 均 收 入 ,我 们 可 以用 函数 apply():
计建模 中的公式 (formulae)时间接 地提 一下。
>incmeans<-apply(incomes.tef,mean)
一 个 对象 的模式 (mode)是该对 象基本 要素 的类型 。这
这将给 出一个均值 向量。各个 元素都用对应的水平名字
是 专 门 用 来 描 述 一 个 对 象 “特 征 ”(property)的术 语 。 另 外
标 记 了 。
一 个 所 有 对 象 都 有 的 特 征 是 长 度 (1ength)。 函 数 mode(ob.
act nsw nt qld sa tas vic w a
ject)和 length(object)可 用 于 任 何 数 据 对 象 以得 到 其 模 式
44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
和 长 度 3。
函数 apply()将一个函数(这里是 mean())用于第二个参数
一 个对象 更进 一步的特 征常常通 过 attributes(object)得
1(这 里 是 tel')定 义 于 第 一个 参数 (这 里 是 incomes)上得 到 的所
到 ,具体参见 Gettingand settingattributes,正因为这样 ,模式和
有 组 。此 时 ,各 个 组 的数 据 好 像 是 独 立 的 向量 。得 到 的结 果
长 度 又 叫做 一 个 对 象 的“内在 属 性 ”。例 如 ,如 果 z是 一 个 长 为
向量 长 度 和 因子 的水 平 数 一 致 。
100的复 数 向量 ,那 么命 令 mode(z)就会 得 到 字 符 串 ”complex”
假 定我 们 进 一 步 想 计 算 每个 对 象 的 的标 准 误 差 ,我 们 用 R
而 length(z)对 应 的 是 100。
函数来计算任一给定 向量 的标准误差 。既然 已经有 内置 函数
R 可 以 在任 何 需 要 的 时候 对模 式进 行转 换 。 (当 然 ,有 些
var()计 算样 本 方 差 ,这 个 函 数 可 以在 一 行 写 完 ,并 且 有 一 个
时候 没 有 必 要 。)例 如 :
、
参 数 等 待 赋 值 :
>Z<.0:9
>stderr<.fimction(x)sqrt(var(x)/length(x))
我 们 可 以进 行 如 下 转 换
>incster<一fapply(incomes,statef,stderr)
j
>digits<-as.character(z)
值 分别 为 :
> incster
这 样 ,digits就 是 一 个 字 符 向量 c(”0”,”1”,”2”… .,”9”)。 我
们可 以再一次强制转换 ,或者说模式 改变 ,以重建数值向量:
act nsw nt qld satas vic w a
>d<一as.integer(digits1
1.5 4.3102 4.5 4.1o6:i 2.7386 0.5 5.244 2.6575
现 在 d和 Z就 一 样 了 。有 一 系 列 类 似 as.something()的 函
作 为 一 个 训 练 ,你 可 能 想 计 算 每 个 对 象 平 均 收 入 的 95%
数,这些 函数主要用于对象模式 的强制转换 ,或者赋予某个 对
信 度 区 间 。于 是 你 可 以 再 次 使用 tapply()和 能得 到样 本 量 的
象 一 些 先 前 没 有 的 功 能 。读 者 可 以 参考 不 同 的 帮 助文 件 以 熟
函数 length(),以及 能得 到 t.分 布 的分 位 数 的 函数 qtO。 函 数
悉 它们 。
tapply()还 可 以用 来 处 理一 个 由多 个 分类 因子 决定 的 向量 下标
总 之 ,EM 算 法 ,不 保 证 全 局 最 优 解 ,得 到 的 是局 部最 优
组 合 。不 过 ,就 在 上 面 最 简 单 的 情 况 中 (仅 仅 一 个 变 量 ),我 们
解 ,所 以具 体 的结 果 和 初 始 值 的 位 置 有 关 系 ,如 果 我们 在 合 适
也 可 以这 样 考 虑 这 个 问题 (复 杂 因 子 组 合 时 一 样 处 理 )。 向量
的位置 ,我们就可能得到全局最优的解,当然 如果 只有一个 峰
中 的值 可 以根 据 因子 中不 同 的水 平 分 成 许 多组 。 函数 就 是 独
值 那 么 我 们 注 定 得 到最 优 解 。因 此 可 以 应 用 R软 件 众 多 的软
立地用于这些组 。得 到的值是这些 函数 结果 的向量,并且 以
件 包 联 合 解 决最 优 解 的 问 题 。
因子的水平属性标记 。 因为子类的大小是不规则的 ,所 以向
量和作为标签的因子的组合 就是我们偶尔会提及的 不规则数
作者简 介:李欢 (1970.),女 ,吉林 白城人 ,副教授 ,研究方 向为
组 (raggedarray)的一个特例罢 了。当子类大小是一致的时候
计 算 机 算 法 。
7