[英]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.