Re: [問題] 關於逐步迴歸

看板R_Language作者 (凜魂)時間8年前 (2017/09/18 20:50), 8年前編輯推噓0(0015)
留言15則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ericchin0404 (凜魂)》之銘言: : [問題類型]: : 程式諮詢 : [軟體熟悉度]: : 新手 : [問題敘述]: : 就是我現在有一個反應變數向量Y : 跟一個解釋變數矩陣X,每一行代表一個變數 : 然後我對他做迴歸 : m=lm(Y~X) : 然後我想用stepwise選變數,所以寫了 : step(m) : 不過做出來的結果就是原來的模型,他根本沒有挑選 : 但如果我把模型寫成 : m=lm(Y~X[,1]+X[,2]+X[,3]+X[,4]) : 他就可以選 : 所以我的問題是,如果我要做逐步迴歸,可是迴歸模型想用矩陣表示,那程式應該怎麼 : ? : 另外想問若想把模型改成有二次項跟交互作用項,要怎麼寫? : 麻煩各位,謝謝 我還是遇到一些問題 我的迴歸模型嘗試了以下兩種寫法 1. X2 = cbind(model.matrix(~.^2,data = as.data.frame(X[ind2,]))[,-1],X[ind2,]^2) m2 = lm(Y[ind2]~-1+sqrt(size[a,k])[ind2]+.,as.data.frame(X2)) 2. m2 = lm(Y[ind2]~-1+sqrt(size[a,k])[ind2]+(.)^2 +I(X[ind2,1]^2)+I(X[ind2,2]^2)+I(X[ind2,3]^2) +I(X[ind2,4]^2)+I(X[ind2,5]^2)+I(X[ind2,6]^2) ,as.data.frame(X[ind2,])) 以上兩種迴歸模型都是無截距項,且包含交互作用項和平方項 然後使用step(m2)這個指令進行選模 但是為什麼選出來的變數會不相同 理論上模型相同,選模的指令也相同,只是模型寫法不同,選出來的變數應該要相同才對 , 到底是哪邊出了差錯??? Btw, X本身是一個6行的矩陣,也就是它是一個有六個變數的矩陣 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.127.233.48 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1505739006.A.779.html ※ 編輯: ericchin0404 (140.127.233.24), 09/18/2017 20:53:15 ※ 編輯: ericchin0404 (140.127.233.24), 09/18/2017 21:19:33

09/19 10:30, , 1F
size, a, k, ind2這些是什麼?
09/19 10:30, 1F
size 我比較不好解釋,總之他是一個矩陣,a是一向量,目的是去抓size這個矩陣的某些 列,而k是一個值,也就是這個矩陣的第k行,ind2是一向量,也是要抓位置用的

09/19 10:31, , 2F
既然要抓蟲,請提供可重覆問題的原始碼。
09/19 10:31, 2F

09/19 10:33, , 3F
還有,X[ind2,1]這很可疑。這只會是一個數而不是一群數
09/19 10:33, 3F

09/19 10:35, , 4F
更正,應該只是某些欄的第一列數,如果X是個matrix的話
09/19 10:35, 4F

09/19 11:13, , 5F
再更正。我眼花了。沒事
09/19 11:13, 5F

09/19 11:15, , 6F
lm()生成的物件,如這裡的m2,可以看見內部使用的資料。
09/19 11:15, 6F

09/19 11:16, , 7F
你可以先看看m2$model$Y和m2$model$X是不是如你預期,
09/19 11:16, 7F
模型是一樣的沒錯

09/19 11:16, , 8F
就可以確定是不是正確納入了資料。
09/19 11:16, 8F
※ 編輯: ericchin0404 (140.127.233.24), 09/19/2017 18:02:13

09/19 18:35, , 9F
這樣的話,你的第一個寫法可能在step只會丟整個size和X2
09/19 18:35, 9F

09/19 18:35, , 10F
細看step的回傳步驟就可以發現了。
09/19 18:35, 10F

09/19 18:36, , 11F
因此,如我之前所說,把所有變數都做製做好放在同一個
09/19 18:36, 11F

09/19 18:37, , 12F
data frame之內,step(lm(Y ~ ., data = ...) 才會成
09/19 18:37, 12F

09/19 18:37, , 13F
如果我的推斷不對的話,請你再回應了。
09/19 18:37, 13F

09/19 18:38, , 14F
step()被設計成針對你的formula寫法,所以你只好先「配
09/19 18:38, 14F

09/19 18:39, , 15F
合」它。可能存在其它function會讓你用得更直覺。
09/19 18:39, 15F
文章代碼(AID): #1Ply3-Tv (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Ply3-Tv (R_Language)