作者ericchin0404 (凜魂)
看板R_Language
標題Re: [問題] 關於逐步迴歸
時間Mon Sep 18 20:50:03 2017
※ 引述《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