library(datasets)
library(nlme)
n1 <- nlme(circumference ~ phi1 / (1 + exp(-(age - phi2)/phi3)),
data = Orange,
fixed = list(phi1 ~ 1,
phi2 ~ 1,
phi3 ~ 1),
random = list(Tree = pdDiag(phi1 ~ 1)),
start = list(fixed = c(phi1 = 192.6873, phi2 = 728.7547, phi3 = 353.5323)))
Eu ajustei um modelo de efeitos mistos não lineares usando nlme
R, e aqui está minha saída.
> summary(n1)
Nonlinear mixed-effects model fit by maximum likelihood
Model: circumference ~ phi1/(1 + exp(-(age - phi2)/phi3))
Data: Orange
AIC BIC logLik
273.1691 280.9459 -131.5846
Random effects:
Formula: phi1 ~ 1 | Tree
phi1 Residual
StdDev: 31.48255 7.846255
Fixed effects: list(phi1 ~ 1, phi2 ~ 1, phi3 ~ 1)
Value Std.Error DF t-value p-value
phi1 191.0499 16.15411 28 11.82671 0
phi2 722.5590 35.15195 28 20.55530 0
phi3 344.1681 27.14801 28 12.67747 0
Correlation:
phi1 phi2
phi2 0.375
phi3 0.354 0.755
Standardized Within-Group Residuals:
Min Q1 Med Q3 Max
-1.9146426 -0.5352753 0.1436291 0.7308603 1.6614518
Number of Observations: 35
Number of Groups: 5
Ajustei o mesmo modelo no SAS e obtive os seguintes resultados.
Alguém pode me ajudar a entender por que estou recebendo estimativas ligeiramente diferentes? Eu sei que ele nlme
usa a implementação de Lindstrom & Bates (1990). De acordo com a documentação do SAS, a aproximação integral do SAS é baseada em Pinhiero & Bates (1995). Tentei alterar o método de otimização para Nelder-Mead para corresponder ao de nlme
, mas os resultados ainda são diferentes.
Já tive outros casos em que o erro padrão e a estimativa de parâmetros em R vs. SAS são muito diferentes (não tenho um exemplo reproduzível disso, mas qualquer insight seria apreciado). Eu estou supondo que isso tem a ver com como nlme
e nlmixed
estimar os erros padrão na presença de efeitos aleatórios?
fonte
Orange
conjunto de dados contém 35 observações.Respostas:
FWIW, eu poderia reproduzir a saída sas usando uma otimização manual
resultado
Portanto, a saída nlmixed está próxima desse ótimo e não é uma coisa de convergência diferente.
A saída nlme também está próxima do (diferente) ideal. (Você pode verificar isso alterando os parâmetros de otimização na chamada de função)
fonte
Eu lidei com o mesmo problema e concordo com Martjin que você precisa ajustar os critérios de convergência no R para torná-lo compatível com o SAS. Mais especificamente, você pode tentar essa combinação de especificação de argumento (no objeto lCtr) que eu achei que funcionou muito bem no meu caso.
Aviso justo: você deve obter as mesmas estimativas fixas entre SAS e R. No entanto, você provavelmente não obteria o mesmo SE dos efeitos fixos (que ainda estou pesquisando respostas para ..).
fonte