商帮文化暴露度数据构建全流程:从商帮坐标到上市公司面板
2026/9/9 7:10:44 网站建设 项目流程

如果你做过公司金融或文化经济学的实证研究,大概都碰到过这类审稿意见:“商帮文化对上市公司的影响,听起来很合理,但你的核心解释变量是怎么构造的?有没有可复现的代码和数据?”市面上的公开论文,绝大多数只给你一个“参考某文献”的结论,底层的企业-商帮匹配方式、距离算法、商帮边界划定,全都锁在作者的硬盘里。这篇文章就是我做2000-2024年上市公司商帮文化暴露数据时的完整记录,从“暴露度”这个概念本身,到商帮坐标目录怎么建立、注册地怎么清洗、距离衰减公式怎么选,再到后来用这套数据做回归时踩过的坑,全部摊开讲。数据适合正在写文化经济学、公司金融实证论文的研究生和学者,也适合想自己动手构建一套类似文化变量数据的人参考。

1. 为什么非要自己造一套“商帮文化暴露度”数据

1.1 文化变量在公司金融研究里已经是一门显学

过去十年,公司金融领域关于文化如何影响企业决策的研究,已经不是冷门方向了。宗教虔诚度、方言分化程度、宗族网络密度、历史殖民地制度,这些变量都被轮番用来解释融资成本、风险偏好、公司治理、社会责任表现。商帮文化在这个谱系里其实非常特殊:它不像宗教那样主要影响个人信仰,也不像方言那样完全属于日常沟通工具,商帮是一套系统的商业组织传统,直接约束和塑造了商人的行为方式——信用怎么建立、资金怎么融通、风险怎么分担、市场怎么开拓。

传统商帮留下来的制度遗产,比如晋商的票号体系、徽商的宗族信用网络、宁波帮的钱庄和航运网络,这些并不只是历史故事,它们会通过当地商业文化、职业结构、企业家的乡土认同,持续影响到今天的上市公司行为。问题在于,你得先把“商帮文化”变成一家一家上市公司可以读取的数值,才能放进模型。我最初在文献里找现成的企业层面商帮文化数据,找了一圈,能用的几乎没有。

1.2 现有公开数据补不上的三个缺口

市面上能买到的数据库,没有一家专门提供“商帮文化暴露度”这个变量。相关研究通常自己从史料里抓商帮分布,再手工匹配到省级或市级层面,使用起来有三个很明显的断层。

第一是史料结构化断层。明清商帮的研究文献非常多,张海鹏、张海瀛主编的《中国十大商帮》就把山西、陕西、山东、福建、徽州、洞庭、江右、广东、宁波、龙游十个商帮的源地、活动范围、商业领域梳理得很清楚,但这些信息是文字描述,不是能直接跑回归的变量。你需要自己决定用哪些城市代表商帮源地,用哪些指标衡量商帮强度,这一步没有一个标准答案,但必须记录下来。

第二是空间粒度断层。很多研究把商帮文化做到省级,比如注册地在安徽的就算徽商文化区,注册地在山西的就算晋商文化区。可现实是,商帮文化在省内部的差异极大,安徽阜阳和黄山相隔几百公里,对徽商文化的“暴露”程度完全不是一回事。省级口径会损失大量截面变异,回归显著性很可能就是被这种粗糙度量吃掉的。

第三是时间维度断层。即便有人做过截面数据,也大多是静态的,只能用于做某一年或某一行业的研究。如果你想做2000年到2024年的面板回归,观察注册地迁移、股权分置改革前后、金融危机前后这些不同时期商帮文化效应的变化,就必须逐年构建变量。商帮文化本身是慢变量,但企业是流动的,注册地会变,办公地会变,这些变化恰好可以作为识别策略的一部分。

1.3 这套数据适合谁、解决什么问题

我构建这套数据时,心里很明确它服务的场景。最直接的用户是学术研究者:把商帮文化暴露度作为核心解释变量或调节变量,去解释融资约束、企业风险承担、创新投入、慈善捐赠、高管薪酬等公司金融问题。其次是做营商环境研究的机构,想看看历史上形成的商业文化禀赋如何影响当前的企业生态。另外,对一些做量化投资的人,这套数据也可以作为一种地域文化因子,用来构造投资组合的筛选条件。

需要说明的是,这套数据不是一锤子买卖。商帮的划分方式、坐标选取、衰减半径,这些关键参数我都设计成可配置的。使用者如果不同意我的某些处理,可以直接改参数重新生成,这是我做数据时比较坚持的一点。

2. “暴露度”到底在度量什么:源地、传播与衰减

2.1 从“归属”到“暴露”:指标哲学的差别

很多文化类研究用的都是虚拟变量:注册地是不是在某个商帮的源地,是就取1,不是就取0。这样做最简单,但有一个致命问题——文化边界不是行政边界。安徽阜阳不是徽商核心区,但它距离徽州府核心地带只有两百多公里,当地商业传统不可能完全不受徽商影响;江西萍乡不是江右商帮的中心,但江右商帮的长途贩运网络把整个江西都编织进去了。二元划分把这些不同程度的文化接触全部压缩成0,等于把大量真实信息扔掉了。

“暴露度”这个词借自环境科学,指一个个体暴露在某种环境因素下的强度。套用到商帮文化上,就是一家企业注册地的商业文化环境,多大程度上被某个传统商帮塑造过。它不回答“你属于哪个商帮”,而是回答“你泡在多大的商帮文化浓度里”。这也是为什么我用连续指标而不是二元指标:文化浓度有高低,影响有强弱,连续指标才能把这种梯度捕捉下来。

2.2 十大商帮源地的空间设定

商帮“源地”的确定是整套数据的地基。我参考《中国十大商帮》的经典划分,把十个商帮的源地落到具体城市坐标上。需要强调,商帮源地往往不是一个点,而是一块区域,比如晋商的中心在平遥、太谷、祁县这一带,徽商的中心覆盖徽州府的歙县、绩溪、婺源等地。我的处理办法是:每个商帮选定一个史料中最常用的代表性坐标,同时保留对该商帮覆盖区域的文字说明。

商帮史料核心源地数据默认坐标备注
晋商山西中部平遥、太谷、祁县一带晋中明清票号中心,商业信用制度发达
徽商徽州府,今黄山、绩溪、婺源一带黄山盐业、典当、茶叶、木材
宁波商帮浙江宁波府宁波近代钱庄、航运、实业
龙游商帮浙江衢州龙游衢州长途贩运,早期书商和珠宝商
洞庭商帮江苏苏州太湖东山、西山苏州粮食、布帛贸易
江右商帮江西南昌、吉安、抚州一带南昌药材、木材、陶瓷贩运
闽商福建泉州、福州、莆田福州海商、海外贸易网络
粤商广东广州、佛山、潮州广州十三行、海外贸易,潮商另可拆分
鲁商山东济南、临清、周村济南绸布、粮食、钱业
陕商陕西三原、泾阳一带西安盐布茶马贸易,西北商路枢纽

这个划分有两个地方需要提醒。一是宁波帮和龙游商帮在部分文献里被合并进“浙商”,我默认分开列示,这样使用者既可以直接用分项,也可以自己合并。二是粤商内部其实可以再拆出潮州商帮,潮商跟闽南商系血缘更近,如果研究主题涉及海外华商网络,建议把潮州作为第二个粤商坐标点加进去。

2.3 距离衰减公式与带宽的敏感性逻辑

设定好商帮源地之后,就要回答一个问题:离源地两百公里、五百公里、一千公里的企业,商帮文化影响分别是多少?这里我采用的是空间衰减逻辑,企业离商帮源地越近,历史上受该商帮商业传统浸染的概率和强度就越大。衰减函数参考了贸易引力模型里常用的指数衰减形式:

exposure_ij = w_j × exp(-distance_ij / bandwidth)

其中 distance_ij 是i企业注册地到j商帮源地的球面距离,w_j是商帮j的历史影响力权重,bandwidth是衰减半径。

为什么用指数衰减而不是线性衰减?因为文化传播有一个明显特征:源地的文化浓度最高,随距离递减,但递减不是均匀的,而是初期下降快,远距离之后趋于平缓。举个例子,晋中到太原五十公里,商帮文化已经很接近,太原到石家庄两百多公里,强度就明显下降,再到北京四百多公里,晋商在当地的影响力还剩一些,但已经主要存在于会馆、票号分支这类网络节点上。指数衰减能比较好地模拟这个规律。

带宽的选择,我默认设150公里。这个数字不是拍脑袋定的。明清时期商帮核心活动圈大约是一个府级区域的半径,加上商路贸易辐射范围,一百到两百公里是一个合理的强度衰减区间。但我强烈建议使用者把带宽当成一个敏感性参数来处理,分别用100、150、200、250公里计算暴露度,放进稳健性检验。后面我会专门讲这个坑——很多显著性结论真的会随带宽改变。

2.4 多个商帮的合成:加总与取最大值的差别

一个企业可能同时暴露在多个商帮文化之下。比如上海,既是江浙商人的汇聚地,也是徽商、晋商、粤商各路商帮的会馆密集区。那么综合暴露度怎么算?

我提供了两种合成方式。一种是加总(sum模式),把该企业对十个商帮的暴露度全部加起来,代表企业所在地的商业文化总浓度。另一种是取最大(max模式),只取十个商帮中影响最大的那个,代表企业所在地的主导商帮文化。两种方式的经济学含义完全不同:sum模式假设多个商帮文化可以叠加,适合研究“商业文化多元化程度”或“商业文化总量”;max模式假设每个地区有一个主文化,主导文化对企业和个人的影响最强,适合研究“特定商帮传统”的影响,比如晋商文化和徽商文化虽然都算商帮文化,但信用机制和行为偏好其实有差别。

我自己做主回归时用的是sum模式,理由是现实中一个大城市往往同时受多个商帮传统影响,历史上上海的金融业既有宁波帮的钱庄传统,也有晋商票号的汇兑网络,若只取最大值,等于忽略了其他商帮的增量影响。这并不意味着max模式不好,它更适合做分商帮检验。数据里两种变量都生成,把选择权留给使用者。

3. 数据生产的完整流水线:从史料坐标到面板数据

3.1 第一步:商帮坐标目录的清洗与坐标化

动手之前,先把十个商帮的源地坐标整理成结构化目录,包含商帮名称、参考坐标、历史覆盖范围、备注来源。坐标我统一用WGS84坐标系,后续所有距离计算都基于这个坐标系。商帮源地如果是一个范围,就取史料描述中最核心的府县坐标;如果史料提到多个中心,比如粤商同时有广州、佛山、潮州三个节点,我默认选广州,但目录里会保留备选坐标字段,使用者可以自行替换。

商帮影响力权重 w_j 的处理我采用等权重作为基准,默认每个商帮的w都是1。理由很简单:等权重最容易辩护,也最不容易被质疑“人为操纵”。稳健性检验里再用第二种权重,比如按历史会馆数量、商帮活动范围覆盖府县数量,或者按该商帮在近代工业中的渗透程度来赋权。权重变了结论还稳定,那才是真正稳健的结果。

3.2 第二步:上市公司注册地的地理编码

上市公司层面,我用到的是2000到2024年的注册地址信息。这一步是整个数据构建里最耗时间的,因为早年间的注册地址描述非常不规范,有的写“某某省某某市某某路某某号”,有的只写到“某某开发区”,还有写“某某大厦”的。处理办法是先做标准化清洗,把省市区县信息从地址字符串里拆出来,然后再通过地理编码接口把地址转成经纬度坐标。

地理编码最好用高德或者腾讯的接口,解析精度到区县级没有问题,再细到街道级别,只要地址规范也可以做到。需要提醒的是,地理编码必须限定在城市级别的精度上,不要追求精确到街道,因为商帮文化暴露度是城市尺度上的变量,精确到区县反而容易让人误以为数据有很高的空间精度。

清洗过程中,我抽样人工核对了100条记录,发现几个反复出现的问题:一是“市辖区”和“县”的层级混乱,二是历史遗留的“地区”表述,三是个别公司注册地址在开发区但没有明确城市名。这些问题不解决,地理编码就会产生错误坐标,后面算出的距离全部作废。

3.3 第三步:暴露度计算与面板拼接

坐标清洗完之后,核心计算就简单了。球面距离我用最常用的haversine公式,代码如下:

import math def haversine(lon1, lat1, lon2, lat2): R = 6371.0 phi1 = math.radians(lat1) phi2 = math.radians(lat2) dphi = math.radians(lat2 - lat1) dlambda = math.radians(lon2 - lon1) a = math.sin(dphi / 2) ** 2 + math.cos(phi1) * math.cos(phi2) * math.sin(dlambda / 2) ** 2 return 2 * R * math.asin(math.sqrt(a))

然后是暴露度计算,我把商帮目录和公司坐标输入一个函数,同时支持加总和取最大两种模式:

def calc_exposure(firm_coord, bang_catalog, bandwidth=150, mode="sum"): scores = {} total = 0.0 for bang in bang_catalog: d = haversine( firm_coord[0], firm_coord[1], bang["lon"], bang["lat"] ) contribution = bang["weight"] * math.exp(-d / bandwidth) scores[bang["name"]] = contribution if mode == "max": total = max(total, contribution) else: total += contribution return total, scores

面板拼接的逻辑是:先按年度拉出所有上市公司的注册地坐标,逐年计算暴露度,再和财务数据按股票代码加年度合并。注册地会在某些公司身上发生变化,比如搬迁、重组、借壳上市,这些变化本身就构成了暴露度的时间变异,我把变更前和变更后的暴露度都保留下来,方便做事件研究。

import pandas as pd def build_panel(firms, bangs, bandwidth=150, mode="sum"): records = [] for _, row in firms.iterrows(): total, scores = calc_exposure( (row["lon"], row["lat"]), bangs, bandwidth=bandwidth, mode=mode ) rec = { "year": row["year"], "stkcd": row["stkcd"], "reg_city": row["reg_city"], "total_expo": total, } for k, v in scores.items(): rec[f"expo_{k}"] = v records.append(rec) return pd.DataFrame(records)

3.4 第四步:人工抽检与异常值排查

数据算完不是结束,必须做异常值排查。我主要看两类情况:一是暴露度为0或接近0的样本,确认它不是坐标异常导致的,而是确实离所有商帮源地都很远;二是暴露度极高的样本,比如注册地正好落在某个商帮源地城市,这类样本要重点看是否出现数据录入错误。另外,我把计算结果落到地图上随机抽查了50家企业的坐标点,和公司注册地所在城市进行比对,确保地理编码没有把某个城市跑到几百公里外。

这个环节我踩过一个具体教训:有一批公司的注册地址写的是“某某市某某路”,但因为该路名在多个城市都存在,地理编码接口返回了错误城市的坐标,导致暴露度高出一大截。后来我在清洗规则里增加了区县校验,地址字符串里必须有明确的市和区县才允许编码,缺失的置为缺省并人工补全。做这类数据,人工抽检永远不能省。

4. 数据字典与三种指标口径:拿到手怎么用

4.1 数据字段说明

整套数据按年度-公司维度组织,一个公司一年一条记录,时间范围2000到2024年。核心字段如下:

字段名类型示例说明
yearint2020会计年度
stkcdstr000001.SZ六位代码加交易所后缀,便于直接匹配
company_namestr平安银行公司简称
reg_citystr深圳市注册地城市标准化名称
reg_lonfloat114.06注册地经度(WGS84)
reg_latfloat22.54注册地纬度(WGS84)
total_expofloat0.182商帮文化综合暴露度,sum模式
expo_jinfloat0.003对晋商文化的暴露度
expo_huifloat0.002对徽商文化的暴露度
expo_ningbofloat0.045对宁波商帮文化的暴露度
expo_longyoufloat0.001对龙游商帮文化的暴露度
expo_dongtingfloat0.121对洞庭商帮文化的暴露度
expo_jiangyoufloat0.002对江右商帮文化的暴露度
expo_minfloat0.003对闽商文化的暴露度
expo_yuefloat0.021对粤商文化的暴露度
expo_lufloat0.001对鲁商文化的暴露度
expo_shanfloat0.001对陕商文化的暴露度

每个商帮的分项暴露度都单独保留,可以非常灵活地做区分检验。比如有研究想比较晋商和徽商对企业风险承担的影响差异,直接用expo_jin和expo_hui两个变量就能跑。

4.2 三种指标口径与适用场景

第一类是连续暴露度,也就是total_expo和各个分项,适合做基准回归和机制检验,解释力度最高,信息量最大。第二类是二元虚拟变量,我根据连续暴露度可以构造“是否处于商帮核心文化区”,比如距离任一商帮源地150公里以内取1,否则取0,适合做分组分析、双重差分的前后对照、或者部分非线性模型。第三类是商帮网络强度评分,用商帮源地覆盖的府县数量、会馆分布密度等外部数据加权构建,适合做稳健性检验,避免单一变量度量方式带来的质疑。

三种口径没有绝对优劣,核心原则是:基准回归用第一种,分样本和稳健性用第二种和第三种。论文里把三种口径都列出来,审稿人想在这个角度挑毛病就难了。

4.3 与CSMAR、Wind合并时的细节

很多研究者的财务数据来自CSMAR或Wind,两个数据库的证券代码格式不完全一致。CSMAR较早年份的Stkcd字段是纯六位数字,不带交易所后缀,而新版数据里会带“.SZ”“.SH”后缀;Wind的代码也类似。我的建议是合并之前统一生成两个辅助字段,保留原始代码字符串作为检查字段,另外生成一个六位纯数字代码作为合并键,代码示例:

df["stkcd6"] = df["stkcd"].str[:6] panel["stkcd6"] = panel["stkcd"].str[:6] merged = panel.merge(financial, on=["stkcd6", "year"], how="inner")

合并时一定用“股票代码+年度”双键,不要只用股票代码,不然会把不同年份的数据错配。另外要注意,上市公司年报的“年度”和公告日期不是同一个概念,数据里用的是会计年度,跟CSMAR的年报数据库保持一致即可。

5. 实证研究中躲不开的五个坑

5.1 内生性:商帮文化区往往本来就是经济强区

做文化变量的实证研究,最容易被攻击的就是内生性问题。商帮为什么会在某个地方形成?因为那个地方历史上就有发达的交通、繁荣的贸易、密集的人口,晋商能起来,是因为山西中部处于南北商路的要冲;徽商能起来,是因为徽州虽然山多,但新安江水运连通了杭州和江南市场。这些历史条件本身就是影响现在企业融资、投资、治理的遗漏变量,你不控制,暴露度系数就会吸收掉“发达地区效应”。

我的处理方案是分三层。第一层,基准回归控制城市固定效应,把城市层面上那些不随时间变化的制度、文化、地理禀赋全部吸收掉。第二层,加入历史经济控制变量,比如明代府级人口密度、清代驿站数量、历史商路节点,如果加入后暴露度系数还是稳定,说服力就强很多。第三层,找工具变量做IV回归,比如地形起伏度、到明清时期主要商路的距离,这些变量通过商帮形成过程影响今天的商帮文化暴露,但不直接通过现代经济机制影响企业行为,逻辑上可以辩护。

5.2 注册地错配:壳公司会把暴露度搅浑

上市公司注册地和实际经营地分离是很常见的现象,尤其在早年间。有的公司为了税收优惠或者上市合规,把注册地放在偏远的开发区,但总部和主要业务在沿海大城市。这种情况下用注册地算暴露度,会把一家实质经营在长三角的公司,错误地划到某个人口稀少地区的文化圈里。

我建议两步处理。第一步,在主回归里用注册地暴露度,这是基准口径,易于复现。第二步,做敏感性检验时改用办公地址或者母公司实际经营地址重新计算暴露度,两者的结论方向一致,说明研究结论不是由注册地错配驱动的。更严格一点,可以直接剔除注册地与实际办公地距离超过300公里的样本,看结论是否依然成立。数据里注册地和经度纬度、办公地址和经度纬度我都保留,方便做这类检验。

5.3 口径敏感度:换带宽或换合成方式,结论可能反过来

文化暴露度这个变量,理论上没有任何一个“真实”的衰减半径。你把带宽设为100公里,企业只有在商帮源地很近的时候才会有较高暴露度;设为300公里,全国大部分城市都多多少少有一点商帮文化浓度。同样的数据,结论可能完全不同。

我亲测过一个案例:某核心自变量用带宽150公里时,回归系数在1%水平显著为正;换到带宽250公里,p值变成0.12;再用300公里,系数甚至变成负的不显著。问题不是数据错了,而是带宽背后的假设变了——你声称商帮文化能传播多远,直接影响变量取值。所以我的建议非常明确:主回归里固定一个带宽并说明理由,然后在稳健性里系统性地把带宽从80公里扫到300公里,把不同带宽下的估计系数和置信区间画出来。如果只有一小段带宽显著,那这个结论就是脆弱的,正文里要谨慎表述。

5.4 商帮外延的模糊地带:宁波帮算不算浙商,潮商算不算粤商

商帮划分不是铁板一块。宁波帮在明清时期独立成帮,但放在今天的浙江语境下,很多人会把它归入浙商文化;潮州商帮在传统上被列入广东商帮,但又和闽南商系有紧密的亲缘关系。这些划分直接影响分项暴露度的取值。

我的处理原则是“默认划分 + 公开可改”。默认采用《中国十大商帮》的经典划分,把宁波帮、龙游商帮、洞庭商帮独立出来,不硬塞进浙商或苏商;同时把商帮目录做成一个开放文件,使用者如果要合并宁波帮和龙游商帮为浙商,改一行代码就能重新计算。数据发布时,这一整套目录和脚本都是随附的,我不认为自己的划分是唯一正确答案,但保证你看到的每个数值背后都对应一个明确的、可修改的假设。

5.5 文化变量几乎不随时间变化,别被固定效应坑了

商帮文化暴露度最大的面板特征是:时间变异很小。一家公司只要不搬家,它的暴露度在2000到2024年间基本不变。这意味着如果你在公司层面加入个体固定效应,暴露度的主效应会被固定效应吸收掉,系数无法识别。很多第一次用这个数据的人会在这上面卡很久,以为是数据错了,其实是指标特性和模型设定不匹配。

可行的出路有三条。第一条,用面板但不加公司固定效应,用城市固定效应加行业固定效应,暴露度系数的识别来自同一城市内不同行业的比较,以及同一行业内不同城市间的比较。第二条,用截面数据做研究,直接看暴露度对公司行为的横截面影响。第三条,充分利用“暴露度变化”的样本,比如公司注册地搬迁、借壳上市、重大资产重组这些事件会造成暴露度的跳跃,以这些跳跃作为处理变量,做事件研究或双重差分,识别逻辑会干净很多。

6. 应用场景与一个可复现的小检验

6.1 发论文的几个主流方向

从实际发表和投稿情况看,这套数据最常被用在这几个方向。公司金融领域,商帮文化暴露度可以用来解释融资约束和债务成本,核心逻辑是商帮文化带来了非正式的信任机制,降低了信息不对称;也可以解释企业风险承担和投资激进程度,传统商帮本身就有冒险逐利的一面。公司治理领域,商帮文化会影响董事会联结、高管薪酬结构、企业现金持有行为。企业社会责任领域,传统商帮“义利并重”的价值观可能促进慈善捐赠和员工保护投入。文化经济学领域,这套数据可以跟宗教、方言、宗族等文化变量放一起比增量解释力——商帮文化是不是在其他文化变量之外还有独特的解释能力。

6.2 把数据变成产品化的扩展方向

做完基础版本后,我还在想几个扩展方向。一是分行业暴露度:不同行业对商帮网络的依赖程度差别很大,贸易行业可能比公用事业更依赖传统商业网络,可以按行业属性调整暴露度的权重。二是事件冲击型指标:商帮文化不只是静态的,还有动态的一面,比如异地商会的成立、商帮文化节活动、大型商帮返乡投资事件,这些都可以构造成事件冲击变量。三是和ESG结合:把商帮文化作为文化维度的指标放进ESG评级框架里,作为非正式制度环境的代理变量。四是企业网络型指标:把商帮文化从“地域环境”扩展到“关系网络”,用上市公司高管或实际控制人的籍贯信息,构造企业与商帮源地的人际联结,这比纯地理距离更直接,数据构建难度也更大。

6.3 一个简单回归演示

最后给一个最小可复现的示例,演示怎么把这套数据用起来。这里我随便选了一个研究方向:商帮文化暴露度较高的公司,有息负债率是否更低。逻辑是商帮文化的信任机制可以降低企业对外部债务融资的需求和成本。注意,以下代码只是演示用法,标签和样本都没有做严谨清洗,结论不构成任何学术判断。

import pandas as pd import statsmodels.api as sm panel = pd.read_parquet("res_commercial_exposure_2000_2024.parquet") fin = pd.read_csv("financial_data.csv") df = panel.merge(fin, on=["stkcd", "year"], how="inner") df = df.dropna(subset=["total_expo", "debt_ratio", "size", "roe", "leverage"]) df["expo_ln"] = (df["total_expo"] + 1e-6).apply(np.log) X = sm.add_constant(df[["expo_ln", "size", "roe", "leverage"]]) y = df["debt_ratio"] model = sm.OLS(y, X).fit(cov_type="cluster", cov_kwds={"groups": df["stkcd"]}) print(model.summary())

跑完这个模型之后,不要急着下结论。按照前面说的稳健性清单,换带宽、换合成方式、换样本范围、加城市固定效应、处理内生性,全部走一遍,结论稳住了才算真正做完。

数据构建和实证检验的过程走到这里,其实已经覆盖了从概念定义到复现检查的完整链路。坦白讲,做完这套数据最深的体会是:文化类变量的价值不在于你选了一个多么巧妙的指标,而在于你能不能把所有构建逻辑透明地交给读者。商帮名录可以改、带宽可以调、权重可以换,但每一步假设都必须有记录、有代码、有结果对比。只要这三样东西在,任谁拿着你的数据都能复现、都能提出改进方案,那这套数据的生命力就远远超过一次回归本身。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询