You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义Bootstrap估计值更新linearmodels的PanelResults对象?

解决方案

方法1:直接修改已有PanelResults实例的属性

Python是动态类型语言,你可以直接修改PanelResults实例中的标准误、t值、p值等属性,无需重新构造对象,这是最直接高效的方案:

  1. 先拟合原始PooledOLS模型,得到完整的PanelResults对象
  2. 将自定义Bootstrap得到的结果替换掉实例中对应的属性
  3. 返回修改后的实例,直接复用linearmodels的回归对比、LaTeX输出功能

修改后的完整代码:

import pandas as pd
from linearmodels.panel import PooledOLS
from linearmodels.panel.results import PanelResults

class EstimationProcedure:
    def __init__(self, data, formula):
        self.data = data
        self.formula = formula  # 补充模型公式,原代码遗漏了这部分
    
    def bootstrap(self, original_results):
        # 这里替换为你的Bootstrap实现逻辑
        # 示例:基于原始估计参数生成模拟统计量
        params = original_results.params
        std_errors = params * 0.1  # 自定义标准误示例值
        tstats = params / std_errors
        pvalues = pd.Series([0.05]*len(params), index=params.index)
        return std_errors, tstats, pvalues
    
    def fit(self):
        # 第一步:拟合原始PooledOLS模型,获取完整的PanelResults实例
        model = PooledOLS.from_formula(self.formula, data=self.data)
        original_results = model.fit()
        
        # 第二步:用原始估计结果执行Bootstrap,得到自定义统计量
        std_errors, tstats, pvalues = self.bootstrap(original_results)
        
        # 第三步:替换原始结果中的目标属性
        original_results._std_errors = std_errors
        original_results._tstats = tstats
        original_results._pvalues = pvalues
        
        # 可选:手动更新置信区间(确保summary输出正确)
        original_results._conf_int = original_results.conf_int()
        
        return original_results

# 示例使用
df = pd.DataFrame({
    'y': [1,2,3,4,5],
    'x': [2,3,4,5,6],
    'entity': ['a','a','b','b','c'],
    'time': [1,2,1,2,1]
})
df = df.set_index(['entity', 'time'])

estimator = EstimationProcedure(df, 'y ~ x + EntityEffects')
custom_results = estimator.fit()

# 验证:输出带自定义标准误的回归结果
print(custom_results.summary())
# 导出LaTeX格式结果
print(custom_results.summary().as_latex())

方法2:继承PanelResults扩展(可选)

如果需要长期维护自定义逻辑,可以继承PanelResults类,通过复制原始实例属性+替换自定义统计量的方式实现,适合需要更多定制化的场景:

class CustomPanelResults(PanelResults):
    def __init__(self, original_results, std_errors, tstats, pvalues):
        # 复制原始结果的所有属性
        self.__dict__.update(original_results.__dict__)
        # 替换自定义统计量
        self._std_errors = std_errors
        self._tstats = tstats
        self._pvalues = pvalues
        # 重新计算依赖属性
        self._conf_int = self.conf_int()

# 在EstimationProcedure的fit方法中使用
def fit(self):
    model = PooledOLS.from_formula(self.formula, data=self.data)
    original_results = model.fit()
    std_errors, tstats, pvalues = self.bootstrap(original_results)
    return CustomPanelResults(original_results, std_errors, tstats, pvalues)

关键注意事项

  • PanelResults的内部属性多为私有命名(下划线开头),虽然Python允许修改,但要注意linearmodels版本兼容性——若后续包更新了内部属性命名,可能需要调整代码
  • 替换属性后,需确保依赖这些属性的方法(如summary()、conf_int())能正常工作,必要时手动更新衍生属性
  • Bootstrap过程必须基于原始模型的估计结果(如参数、残差),务必将original_results传入bootstrap方法,而非仅传入原始数据

内容的提问来源于stack exchange,提问作者Jhonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:50:19