[問題] 取出Residual再跑一次Regression

看板R_Language作者 (allen)時間8年前 (2015/12/01 17:28), 編輯推噓1(1052)
留言53則, 5人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1448962118.A.B24.html

12/01 17:33, , 1F
model.1$residual長度不為533?
12/01 17:33, 1F

12/01 17:34, , 2F
先確認模型1的殘差是否長度跟原本data.frame列數箱
12/01 17:34, 2F

12/01 17:34, , 3F
12/01 17:34, 3F

12/01 18:14, , 4F
我想您應該是做model1時有產生NA(如果有的話summary(model1
12/01 18:14, 4F

12/01 18:14, , 5F
)會告訴你due to singularities…blabla),NA的資料會被略
12/01 18:14, 5F

12/01 18:14, , 6F
過,所以該model計算的殘差個數跟原始資料筆數會不同。其中
12/01 18:14, 6F

12/01 18:14, , 7F
一個可能原因是解釋變數有共線性問題,建議您再檢查一下您
12/01 18:14, 7F

12/01 18:14, , 8F
的迴歸模型~
12/01 18:14, 8F

12/02 11:44, , 9F
原本的model.1所有的解釋變數及被解釋變數length數
12/02 11:44, 9F

12/02 11:45, , 10F
皆為533
12/02 11:45, 10F

12/02 11:46, , 11F
但跑完回歸後,summary(model.1) 出現23observation
12/02 11:46, 11F

12/02 11:47, , 12F
deleted due to missingness
12/02 11:47, 12F

12/02 11:48, , 13F
length(model.1$residual)=510
12/02 11:48, 13F

12/02 11:50, , 14F
不過用model.1$residual看整個殘差就是533個
12/02 11:50, 14F

12/02 11:52, , 15F
l大,如果是完全共線性的話,應該估計係數值跑不出
12/02 11:52, 15F

12/02 11:53, , 16F
來,與樣本數好像沒關係(?)
12/02 11:53, 16F

12/02 12:05, , 17F
所以是你有23個觀察值全部都是NA
12/02 12:05, 17F

12/02 12:05, , 18F
更正 有NA
12/02 12:05, 18F

12/02 12:07, , 19F
所以你把沒NA的觀察值挑出來 fit模型就好了
12/02 12:07, 19F

12/02 12:48, , 20F
但我用model.1$residual
12/02 12:48, 20F

12/02 12:49, , 21F
或cbind(model.1$residual)觀看資料,都還是533個
12/02 12:49, 21F

12/02 12:50, , 22F
樣本
12/02 12:50, 22F

12/02 12:51, , 23F
所以問題出在哪= =?
12/02 12:51, 23F

12/02 12:51, , 24F
如果長度還是533就沒有問題啦
12/02 12:51, 24F

12/02 13:04, , 25F
問題出在我直接用殘差跑,還是顯示變數長度相異。
12/02 13:04, 25F

12/02 13:05, , 26F
在想是不是資料型態排列的關係。
12/02 13:05, 26F

12/02 13:25, , 27F
沒資料 我也無從抓藥了(攤手
12/02 13:25, 27F

12/02 13:44, , 28F
既然length(model1.1$residual)=510,為什麼你會說用model1.
12/02 13:44, 28F

12/02 13:45, , 29F
1$residual是533?你是怎麼看的?
12/02 13:45, 29F

12/02 13:46, , 30F
如果訊息說deleted due to missingness即代表你有樣本是無
12/02 13:46, 30F

12/02 13:47, , 31F
法fit model產出預測值,那當然會沒辦法計算殘差了
12/02 13:47, 31F

12/02 13:49, , 32F
如果還是想要把第一個模型的殘差加入第二個模型,你必須要
12/02 13:49, 32F

12/02 13:52, , 33F
1.把模型2中對應到模型1中missing的那幾筆資料刪除
12/02 13:52, 33F

12/02 13:53, , 34F
2.解決missing 問題(depends on資料特性)
12/02 13:53, 34F

12/02 13:56, , 35F
cbind(model.1$residual)直接觀察每個殘差值,共533
12/02 13:56, 35F

12/02 13:57, , 36F
個,並沒有NA的數字存在。
12/02 13:57, 36F

12/02 14:20, , 37F
沒資料都只能憑空想像,原PO真的想解決就上傳資料吧
12/02 14:20, 37F

12/02 15:16, , 38F
與其憑空亂猜 有資料應該幾分鐘就有神人幫你debug了
12/02 15:16, 38F

12/02 15:18, , 39F
btw 你是想fit一個沒有intercept的迴歸線嗎
12/02 15:18, 39F

12/02 20:19, , 40F
各位抱歉,剛發現是因為各個解釋變數有NA值,才造成
12/02 20:19, 40F

12/02 20:20, , 41F
殘差有23個NA值,因為model.1$residual不會顯示NA值
12/02 20:20, 41F

12/02 20:21, , 42F
所以才沒發現有NA值。
12/02 20:21, 42F

12/02 20:23, , 43F
想問有沒有辦法讓回歸結果出現NA值,即剛好533列數
12/02 20:23, 43F

12/02 20:25, , 44F
感謝各位。
12/02 20:25, 44F

12/02 21:02, , 45F
直接na.omit再去fit model就好了
12/02 21:02, 45F

12/02 21:20, , 46F
其實不是很了解為什麼要用model.1的殘差去跟別人作迴歸,而
12/02 21:20, 46F

12/02 21:23, , 47F
且還是model.2還是用一樣的資料?(c大的na.omit應該是正解)
12/02 21:23, 47F

12/02 21:43, , 48F
排除掉X1 X2 X3 對Y的影響,再用Y去解釋新的變數。
12/02 21:43, 48F

12/02 21:44, , 49F
跟用一樣的資料無關,就只是很簡單的變數探討。
12/02 21:44, 49F

12/04 01:02, , 50F
這樣只排除掉x1x2x3對y “線性”的影響
12/04 01:02, 50F

12/04 03:50, , 51F
to locka, 有些permutation test這樣做, 也有些是特別
12/04 03:50, 51F

12/04 03:51, , 52F
的目的,例如把 y~x 的殘差視為 x 相同下 y 的中心化值
12/04 03:51, 52F

12/04 04:02, , 53F
有需要了解這種應用可以開一個新的討論。
12/04 04:02, 53F
文章代碼(AID): #1MNMX6ia (R_Language)
文章代碼(AID): #1MNMX6ia (R_Language)