這個問題是從 Cross Validated遷移而來的,因為它可以在 Stack Overflow 上回答。 11 小時前遷移 。
我正在嘗試為所有雙向互動運行回歸模型,并且每個觀察值大約有 70 個變數。
我有一個特定的變數,比如 z,我想為主要影響建模,但從所有雙向互動中排除。
所以現在我有這樣的事情:
lm(y ~ .^2, data = d)
我想要一個簡單的方法來做到這一點:
lm(y ~ . (not z)^2, data = d)
我知道這有很多變數,我是一名學術研究人員,我只需要看看當我運行包含所有內容的模型時什么是重要的。就我的目的而言,z 作為主要效果是有意義的,但從直觀的角度來看,它不是一種互動。
謝謝!
uj5u.com熱心網友回復:
正如里奇薩克拉門托和我在評論中討論的那樣,這應該有效:
lm(mpg ~ (. - carb)^2 carb, data=mtcars)
這. - carb將使用除 carb 變數之外的所有變數創建公式,然后將其添加。
對于您的資料,它將是這樣的:
lm(y ~ (.-z)^2 z, data = d)
uj5u.com熱心網友回復:
我認為您可以將其與一些字串操作和reformulate.
樣本資料(我們甚至不會嘗試擬合模型,只需弄清楚如何構建公式,所以應該沒問題)。
dd <- data.frame(a = 1:3, b=1:3, c=1:3, d=1:3, e=1:3, f=1:3)
讓我們假設a是回應,并且f是您只想作為主要影響包含在內的焦點變數。
v1 <- paste(setdiff(names(dd), c("a","f")), collapse = " ")
v2 <- sprintf("(%s)^2", v1)
form <- reformulate(c(v2, "f"), response = "a")
## a ~ (b c d e)^2 f
colnames(model.matrix(form, data = dd))
結果:
[1] "(Intercept)" "b" "c" "d" "e"
[6] "f" "b:c" "b:d" "b:e" "c:d"
[11] "c:e" "d:e"
確認@FlapJack 的回答也有效:
colnames(model.matrix(a ~ (. - f)^2 f, data = dd))
[1] "(Intercept)" "b" "c" "d" "e"
[6] "f" "b:c" "b:d" "b:e" "c:d"
[11] "c:e" "d:e"
(另一方面,你可以使用我的框架來做更復雜的事情,比如基于正則運算式的包含/排除變數......)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409145.html
標籤:
上一篇:將資料幀直接轉換為列聯表(R)
