名师讲堂|使用 R 语言测算上市公司专利技术集中度、搜索广度、搜索深度及知识整合能力

今天给大家分享使用 R 语言测算企业专利技术集中度(TS)、搜索广度(SB)、搜索深度(SD)及知识整合能力(KIC)的方法。该方法参考自王海花等(2026)《专精特新企业技术专业化与关键核心技术突破》。

附件中提供了该参考文献的 PDF 文件,感兴趣的小伙伴可以阅读原文。

指标来源与计算原理

这四个指标均基于发明专利计算(不含实用新型和外观设计),并采用 5 年滚动窗口[t−4,t] 构建企业知识库。也就是说,对于观测年份 t,回溯 t−4 至 t 年共 5 年的专利数据进行计算。

技术集中度(TS — Technological Specialization)

技术集中度衡量的是企业技术活动的专业化 vs 多元化程度。核心思想是:如果企业的发明专利高度集中在少数 IPC 技术领域,说明技术专业化程度高;如果分散在众多不同领域,说明技术多元化。

计算分为两步:

搜索广度(SB — Search Breadth)

搜索广度衡量企业对新知识探索的程度。核心思想是:如果企业当年引用的专利中大部分是”新发现”的知识(之前没有引用过的),说明企业正在广泛搜索新知识领域。

其中:

  • total_citationsit:企业 i 在第 t 年引用的所有专利总数
  • new_citationsit:企业 i 在 t 年引用的、不在近 5 年知识库中的专利数量
  • 知识库定义:企业在 [t−4,t−1] 期间(不含当年)已经引用过的所有被引专利的集合

SB 值越大(越接近 1),说明企业正在广泛搜索新知识领域。

搜索深度(SD — Search Depth)

搜索深度衡量企业在已有知识领域中的深化程度。核心思想是:如果企业对同一批专利反复引用,说明企业在特定知识领域持续深耕。

其中,分子是近 5 年窗口 [t−4,t] 内所有被引专利的重复引用次数之总和。

SD 值越大,说明企业对特定知识的挖掘越深入。SB 和 SD 是一对互补指标:SB 衡量”横向拓展”(广度),SD 衡量”纵向深化”(深度)。

知识整合能力(KIC — Knowledge Integration Capability)

知识整合能力反映企业融合多学科知识、进行交叉创新的能力。度量方式为:5 年窗口内,企业涉及的不同 IPC 前 4 位技术类别的去重计数。

KIC 值越大,说明企业跨越了更多不同的技术领域进行创新,跨领域知识整合能力越强。

四个指标对照

指标 英文 公式核心 值越大意味着 数据基础
技术集中度 TS σ(Pro) / μ(Pro) 技术越分散 IPC 分类号
搜索广度 SB new_cit / total_cit 探索越广泛 引证专利
搜索深度 SD Σrep / total_cit 挖掘越深入 引证专利
知识整合能力 KIC count_distinct(IPC4) 跨领域整合越强 IPC 分类号

数据准备

本课程使用的演示数据为 2010~2012 年上市公司与专利数据匹配结果(3 年共约 30 万行),其中包含:

  • 上市公司与专利数据匹配结果:包含专利的 IPC 分类号、引证专利等字段
  • 专利引用与被引用信息:用于 SB 和 SD 的计算

这两个数据可以从下面获取:

1985~2024 年上市公司与专利数据匹配结果(版本3, 含申请、授权信息):https://rstata.duanshu.com/#/brief/course/04100321f88b411f90429be934934bff

1985~2024 的专利引用与被引用信息及次数统计:https://rstata.duanshu.com/#/brief/course/de4968acb01047b3801c200e9cf7ed41

首先读取数据,并进行去重处理:

library(tidyverse)

# 读取原始数据
df_raw <- read_csv(
"2010~2012年上市公司与专利数据匹配结果.csv",
col_types = cols(.default = "c"),
show_col_types = FALSE
)

数据去重

专利数据中可能存在重复记录,需要在每家公司内部(企业层面)分别去重。这是因为存在多个公司共同申请同一专利的情况——例如公司 A 和公司 B 联合申请了一项专利,在匹配结果中会分别产生两条记录(同一专利号对应不同公司)。如果跨公司全局去重,会错误地删除其他公司共同申请的专利记录。

因此去重必须加入公司标识符(股票代码),分两轮执行:

  1. 第一轮:按 股票代码 + 年份 + 公开公告号_clean 去重
  2. 第二轮:按 股票代码 + 年份 + 申请号 去重
# Step 1: 清洗公开公告号(去掉末尾字母,如 CN101862134A → CN101862134)
df <- df_raw %>%
mutate(公开公告号_clean = str_replace(公开公告号, "[A-Z]$", ""))

# Step 2: 第一轮去重 —— 按公司 + 年份 + 公开公告号_clean
# 必须在每家公司内部去重,不能全局去重(存在多公司共同申请专利的情况)
df <- df %>%
distinct(股票代码, 年份, 公开公告号_clean, .keep_all = TRUE)

# Step 3: 第二轮去重 —— 按公司 + 年份 + 申请号
df <- df %>%
distinct(股票代码, 年份, 申请号, .keep_all = TRUE)

# Step 4: 筛选发明专利(TS/SB/SD/KIC 均只用发明专利)
df_inv <- df %>%
filter(str_detect(专利类型, "发明")) %>%
mutate(年份 = as.integer(年份))

# 展开 IPC 字段并提取前4位(如 G06F 3/00 → G06F)
# IPC 字段为分号分隔的多个 IPC 分类号,一个专利可能属于多个 IPC 分类
df_inv <- df_inv %>%
mutate(IPC = if_else(is.na(IPC) | IPC == "NA", NA_character_, IPC)) %>%
mutate(ipc_list = str_split(IPC, ";\\s*")) %>%
unnest(ipc_list) %>%
mutate(ipc_list = str_trim(ipc_list)) %>%
filter(!is.na(ipc_list), ipc_list != "", ipc_list != "NA") %>%
mutate(ipc4 = str_sub(ipc_list, 1, 4)) %>%
filter(!is.na(ipc4), ipc4 != "") %>%
select(-ipc_list)

技术集中度(TS)的计算

对于每家企业的每个观测年 t,使用 [t−4,t] 窗口内的发明专利计算:

# 此处代码需下载讲义材料查看~

ts_panel <- df_inv %>%
group_by(股票代码) %>%
group_modify(~ calc_ts(.x)) %>%
ungroup()

上述代码中,calc_ts() 函数首先获取该企业所有的观测年份,然后对每个年份 t,筛选 [t−4,t] 窗口内的发明专利,按 IPC 前 4 位分组统计专利数,计算各组占比后得到变异系数。使用 group_modify() 对每家企业分别计算。

搜索广度(SB)的计算

搜索广度的计算需要用到引证专利字段(即企业专利引用了哪些在先专利)。该字段通常是以分号分隔的字符串,需要先展开为逐条记录:

# 展开引证专利字段(一行可能含多个被引专利,用 "; " 分隔)
df_cite <- df_inv %>%
filter(!is.na(引证专利), 引证专利 != "NA", 引证专利 != "") %>%
select(股票代码, 年份, 申请号, 引证专利) %>%
mutate(cited_list = str_split(引证专利, ";\\s*")) %>%
unnest(cited_list) %>%
mutate(cited_list = str_trim(cited_list)) %>%
filter(cited_list != "", cited_list != "NA") %>%
rename(cited_patent = cited_list)

展开后,对每家企业构建 5 年滚动知识库,判断当年引用是否为”新知识”:

# 此处代码需下载讲义材料查看~

sb_panel <- df_cite %>%
group_by(股票代码) %>%
group_modify(~ calc_sb(.x)) %>%
ungroup()

注意知识库的窗口范围是 [t−4,t−1](不含当年),这是为了确保”新知识”的判定有意义——只有当年引用的专利不在过去 5 年的引用库中时,才被认为是新的知识探索。

搜索深度(SD)的计算

搜索深度考察的是企业在 5 年窗口内对被引专利的重复引用程度:

# 此处代码需下载讲义材料查看~

sd_panel <- df_cite %>%
group_by(股票代码) %>%
group_modify(~ calc_sd(.x)) %>%
ungroup()

SD 的分母与 SB 相同(当年总引用数),分子是近 5 年内所有被引专利的重复引用次数之总和。例如,某被引专利在 5 年内被该企业引用了 3 次,那么它对分子的贡献就是 3。

知识整合能力(KIC)的计算

KIC 的计算最为简洁,直接统计 5 年窗口内企业涉及的不重复 IPC 前 4 位类别数:

此处代码需下载讲义材料查看~

KIC 与 TS 的区别在于:TS 反映的是专利数量在各技术领域的分布均衡性(变异系数),而 KIC 反映的是企业跨越的绝对技术领域数量(去重计数)。

合并四个指标

将四个指标按企业-年度进行左连接合并:

# 以 TS 的企业-年度为基准(发明专利存在的企业年份)
panel <- ts_panel %>%
left_join(sb_panel %>% select(股票代码, 年份, SB, total_citations, new_citations),
by = c("股票代码", "年份")) %>%
left_join(sd_panel, by = c("股票代码", "年份")) %>%
left_join(kic_panel, by = c("股票代码", "年份")) %>%
arrange(股票代码, 年份)

panel

# 描述性统计
panel %>%
select(TS, SB, SD, KIC) %>%
summary()

# 保存结果
write_csv(panel, "firm_indicators_panel.csv")
# 读取计算结果展示
panel <- read_csv("firm_indicators_panel.csv", show_col_types = FALSE)
panel %>%
select(TS, SB, SD, KIC) %>%
summary()

输出的面板数据包含以下变量:股票代码、年份、TS、n_patents_ts(窗口内发明专利数)、SB、total_citations(当年总引用次数)、new_citations(新知识引用次数)、SD、KIC。

panel

如果需要全部数据,使用全部年份的上市公司专利数据及专利引用信息数据即可计算。

关联数据推荐

1985~2024 年上市公司与专利数据匹配结果(版本3, 含申请、授权信息):https://rstata.duanshu.com/#/brief/course/04100321f88b411f90429be934934bff

1985~2024 的专利引用与被引用信息及次数统计:https://rstata.duanshu.com/#/brief/course/de4968acb01047b3801c200e9cf7ed41

点击这里跳转到 RStata 短书平台获取附件:名师讲堂|使用 R 语言测算上市公司专利技术集中度、搜索广度、搜索深度及知识整合能力

评论