當我運行下面的代碼時,我似乎遇到了一些問題:
library(lme4)
columns <- c("disp", "hp", "wt", "qsec", "vs")
X <- mtcars[,c(columns, 'cyl', 'carb', 'gear')] # data
rf <- lmer(cyl~ (carb | gear) ., data = X)
rf
### The output that I don't want (lists 'carb' and 'gear' as fixed variables):
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ (carb | gear) .
Data: X
REML criterion at convergence: 76.9662
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.2887
carb 0.2039 -1.00
Residual 0.5202
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) carb gear disp hp wt
10.179140 0.025990 -0.873174 0.003883 0.008190 0.089656
qsec vs
-0.159582 -0.779400
如您所見,當我只需要將“carb”和“gear”用于我的隨機效應變數時,它會將它們計算為固定變數。
我的目標是使代碼保持類似的格式,并且能夠在不將變數“carb”和“gear”作為固定效應(僅作為隨機效應)的情況下運行模型。
我怎樣才能防止“?。” 在第一個模型中選擇“carb”和“gear”作為固定變數,以便它可以產生與下面的第二個模型相同的輸出?
我需要的輸出:(僅“碳水化合物”和“齒輪”列為隨機效應):
> el <- lmer(cyl~ disp hp wt qsec vs (carb | gear), data = mtcars)
> el
Linear mixed model fit by REML ['lmerMod']
Formula: cyl ~ disp hp wt qsec vs (carb | gear)
Data: mtcars
REML criterion at convergence: 79.7548
Random effects:
Groups Name Std.Dev. Corr
gear (Intercept) 0.9932
carb 0.1688 -0.82
Residual 0.5263
Number of obs: 32, groups: gear, 3
Fixed Effects:
(Intercept) disp hp wt qsec vs
6.848103 0.004024 0.006929 0.172789 -0.169145 -0.785878
非常感謝任何幫助!
uj5u.com熱心網友回復:
.R 公式表示法中的快捷方式表示“data除了公式左側的變數之外的每個變數”。這只是一個方便的簡寫,最初是為lm()函式使用而設計的。它不是很靈活,正如您在嘗試將其應用于與預期用途不同的環境中發現的那樣。該lmer()公式包括因變數、固定效應和隨機效應。所以在這種情況下,.快捷方式將不起作用。為避免對變數名稱進行硬編碼,您可以通過粘貼字串將公式組合在一起,如下所示:
columns <- c("disp", "hp", "wt", "qsec", "vs")
fixed_effects <- paste(columns, collapse = ' ')
model_formula <- as.formula(paste('cyl ~ (carb|gear) ', fixed_effects))
model_formula
# cyl ~ (carb | gear) disp hp wt qsec vs
rf <- lmer(model_formula, data = mtcars)
在這里,我們使用paste()withcollapse引數來連接每個元素之間columns的所有元素 。然后我們paste()再次將公式的部分與左側以及隨機效應與固定效應結合起來。這為我們提供了作為字串的完整模型公式,我們可以使用as.formula().
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430947.html
上一篇:我正在用python創建一個類,它會添加兩個數字然后列印它是否足夠但它不添加?
下一篇:如何更簡潔地撰寫更新類引數值?
