簡體   English   中英

疏通子集交互數 (MuMIn)

[英]dredge subsetting number of interactions (MuMIn)

根據某些標准,我嘗試在全局模型上使用MuMIn::dredge()來為我提供候選模型。 我已經閱讀了?dredge並理解了其中的一些內容,但我仍然對如何包含我的標准之一有一些疑問:

如果我有一個全局模型,例如

y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X1:X2 + X2:X3 + X3:X4 + X4:X6 + X5:X7

(幾個主要影響和幾個交互)並且我想指定我只希望挖泥返回一次包含一個交互的模型,我如何以一種簡單的方式進行子集化?

另外,如果全局模型還包括一個參數的二次多項式

Y ~ X1 + X1^2 + X2 + X3 + X4

並且我想指定這兩個應該始終一起存在於模型中(沒有X1^2主效應X1永遠不會單獨存在)我理解這種語法是(同意?):

dredge(global.model, subset=(X1^2|!X1))

如果我理解正確的話, dredge()會以另一種方式處理(如果X1在模型中,則X1 X1^2只會出現在模型中 - 對於在沒有主效應的情況下永遠不會發生的相互作用也是如此) ?

但是dredge()二次多項式的語法如何? 我是否正確,它是這樣的:

dredge(global.model, subset=({I(X1^2)}|!X1))

?

不是最優雅的解決方案,但它有效:

library(MuMIn)

# example global model with many interactions:
fm <- lm(y ~ (X1 + X2 + X3 + X4)^2, Cement, na.action = na.fail)

# create a vector of interaction term names:
x <- c(getAllTerms(fm))
x <- x[grep(":", x)] # won't work if any variable name has ":" in it.

# create a subset expression (sum of interactions < N):
ss <- substitute(sum(X) < N, list(N = 3, X = as.call(lapply(c("c", x), as.symbol))))

# the resulting expression is:
sum(c(`X1:X2`, `X1:X3`, `X1:X4`, `X2:X3`, `X2:X4`, `X3:X4`)) < 3

dd <- dredge(fm, subset = ss)

# verify:
max(rowSums(!is.na(dd[, x]))) # --> 2

編輯:更好的交互檢測,並包裝成功能:

subsetExprInteractionLimit <- function(model, N = 1) {
    x <- getAllTerms(model)
    x <- c(x)[attr(x, "order")][attr(terms(model), "order") > 1]
    substitute(sum(X) <= N, list(N = N, X = as.call(lapply(c("c", x), as.symbol))))
}

subsetExprInteractionLimit(fm, N = 1) # limit to 1 interaction

暫無
暫無

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

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