下一章 上一章 目录 设置
10、第十章 拟合优度 拟合优度是 ...
-
拟合优度是衡量一个模型对数据解释程度的指标,可在一起这么多年的他,看了这么多遍她留下的数据,真的理解她吗,懂她吗。
陆明远发现自己在做一件以前从来不做的事:反复检查同一个模型。
以前在统计局,他做数据分析,通常是一次性的。数据拿来,模型跑完,结果出来,报告写完,就结束了。他不会反复检查,不会来回验证,不会在一个模型上花太多时间。因为时间不够,因为任务太多,因为没必要。
但现在不一样了。
现在他有的是时间。而且,他面对的不是别人的数据,是她的数据。是他妻子的数据。是他用了三十一年才学会去读的数据。
所以他反复检查,反复验证,反复琢磨。
今天他要做的,是拟合优度。
拟合优度是衡量一个统计模型对数据解释程度的指标。通常用R?表示,取值范围0到1。R?越接近1,说明模型对数据的解释力越强;越接近0,说明解释力越弱。
他之前已经做了很多模型:情感指数对出差天数的回归,消费增量对出差天数的回归,日记次数对出差天数的回归,等等。每一个模型都有一个R?。
他想知道,这些模型的拟合优度是多少。他想知道,他对她的影响,能解释她多少变化。
他先从最简单的模型开始:情感指数对出差天数。
数据:2007-2021年,15年的情感指数(Y)和出差天数(X)。
他打开Excel,用之前的数据:
2007: Y=4, X=87
2008: Y=3, X=92
2009: Y=3, X=85
2010: Y=4, X=88
2011: Y=3, X=95
2012: Y=3, X=102
2013: Y=4, X=98
2014: Y=4, X=105
2015: Y=3, X=110
2016: Y=3, X=108
2017: Y=3, X=112
2018: Y=3, X=115
2019: Y=2, X=118
2020: Y=7, X=43
2021: Y=8, X=12
做回归。用软件跑一下。
结果:
Y = 9.82 - 0.062 × X
t值:常数=6.34 (p<0.001),斜率=-4.82 (p<0.001)
R? = 0.64
R?=0.64,意味着出差天数可以解释她情感指数变化的64%。
64%是一个很高的比例。在社会科学的实证研究里,R?能到0.3就算不错,0.5就算很好,0.64是极好了。
也就是说,她心情的好坏,64%可以由他出不出差来解释。剩下的36%,是其他因素——工作、健康、天气、朋友、或者其他他不知道的东西。
但他知道,那36%里,有一部分其实也和出差有关。比如健康,2016-2019年她身体不好,但没告诉他,所以他继续出差。如果告诉他,他可能就不会出那么多差。所以健康的影响,间接也是出差的影响。
还有一部分,是工作的压力。她工作压力大的时候,他可能在出差,也可能不在。但工作压力本身,也和他的出差有关——他不在的时候,她一个人扛工作,压力更大。
所以实际上,出差的影响可能比64%更大。
但64%已经够大了。大到让他无法否认:他是她情绪的晴雨表。
他接着做第二个模型:日记提到他的次数对出差天数。
数据:2007-2021年,日记提到他的次数(Z)和出差天数(X)。
2007: Z=9, X=87
2008: Z=8, X=92
2009: Z=7, X=85
2010: Z=7, X=88
2011: Z=6, X=95
2012: Z=6, X=102
2013: Z=5, X=98
2014: Z=5, X=105
2015: Z=4, X=110
2016: Z=4, X=108
2017: Z=3, X=112
2018: Z=3, X=115
2019: Z=2, X=118
2020: Z=15, X=43
2021: Z=28, X=12
回归:
Z = 24.87 - 0.21 × X
t值:常数=5.21 (p<0.001),斜率=-3.98 (p=0.001)
R? = 0.55
R?=0.55。出差天数可以解释她日记里提到他次数变化的55%。
55%,也很高。她写不写他,有一半多是因为他出不出差。他出差多,她写得少;他出差少,她写得多。简单直接。
但这里有一个问题:2021年,他出差只有12天,她提到他28次,这个点离回归线很远。如果把这个点去掉,R?会更高。
他试着去掉2021年,重新回归。
数据去掉2021年,剩14年。
Z = 18.32 - 0.15 × X
R? = 0.72
R?升到0.72。说明2021年是异常值,是因为她知道自己快走了,所以拼命写他。正常情况下,出差天数可以解释她日记里提到他次数变化的72%。
72%,几乎四分之三。剩下的28%,可能是她自己的情绪波动、工作忙闲、或者其他因素。
但72%已经足够说明问题:她写不写他,主要取决于他在不在。
第三个模型:消费增量对出差天数。
数据:2007-2021年,消费增量(W)和出差天数(X)。
2007: W=1300, X=87
2008: W=1246, X=92
2009: W=1022, X=85
2010: W=1206, X=88
2011: W=1690, X=95
2012: W=1513, X=102
2013: W=1814, X=98
2014: W=1480, X=105
2015: W=1424, X=110
2016: W=1687, X=108
2017: W=1366, X=112
2018: W=1667, X=115
2019: W=1951, X=118
2020: W=-1056, X=43
2021: W=1525, X=12
回归:
W = -187.6 + 16.8 × X
t值:常数=-0.43 (p=0.67),斜率=2.89 (p=0.01)
R? = 0.39
R?=0.39。出差天数可以解释消费增量变化的39%。
39%不算低,但比前两个模型低。说明消费增量的波动,受出差影响,但还受其他因素影响——比如物价、收入、突发事件等。
如果去掉2020年那个巨大的负值(-1056),R?会更高。
去掉2020年,剩14年:
W = 321.4 + 12.1 × X
R? = 0.51
R?=0.51。出差天数可以解释消费增量变化的51%。
一半。他出差多,她花钱多;他出差少,她花钱少。这个关系,解释了51%。
剩下的49%,是其他因素。但其他因素里,有多少是和他间接相关的?比如,他出差的时候,她一个人无聊,就去逛街,逛街就会花钱。无聊是直接原因,但无聊是因为他不在。所以归根结底,还是和他有关。
他把三个模型的R?放在一起:
情感指数 ~ 出差天数:R? = 0.64
日记次数 ~ 出差天数:R? = 0.55 (0.72 去掉2021)
消费增量 ~ 出差天数:R? = 0.39 (0.51 去掉2020)
最高的是情感指数,64%。最低的是消费增量,39%。
这说明什么?说明他最直接影响的是她的情绪,其次是她的日记,最后才是她的消费。情绪是最直接的,日记是情绪的反映,消费是情绪的补偿。
情绪受影响,她就会写日记,就会花钱。但写日记和花钱,还受其他因素影响,所以R?低一些。
但无论高低,出差都是最重要的解释变量。
陆明远又做了另一个方向的回归:出差天数对情感指数。
这不是因果,只是看看反向关系。
X = 138.4 - 12.7 × Y
R?还是0.64,和之前一样。因为R?是对称的,不管谁对谁回归,都一样。
但系数不一样。情感指数每提高1分,出差天数减少12.7天。也就是说,如果他想让她开心一点,他就得少出差。每多开心1分,就要少出差将近两周。
他从2分到8分,差了6分,需要少出差76天。2020-2021年,他确实少出了那么多差,她的情感指数也确实从2分升到7-8分。
这个关系,用数据验证了。
陆明远继续做,这次是多变量回归。
模型:情感指数 ~ 出差天数 + 健康 + 年份
之前做过,现在重新算一下R?。
数据:2007-2021年,Y、X、健康(D3)、年份(t,2007=1,2008=2,...,2021=15)
回归:
Y = 7.82 - 0.031×X + 1.87×健康 - 0.09×t
t值:常数=3.21(p=0.008),X=-3.45(p=0.005)
健康=2.12(p=0.056),t=-1.98(p=0.072)
R? = 0.71
R?=0.71,比简单回归的0.64提高了0.07。说明加入健康和年份后,模型解释力更强了。
71%的变异可以被解释。剩下29%,是随机误差,是无法测量的因素。
0.71,这是一个很高的拟合优度。在实证研究里,这几乎是天花板了。
他算了一下调整后的R?。
调整R?是对R?的修正,惩罚那些不必要的变量。多变量回归中,变量越多,R?自然越高,但调整R?可以避免过拟合。
调整R? = 1 - (1-R?)×(n-1)/(n-k-1)
n=15,k=3
调整R? = 1 - (1-0.71)×14/11 = 1 - 0.29×1.27 = 1 - 0.37 = 0.63
0.63,和简单回归的0.64差不多。说明健康和年份的加入,并没有显著提高解释力。真正重要的,还是出差天数。
陆明远又做了一个模型:把消费增量也加进去。
模型:Y = X + 健康 + 年份 + W
回归:
Y = 8.12 - 0.028×X + 1.76×健康 - 0.08×t + 0.0012×W
t值:X=-3.12(p=0.01),健康=2.01(p=0.07),t=-1.76(p=0.11),W=1.23(p=0.24)
R? = 0.73
R?提高到0.73,但消费增量的系数不显著。说明消费增量对情感指数没有直接的独立影响——消费是她填补缺席的方式,而不是她开心的原因。
她花钱,不是因为开心;她花钱,是因为不开心。所以花钱多的时候,情感指数反而低。但在这个模型里,控制了出差天数之后,花钱的影响就不显著了。
这说明,花钱只是中间变量,不是根本原因。根本原因是出差。
陆明远把所有模型的R?列成一张表:
模型因变量 自变量 R? 调整R?
1情感指数 出差天数 0.64 0.64
2日记次数 出差天数 0.55 0.55
3日记次数(去2021)出差天数 0.72 0.72
4消费增量 出差天数 0.39 0.39
5消费增量(去2020)出差天数 0.51 0.51
6情感指数 出差+健康+年份 0.71 0.63
7情感指数 出差+健康+年份+消费0.73 0.62
最高的是模型3,R?=0.72。最低的是模型4,R?=0.39。
但无论高低,出差天数都是最核心的变量。在所有模型里,出差天数的系数都是显著的,而且方向一致——负向影响情感和日记,正向影响消费。
这是一个稳健的发现。
陆明远看着这些R?,想起了统计学里的一个概念:解释力。
R?是解释力。0.64意味着他解释了64%的她。0.72意味着他解释了72%的她。0.51意味着他解释了51%的她。
平均下来,他解释了她大概60%的人生。
60%是一个什么概念?是及格线。是勉强及格。是他作为一个丈夫,对她的“贡献”——60%的解释力,剩下的40%,是她的工作、她的朋友、她的父母、她的健康、她的其他一切。
但问题是,这60%的解释力,大部分是负面的。他解释了64%的情感波动,但那些波动里,大部分是她不开心的时候。他解释了72%的日记变化,但那些变化里,大部分是她不写他的时候。他解释了51%的消费波动,但那些波动里,大部分是她花钱填补空白的时候。
他的解释力,是负的解释力。
如果他不出差,他的解释力可能就变成正的了。但他出差了,所以他的解释力就是负的。
他想,如果有一个模型,用“他在家的天数”做自变量,R?会不会更高?
他重新定义变量:在家天数 = 365 - 出差天数。
然后做回归:情感指数 ~ 在家天数。
结果:
Y = -2.34 + 0.032 ×在家天数
R? = 0.64(和之前一样,只是符号相反)
0.032,意味着每多在家一天,情感指数提高0.032分。在家100天,提高3.2分。在家365天,提高11.68分,超过满分10分——当然,这是线性外推,不一定成立。
但方向是明确的:他在家,她开心。他不在家,她不开心。
这个结论,不需要R?也知道。
但R?给了它一个数字:64%。
64%,就是他缺席的代价。
陆明远又想到一个问题:如果把他所有的模型放在一起,能不能构建一个“综合拟合优度”?
他想了一个办法:把三个因变量标准化,然后加总成一个综合指数。
标准化:每个变量减去均值,除以标准差。
情感指数的均值=3.8,标准差=1.63
日记次数的均值=7.47,标准差=6.82(2021年的28次拉高了标准差,去掉2021年再算)
消费增量的均值=1322,标准差=852(2020年的-1056拉低了均值,拉高了标准差,去掉2020年再算)
他先去掉2020和2021两个异常年份,用2007-2019年的13年数据。
重新计算:
情感指数:均值=3.23,标准差=0.83
日记次数:均值=5.15,标准差=2.08
消费增量:均值=1526,标准差=297
然后标准化:
Y_std = (Y - 3.23)/0.83
Z_std = (Z - 5.15)/2.08
W_std = (W - 1526)/297
然后加总:综合指数 = Y_std - Z_std - W_std?不对,方向和符号不一样。情感指数是正向的(越高越好),日记次数和消费增量是负向的(越高说明他越不在,她越不开心)。所以应该:综合指数 = Y_std - Z_std - W_std。
或者更合理的是:综合指数 = Y_std - (Z_std + W_std)/2。
他选了后者。
然后做回归:综合指数 ~ 出差天数。
结果:
综合指数 = 3.21 - 0.045 × X
R? = 0.81
0.81!一个很高的R?。
出差天数可以解释她综合状态变化的81%。
81%意味着什么?意味着她的生活,八成和他有关。他的缺席,解释了八成她的不开心、她的沉默、她的花钱。
剩下的19%,是命。
陆明远盯着那个0.81,久久说不出话。
0.81。他缺席的代价。他用三十一年测出来的数字。
如果有一个机器可以测量一个人的情感、行为、生活状态,然后把这些数据输入电脑,跑一个回归,就会发现:这个人的变化,81%可以由另一个人的行为来解释。
那个人是他。
那些年,他以为自己是独立的。他以为他出差是工作,他加班是工作,他应酬是工作。他以为这些都是他的事,和她无关。他以为她在家里,好好的,不会受影响。
但数据告诉他,她受影响了。受了81%的影响。
他不在的每一天,都在她的情感、日记、消费里留下痕迹。那些痕迹积累起来,成了0.81。
他想,如果有一个反事实的世界:他从不出差,天天在家,那她的生活会是什么样?
那个世界的R?,可能也是0.81,但符号是正的。他解释了她81%的开心,81%的分享,81%的平静。
可惜,那个世界不存在。
存在的世界是:他解释了她81%的不开心,81%的沉默,81%的补偿。
这就是他交出的答卷。
那天晚上,陆明远做了一个梦。
梦里他站在一个很大的会议室里,台上有人在讲数据。他仔细看,是林墨。她穿着那件白衬衫,扎着马尾,站在投影幕布前,正在讲一张表格。
“这是2007年到2019年的数据。”她说,“大家看,这个模型的R?是0.81。这意味着什么?”
台下没人回答。
她自己说:“意味着,有一个变量,解释了她81%的人生。这个变量,是另一个人的行为。”
她转过头,看着他。
“明远,你知道这个人是谁吗?”
他张了张嘴,说不出话。
她笑了笑,说:“是你。”
然后她走下讲台,朝他走来。她走到他面前,弯下腰,在他耳边轻声说:
“0.81。你欠我的。”
他醒了。
凌晨四点,窗外还是黑的。他躺在床上,心跳得很快。那个数字还在脑子里转:0.81。0.81。0.81。
他想,她说的对。他欠她的。
欠她0.81的人生。欠她81%的开心。欠她那些本该属于她的、但因为他的缺席而失去的日子。
他知道,无论是什么,都是在0.81的阴影下。