看板 R_Language 關於我們 聯絡資訊
※ 引述《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
andrew43: size, a, k, ind2這些是什麼?09/19 10:30
size 我比較不好解釋,總之他是一個矩陣,a是一向量,目的是去抓size這個矩陣的某些 列,而k是一個值,也就是這個矩陣的第k行,ind2是一向量,也是要抓位置用的
andrew43: 既然要抓蟲,請提供可重覆問題的原始碼。09/19 10:31
andrew43: 還有,X[ind2,1]這很可疑。這只會是一個數而不是一群數09/19 10:33
andrew43: 更正,應該只是某些欄的第一列數,如果X是個matrix的話09/19 10:35
andrew43: 再更正。我眼花了。沒事09/19 11:13
andrew43: lm()生成的物件,如這裡的m2,可以看見內部使用的資料。09/19 11:15
andrew43: 你可以先看看m2$model$Y和m2$model$X是不是如你預期,09/19 11:16
模型是一樣的沒錯
andrew43: 就可以確定是不是正確納入了資料。09/19 11:16
※ 編輯: ericchin0404 (140.127.233.24), 09/19/2017 18:02:13
andrew43: 這樣的話,你的第一個寫法可能在step只會丟整個size和X2 09/19 18:35
andrew43: 細看step的回傳步驟就可以發現了。 09/19 18:35
andrew43: 因此,如我之前所說,把所有變數都做製做好放在同一個 09/19 18:36
andrew43: data frame之內,step(lm(Y ~ ., data = ...) 才會成 09/19 18:37
andrew43: 如果我的推斷不對的話,請你再回應了。 09/19 18:37
andrew43: step()被設計成針對你的formula寫法,所以你只好先「配 09/19 18:38
andrew43: 合」它。可能存在其它function會讓你用得更直覺。 09/19 18:39