簡體   English   中英

如何規范化 Lmer 模型?

[英]How to normalize a Lmer model?

默:

mixed.lmer6 <- lmer(Size ~ (Time+I(Time^2))*Country*STemperature +
   (1|Country:Locality)+ (1|Locality:Individual)+(1|Batch)+
   (1|Egg_masses), REML = FALSE, data = data_NoNA) 

殘差:

plot_model(mixed.lmer6, type = "diag")

非正態

在我的公式中嘗試了手動 log、power、sqrt 轉換,但沒有任何改進,我也找不到合適的自動轉換 R 函數,例如 BoxCox(不適用於 LMER)

任何幫助或提示將不勝感激

這可能更適合CrossValidated (“我應該做什么?”適合 CV;“我應該怎么做?”最適合 Stack Overflow),但我會嘗試一下。

  • QQ 圖通常是您應該查看的最后一個/最不重要的診斷(順序應該是大約(1)檢查平均值中的顯着偏差/缺失模式[擬合與殘差、殘差與協變量];(2)檢查對於異常值/影響點[杠桿,庫克距離];(3)檢查異方差性[尺度位置圖];(4)檢查分布假設[QQ圖])。 原因是任何“上游”失敗(例如錯過的模式)也會出現在 QQ 圖中; 解決它們通常會解決明顯的非正態性。
  • 如果您可以通過修復模型的其他內容(添加協變量/添加交互/添加多項式或樣條項/刪除異常值)來修復分布假設,那么就這樣做。
  • 您可以編寫自己的蠻力 Box-Cox,例如
fitted_model <- lmer(..., data = mydata)
bcfun <- function(lambda, resp = "y") {
   y <- mydata[[resp]]
   mydata$newy <- if (lambda==0) log(y) else (y^lambda -1)/lambda
   ## https://stats.stackexchange.com/questions/261380/how-do-i-get-the-box-cox-log-likelihood-using-the-jacobian
   log_jac <- sum((lambda-1)*log(y))
   newfit <- update(fitted_model, newy ~ ., data = mydata)
   return(-2*(c(logLik(newfit))+ log_jac))
}
lambdavec <- seq(-2, 2, by = 0.2)
boxcox <- vapply(lambdavec, bcfun, FUN.VALUE = numeric(1))
plot(lambdavec, boxcox - min(boxcox))

(經過輕微測試!但如果它不起作用,請隨時告訴我)

  • 如果您確實需要擬合具有重尾殘差分布的混合模型(例如 Student t),則選項相當有限。 brms包可以適合這樣的模型(但會讓你陷入貝葉斯/MCMC 兔子洞),而heavy包(目前在 CRAN 上存檔)可以工作,但似乎不能處理交叉隨機效應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM