作者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/cn.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