close
用R寫東西,常常出現錯誤都是因為物件結構發生了不如預期的變化,常常會因為結構的問題,要做調整,想想還真麻煩!但其實越熟悉這種結構間的變化關聯和差異,也會有很方便的效果產生。
 
這算是str( )的番外篇吧,來看一下,為什麼要有這麼多不同類型的物件?這個問題不是只出現在R裡,所有的統計軟體都會注意資料的特性,不然就不是統計軟體了。
 
如果你有一點點統計背景,應該有一個概念:每一筆資料或每一個變數都有它獨特的性質。
 
R裡的物件結構是反應資料的某種特性...所以對單一向量或單一變數,會有數字(num)、文字(character)、因子(factor)之類的區別,這對資料分析方法的選用會有很大的影響。
 
這邊先舉一個經典的錯誤
 
迴歸(Regression)是對兩個連續型的變數找出最適合的線性函數:所以把花iris的資料拿出來做分析,想找出下面的方程式是什麼樣子:
Species =a+b * Sepal.Length
花的種類 = a+b * 花萼長
用迴歸看這條線應該是什麼樣子的線, 截距和斜率a和b是多少?
 
> lm(Species ~ Sepal.Length, data=iris)
 
Call:
lm(formula = Species ~ Sepal.Length, data = iris)
 
Coefficients:
 (Intercept)  Sepal.Length  
     -2.5240        0.7742 
Warning messages:
1: In model.response(mf, "numeric") :
  using type = "numeric" with a factor response will be ignored
2: In Ops.factor(y, z$residuals) : ‘-’ not meaningful for factors
 
把這個方程式的結果用中文寫,就是:
花的種類=-2.524+0.774*花萼長
 
這到底是什麼鬼????花的種類怎麼可以寫出數字和方程式,而且它居然還有結果!!!!
這個Warning其實已經不是警告,而是Error!
所以在用R的時候,有些Warning比不能跑Error所產生的問題還要嚴重。
 
來看一下物件結構了解一下發生了什麼事:
> str(iris)
'data.frame': 150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
 
看到我擷取的output裡已經說了,Species 是個Factor(因子)有三個levels,也就是有三種花。看過R tips: cut()的話,應該會記得裡簡單提過Factor:Factor是批文字皮的數字,或著你要說他是批著數字皮的文字,總之它不是一般的數字,在這個例子裡,數字是方便記錄用的,這個Factor的數字是純粹的代號,大小是沒有任何意義。其他的統計軟體也都會有像R這樣對Factor裡的數字加標示的作法。
 
這個Error是從問錯問題、選錯方法產生的,會問錯就是因為對資料的特性和迴歸的用途不了解。其實同樣的數據換個問題會用別種分析方法來解決。例如:不同的花種,花萼長有沒有不同?有沒有辦法用花萼長來區別花種?
 
R做為統計軟體,自然認為你選這個方法做分析就是有最粗淺的了解,至少了解它的用途或目的,你應該是想把它當做數字處理(根據不同Factor的性質,有些這麼做可能有點意義)所以他就”警告”你一下,然後直接幫你把Species轉換成數字來做分析。(這麼說來好像還滿人性化的XD)
 
也因此,R對於一點統計知識都沒有的人使用是有危險的,不懂的人可以忽視警告,隨便跑拿一個output說話。不過仔細想一下,不管哪一種統計軟體做分析,在不重視統計觀念的人手裡都會犯這種錯。至少R的入門比較麻煩,完全不懂的人應該不會選用R,某種程度妨止了分析方法的濫用!(寫到這裡,才明白難怪我們系上老師即使對非統計專業的學生上課,也都是用R,難一點的分析課甚至把R當修課前的須知,並沒有選擇入門容易的SPSS、EXCEL之類的。)
 
之前去一個實驗室上實驗室的安全守則課程,學了兩個字回來:capability和 limitation,能力和限制。講者一再強調,所有的實驗室裡的安全防護設備都有能力和限制,做為使用者,在實驗室裡保護我們安全的設備,都有能做到不能做到的事,你要使用它們最起碼要了解他們的能力和限制,他們才能發揮功用,安全有保障。
 
這個想法用在選用分析方法上是一樣的:對一個方法最起碼知道,它針對什麼類的資料、能解決什麼問題,有什麼情況是處理不了的,就差不多了。
 
以前我想要推R就會想:對一個完全不了解的人推R是好事嗎?現在已經不這麼糾結了。甚至覺得任何人都可以試著用R,彈性大,統計領域的使用者多,也有很多新方法可以試,而且有很多使用者可以討論 (不過大多是英文的)。即使你沒什麼資料分析的背景,當你開始用R,也會慢慢學到各種統計知識了。我希望寫一點東西出來,能讓更多人願意用R,而且更好的和R、和資料溝通。
 
最後再次置入性行銷一個觀念:
目的和問題、資料收集方法、資料的特性、分析方法的選用,全是綁在一起的!
前三項可以把他當作分析資料的背景知識,直接影響分析方法的選用。問題問錯了、資料收集方法有問題、不了解資料特性、對分析方法的使用沒有最粗淺的了解,就算分析出結果做了結論,也是Garbage!請不要把寶貴的生命浪費在這種垃圾過程裡,更不要去幫別人散布各種垃圾結論 (就是所謂的流言),謝謝!
arrow
arrow
    創作者介紹
    創作者 霹靂貓 的頭像
    霹靂貓

    生活統計二三事

    霹靂貓 發表在 痞客邦 留言(0) 人氣()