2013-09-27 38 views
4

我想用Julia的GLM軟件包來擬合廣義線性模型。擬合算法失敗,因爲最大迭代次數(默認設置爲30)已被超過。對源的檢查顯示,該參數作爲命名參數(maxIter)存儲到fit函數中,如果dofit命名參數爲glm的爲true(默認情況下),則在glm函數結尾處調用該函數。所以我應該能夠通過它與手動設置dofitfalse,創建我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的背景下的來源表明我的電話應該工作。

+1

這看起來很奇怪。我認爲最簡單的做法是爲'maxIter'在'glm'中添加關鍵字參數,然後將其傳遞給'glm'最後一行中的'fit'。我懷疑Doug會很樂意採用增加了這種功能的補丁。 –

+0

@JohnMylesWhite嗯,但有三個關鍵字參數適合':'verbose','convTol'和'minStepFac'。在glmfit中僅添加'maxIter'可能會使代碼更加混亂,並且添加上述所有內容似乎都是不必要的重複。有沒有辦法在函數調用中將Dict擴展爲關鍵字參數?然後,我可以在glm上添加一個關鍵字arg'fitoptions',並通過'fit(res,fitoptions ...)'將它傳遞給'glm'的最後一行中的'fit'。我知道'...'語法不能用來擴展Dict,但有沒有辦法? –

+0

現在唯一的方法是使用如下函數傳遞任意大量的關鍵字:'function glm(; kwargs ...);配合(kwargs); end'。這基本上從所有的關鍵字參數中產生一個字典。我認爲我們在這裏仍然缺少一個有用的抽象,但它可能不會是'Dict',因爲它們在編譯時不能被完全分析。 –

回答

1

它看起來像沒有被沿https://github.com/JuliaStats/GLM.jl/blob/master/src/glmfit.jl#L134

如果是這樣的話,你應該提交和問題通過關鍵字參數,並在此期間在鏈接功能傳遞給調用,這樣主glm函數被調用,而不是便利的構造函數。

+0

感謝您的回覆。我嘗試過'glm(公式,數據框,泊松(),LogLink(),dofit = false)'儘管我得到了同樣的錯誤,這很奇怪,因爲當你指出這似乎應該觸發主glm功能。我會提出一個問題。 –

相關問題