簡體   English   中英

Python中具有多個約束的約束回歸

[英]Constrained regression in Python with multiple constraints

我目前正在使用以下方法在Python中設置約束回歸

import statsmodels.api as sm

model = sm.GLM(Y,X)    
model.fit_constrained 

'''Setting the restrictions on parameters in the form of (R, q), where R 
and q are constraints' matrix and constraints' values, respectively. As
for the restriction in the aforementioned regression model, i.e., 
c = b - 1 or b - c = 1, R = [0, 1, -1] and q = 1.'''

StatsModel提供的函數,但在嘗試使用多個約束進行設置時遇到一些問題。 我有七個系數,包括一個常數。 我要進行設置,以使虛擬1和虛擬2的加權和等於零,並且虛擬3和虛擬4的加權和等於零。 要使用一個約束示例,

results = model.fit_constrained(([0, 0, 0, a, b, 0, 0], 0))

其中a和b是虛擬3和虛擬4的權重,並且是我預先定義的變量。

如果沒有a和b變量,並且虛擬變量的權重相等,則可以使用以下語法

fit_constrained('Dummy1 + Dummy2, Dummy3 + Dummy4')

但是當我嘗試使用類似的語法時

results = model.fit_constrained(([0, 0, 0, a, b, 0, 0], 0),([0, c, d, 0, 0, 0, 0], 0)) 

我得到錯誤

ValueError: shapes (2,) and (7,6) not aligned: 2 (dim 0) != 7 (dim 0)

有人有什么想法嗎? 非常感謝!

我仍然不確定您正在運行哪種模型(發布最小,完整和可驗證的示例肯定會有所幫助),但是以下操作對於GLM應該適用。 根據文檔 ,我們有

約束公式表達式或元組 )–如果是元組,則約束必須由兩個數組(constraint_matrix,constraint_value),即(R,q)給出。 否則,約束可以給出為字符串或字符串列表。 有關詳細信息,請參見t_test。

這意味着函數調用應遵循以下幾行:

R = [[0, 0, 0, a, b, 0, 0],
     [0, c, d, 0, 0, 0, 0]]
q = [0, 0]

results = model.fit_constrained((R, q))

這應該可以工作,但是由於我們沒有您的模型,因此我不確定R * params = q必須根據文檔確定。

暫無
暫無

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

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