[問題] 關於逐步迴歸

看板R_Language作者 (凜魂)時間8年前 (2017/09/14 22:13), 8年前編輯推噓0(0015)
留言15則, 2人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢 [軟體熟悉度]: 請把以下不需要的部份刪除 新手 [問題敘述]: 就是我現在有一個反應變數向量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://www.ptt.cc/bbs/R_Language/M.1505398422.A.CE2.html

09/14 22:16, , 1F
你的第一個step(m)只是試試看把維一的X丟掉看看AIC變化
09/14 22:16, 1F

09/14 22:17, , 2F
而發現AIC沒有變更小所以就維持不動。
09/14 22:17, 2F

09/14 22:18, , 3F
不嫌棄的話請見拙作 https://youtu.be/en_GdbpZexE
09/14 22:18, 3F

09/14 22:19, , 4F
等等,你的X是矩陣的話,那其實是把整個X都丟掉看看。
09/14 22:19, 4F

09/14 22:20, , 5F
你可以as.data.frame(X)後再丟給lm()。
09/14 22:20, 5F

09/14 22:25, , 6F
如果x有很多欄,就寫成lm(y ~ ., as.data.frame(x))
09/14 22:25, 6F

09/14 22:25, , 7F
其中的 "." 就是指 as.data.frame(x) 的每個欄位
09/14 22:25, 7F
下面這樣寫可以了 感謝! 那我要讓模型加入二次項跟交互作用項呢? 一樣要能選變數的 比較簡單的寫法是? ※ 編輯: ericchin0404 (42.77.230.44), 09/14/2017 22:33:28

09/15 00:49, , 8F
lm(y ~ (.)^2, as.data.frame(x))
09/15 00:49, 8F
這樣好像只會有一次項跟交互作用項,但不會有平方項,請問還有解決辦法嗎?我試過這 樣寫 lm(y ~ (.)^2+I(X^2), as.data.frame(x)) 但同樣沒辦法做逐步挑選 ※ 編輯: ericchin0404 (42.77.230.44), 09/15/2017 02:07:32

09/15 02:16, , 9F
那可以改變做法,先把所有自變項製作好並塞在新的matrix
09/15 02:16, 9F

09/15 02:19, , 10F
或是塞在新的data frame
09/15 02:19, 10F

09/15 02:28, , 11F
例如 model.matrix(~.^2, data = as.data.frame(x))[,1]
09/15 02:28, 11F

09/15 02:28, , 12F
和x^2這二個matrix用cbind()接起來,看習慣。
09/15 02:28, 12F

09/15 02:30, , 13F
另一種想法可以是利用字串處理生成很長的formula,直接
09/15 02:30, 13F

09/15 02:31, , 14F
餵給lm()和step(),而不是預先製作變數。
09/15 02:31, 14F

09/16 21:16, , 15F
Ok 謝謝
09/16 21:16, 15F
文章代碼(AID): #1PkewMpY (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1PkewMpY (R_Language)