Se não houver resposta, provavelmente não haverá suporte :). O motivo é mais provável que normalmente Lasso etc. sejam preferidos à seleção para frente / para trás. E você tem suporte para regularização, por exemplo, em Regression.jl.
No entanto, é muito simples escrever sua própria seleção passo a passo:
using DataFrames
using RDatasets
using StatsBase
using GLM
function compose(lhs::Symbol, rhs::AbstractVector{Symbol})
Formula(lhs, Expr(:call, :+, [1;rhs]...))
end
function step(df, lhs::Symbol, rhs::AbstractVector{Symbol},
forward::Bool, use_aic::Bool)
options = forward ? setdiff(names(df), [lhs; rhs]) : rhs
fun = use_aic ? aic : bic
isempty(options) && return (rhs, false)
best_fun = fun(lm(compose(lhs, rhs), df))
improved = false
best_rhs = rhs
for opt in options
this_rhs = forward ? [rhs; opt] : setdiff(rhs, [opt])
this_fun = fun(lm(compose(lhs, this_rhs), df))
if this_fun < best_fun
best_fun = this_fun
best_rhs = this_rhs
improved = true
end
end
(best_rhs, improved)
end
function stepwise(df, lhs::Symbol, forward::Bool, use_aic::Bool)
rhs = forward ? Symbol[] : setdiff(names(df), [lhs])
while true
rhs, improved = step(df, lhs, rhs, forward, use_aic)
improved || return lm(compose(lhs, sort(rhs)), df)
end
end
Dois parâmetros principais acima são forward
(fazemos a seleção para frente ou para trás) e use_aic
(usamos AIC ou BIC). Claro que tudo isso pode ser facilmente alterado. A implementação não é otimizada para velocidade, mas deve ser boa o suficiente em casos simples.
Aqui está como você pode usá-lo:
df = dataset("datasets", "swiss")[2:end]
stepwise(df, :Fertility, true, false)
stepwise(df, :Fertility, true, true)
stepwise(df, :Fertility, false, true)
stepwise(df, :Fertility, false, false)
(todas as opções retornam o mesmo modelo e são consistentes com um exemplo de referência em R)
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras