Dúvida (pacote logistf)

O Marcel entrou em contato conosco por e-mail com o seguinte problema:

Estou fazendo um trabalho para o meu curso de mestrado e infelizmente estou tendo dificuldade com uma função chamada logistf (regressão pelo método Firth do pacote também chamado logistf).

Consegui rodar o modelo mas quando vou tentar rodar esta mesma regressão em um novo banco de dados usando a função predict(), aparece uma mensagem de erro, conforme descrição abaixo.

Error in object$coefficients[-1] %*% t(newdata) :
  non-conformable arguments

Alguém por favor poderia me ajudar neste caso?

Desde já agradeço a colaboração.

Marcel

Olá Marcel,

Provavelmente seu problema é com o parâmetro newdata. Talvez você tenha colocado um objeto diferente do que o pacote está querendo. Veja que o código que está dando erro é uma multiplicação de matrizes dos coeficientes do modelo com o newdata. Ou seja, o número de coeficientes do seu modelo precisa ser igual ao ncol() (número de colunas da sua base).

Se não conseguir fazer funcionar, tem como você mandar um exemplo reprodutível? Por exemplo, um código completo com uma base simples (por exemplo, alguma base do pacote {dados}).

Espero ter ajudado :slight_smile:

Excelente, agora funcionou. Eu estava usando os dois data frames com as mesmas variáveis mas na verdade o segundo data frame não pode ter a variável resposta, somente aquelas onde os coeficientes serão aplicados.
Muito obrigado.

Pessoal, ainda sobre o pacote logistf, estou tentando usar a função flac (variação do modelo Firth cuja função é logistf) mas não está funcionando. Tentei de duas formas mas o erro continua o mesmo. Seria possível me ajudar no entendimento deste erro?
No primeiro caso, rfirth é a função que usei para rodar a logistf. Já no segundo, coloquei a variável resposta ~., e indiquei o data frame dela e de todas as demais variáveis explicativas.
Grato,

flacc <- flac(rfirth, model = TRUE)
Error in terms.formula(x, data = data, …) :
‘.’ na fórmula e nenhum argumento ‘data’

flacc2 <- flac(IN_DEFAULT_12M ~.,

  •            data = bd_fit, modelo = TRUE)
    

Error in terms.formula(x, data = data, …) :
‘.’ na fórmula e nenhum argumento ‘data’

Consegui reproduzir seu erro com o exemplo do pacote

library(logistf)
data(sex2)
flac(case ~ ., sex2)
> Error in terms.formula(x, data = data, ...) : 
> '.' in formula and no 'data' argument

Mas parece que se você escrever a formula por extenso funciona…

flac(case ~ age + oc + vic + vicl + vis + dia, sex2)
Firth's logistic regression with added covariate

Call:
flac.formula(formula = case ~ age + oc + vic + vicl + vis + dia, 
    data = sex2)


Coefficients:
(Intercept)         age          oc         vic        vicl         vis         dia 
 0.12226743 -1.09634004 -0.06602631  2.28220298 -2.11416934 -0.78731686  3.18173489 

Likelihood ratio test=49.85959 on 6 df, p=5.015822e-09, n=239

parece que o pacote é meio bugado :sweat_smile: