
做问卷数据分析的人十个里有八个最先接触的显著性检验就是卡方检验。尤其是“不同性别的人消费意愿有没有差异”“不同学历背景的人对某个方案的态度一不一样”这类问题用SPSS拉一个交叉表看一眼p值结论就出来了。卡方检验入门门槛确实低但我在实际帮别人审数据、改论文的过程中发现大部分人只是机械地“跑一个表、抄一个p值”指标选错、适用条件没满足就硬跑、结果解读只盯着显著性看这些问题几乎是批量出现的。这篇文章我就站在实际干活的角度把SPSS做卡方检验这件事完整捋一遍从原理大白话讲起到数据准备、菜单操作、结果解读、报告写法再到我踩过的那些坑和积累下来的检查习惯。内容尽量做成“手把手抄作业”的格式同时把很多教程不会写的细节补上。1. 先用大白话搞懂卡方检验在检验什么1.1 卡方检验就是在“看实际数和理论数差多远”很多教程一上来就写公式 (\chi^2 \sum \frac{(O-E)^2}{E})把人吓跑。其实这个公式背后逻辑特别简单我先按“两件事无关”的假设算出每个格子里理论上应该有多少人再用实际统计回来的人数去跟这个理论数比差别越大就越说明“两件事无关”这个假设不成立。打个比方。你手里有100颗糖要按男女比例分给50个男生、50个女生如果性别跟“喜不喜欢吃糖”完全无关那按理说男生里喜欢糖的和不喜欢糖的各占一半女生也一样。结果你数完发现男生有40个喜欢、10个不喜欢女生反过来——这就跟“按比例均匀分配”的预期差得太多你自然会怀疑性别跟吃糖喜好恐怕真有关系。卡方检验干的正是这件事把里面“差多少”量化成一个卡方值再结合自由度判断这个差别是不是大到能排除偶然因素。公式里 (O) 是实际观察频数(E) 是期望频数。期望频数的算法是“行合计乘以列合计除以总样本量”SPSS会自动算但你自己得懂。自由度是 ((行数-1)\times(列数-1))比如经典的2×2四格表自由度就是1。1.2 三类最常用的场景卡方检验在问卷分析和市场调研里基本就三张脸第一类是拟合优度检验看一组分类数据的分布是否符合某个理论比例。比如你做了一个用户调研理论上各年龄段的用户占比应该是20%、30%、50%收回来的数据是不是符合这个比例就可以用卡方检验。第二类是独立性检验这是最常用的。看两个分类变量有没有关联比如性别和购买行为、职业和品牌偏好、教育程度和运动习惯。SPSS里用“交叉表卡方”跑的就是这个。第三类是多个独立样本的率或构成比比较比如比较三种治疗方案的有效率是否有差异本质上也归入独立性检验框架。医学统计里最经典的“药物有效无效”2×2表就是简化版的独立性检验。1.3 什么情况别硬用卡方检验卡方检验虽好但很多人对它产生了路径依赖遇到什么都想卡方一下。以下情况请绕道两个变量都是连续变量比如身高和体重该用相关分析或回归卡方检验会把信息白白丢掉。数据是配对设计同一批人治疗前后对比2×2配对表要用 McNemar 检验普通卡方会把相关结构忽略掉结论容易失真。样本量太小比如总样本不到40或期望频数出现小于1的情况此时卡方检验的结果非常不稳定应该优先考虑 Fisher 精确检验。分类变量水平非常多、格子极其稀疏卡方近似效果会很差可能要合并类别或者换用其他方法。另外提一句在SPSS Modeler这类数据挖掘工具里卡方检验也常作为特征筛选手段用来判断哪些分类输入变量跟目标变量真正有关联原理和这边完全一致只是放在建模流水线里批量跑。2. SPSS做卡方检验前的数据准备2.1 变量类型和测量尺度的设置比想象中重要我见过太多人SPSS用熟了变量测量尺度还是默认的“标度”结果交叉表跑出来乱成一团菜单里甚至找不到“卡方”可勾。根源就在变量视图里没有把测量尺度设对。在SPSS变量视图中每一行对应一个变量“测量”这一列有“标度”“有序”“名义”三种。卡方检验处理的分类变量通常应该设为“名义”比如性别、职业、是否购买、地区或“有序”比如学历低中高、满意度不满意/一般/满意。如果被设成“标度”SPSS会把它当成连续变量处理交叉表就不会按分类水平去分组。同时别忘了“值”这一列。比如你的性别变量用0和1录入0代表男1代表女必须在值标签里设置好。不设置的话结果里显示的全是“0”“1”写报告时容易出错。很多新手跑完检验才发现表格里数字看不懂然后再回来补标签一次两次之后你会形成条件反射先设标签再做分析。2.2 两种数据结构明细录入和汇总权重SPSS里做卡方检验数据文件有两种常见形态很多人分不清楚。第一种是明细数据也就是一个样本占一行。比如调查了200个人数据表里就有200行每一行记录这个人的性别、购买行为。这种格式最直观现实中从问卷平台导出的数据基本都是这种。第二种是汇总频数表只有几行数据每一行代表一种组合然后附带一个频数变量。比如只有四行性别购买行为人数男未购60男已购40女未购40女已购60用这种格式跑卡方检验之前必须先做一步加权菜单栏“数据 加权个案”把“人数”选入“频率变量”确定。加权完之后SPSS才明白你其实有200个样本。忘记加权是最常见的新手错误跑出来的卡方值会严重失真因为样本量完全错了。如果你想练手又一时找不到练习数据我建议就按上面这个表自己敲进去变量视图建三个变量“gender”“purchase”“count”设置好值标签和测量尺度再敲四行数据加权之后就能跟着下文完整走一遍流程。2.3 缺失值、分拆文件、多重插补的注意点数据里有缺失值是很正常的。SPSS默认在做交叉表时会按分析来排除缺失个案也就是说只有性别和购买行为都不缺失的样本才会进入卡方检验。这个逻辑大多数时候没问题但你要留意如果缺失比例过高结果的代表性会受影响。如果你要分地区、分年龄段分别做卡方检验可以用菜单“数据 分拆文件”把分组变量放进去再执行交叉表SPSS就会按组分别输出结果。这里必须提醒一个经典大坑做完分组分析后一定记得回到“分拆文件”对话框选回“分析所有个案不创建组”否则后面所有分析都会继续按组输出你会莫名得到一堆看不懂的结果。如果数据缺失比较多你用了多重插补那卡方检验就要在插补数据集框架下进行SPSS会在输出中给出合并的检验结果。不要直接拿补全后的单个插补数据集去跑普通卡方那等于无视了插补带来的不确定性。3. SPSS卡方检验完整操作菜单、选项、语法3.1 菜单入口与统计量勾选数据准备好之后卡方检验的操作路径非常固定分析 描述统计 交叉表。不同版本中文界面可能显示为“描述统计”或“描述性统计”但都在“分析”菜单下面不要跟“比较平均值”里的内容混淆。打开后“行”放自变量比如性别“列”放因变量比如是否购买布局方向其实没有绝对规定但建议把你要比较的群体放在行上要观察的结果放在列上这样后面读列百分比特别顺。点开“统计量”按钮勾选“卡方”。如果你的变量是名义变量建议同时勾选“Phi和Cramer V”这样结果会输出效应量后面写文章时能用上。如果是2×2四格表这两个系数都能看如果是R×C表比如3行4列主要看Cramers V。3.2 单元格选项怎么勾最实用“单元格”按钮里有很多显示项我建议固定勾选这几项观察值就是实际数默认就有。期望值理论频数必须有这是判断卡方适用条件的关键。行百分比和列百分比至少勾一个通常建议勾列百分比。因为列的方向放的是因变量比较不同行的百分比差异时看列百分比最直观。标准化残差这个是进阶项但在找“差异到底出在哪一行”时非常好用。不建议一上来把百分比全勾上输出会非常臃肿你自己看都烦。标准化残差的原理是 ((O-E)/\sqrt{E})近似服从标准正态分布绝对值大于2的格子值得重点关注这是卡方显著之后定位差异来源的利器。3.3 用SPSS语法一次跑完新手都在对话框里点来点去但跑多了你会发现语法才是最稳定的。先手动设置好一次点击“粘贴”按钮SPSS会把对应的语法生成到语法窗口保存下来以后换数据直接改变量名就行。一段典型的卡方检验语法长这样WEIGHT BY count. CROSSTABS /TABLESgender BY purchase /FORMATAVALUE TABLES /STATISTICSCHISQ PHI /CELLSCOUNT EXPECTED ROW COLUMN SRESID /COUNT ROUND CELL.如果你用的是明细数据第一行“WEIGHT BY”直接删掉即可。语法跑出来的结果和对话框一模一样但胜在可复现。如果你还需要把连续变量切分成分类变量比如年龄分组可以用“转换 计算变量”配合IF语句实现这一步在语法窗口里写也同样方便。4. 结果怎么看重点不只是p值4.1 交叉表怎么读SPSS输出结果的第一张表是交叉表每个格子里的第一个数字是实际频数第二个数字是期望频数。当你勾了“期望值”之后这两个数字会上下排列。这一步不能跳过因为看一眼期望频数就能判断卡方检验的结果能不能信。以我前面举的200人案例为例未购已购合计男6040100女4060100合计100100200每个格子对应的期望频数都是50。为什么因为男性合计100人、已购合计100人无关联时男性已购的理论数就是100×100÷20050。四个格子的期望值都是50远超5说明用Pearson卡方是稳妥的。如果期望值和观察值差距很大标准化残差就会突出。比如某个格子的标准化残差是2.6那你基本可以锁定这个格子的观测频数异常高于理论预期是卡方显著的主要贡献者。4.2 卡方检验表里的多个指标怎么选很多人打开卡方检验表都懵了为什么一次输出好几行我应该读哪一行这里要分清几个指标各自的脾气。Pearson卡方最常用的默认指标。只要条件满足优先读它。连续性修正只出现在2×2表中是Yates连续性校正。当总样本量n≥40且至少一个期望频数在1到5之间时建议读这一行因为未校正的Pearson卡方会倾向高估显著性。似然比在大样本下与Pearson卡方非常接近多用于模型比较场景常规分析中可以作为辅助参考。Fisher精确检验在2×2表中SPSS会自动输出。当样本量n40或存在期望频数小于1时这是最可靠的指标。线性关联仅当两个变量都是有序分类变量时才比较有意义它检测的是一种趋势而不是一般性关联。判断逻辑可以总结成一句话先看最小期望频数条件完全满足就读Pearson卡方2×2表且有小期望频数就读连续性修正或FisherR×C表遇到期望频数过小先尝试合并类别合并后仍不行再考虑Fisher精确检验在“精确”按钮里选。4.3 效应量Phi系数和Cramers Vp值只能告诉你“有没有关联”不能告诉你“关联有多强”。样本量大到一定程度任何细微差别都能跑出p0.05所以光看p值很容易被带偏。Phi系数适用于2×2表Cramers V适用于任意行列数的表。判断标准比较常用的经验是0.1算小效应、0.3算中等、0.5算大。但要说明的是当自由度增大时效应量判断基准会相应下调所以更严谨的做法是查阅对应自由度的效应量解释表。在SPSS输出中Phi和Cramers V在“对称度量”表里Sig.列如果小于0.05说明关联显著这跟卡方检验的结论是一致的。写报告时把卡方值和效应量一起报上去比单报一个p值专业得多。5. 实战案例性别与购买行为的关联分析5.1 案例数据与预期结果为了让你能完整走一遍流程我设计一个最常见的研究问题性别是否与“是否购买某产品”有关假设调查了200人其中男性100人、女性100人。得到的数据分布是男性已购40人、未购60人女性已购60人、未购40人。这个数据从百分比看女性购买比例是60%男性是40%看起来有明显差异但能不能说“性别有影响”得看卡方检验。期望频数前面算过四格都是50完全满足卡方检验适用条件。计算卡方值[ \chi^2 \frac{(40-50)^2}{50}\frac{(60-50)^2}{50}\frac{(60-50)^2}{50}\frac{(40-50)^2}{50}8 ]自由度为1对应p值约0.005。这是一个显著的结果。5.2 完整操作复现如果你是明细数据直接有200行记录就跳过加权那一步如果你拿的是四行汇总频数表先做“数据 加权个案”。然后按顺序操作选择“分析 描述统计 交叉表”。把“性别”放入行“购买行为”放入列。点“统计量”勾选“卡方”再勾选“Phi和Cramer V”。点“单元格”勾选“观察值”“期望值”“列百分比”“标准化残差”。点“确定”查看输出。在输出中找到“卡方检验”表第一行“Pearson卡方”显示值为8.000自由度1双侧显著性约0.005。因为本例每个期望频数都是50条件完美不需要看连续性修正。“对称度量”表里Cramers V等于0.2参照0.1/0.3/0.5的经验值属于中等偏弱但真实存在的效应。这意味着性别差异确实存在但性别只能解释一部分购买行为差异不能过度解读。5.3 结果报告怎么写跑完分析只是第一步很多人卡在“怎么写进报告”。一个比较标准的学术表述是“卡方检验结果显示性别与购买行为之间的关联具有统计学意义(\chi^2(1, N200)8.00, p0.005)Cramers V 0.20为中等偏弱效应。女性受访者的已购比例60%显著高于男性受访者40%。”这里有几个细节值得注意(\chi^2)后面括号里第一个数字是自由度1第二个是样本量200p值不要只写“0.005”而不写检验统计量和自由度效应量建议跟上描述方向时用百分比辅助说明因为卡方检验本身只告诉你“有没有差异”不告诉你“谁比谁多”这是靠交叉表的百分比来体现的。6. 卡方检验高频问题与避坑指南6.1 期望频数小于5怎么办这是被问得最多的问题。SPSS输出里其实已经给了提示比如说“最小期望计数为3.25”很多人根本没注意到。处理原则我总结成三条。第一如果总样本量小于40或者有期望频数小于1直接看Fisher精确检验的结果。第二如果只有一部分格子期望频数位于1到5之间且不超过20%的格子2×2表可以看连续性修正R×C表建议谨慎可以尝试把相邻类别合并比如把“非常不满意”“不满意”合并成“不满意”以减少稀疏格子。第三如果你合并类别后研究解释变得困难那就在方法部分老老实实写明“使用Fisher精确检验”审稿人和老师一般都能接受。6.2 2×2表看连续性修正还是Pearson卡方2×2表是卡方检验里最特殊的一种因为SPSS会自动多输出一个“连续性修正”行。这个修正本质上是把每个格子的偏差减去0.5再平方结果更保守避免小样本下虚报显著。我的经验是当所有期望频数都大于等于5、总样本量大于40时直接读Pearson卡方当样本量大于40但某个期望频数在1到5之间摇摆时读连续性修正保平安当样本量小于40或任何期望频数小于1时别犹豫读Fisher精确检验。只要记住这个“三档判断”四格表基本不会选错。6.3 分组多、变量多怎么做才不乱如果你有多个分组变量比如不同城市、不同年龄段最忌讳的是手动一次次换变量跑。用“分拆文件”功能一次交叉表命令就能按组输出完整结果。比如说你想看男性样本和女性样本中“职业与品牌偏好”的关联是否都在把性别放分组变量交叉表指定职业和品牌偏好SPSS会分别给出两张或更多完整的卡方检验表。另一个常见场景是问卷里同一维度有多道题比如态度类问题有5个题项你想分别看每个题项跟性别的关系。我的建议是一个一个做不要试图把几道题合并成一个变量再跑卡方那样解释起来非常别扭。这种情况和做效度分析时按维度逐个验证的思维一致拆开跑反而清爽。还包括一种比较常见的数据挖掘用法聚类分析得到类别变量之后再用卡方检验看不同聚类群体的画像指标差异这种做法在用户分群报告里很常见原理就是普通的R×C表卡方。6.4 配对数据为什么不能用普通卡方这一点我在实际审稿中见过不少错误。比如你调查同一组人在培训前后的态度变化得到的是“前后配对”的2×2表数据不再是独立样本普通卡方检验会把同一个人的两次测量当成两个独立个体夸大了样本量结论必然不靠谱。这类数据应该用 McNemar 检验SPSS路径是“分析 非参数检验 旧对话框 2个相关样本”选择“McNemar”即可。虽然操作简单但思路要转变你比较的是同一个体前后变化的方向而不是两组人之间的率。最后再分享一个我的固定习惯跑完卡方后永远不直接关输出先扫一眼“最小期望计数”的脚注再瞄一眼“对称度量”表。这一步花不了10秒钟但能拦住绝大多数的误用。毕竟卡方检验本身不难难的是每一次都确保条件满足、指标选对、解读到位。