作者ericchin0404 (凜魂)
看板R_Language
標題[問題] 關於逐步迴歸
時間Thu Sep 14 22:13:40 2017
[問題類型]:
程式諮詢
[軟體熟悉度]:
請把以下不需要的部份刪除
新手
[問題敘述]:
就是我現在有一個反應變數向量Y
跟一個解釋變數矩陣X,每一行代表一個變數
然後我對他做迴歸
m=lm(Y~X)
然後我想用stepwise選變數,所以寫了
step(m)
不過做出來的結果就是原來的模型,他根本沒有挑選
但如果我把模型寫成
m=lm(Y~X[,1]+X[,2]+X[,3]+X[,4])
他就可以選
所以我的問題是,如果我要做逐步迴歸,可是迴歸模型想用矩陣表示,那程式應該怎麼寫
?
另外想問若想把模型改成有二次項跟交互作用項,要怎麼寫?
麻煩各位,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.230.44
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1505398422.A.CE2.html
1F:→ andrew43: 你的第一個step(m)只是試試看把維一的X丟掉看看AIC變化09/14 22:16
2F:→ andrew43: 而發現AIC沒有變更小所以就維持不動。09/14 22:17
4F:→ andrew43: 等等,你的X是矩陣的話,那其實是把整個X都丟掉看看。09/14 22:19
5F:→ andrew43: 你可以as.data.frame(X)後再丟給lm()。09/14 22:20
6F:→ andrew43: 如果x有很多欄,就寫成lm(y ~ ., as.data.frame(x))09/14 22:25
7F:→ andrew43: 其中的 "." 就是指 as.data.frame(x) 的每個欄位09/14 22:25
下面這樣寫可以了 感謝!
那我要讓模型加入二次項跟交互作用項呢?
一樣要能選變數的
比較簡單的寫法是?
※ 編輯: ericchin0404 (42.77.230.44), 09/14/2017 22:33:28
8F:→ andrew43: lm(y ~ (.)^2, as.data.frame(x)) 09/15 00:49
這樣好像只會有一次項跟交互作用項,但不會有平方項,請問還有解決辦法嗎?我試過這
樣寫
lm(y ~ (.)^2+I(X^2), as.data.frame(x))
但同樣沒辦法做逐步挑選
※ 編輯: ericchin0404 (42.77.230.44), 09/15/2017 02:07:32
9F:→ andrew43: 那可以改變做法,先把所有自變項製作好並塞在新的matrix 09/15 02:16
10F:→ andrew43: 或是塞在新的data frame 09/15 02:19
11F:→ andrew43: 例如 model.matrix(~.^2, data = as.data.frame(x))[,1] 09/15 02:28
12F:→ andrew43: 和x^2這二個matrix用cbind()接起來,看習慣。 09/15 02:28
13F:→ andrew43: 另一種想法可以是利用字串處理生成很長的formula,直接 09/15 02:30
14F:→ andrew43: 餵給lm()和step(),而不是預先製作變數。 09/15 02:31
15F:→ ericchin0404: Ok 謝謝 09/16 21:16