簡體   English   中英

statsmodels:如何將方法添加到MLE結果類中

[英]statsmodels: how to add a method to a class of MLE result

(這不是簡單地向給定類添加方法的問題)

我想要實現的目標

使用statsmodels Maximum Likelihood Estimation (Generic models) ,我實現了一個MLE估計器,並且想要將一個用戶制造的方法(使用exogparams )添加到一類擬合結果(不是實例),例如,使用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 (類似地, endogparams )在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返回的結果類。
exogendog和類似的是模型類的屬性。 params是一個結果屬性,因為它是fit方法的結果

因此,如果self是結果實例,則訪問結果類self.model.exog的model屬性,或者使用模型類的方法,即selfMyProbit實例時。

在這種情況下,我不確定是否使用了類方法。 這些屬性僅適用於該類的特定實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM