第八章 图表制作
把一份数据集跑完描述统计、假设检验、方差分析与回归,得到的终究是一串统计量:均值、显著性、回归系数、残差。这些数字本身是对的,但要让读者在几秒内抓住数据的轮廓,文字与表格远不如一张图来得直接。图表的作用,正在于把抽象的统计结果还原成肉眼可判的形状:分布是偏是对称、两组均值差了多少、两个连续变量是否同步起伏。本章沿着前七章的分析脉络,说明在 PSPP 里如何把数据画成散点图、直方图、条形图、箱线图,以及哪些图在 PSPP 当前版本里画不出来、又该往哪里绕。
需要提前建立的一个基本认知是:PSPP 的作图能力是"够用"而非"全能"。它不追求 SPSS 那种完整的图表引擎,而是把最常用的几种图形拆成几条清晰、可复现的命令。理解这一点,便能坦然接受本章列举的诸多限制,而不会在找不到某个菜单时误以为是自己操作失误。
8.1 图表命令总览
PSPP 里画图,主要有两条路径。
第一条是 GRAPH 命令。图形界面下它位于菜单 Graphs → Legacy Dialogs → … 之下(界面推断,手册未逐项文档化),子菜单再按散点图、直方图、条形图细分为 Scatter/Dot、Histogram、Bar 等项。GRAPH 是 PSPP 专门负责"一次画一张图"的命令,它把最常见的三种图形——散点图、直方图、条形图——都收在一个命令名下,靠不同的子命令区分。
第二条路径,是借用其他分析命令内嵌的图形子命令。前面几章已经反复遇到:FREQUENCIES 可以顺带画直方图与条形图(第四章),CROSSTABS 能画条形图(第四章),EXAMINE 能画箱线图、直方图与正态概率图(第四章)。这些图形不是独立命令,而是附着在主分析之上、随输出一并产生的副产品。本章会逐一说明哪些图走 GRAPH、哪些图只能借道其他命令。
关于 GRAPH,有一个约束必须一开始就说清:一次调用只能画一种图。GRAPH 的子命令只有 HISTOGRAM、SCATTERPLOT、BAR 三种可选,且三者互斥——你在一条 GRAPH 语句里写了 /SCATTERPLOT 就不能再写 /HISTOGRAM。想把散点图和直方图都画出来,就得写两条 GRAPH 命令,各画各的。这与 SPSS 里某些可一次堆叠多张图的对话框不同,是 PSPP 的语法事实,后面 8.6 节还会再次强调。
* 一条 GRAPH 只能画一种图,以下两条命令各司其职
GRAPH /SCATTERPLOT = height WITH weight.
GRAPH /HISTOGRAM = weight.理解了这个总览,下面三节就按图的类型逐个展开。
8.2 散点图 GRAPH /SCATTERPLOT
散点图用来呈现两个连续变量之间的关系形态,是相关分析与回归之前最该先看的一张图(呼应第七章 7.1、7.2 节)。在 GRAPH 里,散点图由 /SCATTERPLOT 子命令承载,基本语法为:
GRAPH /SCATTERPLOT[(BIVARIATE)] = var1 WITH var2 [BY var3].var1 与 var2 是横、纵坐标上的两个连续变量,二者之间用 WITH 连接;BIVARIATE 关键字可写可不写,指明这是"双变量"散点图,省略时 PSPP 也按双变量处理。BY var3 是可选的分组项:一旦写上,PSPP 会按 var3 的不同取值给点着色,把原本混杂的一团点按类别拆成几组,便于一眼看出不同类别在关系上的差异。BY 引入的 var3 通常是分类变量(例如性别),它只改变着色与分组,并不改变横纵坐标本身的含义。
沿用第七章 7.2 的身高—体重数据,画一张基础的散点图:
DATA LIST LIST /id (A4) height (F4.0) weight (F4.0) gender (F1.0).
BEGIN DATA.
P001 172 65 1
P002 168 60 2
P003 180 75 1
P004 160 52 2
P005 175 70 1
P006 165 58 2
P007 178 72 1
P008 158 50 2
P009 170 63 1
P010 182 78 1
P011 166 57 2
P012 174 68 2
END DATA.
VARIABLE LABELS height '身高(厘米)' weight '体重(千克)' gender '性别'.
VALUE LABELS gender 1 '男' 2 '女'.
GRAPH /SCATTERPLOT = height WITH weight BY gender.这里 height 在横轴、weight 在纵轴,BY gender 使男性与女性的点以不同颜色呈现。输出查看器中,这张图会出现在本次语法运行的图形区;若点的整体由左下向右上斜向铺开,说明身高越高体重越重,线性关系成立,这时第七章算出的 Pearson 相关系数才有意义。若 BY gender 之后发现两类点的斜率明显不同,则提示性别可能在身高—体重关系中起调节作用,单看全样本的相关就会掩盖这种结构,需在分组后分别考察。需要提醒:散点图本身只呈现形态,不输出任何显著性数字,它扮演的是"先看一眼再决定怎么分析"的侦察角色。图上的每一个点对应数据集里的一个个案,横纵位置由该个案在两个变量上的取值决定,因此点的疏密也隐含了个案的分布密度。
读懂一张散点图,至少要看三件事。第一看走向:点若沿一条斜带铺开,说明两变量存在线性关联,斜率方向即相关系数符号;若带子近乎水平,则关联微弱,此时第七章算出的相关系数会接近 0。第二看形状:若点的轨迹弯成弧线或呈团块状,说明关系并非线性,Pearson 相关系数会低估甚至掩盖真实联系,这时应考虑变换变量或改用非线性模型,而非硬套线性回归。第三看离群:个别远远甩在带子之外的点,可能是一个录入错误,也可能是一个真正特殊的个案——它会在不点明的情况下拉高或拉低相关系数,借助第四章 EXAMINE /ID= 的思路定位到具体个案编号,再决定保留还是核查,是稳健的做法。当 BY var3 引入分组着色后,还应比较各组点的走向是否一致:若男性点的斜率与女性点明显不同,全样本的相关系数其实只是把两种结构混在一起的平均印象,这时分组分别跑相关或回归才更准确。
菜单路径为 Graphs → Legacy Dialogs → Scatter/Dot(界面推断,手册未逐项文档化)。
8.3 直方图 GRAPH /HISTOGRAM
直方图把一个连续变量的取值切进等宽区间(箱),用柱子的高度表示每个区间内落了多少个个案,用来观察单变量的分布形状:是否对称、是否偏态、是否有双峰。在 PSPP 里,直方图有不止一种画法,但 GRAPH 提供的是最直接的一种:
GRAPH /HISTOGRAM[(NORMAL)] = var.等号右边只能写一个变量——直方图描述的是单个连续变量的分布,写两个变量会报错。NORMAL 关键字可选,一旦附上,PSPP 会在直方图之上叠加一条理论正态曲线,方便肉眼比对"数据分布离正态分布还差多远"。这与第四章 4.2 节提到的 FREQUENCIES /HISTOGRAM=NORMAL 思路一致,只是前者从 FREQUENCIES 走、后者从 GRAPH 走。
值得专门记一笔的是:直方图在 PSPP 里有三种不同的"出身",分箱算法各不相同——
GRAPH /HISTOGRAM:按GRAPH自身的分箱策略绘制;EXAMINE /PLOT=HISTOGRAM:采用 Sturges 算法决定箱数(第四章 4.5 节已述及);FREQUENCIES /HISTOGRAM:采用 Freedman-Diaconis 算法决定箱数(第四章 4.2 节提及)。
Sturges 与 Freedman-Diaconis 是统计上两种经典的箱宽确定法,前者对样本量较敏感、后者对异常值更稳健。同一个变量,走不同命令得到的直方图在箱子数量与边界上可能略有差别,但分布的整体形状应当一致;若差别大到结论改变,本就说明分布不稳定,需谨慎对待。Sturges 公式的箱数大致随样本量对数增长,样本量小时箱子偏少、容易把真实的多峰结构抹平;Freedman-Diaconis 则用四分位距来定箱宽,对极端值不敏感,在存在离群点时往往给出更忠实的形态。实务上若两种画法给出的形状相互矛盾,应优先参考 Freedman-Diaconis(即 FREQUENCIES 那条),并回头检查是否有异常个案在作怪。
另一个务必记住的易错点(第四章 4.2 节已点出,这里再次强调):FREQUENCIES /HISTOGRAM 对字符串变量不绘制直方图。直方图依赖连续取值的等距分箱,字符串变量没有这种数值间距,因此遇到字符串变量时 PSPP 会静默跳过直方图子命令。对分类变量想要可视化,应改用 /BARCHART(见 8.4 节),而非硬上直方图。
读懂直方图,重点不在柱子的绝对高度,而在柱子的轮廓。若轮廓大致对称、中间高两边低呈钟形,且叠加的 NORMAL 曲线与柱顶贴合,可初步判断该变量近似正态,第四章 4.5 节提到的 Shapiro-Wilk 检验通常也不拒绝正态假设;若右侧拖出明显长尾(正偏态),均值会大于中位数,此时依赖均值与标准差的描述(第四章 4.3 节)固然可用,但若要做 t 检验之类按正态假设推导的推断,就该警惕或考虑变换。出现两个分立的峰则提示数据可能由两个子群体混成,应当考虑用 BY 分组变量拆开再看(呼应第六章按因素水平分别考察的思路)。直方图与箱线图(8.5 节)是观察单变量分布最互补的一对:直方图看整体轮廓,箱线图看四分位与极端值,二者结合比单看其一更稳妥。
* 体重直方图,并叠加正态曲线
GRAPH /HISTOGRAM(NORMAL) = weight.
* 同一变量的另外两种画法(算法不同)
EXAMINE weight /PLOT=HISTOGRAM.
FREQUENCIES /VARIABLES=weight /HISTOGRAM.输出查看器中,直方图以连续柱子呈现。若柱子大致对称、钟形,且叠加的正态曲线与柱顶贴合良好,可初步判断该变量近似正态;若明显向右或向左拖出长尾,则是偏态,呼应第四章关于"偏态数据该走哪条推断路线"的讨论。菜单路径为 Graphs → Legacy Dialogs → Histogram(界面推断,手册未逐项文档化)。
8.4 条形图 GRAPH /BAR
条形图与直方图外形相近,但用途不同:直方图面向连续变量的分布,条形图面向分类变量的计数或汇总。在 GRAPH 里,条形图由 /BAR 子命令承载,语法结构如下:
GRAPH /BAR = {summary-function(var1) | count-function} BY var2 [BY var3].这里有两种填法。其一是"汇总函数 + 分类变量":先对一个连续变量 var1 套用汇总函数,再 BY 一个分类变量 var2 分出各组。可用的汇总函数有 SUM(求和)、MEAN(均值)、MAXIMUM(最大值)、MINIMUM(最小值)。例如 /BAR = MEAN(income) BY city 表示:按城市分组,画出每个城市收入的均值条。其二是"计数函数":直接写 COUNT、PCT(百分比)、CUFREQ(累积频次)、CUPCT(累积百分比)之一,此时不再需要 var1,PSPP 自动数每个类别出现了多少次。例如 /BAR = COUNT BY city 画出各城市个案数的条形图。
BY var3 是可选的第二个分类变量。一旦写上,条形图从"单组并排"升级为"簇状条图"(clustered bar chart):在每个 var2 的类别下,再按 var3 拆出若干根紧挨着的柱子,用颜色区分。这对于第六章方差分析里"按因素水平比较均值"、第七章回归里"按分组看预测值"的呈现都很实用。
* 簇状条图:按城市分组,再看各城市内不同性别的收入均值
GRAPH /BAR = MEAN(income) BY city BY sex.
* 简单计数条图:各城市个案数
GRAPH /BAR = COUNT BY city.第一条命令会画出以城市为横轴、柱高为收入均值的条形图,而同一城市内不同性别以不同颜色并排成簇,方便直接比较"同城市下男女收入差距"。解读时看柱高与颜色对照:若某城市男女两色高度相差悬殊,提示该城市内性别与收入可能有关联——这恰好呼应第六章按因素水平比较均值、第七章按分组看关系的思路,但条形图只呈现差异大小,要下"是否显著"的结论仍需回到 ONEWAY、GLM 或 T-TEST。
关于汇总函数与计数函数,有两点值得说明。其一是选哪个汇总函数要看变量的性质:MEAN 适合看"平均水平"(如各城市收入均值),SUM 适合看"总量"(如各区域销售额合计),MAXIMUM/MINIMUM 则适合看极值(如各地区最高气温)。它们都要求 var1 是连续变量,因为对分类变量求均值没有意义。其二是计数函数族各自的用途:COUNT 给出每类个案数,对应频率表的频次;PCT 给出每类占总数的百分比,对应有效百分比;CUFREQ 与 CUPCT 是累积版本,自上而下把频次或百分比累加起来,对有序分类变量(如满意度等级)才有解读价值,能读出"落在某等级及以下的比例"。当使用计数函数时,写法里不再出现 var1,直接 GRAPH /BAR = COUNT BY city 即可,PSPP 自行数出各类出现次数。
簇状条图(两个 BY)与简单条图(单个 BY)在解读上有一个微妙差别:簇状图里"同一簇内不同颜色的高度差"是组内比较,而"不同簇之间同色柱的高度差"是组间比较。仍以 MEAN(income) BY city BY sex 为例,男色柱在城市间的高低变化,反映"男性收入是否随城市变动";同一城市内男女两色的高低差,反映"该城市内性别收入差距"。把这两种比较混为一谈,是读图时最常见的误读,应在陈述结论前先想清自己要比的是哪一层。
条形图还有两条"旁门"可走,适合在已有的分析命令里顺手出图:
FREQUENCIES /BARCHART:对分类变量画频次条形图(第四章 4.2 节用法);CROSSTABS /BARCHART:在交叉表分析里为每个行类别画条形图(第四章 4.4 节用法)。
二者与 GRAPH /BAR 的区别在于,它们依附于频率表或交叉表,图形随主表一并输出;GRAPH /BAR 则是独立的作图命令,语法更自由,能直接指定 MEAN、SUM 等汇总函数。菜单路径为 Graphs → Legacy Dialogs → Bar(界面推断,手册未逐项文档化)。
8.5 其他图表路径
前四节覆盖了 GRAPH 的三种图与若干内嵌图形,但还有几类常见图表需要专门的命令路径,且其中有的 PSPP 根本不支持。逐一说明如下。
饼图(Pie Chart)。 必须郑重写明:PSPP 的 GRAPH 命令本身没有饼图子命令,想在 PSPP 里画饼图,唯一的途径是 FREQUENCIES /PIECHART。
FREQUENCIES /VARIABLES=gender /PIECHART.上面这条命令会为 gender 画一张饼图,每类的扇区面积对应其频次占比。切勿尝试在 GRAPH 下寻找 /PIECHART——它不存在,那样写会报错。这条限制与前面散点图、直方图、条形图"都收在 GRAPH 名下"的印象形成反差,专门点出以免读者在 GRAPH 里反复试探。饼图擅长表现"整体中各部分的占比",当类别超过四五类时,扇区过多会难以分辨,此时换成 8.4 节的条形图反而更清楚;饼图也不宜用于表现精确数值比较,它只适合传达大致构成。菜单路径为 Analyze → Descriptive Statistics → Frequencies → Charts(界面推断,手册未逐项文档化)。
箱线图(Boxplot)。 走 EXAMINE,用 /PLOT=BOXPLOT 触发(第四章 4.5 节详述)。箱线图用五数概括(最小值、下四分位、中位数、上四分位、最大值)呈现分布,并把超出 1.5 倍四分位距的点标为可疑极端值,是探查异常个案与组间差异形态的利器。
EXAMINE weight BY gender /PLOT=BOXPLOT.读箱线图时,箱子覆盖中间 50% 的个案(下四分位到上四分位),箱内横线是中位数;须线延伸至 1.5 倍四分位距内的最远点,超出者以独立点标出,即为可疑极端值。若同时 BY gender,则男女各得一个箱子,可直接比较中位数高低、箱子长短(离散程度)以及须线外点的多少——这与第六章方差分析里"按因素水平比较"的关切完全一致:箱子中段错位越大、重叠越少,组间差异往往越值得做正式检验。箱线图还能暴露偏态:若箱子明显偏向上须或下须,说明该组分布不对称,与直方图读出的偏态应相互印证。
正态概率图(Normal Probability Plot,NPPLOT)。 同样走 EXAMINE,用 /PLOT=NPPLOT 触发。它把样本分位数对理论正态分位数作图,若点大致落在一条直线上,支持"数据近似正态"的判断;配合第七章 7.4 节对回归残差的正态性检视尤为常用。
EXAMINE RES1 /PLOT=NPPLOT.正态概率图与直方图、Shapiro-Wilk 检验是观察正态性的三重保险:直方图看轮廓是否钟形,NPPLOT 看点的共线程度,检验给一个量化的 p 值。三者中只要有一处强烈反对正态,就不宜把依赖正态假定的推断结论说得太满;第七章 7.4 节正是借助 EXAMINE /PLOT=HISTOGRAM NPPLOT 来核查回归残差的正态性,这条路径在本章得到完整交代。
需要补充:EXAMINE 只要在 /PLOT 里请求了 BOXPLOT、HISTOGRAM 或 NPPLOT 任意一种图形,PSPP 就会自动附带 Shapiro-Wilk 正态性检验(第四章 4.5 节已说明),权重数据须为整数、累计个案数落在 3 到 5000 之间检验才给出。这几条"非 GRAPH"的作图路径,恰恰是 PSPP 探索性分析的主力,与散点图、条形图互为补充。
8.6 限制与导出
图表这一章若不把"不能做什么"讲清楚,读者很容易在软件里空耗。下面把 PSPP 当前版本在作图上的边界如实列出。
茎叶图不可用。 PSPP 未实现 STEMLEAF 命令,想要以文本方式同时看到频数分布与数值形态的茎叶图,在 PSPP 里画不出来。替代方案是改用 EXAMINE /PLOT=HISTOGRAM 看分布、或 FREQUENCIES 看频次表。这一点第四章 4.5 节末尾也已提醒过。
原始 GPL 自定义作图不可用。 PSPP 未实现 GGRAPH、IGRAPH、XGRAPH 这几条承载原始图形语法(GPL)的命令。这意味着不能用 GPL 语句去自由定义坐标轴、图层、配色或复合图形——GRAPH 命令提供的散点图、直方图、条形图三种模板,就是 PSPP 在自定义作图一端的全部家底。凡需要超出这三种模板的图形(例如小提琴图、热力图、带拟合曲线的散点),PSPP 当前不支持,须把数据导出到其他环境绘制。
GRAPH 单调用单图。 回到 8.1 节的强调:一条 GRAPH 语句只能含 HISTOGRAM、SCATTERPLOT、BAR 三者之一,想凑一组图就得写多条命令。把"画多张图"当成一条命令的选项,在 PSPP 里不成立。
图表随输出生成,整体可导出。 无论走 GRAPH 还是走其他命令内嵌图形,图都作为输出的一部分生成在输出查看器中,与表格、文字混排在一起。整个输出可一次性导出为 PDF、PostScript、SVG、PNG、HTML 等格式(第二章 2.1 节提到的输出格式同样适用于含图的输出);命令行下的 pspp-output 工具支持 convert 操作,把 .pspp 输出文件转成上述格式之一(此点手册未逐项覆盖,说明为通用界面/工具知识,请以你实际安装的版本为准)。需注意,手册未详述输出查看器内"双击图形进入编辑"这类交互步骤——这部分属于通用界面知识,并非 PSPP 手册明示的操作流程,实际能否编辑、编辑到什么程度,请以你运行的 PSPPIRE 表现为准,本书不将其描述为确定的 PSPP 操作步骤。
把上面的限制汇总成一句话:在 PSPP 里画图,能用的是 GRAPH 的三种模板、以及 FREQUENCIES/CROSSTABS/EXAMINE 内嵌的饼图、条形图、箱线图、正态概率图;画不出来的是茎叶图与任何 GPL 自定义图形。遇到后者,最务实的做法是把当前数据集用 SAVE 存成 .sav,再导入支持更丰富图形的环境继续,而非在 PSPP 里反复尝试不存在的命令。
为便于查阅,下表把本章涉及的每种图与其对应的命令路径一并列出,星号表示该项为 PSPP 当前不支持:
| 图形 | 推荐命令 | 备注 |
|---|---|---|
| 散点图 | GRAPH /SCATTERPLOT | 支持 BY 分组着色 |
| 直方图 | GRAPH /HISTOGRAM | 可叠 NORMAL 正态曲线 |
| 条形图(汇总/计数) | GRAPH /BAR | 支持单 BY 与簇状双 BY |
| 条形图(频次) | FREQUENCIES /BARCHART、CROSSTABS /BARCHART | 依附主表输出 |
| 饼图 | FREQUENCIES /PIECHART | GRAPH 无饼图子命令 |
| 箱线图 | EXAMINE /PLOT=BOXPLOT | 自动附 Shapiro-Wilk 检验 |
| 正态概率图 | EXAMINE /PLOT=NPPLOT | 用于正态性核查 |
| 茎叶图 | — | * PSPP 未实现 STEMLEAF |
| GPL 自定义图 | — | * PSPP 未实现 GGRAPH/IGRAPH/XGRAPH |
导出图形的具体流程,在图形界面下通常是在输出查看器里把整份输出另存为目标格式;命令行下则是用 pspp-output 的 convert 子命令把 .pspp 输出文件转为 PDF、SVG、PNG 等(此点手册未逐项覆盖,说明为通用界面/工具知识,请以你实际安装的版本为准)。需要重申:手册未详述输出查看器内"双击图形进入编辑"这类交互步骤,这部分属于通用界面知识,并非 PSPP 手册明示的操作流程,实际能否编辑、编辑到什么程度,请以你运行的 PSPPIRE 表现为准,本书不将其描述为确定的 PSPP 操作步骤。若要把图单独取出来嵌进报告,最稳妥的办法是导出整份输出为 PDF 或 SVG 后再从中裁剪,而非依赖查看器内的就地编辑。
作为全书的收尾,图表制作把"数据到结论"的最后一公里补完:第四章的描述统计让我们读懂分布,第五章与第六章的检验让我们判断差异,第七章的回归让我们建立预测,而本章的散点图、直方图、条形图与箱线图,则把这些结论变成一眼可辨的形状。需要反复记住的是,图是呈现与侦察的工具,不是检验本身——显著性、效应量、方差齐性这些判断,仍要回到对应的命令去求得;图的价值在于让数字的结论更可信、也更易于传达给读者。