Re: [問題] 用R做複線性迴歸方程分析

看板R_Language作者 (攸藍)時間10年前 (2013/09/06 02:01), 編輯推噓8(8065)
留言73則, 2人參與, 最新討論串3/3 (看更多)
最後補一個總流程 1. 了解資料特性 2. 查看變數相關性,確保共線性問題不會出現 => 出現共線性問題 就要考慮其他方法 3. 模型選擇,通常不會是單一標準 a. 最簡單的方式就是根據你設定的significant level篩選掉不顯著的變數 b. 用prediction error決定加入哪些變數 (資工最常用) c. 用AIC or BIC選擇最好的模型 d. 有時候也會同時考慮R^2跟AIC 4. Model checking a. Normality => 沒過就要考慮response要做轉換,很多時候b的方法會拿來用 b. Equal variance => 最常見的就是用power transformation or Box-Cox (Note: 轉換以容易解釋為主) c. outlier detection => influence大才建議刪除 5. 最終結果 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.79.227 ※ 編輯: celestialgod 來自: 218.164.79.227 (09/06 02:02)

09/06 02:29, , 1F
感謝c大 對我處理迴歸有很大的幫助^^
09/06 02:29, 1F

09/06 14:49, , 2F
想再請教c大 假如資料含有NA 如何把NA排除或轉化為0?
09/06 14:49, 2F
如果你的data存在dat這個object上,指令如下 dat[which(is.na(dat)]=0

09/06 15:23, , 3F
另外還有幾個問題 outlierTest()指令是跑出所有離群值的?
09/06 15:23, 3F
他會告訴你說有沒有standardized residual太大 在第一行 然後下面會列出最大的standardized residual.... 我手邊沒有一個有outlier的data,不知道有outlier他會怎樣....

09/06 15:25, , 4F
離群值要怎麼做刪除? 指令我不太會..以savings資料檔為例
09/06 15:25, 4F
離群值就你如果知道他的row number,rn 就 dat.new=data[-rn]

09/06 16:59, , 5F
我有把要刪除na的資料檔打進指令內 但好像還是不行
09/06 16:59, 5F

09/06 16:59, , 6F
刪除NA的資料檔我適用data(airquality)
09/06 16:59, 6F
sorry, 不用which airquality[is.na(airquality)]=0

09/06 17:00, , 7F
我自己有找過刪除NA的指令 好像有個na.action=na.exclude
09/06 17:00, 7F

09/06 17:01, , 8F
另外離群值的哪個指令 好像刪除數字還可以
09/06 17:01, 8F

09/06 17:01, , 9F
但文字的離群值就不知道該怎麼刪除了
09/06 17:01, 9F
你有例子我可以幫你試試看.... 還有我對function涉獵比較少...通常我都徒法煉鋼@@... 可能有好用的function可以用於刪除NA or Outliers...

09/06 17:06, , 10F
另外誠心跟c大您說聲感恩 不然迴歸很少有用R的書籍= =+
09/06 17:06, 10F
書的話下面有幾本 你可以在網路上找到低調 Linear Models with R Extending_the_Linear_Model_with_R Using R for Data Management, Statistical Analysis, and Graphics 這幾本都有用回歸作分析....而且都是用R

09/06 18:24, , 11F
關於文字的離群值我適用data(savings)資料檔 再用指令
09/06 18:24, 11F

09/06 18:25, , 12F
outlierTest()找出離群值 只是試跑出文字的離群值用
09/06 18:25, 12F

09/06 18:26, , 13F
data[-rn,]的方式不適能刪除 數字的話就沒問題!
09/06 18:26, 13F

09/06 18:34, , 14F
另外剛剛有把airquality[is.na(airquality)]=0的指令放在
09/06 18:34, 14F

09/06 18:34, , 15F
lm()指令中 但發現如果對y做log轉換好像就有問題= =+
09/06 18:34, 15F
還是不太明白什麼叫做文字離群值XD... rn一定要數字啊!!! 因為那個是去掉那一列 如果你說的是去掉某一個國家的話,可以這樣 savings[-match("South Africa", rownames(savings)),] 這個就是我要去掉南非那一個row....當然可以一次去多個 savings[-match(c("South Africa","China"), rownames(savings)),] 因為你y裡面有0....(PS:你剛剛說要把NA轉成0....) 所以log(0)=-Inf...當然會有問題 補充:你可能會用到多項式的回歸 可以這樣寫 lm(y~I(x^2)+I(x^3)+log(x)) I()可以讓你在lm裡面做計算@@...

09/06 19:30, , 16F
喔喔 對吼 不能LOG(0)= =+ 那NA的部分要怎麼處理才好= =?
09/06 19:30, 16F

09/06 19:31, , 17F
因為有個迴歸方程的常態假設沒成立 所以我要對Y做LOG轉換
09/06 19:31, 17F

09/06 19:31, , 18F
麻煩的是airquality這個資料檔有NA..
09/06 19:31, 18F

09/06 19:33, , 19F
晚一點我可能會PO我寫的程式碼@@ 不過應該有些問題..
09/06 19:33, 19F
NA就是NA阿= = 給他0....實在不怎麼make sense除非有什麼合理解釋... 你PO程式碼之後 可以再研究看看 ※ 編輯: celestialgod 來自: 218.164.79.227 (09/06 19:41)

09/07 00:06, , 20F
09/07 00:06, 20F
看了一下你的程式.... 最後一行我前面有說明 還有 var.test 我不懂你在做什麼... 你可以說明一下 你那樣分組的意義跟原因嗎?

09/07 00:11, , 21F
另外我會想處理有NA是因為如果不管的話 分析一些數據
09/07 00:11, 21F

09/07 00:12, , 22F
程式好像會自動忽略有NA的整筆資料 所以想說能把NA調為0?
09/07 00:12, 22F

09/07 00:13, , 23F
因為這方面小弟是也還是新手 滿多地方都一知半解= =+
09/07 00:13, 23F
忽略是正常的... 如果不想忽略 請找其他適合的模型配適 或是利用一些方法去估計 不是你隨便加值 可以搞定的... 資料最大!!! 你想對資料做什麼都要有合理理由!!

09/07 00:16, , 24F
另外關於影響點的檢測 c大適用哪個指令來做檢測?
09/07 00:16, 24F
影響點通常就是去畫scatter plot比較快 看圖真的比較容易~"~

09/07 00:40, , 25F
另外是否能從cook's distance plot看出影響點?
09/07 00:40, 25F
不可能XD 我指的影響點是說會嚴重影響回歸係數估計的點 有些點雖然有點超出正常群的範圍 可是他在回歸線上 那是可以的... => cook's distance plot不能正確找出影響點,但是可以縮小範圍

09/07 00:41, , 26F
var.test()指令是我們被規定要拿來檢測變異數為常數 所以
09/07 00:41, 26F
規定= =? 不太懂這個規定有何用,不能用就是不能用...沒什麼好說的 而且那個是做two-sample variance F-test 完全不適用於此...
還有 15 則推文
還有 9 段內文
對 是看該點是否有嚴重影響斜率

09/07 13:27, , 42F
另外可以麻煩C大提幾個重要的指標但我PO的程式碼卻沒有?
09/07 13:27, 42F
程式碼,我就不看了...我前面那篇寫的已經夠完整了....

09/07 13:27, , 43F
再次感謝C大鼎力相助^^
09/07 13:27, 43F

09/07 13:43, , 44F
09/07 13:43, 44F

09/07 15:12, , 45F
09/07 15:12, 45F

09/07 18:05, , 46F
請問你做這個分析的目的是?
09/07 18:05, 46F

09/07 21:59, , 47F
阿,我是想請s版友先想想這個問題,因為不同的目的手段也
09/07 21:59, 47F

09/07 21:59, , 48F
會不同,所以這個問題是非常重要的。
09/07 21:59, 48F
版大說得很對QQ...不同領域處理相關問題的看法是極為不同的。

09/08 00:47, , 49F
拍謝 晚上有事 剛剛才回來= =+ 主要是要找到一個最適模型
09/08 00:47, 49F

09/08 00:49, , 50F
經過塞選變數->檢定變異數為常數->常態假設是否成立->
09/08 00:49, 50F

09/08 00:50, , 51F
塞選掉對模型有影響的離群值 最後出來的最適模型即可
09/08 00:50, 51F

09/08 00:51, , 52F
這是我們教授要我們照的步驟 可是是暑修 所以教得很隨便.
09/08 00:51, 52F

09/08 00:51, , 53F
只是告訴我們一些指令 講些觀念再來就是叫我們自己練習..
09/08 00:51, 53F
最適怎樣叫做最適.... 資工覺得Prediction Error or Test Error最低是最適 統計有些人認為AIC最低最適 有些人認為BIC最低最適 當然亦有人認為判定係數最高就最適 何謂最適? 這沒有一個準則...只能說你們教授教的就照教科書念一念而已吧~"~

09/08 00:54, , 54F
所以才會很多觀念以及程式都一知半解 真的不好意思><
09/08 00:54, 54F
這不完全是你的錯@@...

09/08 01:06, , 55F
是阿 我現在其實比較煩的就是離群值的部分><
09/08 01:06, 55F

09/08 01:07, , 56F
教授只教outlierTest()這指令說跑出來的離群值要刪除= =+
09/08 01:07, 56F

09/08 01:08, , 57F
但我發現這樣問題滿多的.因為我隱約記得離群值事不能亂刪
09/08 01:08, 57F

09/08 01:09, , 58F
總之有些地方還是得照他的規定來做 所以就只好盡量了><
09/08 01:09, 58F

09/08 01:14, , 59F
就希望盡量在刪除離群值後 模型能保持常態假設和等變異
09/08 01:14, 59F

09/08 01:15, , 60F
至少有達成教授他要求的方式和結果 自己有時間再鑽研吧
09/08 01:15, 60F
恩 按照你教授的想法 大概資料會只剩下70%...這種事情常有XD 會不斷的刪....我以前就用過這種作業了XDDD

09/08 01:47, , 61F
sseeaann,那模型的目的是什麼呢?不同目的,所選的模型差
09/08 01:47, 61F

09/08 01:47, , 62F
異也會很大
09/08 01:47, 62F

09/08 01:48, , 63F
就像是預測用模型,不一定會很注重共線性的問題
09/08 01:48, 63F
那是經濟資料,我覺得選擇模型最重要的應該是預測未來的saving rate

09/08 02:10, , 64F
其實如果真要問我這個模型的目的是做啥 我也不太會說...
09/08 02:10, 64F

09/08 02:11, , 65F
暑修這樣上根本沒辦法搞懂迴歸 只能照教授的要求盡量做
09/08 02:11, 65F

09/08 02:13, , 66F
不過我想模型的用途應該像W大講的 預測用吧..
09/08 02:13, 66F

09/08 02:15, , 67F
而且我很難責怪教授教不好 肯開迴歸暑修就應該要很感激了
09/08 02:15, 67F
只能說 迴歸分析是需要經驗來累積的.... 不是上個課就會了...教授教得好不好是一回事 你有沒有認真學起來才是真的 ※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 02:21)

09/08 18:05, , 68F
目前已經弄好了 不過看完真的有頭大 因為不熟迴歸..
09/08 18:05, 68F

09/08 18:05, , 69F
講一下我的步驟好了 分析資料建模->model selection->
09/08 18:05, 69F

09/08 18:08, , 70F
偏F檢定->檢查共線性->殘差配適圖->變異數是否為常數->
09/08 18:08, 70F

09/08 18:09, , 71F
QQplot->常態假設檢定->離群值檢定->刪離群值之模型檢定
09/08 18:09, 71F

09/08 18:10, , 72F
->回到殘差配適圖的步驟到常態假設檢定->得到最適模型
09/08 18:10, 72F

09/08 18:11, , 73F
抱歉 中間有少打一開始的常態假設沒過則做對數轉換
09/08 18:11, 73F
文章代碼(AID): #1IACS3PA (R_Language)
文章代碼(AID): #1IACS3PA (R_Language)