我想用Julia的GLM軟件包來擬合廣義線性模型。擬合算法失敗,因爲最大迭代次數(默認設置爲30)已被超過。對源的檢查顯示,該參數作爲命名參數(maxIter
)存儲到fit
函數中,如果dofit
命名參數爲glm
的爲true
(默認情況下),則在glm
函數結尾處調用該函數。所以我應該能夠通過它與手動設置dofit
到false
,創建我GLM,然後調用fit
調整最大迭代的改變maxIter
:如何在改變最大迭代次數的同時使Julia適合GLM?
myGlm = glm(formula, dataframe, Poisson(), dofit=false)
fit(myGlm, maxIter=50)
但這段代碼的第一行失敗,出現錯誤信息:
沒有方法GLM(數組{任何,1},EXPR,數據幀,泊松LogLink)
當我看一下函數簽名glm
我n源(glmfit.jl)或help(glm)
,確實沒有列出此簽名。但爲什麼這是我的函數調用的簽名?命名參數是否會自動作爲數組移動到參數列表的開頭,是否需要顯式支持它們?在This section of the Julia manual的背景下的來源表明我的電話應該工作。
這看起來很奇怪。我認爲最簡單的做法是爲'maxIter'在'glm'中添加關鍵字參數,然後將其傳遞給'glm'最後一行中的'fit'。我懷疑Doug會很樂意採用增加了這種功能的補丁。 –
@JohnMylesWhite嗯,但有三個關鍵字參數適合':'verbose','convTol'和'minStepFac'。在glmfit中僅添加'maxIter'可能會使代碼更加混亂,並且添加上述所有內容似乎都是不必要的重複。有沒有辦法在函數調用中將Dict擴展爲關鍵字參數?然後,我可以在glm上添加一個關鍵字arg'fitoptions',並通過'fit(res,fitoptions ...)'將它傳遞給'glm'的最後一行中的'fit'。我知道'...'語法不能用來擴展Dict,但有沒有辦法? –
現在唯一的方法是使用如下函數傳遞任意大量的關鍵字:'function glm(; kwargs ...);配合(kwargs); end'。這基本上從所有的關鍵字參數中產生一個字典。我認爲我們在這裏仍然缺少一個有用的抽象,但它可能不會是'Dict',因爲它們在編譯時不能被完全分析。 –