(这不是简单地向给定类添加方法的问题)
我想要实现的
使用Maximum Likelihood Estimation (Generic models)
of statsmodels
,我实现了一个MLE估计器,并希望将用户创建的方法(使用exog
和params
)添加到一类拟合结果(而不是实例)中,例如使用classmetod()
。但是出现错误是因为这些变量不可用。我怎样才能达到我的目标?
让我用这里的一个例子来解释我到目前为止所做的事情。
(我查看了将方法添加到现有类的这。)
示例
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
我感谢任何建设性的建议/意见。
发布于 2019-06-23 21:00:10
异常消息
AttributeError: type object 'GenericLikelihoodModelResults' has no attribute 'exog'
引用fit
返回的结果类。
exog
、endog
和类似的是模型类的属性。但是params
是一个结果属性,因为它是fit
方法的结果。
因此,如果self是结果实例,则可以访问结果类self.model.exog
中的模型属性,或者使用模型类的方法,即当self
是MyProbit
实例时。
在这种情况下,我不确定类方法的使用情况。这些属性仅适用于类的特定实例。
https://stackoverflow.com/questions/56720537
复制相似问题