[英]statsmodels: how to add a method to a class of MLE result
(這不是簡單地向給定類添加方法的問題)
我想要實現的目標
使用statsmodels
Maximum Likelihood Estimation (Generic models)
,我實現了一個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
我感謝任何建設性的建議/意見。
異常消息
AttributeError: type object 'GenericLikelihoodModelResults' has no attribute 'exog'
指的是fit
返回的結果類。
exog
, endog
和類似的是模型類的屬性。 但params
是一個結果屬性,因為它是fit
方法的結果
因此,如果self是結果實例,則訪問結果類self.model.exog
的model屬性,或者使用模型類的方法,即self
是MyProbit
實例時。
在這種情況下,我不確定是否使用了類方法。 這些屬性僅適用於該類的特定實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.