在 SPSS Statistics 和 Modeler 中挪用 R 语言的实现和应用
1. 简介
R 语言是一个开源的数据阐明情况,是由 Robert Gentleman 和 Ross
Ihaka 两位统计学家于 1992 年成立,用以更好的举办统计计较和画图。R 语言的安装包较小,由于 R
可以通过安装扩展包(Packages)而获得加强,所以其成果已经远远不限于统计阐明和画图。今朝 R
有四千多个包,漫衍在统计、金融、经济、尝试设计、呆板进修、社会科学、空间数据阐明、大数据高机能运算、图形展示、可反复陈诉生成等快要 30
个大的规模,R
语言的别的一个优势在于可以快速的以包的形式跟踪新的统计学等其他学科新的要领和思想,只需加载写好的包,就可以把新的要领和思想用到实践中。
SPSS
Statistics 最早在版本 14 时就提供了可编程扩展模块来实现嵌入 Python、R 语言或 .NET 的编程节制。当前提供的最早 R
语言接口软件包为 2011 年注册 SourceForge 的一个开源项目 (Peck, 2011),可以或许将 R 集成到 SPSS
Statistics 18。随后的版本 19、20、21,以及今朝的 22 都移到了 IBM 的开拓网站 (IBM),跟着 Statistics
的进级而推出相应的新版本。进一步,通过在 SPSS Modeler 中利用 SPSS Statistics 节点的方法,又能将 R
语言很容易地引入到 Modeler 的建模设计中。这样,我们就可以或许在 SPSS 的情况中很利便操作 R
语言的一些特点来完善我们的研究和事情,出格是 R 所提供的各类新兴的统计、阐明和挖掘的算法和技能,以及越发烂漫和富有创意的图形展示。
本
文将先容在 SPSS Statistics 和 SPSS Modeler 中融入 R 语言的方法和进程,而主要以实例展示通过挪用 R 语言来拓展
SPSS Statistics 和 SPSS Modeler 的计较阐明和画图演示的成果,从而充实地团结了 SPSS 的专业集成、便捷利用和 R
语言的机动易扩展、画图富厚的各自优势。
2. SPSS 挪用 R 语言的要领
这节先容在 SPSS Statistics 和在 SPSS
Modeler 挪用 R 语言的要领,重点是前者的实现。尔后者需要在前者已有的情况中,利用 SPSS Statistics
输出节点实现,也就是说在 SPSS Modeler 中挪用 R 语言,也必需先安装 SPSS Statistics 软件。
2.1 SPSS Statistics 挪用 R 语言的实现方法
首
先是情况的筹备。在已经安装了 SPSS Statistics 和 R 语言的情况中,需要新安装软件包 SPSS Statistics
Essentials for R 来实此刻 SPSS Statistics 中挪用 R
语言。这个新的软件包就像一座桥梁将两个统计阐明软件接洽起来。
图 1. 用 Essentials for R 毗连 R 语言和 SPSS Statistics
但应留意的是,针对差异的 SPSS Statistics 版本,需要有相对应的 R 语言版本和 SPSS Statistics Essentials for R 版原来匹配,其干系参照如下表格 :
表 1. SPSS Statistics 和 R 语言版本匹配表
注:
1.前四个版本需要在IBM官网:https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-tspssp下载
2.最后一个版本需要在http://sourceforge.net/projects/ibmspssstat/下载
本
文以下都以 Windows 操纵系统中,利用 SPSS Statistics 22, R 2.15.3 和 SPSS Statistics
Essentials for R 22.0.0 为例来讲授。安装 SPSS Statistics Essentials for R
软件包时会要求输入已有的 SPSS Statistics 和 R 语言情况,并成立接洽。下面我们就来先容在 SPSS Statistics
中挪用 R 的最简朴实现进程。
第 1 步:通过 SPSS Statistics 菜单:文件 –> 新建 –> 语法,打开 语法编辑器
图 2. 挪用 R 的第 1 步——利用语法编辑器
第 2 步:在编辑框中输入对应的语法剧本,遵循布局为:
代码 1. 嵌入 R 代码的根基语法布局
BEGIN PROGRAM R. …… 中间为R代码 …… END PROGRAM
如下图所示:
图 3. 挪用 R 的第 2 步——在语法框中输入剧本
第 3 步:选取这段语法,执行菜单的:运行 –> 选择,或点击图标绿色三角,或执行快捷呼吁 Ctrl+R, R 代码阐明的功效就会在 SPSS Statistics查察器中输出
图 4. 挪用 R 的第 3 步——运行功效显示
#p#分页标题#e#
以
上是在 SPSS Statistics 中嵌入 R 代码的最简朴形式。假如但愿在 R 代码中利用 SPSS Statistics
数据编辑器中的数据集,可以利用函数 spssdata.GetDataFromSPSS()。在数据编辑器中打开 SPSS 的实例数据
demo.sav,自动定名为【数据集 1 】。在语法编辑器中执行代码:
3. SPSS 挪用 R 语言的实例
3.1 操作 SPSS Statistics 优化 R 语言的数据显示
因
为 R 语言是基于呼吁行的文本显示方法,对付常见的多维数据不能很直观地展示。当把 R 语言集成到 SPSS Statistics 后,就可以挪用
Statistics 专门设计的一些函数,在查察器中更形象地利用数据透视表(pivot table)来展示多维数据。以下例子为 R 中自带数据
HairEyeColor,其统计了差异头发和眼睛颜色的男女学生的学生人数:
图 9. R 中的数据 HairEyeColor
由
此可见,这个数据有头发颜色(Hair)、眼睛颜色(Eye)和性别(Sex)3
个维度(dimension),而怀抱(measure)是统计的人数。在根基的 R 中只能显示二维数据表格,包括一个行维度(row
dimension)和一个列维度(column
dimension)。更高维的数据则解析为多个二维表格——即解析到这两个维度以外的其他维度取值的组合数目标表格中,其它维度的组合称作层维度
(layer dimension)。这个例子中第三个维度 Sex 有 Male 和 Female
两个取值,所以用两个二维数据表格来展示整个数据。假如需要在一个表格中展示整个多维数据,传统中利用平表(flat table),譬喻:
图 10. 平表 (flat table) 显示多维数据
将
三个维度别离作为 3 列,它们取值的组合正好就对应了第 4
列的人数怀抱(measure)。这样的显示不直观,并且各个维度的取值会反复显示多次,太累赘。而在 SPSS Statistics
中可以界说巨大的数据透视表(pivot table),譬喻在一个数据透视表中显示 HairEyeColor 的所有三个维度:
图 11. 透视表 (pivot table) 显示多维数据
SPSS Statistics 中数据透视表的布局和各部门界说如图。
图 12. SPSS Statistics 中数据透视表的布局和界说
你可将多维数据中的一个或多个维度设定在任意的行维度、列维度或层维度上,这些维度的取值称作种别(category),而怀抱值放在单位(cell)中。依据以上数据透视表各个部门的界说,建设一个数据透视表包罗以下四个根基步调:
- 建设 BasicPivotTable 类的一个实例
- 增加维度
- 界说各个维度的种别
- 配置单位值
而各个步调中需要挪用相应的 SPSS Statistics 函数。这里是所有用于数据透视表显示的类和要领包罗:
表 2. 显示数据透视表的类和要领
按照以上的步调,利用数据透视表显示的函数,我们给出一个 R 语言代码的例子:
代码 4. SPSS Statistics 中显示数据透视表
BEGIN PROGRAM R. spsspkg.StartProcedure("MyProcedure") demo <- data.frame(HairEyeColor) # 建设一个BasePivotTable的实例 table = spss.BasePivotTable("Hair and Eye Color of Students", "OMS table subtype") # 增加三个维度:前两个行维度(Hair and Eye),最后一个列维度(Sex) dim1=BasePivotTable.Append(table,Dimension.Place.row,names(demo)[1]) dim2=BasePivotTable.Append(table,Dimension.Place.row,names(demo)[2]) dim3=BasePivotTable.Append(table,Dimension.Place.column,names(demo)[3]) # 界说各个维度的种别 ctg1=BasePivotTable.SetCategories(table, dim1, as.list(apply(as.matrix(levels(demo[[1]])),1,spss.CellText.String))) ctg2=BasePivotTable.SetCategories(table, dim2, as.list(apply(as.matrix(levels(demo[[2]])),1,spss.CellText.String))) ctg3=BasePivotTable.SetCategories(table, dim3, as.list(apply(as.matrix(levels(demo[[3]])),1,spss.CellText.String))) # 配置单位值 MyCellFun <- function(x) cell = BasePivotTable.SetCellValue( table, list(spss.CellText.String(x[1]), spss.CellText.String(x[2]), spss.CellText.String(x[3])), spss.CellText.Number(as.numeric(x[4]))) apply(demo, 1, MyCellFun) spsspkg.EndProcedure() END PROGRAM.
#p#分页标题#e#
运行以上的语法代码就会得到前面的多维度数据透视表输出。应该留意的是,利用这些这些类和要领,
需要在一个 Procedure 情况中,也就是必需以 spsspkg.StartProcedure() 为开始行,以
spsspkg.EndProcedure() 为竣事行。
3.2 操作 R 语言来加强 SPSS Statistics 的作图本领
R 语言具有机动多样的画图本领,常用的统计图形都可以便捷的在 R 中绘制,个中尚有大量的统计图形的绘制可通过各类 R 的扩展包实现,因而大大富厚了 SPSS Statistics 的图形展示本领。这里以绘制马赛克图为例。
马
赛克图(Mosaic
Plots)是一种有效展示多维列联表数据的东西,它对维数没有限制。马赛克图形看起来就像是若干块马赛克安排在一起,马赛克图中的各个矩阵块与对应的频
数成比例,频数越大,对应的矩阵块就越大。vcd
包(首次利用需要安装,install.packages(“vcd”))中的马赛克图不只仅可以展示多维列联表的数据,同时可以给出各个维度上的独立检
验的信息。
下面以 Statistics 中自带的 demo 数据为例来画马赛克图。该数据共有 6400 行数据,29 个变量,代表着 6400 个小我私家在 29 个指标上的数据信息。demo 数据的部门变量信息如下图:
图 13. SPSS Statistics 中演示数据 demo.sav
由于马赛克图合用于展示分范例变量的列联表(contingency table),这里我们选取 demo 数据中:Marital、Inccat、ed 和 gender 四个分类变量来绘制马赛克图。个中:
四个变量共有 2*4*5*2 个属性值,我们用马赛克图来展示以上的频次统计数据:
首先,在 Statistics 中打开 demo.sav 的数据,然后新建语法如下:
代码 5. 显示马赛克图(Mosaic Plots)
BEGIN PROGRAM R. library(vcd) dat = spssdata.GetDataFromSPSS() mosaic(~ed+gender+marital+inccat, shade=TRUE, legend=TRUE,data=dat) END PROGRAM.
执行语法输出功效:
图 14. 输出图形
上图的左边 ed 是受教诲水平的维度,上边 gender 是性此外维度,右边 marital 是婚姻状况的维度,下边 inccat 是收入程度的维度。我们可以很清楚的看到,在所有 6400 个小我私家中:
图形中的颜色显示的是独立模子拟合的残差的巨细,本图可以清楚的看出未完成高中学业(ed 为 1)已婚(marital 为 1)收入在 25000 美元以下(inccat 为 1)的男性(gender 为 m)单位格的拟合欠佳。
3.3 操作 R 语言机动的外部接口成果来拓展 Statistics
R
语言有富厚的外部接口成果。譬喻,今朝所有版本的 SQL 都有对应的接口(相应的 R 包)毗连 R 语言;XML
包可以理会网页编码的代码,利便的提取网页中的数据;R 基本包中也有直接读取网页上类型好的数据;googleVis 包提供了直接毗连 Google
Analytics 上的数据以及阐明东西等等。这里我们主要先容 ggmap 包直接挪用 Google Map 上舆图的成果。
#p#分页标题#e#
SPSS Statistics 同样有画舆图的成果,因为是在 UI 配置,较为巨大,可参考这个网页相识其用法: http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1108zhangxp/index.html。这里将以实例来展示在 SPSS Statistics 中挪用 R 语言的方法来绘制舆图,对熟悉 R 语言的用户,较量简朴。
David
Kahle 和 Hadley Wickham 操作 Google 的 API 开拓了 ggmap 包。该包可以直接从 Google
提取舆图信息,然后在 R 语言中绘制。为此,需要首先在 R 语言中安装 ggmap 和 mapproj 包。只要是 Google Map
中存在的处所,用 ggmap
包都可以绘制,好比北京市舆图、中关村软件场舆图等。而在实际应用中,凡是会在绘制的舆图上添加一些有意义的信息,这里将在中国舆图上描写出最近一周
(2013.1.2-2013.1.8)在中国产生的所有的地动信息,如下图所示(红点处即为在这一周中产生地动的所在):
图 15. 中国一周(2013.1.2-2013.1.8)地动产生所在显示
得到以上输出的代码为:
代码 6. 显示中国一周(2013.1.2-2013.1.8)地动产生所在
BEGIN PROGRAM R. library(ggmap) library(mapproj) library(XML) # 从网页上抓取地动数据,并举办清理 webpage <-'http://data.earthquake.cn/datashare/globeEarthquake_csn.html' tables <- readHTMLTable(webpage,stringsAsFactors = FALSE) earthqk <- tables[[6]][-1,c(1,3,4)] names(earthqk) <- c('date','lan','lon') earthqk$lan <- as.numeric(earthqk$lan) earthqk$lon <- as.numeric(earthqk$lon) earthqk$date <- as.Date(earthqk$date, "%Y-%m-%d") # 获取都市数据 webpage<- 'http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9B%BD%E5%9F%8E%E5%B8%82%E5%88%97%E8%A1%A8' tables <- readHTMLTable(webpage) cities <- tables[[2]][2:10,c(2,3,5)] names(cities) <- c('cname','name','pop') cities$pop <- as.numeric(gsub(',','',cities$pop)) cities$name <- as.character(cities$name) cities <- cbind(cities, geocode(cities$name)) # 构建最近地动的漫衍图,附加上重要都市的图标和名字 map <- get_googlemap(center='china',zoom=4,scale=2,maptype='terrain') ggmap(map,extent='device')+ geom_point(data=earthqk,aes(x=lon,y=lan),colour = 'red4',alpha=0.5,size=2)+ geom_point(data=cities,aes(x=lon,y=lat),colour = 'black',shape=1,size=5)+ geom_point(data=cities,aes(x=lon,y=lat),colour = 'black',size=2)+ geom_text(data=cities,aes(x=lon,y=lat,label=name),size=4,hjust=-.4,vjust=0) END PROGRAM.
先从国度地动科学数据共享中心得到地动日期和经纬度数据。然后,在 wiki
的中京城市列表中抓取了都市名称,并用函数 geocode() 获得都市的经纬度信息。最后挪用 get_googlemap()
获得中国的舆图图片,用 ggmap() 显示为 ggplot2
名目工具,参照经纬度再叠加上之前的地动所在和都市。这样就完成了一个用舆图展示数据的简朴例子。
ggmap
中提供了六种舆图的泛起形式,常用的有卫星图、地形图、阶梯图、殽杂图等等。该包获取舆图信息的途径也有多种,别离为 Google Maps,
OpenStreetMap ,Stamen Maps ,CloudMade maps
四种获取舆图信息的途径,可以针对差异需求选择差异的舆图信息来历。更多具体的细节请查阅 ggmap 包的文档。
3.4 在 SPSS Modeler 中应用 R 语言做阐明和图形展示
这里以 Modeler 中 demo 中的 car_sales_knn.str 为例,该数据中有 16 个变量,159 行数据,这里只选取个中 8 个持续变量,这 8 个变量别离为:
这
里但愿做出这 8
个变量的相干系数图,以此来相识这八个变量互相之间的相关水平。统计阐明中经常需要处理惩罚变量之间的相关干系,我们可以很利便的计较出两个变量的相干系数,
以及相干系数检讨,进而可以做出散点图来阐明。而利用 corrplot 包(首次利用,需要安装该包
install.packages(“corrplot”))中的 corrplot 图就可以很直观地展示多变量之间的相干系数巨细。
#p#分页标题#e#
首先在 Modeler 中打开 car_sales_knn.str,在该 stream 中插手 Statistics Output 节点,编辑该节点,点选该节点的句法的语法编辑器,输入雷同在 Statistics 中的代码:
图 16. 在 SPSS Modeler 中嵌入 R 代码显示图形
运行后,获得 Modeler 输出的截图:
图 17. 图形输出
由上图我们可以发明:
本图尚有更多的发明,这里不再罗列。
corrplot 呼吁中尚有许多参数可以用来变动展示的形状,好比可以用方格来取代圆,也可以变动颜色等。因为相干系数矩阵是一个对称矩阵,操作 corrplot 可以很利便的将上三角阵绘图,下三角阵来显示相干系数的数值,代码如下:
图 18. 在 SPSS Modeler 中嵌入 R 代码显示图形——修改名目
个中 tl.pos 是配置 text label 的位置,”d”暗示在 diagonal,而”n”为不添加;cl.pos 则是 color label 的位置;diag=FALSE 暗示不在对角单位中显示相干系数,不然就会都是 1。输出的功效如下图:
图 19. 图形输出
右上角和左下角相对称,能提供更多的信息。
竣事语
SPSS Statistics 有自身强大的优势,更可以集 R
语言的优势为我所用,为差异的统计阐明目标提供全面的处事和成果。这里先容了 SPSS Statistics 以及 SPSS Moderler
中挪用 R 语言的进程和例子,以及操作该挪用进程借用 R 语言快捷的绘制图形的优势,来利便的在 SPSS
中实现差异的需求。虽然更多的应用,有待列位读者一连的开拓。