2013-09-27 3 views
4

Я пытаюсь установить обобщенную линейную модель с использованием пакета 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 предполагает, что мой звонок должен работать.

+1

Это кажется очень странным. Я думаю, что проще всего добавить ключевой аргумент в 'glm' для 'maxIter', который затем переходите к' fit' в последней строке 'glm'. Я подозреваю, что Дуг будет рад принять патч, который добавит эту функциональность. –

+0

@JohnMylesWhite Хм, но есть три других ключевых слова args для 'fit':' verbose', 'convTol' и' minStepFac'. Добавление только 'maxIter' в' glmfit' может сделать код более запутанным, и добавление всего вышеизложенного кажется излишне повторяющимся. Есть ли способ расширить Dict до аргументов ключевого слова в вызове функции? Затем я мог просто добавить ключевое слово arg 'fitoptions' в' glm' и передать его в 'fit' в последней строке glm с помощью' fit (res, fitoptions ...) '. Я знаю, что синтаксис '...' не будет работать для расширения 'Dict', но есть ли способ? –

+0

Теперь единственный способ - передать произвольно большое количество ключевых слов, используя что-то вроде: 'function glm (; kwargs ...); Fit (kwargs); end'. Это в основном создает dict из всех ключевых слов. Я думаю, что мы все еще не имеем полезной абстракции здесь, но, вероятно, это не будет 'Dict', так как они не полностью анализируются во время компиляции. –

ответ

1

Похоже, что ключевые аргументы не передается вместе в https://github.com/JuliaStats/GLM.jl/blob/master/src/glmfit.jl#L134

Если это так, вы должны подать и вопрос, и в то же время передать в функцию связи с вызовом, так что главный glm вызывается функция, а не конструктор удобства.

+0

Спасибо за ваш ответ. Я пробовал 'glm (формулу, dataframe, Poisson(), LogLink(), dofit = false)' хотя и я получаю ту же ошибку, что странно, потому что, как вы указываете, похоже, что это должно вызвать основной функция glm. Я напишу о проблеме. –

Смежные вопросы