使用stargazer从线性模型模型拟合中输出Latex代码

问题描述 投票:0回答:2

我需要用于双向聚类的线性模型,这在统计模型中没有正确实现。我想知道是否可以将 stargazer python 库与 Linearmodels 包一起使用,而不是与 statsmodels 一起使用。但是当我从线性模型插入模型时,它会抛出错误:请使用经过训练的 OLS 模型作为输入

示例:

from linearmodels.panel import PanelOLS
import pandas as pd 
df.set_index(['entity', 'time'], inplace = True)
X = df[["Exog1","Exog2","Exog3"]]
y = df["Dep"]
model = PanelOLS(y, X, entity_effects=True, time_effects=True).fit(cov_type='clustered', cluster_entity=True, cluster_time=True)   
print(model)

这会按预期输出模型。但是,当我将其插入 int stargazer 时,它会抛出以下错误

stargazer = Stargazer([model])

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-149-75027b8621a2> in <module>
----> 1 stargazer = Stargazer([model])

~\AppData\Local\Continuum\anaconda3\lib\site-packages\stargazer\stargazer.py in __init__(self, models)
     29         self.models = models
     30         self.num_models = len(models)
---> 31         self.extract_data()
     32         self.reset_params()
     33 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\stargazer\stargazer.py in extract_data(self)
     91         be modified by any rendering parameters.
     92         """
---> 93         self.validate_input()
     94         self.model_data = []
     95         for m in self.models:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\stargazer\stargazer.py in validate_input(self)
     43         for m in self.models:
     44             if not isinstance(m, RegressionResultsWrapper):
---> 45                 raise ValueError('Please use trained OLS models as inputs')
     46             targets.append(m.model.endog_names)
     47 

ValueError: Please use trained OLS models as inputs

我知道 stargazer 可能不支持线性模型,但也许有一种解决方法,可以让我在 Latex 中获得线性模型模型输出?

python statsmodels stargazer linearmodels
2个回答
2
投票

截至 2021 年 11 月,stargazer 仍然不提供对线性模型的支持。

但是,您可以使用以下代码将摘要输出为乳胶:

# Declare model
model = PanelOLS(y, X, entity_effects=True, time_effect=True)

# Fit model
res = model.fit(cov_type='clustered', cluster_entity=True, cluster_time=True)

# Print as latex
print(res.summary.as_latex())

0
投票

自从第一次提出这个问题以来,Stargazer 多年来已经有了很大的扩展,现在支持 PanelOLS。此处重现当前文档中的示例:https://github.com/StatsReporting/stargazer/blob/master/examples.ipynb

from stargazer.stargazer import Stargazer 
from linearmodels.panel import PanelOLS, RandomEffects, PooledOLS
from linearmodels.datasets import wage_panel

dfp = wage_panel.load().set_index(["nr", "year"])

pest = PooledOLS.from_formula('lwage  ~ 1 + black + hisp + exper + expersq + married + educ + union + TimeEffects', data=dfp).fit()
rest = RandomEffects.from_formula('lwage  ~ 1 + black + hisp + exper + expersq + married + educ + union + TimeEffects', data=dfp).fit()
fest = PanelOLS.from_formula('lwage  ~ 1 + expersq + union + married + TimeEffects + EntityEffects', data=dfp).fit()

Stargazer([pest, rest, fest])
© www.soinside.com 2019 - 2024. All rights reserved.