作者developme223 (allen)
看板R_Language
標題[問題] 取出Residual再跑一次Regression
時間Tue Dec 1 17:28:36 2015
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
請簡略描述你所要做的事情,或是這個程式的目的
程式碼:
model.1 <- lm(TAC ~ 0 +TA +REC +PPE ,data=merge.data.3)
model.2 <- lm(merge.data.3$RIR ~ model.1$residual)
其中,
merge.data.3 大概資料型態:
Code RIR TAC TA REC PPE
1 20 200 0.5 . .
2 30 . . . .
.
.
.
533 . . . . .
先跑一個簡單線性回歸模型(model.1),取出此模型之殘差,
再跑一次簡單線性回歸(model.2),但此時殘差(model.1$residual)
的排列與原先的data.frame不同(無法執行,跑出Variable lengths differ)
有嘗試用cbind與data.frame重組資料,但好像也無法解決,想請教各位高手
。
[關鍵字]:
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.126.58.61
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1448962118.A.B24.html
1F:→ celestialgod: model.1$residual長度不為533? 12/01 17:33
2F:→ celestialgod: 先確認模型1的殘差是否長度跟原本data.frame列數箱 12/01 17:34
3F:→ celestialgod: 異 12/01 17:34
4F:推 locka: 我想您應該是做model1時有產生NA(如果有的話summary(model1 12/01 18:14
5F:→ locka: )會告訴你due to singularities…blabla),NA的資料會被略 12/01 18:14
6F:→ locka: 過,所以該model計算的殘差個數跟原始資料筆數會不同。其中 12/01 18:14
7F:→ locka: 一個可能原因是解釋變數有共線性問題,建議您再檢查一下您 12/01 18:14
8F:→ locka: 的迴歸模型~ 12/01 18:14
9F:→ developme223: 原本的model.1所有的解釋變數及被解釋變數length數 12/02 11:44
10F:→ developme223: 皆為533 12/02 11:45
11F:→ developme223: 但跑完回歸後,summary(model.1) 出現23observation 12/02 11:46
12F:→ developme223: deleted due to missingness 12/02 11:47
13F:→ developme223: length(model.1$residual)=510 12/02 11:48
14F:→ developme223: 不過用model.1$residual看整個殘差就是533個 12/02 11:50
15F:→ developme223: l大,如果是完全共線性的話,應該估計係數值跑不出 12/02 11:52
16F:→ developme223: 來,與樣本數好像沒關係(?) 12/02 11:53
17F:→ celestialgod: 所以是你有23個觀察值全部都是NA 12/02 12:05
18F:→ celestialgod: 更正 有NA 12/02 12:05
19F:→ celestialgod: 所以你把沒NA的觀察值挑出來 fit模型就好了 12/02 12:07
20F:→ developme223: 但我用model.1$residual 12/02 12:48
21F:→ developme223: 或cbind(model.1$residual)觀看資料,都還是533個 12/02 12:49
22F:→ developme223: 樣本 12/02 12:50
23F:→ celestialgod: 所以問題出在哪= =? 12/02 12:51
24F:→ celestialgod: 如果長度還是533就沒有問題啦 12/02 12:51
25F:→ developme223: 問題出在我直接用殘差跑,還是顯示變數長度相異。 12/02 13:04
26F:→ developme223: 在想是不是資料型態排列的關係。 12/02 13:05
27F:→ celestialgod: 沒資料 我也無從抓藥了(攤手 12/02 13:25
28F:→ locka: 既然length(model1.1$residual)=510,為什麼你會說用model1. 12/02 13:44
29F:→ locka: 1$residual是533?你是怎麼看的? 12/02 13:45
30F:→ locka: 如果訊息說deleted due to missingness即代表你有樣本是無 12/02 13:46
31F:→ locka: 法fit model產出預測值,那當然會沒辦法計算殘差了 12/02 13:47
32F:→ locka: 如果還是想要把第一個模型的殘差加入第二個模型,你必須要 12/02 13:49
33F:→ locka: 1.把模型2中對應到模型1中missing的那幾筆資料刪除 12/02 13:52
34F:→ locka: 2.解決missing 問題(depends on資料特性) 12/02 13:53
35F:→ developme223: cbind(model.1$residual)直接觀察每個殘差值,共533 12/02 13:56
36F:→ developme223: 個,並沒有NA的數字存在。 12/02 13:57
37F:→ celestialgod: 沒資料都只能憑空想像,原PO真的想解決就上傳資料吧 12/02 14:20
38F:→ allen1985: 與其憑空亂猜 有資料應該幾分鐘就有神人幫你debug了 12/02 15:16
39F:→ allen1985: btw 你是想fit一個沒有intercept的迴歸線嗎 12/02 15:18
40F:→ developme223: 各位抱歉,剛發現是因為各個解釋變數有NA值,才造成 12/02 20:19
41F:→ developme223: 殘差有23個NA值,因為model.1$residual不會顯示NA值 12/02 20:20
42F:→ developme223: 所以才沒發現有NA值。 12/02 20:21
43F:→ developme223: 想問有沒有辦法讓回歸結果出現NA值,即剛好533列數 12/02 20:23
44F:→ developme223: 感謝各位。 12/02 20:25
45F:→ celestialgod: 直接na.omit再去fit model就好了 12/02 21:02
46F:→ locka: 其實不是很了解為什麼要用model.1的殘差去跟別人作迴歸,而 12/02 21:20
47F:→ locka: 且還是model.2還是用一樣的資料?(c大的na.omit應該是正解) 12/02 21:23
48F:→ developme223: 排除掉X1 X2 X3 對Y的影響,再用Y去解釋新的變數。 12/02 21:43
49F:→ developme223: 跟用一樣的資料無關,就只是很簡單的變數探討。 12/02 21:44
50F:→ allen1985: 這樣只排除掉x1x2x3對y “線性”的影響 12/04 01:02
51F:→ andrew43: to locka, 有些permutation test這樣做, 也有些是特別 12/04 03:50
52F:→ andrew43: 的目的,例如把 y~x 的殘差視為 x 相同下 y 的中心化值 12/04 03:51
53F:→ andrew43: 有需要了解這種應用可以開一個新的討論。 12/04 04:02