Я пытаюсь установить обобщенную линейную модель с использованием пакета GLM от Julia. Алгоритм подгонки терпит неудачу, так как максимальное количество итераций, заданное по умолчанию на 30, превзойдено. Рассмотрение источника показывает, что этот параметр хранится в виде именованного аргумента (maxIter
) функции fit
, которая вызывается в конце функции glm
, если аргумент dofit
с именем имеет значение glm
: true
(по умолчанию это значение). Так что я должен быть в состоянии регулировать макс итераций, установив dofit
в false
, создавая свой GLM, то вызов fit
вручную на него с измененным maxIter
:Как мне сопоставить GLM в Julia, изменяя максимальное количество итераций?
myGlm = glm(formula, dataframe, Poisson(), dofit=false)
fit(myGlm, maxIter=50)
Но первая строка этого кода завершается с сообщением об ошибке :
нет метода GLM (Array {Любой, 1}, Expr, DataFrame, Пуассона, LogLink)
Когда я смотрю на сигнатуры функций для glm
я n источник (glmfit.jl) или с help(glm)
, это правда, что эта подпись не указана. Но почему это подпись для вызова моей функции? Именованные аргументы автоматически перемещаются как массив в начало списка аргументов, и нужно ли их явно поддерживать? Источник в контексте This section of the Julia manual предполагает, что мой звонок должен работать.
Это кажется очень странным. Я думаю, что проще всего добавить ключевой аргумент в 'glm' для 'maxIter', который затем переходите к' fit' в последней строке 'glm'. Я подозреваю, что Дуг будет рад принять патч, который добавит эту функциональность. –
@JohnMylesWhite Хм, но есть три других ключевых слова args для 'fit':' verbose', 'convTol' и' minStepFac'. Добавление только 'maxIter' в' glmfit' может сделать код более запутанным, и добавление всего вышеизложенного кажется излишне повторяющимся. Есть ли способ расширить Dict до аргументов ключевого слова в вызове функции? Затем я мог просто добавить ключевое слово arg 'fitoptions' в' glm' и передать его в 'fit' в последней строке glm с помощью' fit (res, fitoptions ...) '. Я знаю, что синтаксис '...' не будет работать для расширения 'Dict', но есть ли способ? –
Теперь единственный способ - передать произвольно большое количество ключевых слов, используя что-то вроде: 'function glm (; kwargs ...); Fit (kwargs); end'. Это в основном создает dict из всех ключевых слов. Я думаю, что мы все еще не имеем полезной абстракции здесь, но, вероятно, это не будет 'Dict', так как они не полностью анализируются во время компиляции. –