【发布时间】:2019-11-05 07:32:27
【问题描述】:
(这不是简单地将方法添加到给定类的问题)
我想要实现的目标
使用statsmodels 中的Maximum Likelihood Estimation (Generic models),我实现了一个MLE 估计器,并希望将使用exog 和params 的用户自定义方法添加到一类拟合结果(不是实例)中,例如,使用classmetod()。但是由于这些变量不可用而发生错误。我怎样才能实现我的目标?
让我用here 中的一个例子来解释一下我到目前为止所做的事情。
(我查看了 this 为现有类添加方法。)
示例
import numpy as np
from scipy import stats
import statsmodels.api as sm
from statsmodels.base.model import GenericLikelihoodModel,GenericLikelihoodModelResults
data = sm.datasets.spector.load_pandas()
endog = data.endog
exog = sm.add_constant(data.exog)
class MyProbit(GenericLikelihoodModel):
def loglike(self, params):
exog = self.exog
endog = self.endog
q = 2 * endog - 1
return stats.norm.logcdf(q*np.dot(exog, params)).sum()
# my attemp starts ---------------
def my_method(self):
return print(self.exog, self.params, self.model)
GenericLikelihoodModelResults.my_method = classmethod(my_method)
# my attemp ends ----------------
res = MyProbit(endog, exog).fit()
res.my_method()
这会产生以下错误。
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-a2d4f516bca7> in <module>
23 res = MyProbit(endog, exog).fit()
24
---> 25 res.my_method()
<ipython-input-29-a2d4f516bca7> in my_method(self)
17 # my attemp start ---------------
18 def my_method(self):
---> 19 return print(self.exog, self.params, self.model)
20 GenericLikelihoodModelResults.my_method = classmethod(my_method)
21 # my attemp ends ----------------
AttributeError: type object 'GenericLikelihoodModelResults' has no attribute 'exog'
这表明exog(类似地,endog 和 params)在 GenericLikelihoodModelResults 中不可用。确实,添加以下代码不会显示exog等。
def my_check(self):
return dir(self)
GenericLikelihoodModelResults.my_check = classmethod(my_check)
尽管它们在实例中可用,但可以使用
res.exog
res.endog
res.params
感谢任何建设性的建议/cmets。
【问题讨论】:
标签: python class methods statsmodels