plot() 函數: R中繪製任何內容的最常用函數是plot()函數。 這是一個通用函數,可用於散點圖,時
間序列圖,函數圖等。
如果給予單個向量資料, 則在 y 軸上對該行繪製值數字或索引。 如果給出兩個相同長度向量資 料, 則產生雙變量散佈圖。
urve() 函數: 要在指定的值範圍內繪製連續函數, 可以使用 urve() 函數。
urve(expr, from, to,add = FALSE, ...)
> urve(sin(x), from = 0, to = 2*pi)
>abline(7,2, ol="green") # y=7+2x ,h=*, v=*
我們可以在圖形視窗中添加幾個不同的功能。 要添加點, 我們使用 points() 指令 。 要添加一條
直線, 可以使用 abline()函數。 線條函數用於添加更多一般線條。 它繪製了指定的點,並用直線
連接它們。 類似於在繪圖函數中添加參數 type =l。 參數 add = TRUE, 曲線將添加到圖形 中
points() 函數: 在已經繪圖圖中增加點, 可以使用 points(x,y) 函數,
(x, y)
為向量。在函數添加參數type=b 為顯示點位置,點與點間以直線連接。type=l 為點與點以直線連 接, 不顯示點位置。
表 4: 作圖常用指令函數 指令 用法說明簡介
abline() 增畫一直線 (給予斜率,y 截距)、 鉛直線或水平線
arrows() 坐標增加一方向箭頭
lines() 連接兩點的線
points() 增畫點坐標位置
spline() 在資料點間內插方法 (平滑曲線連接)
rug() 在
x
坐標軸增劃標記segments() 增劃割線(同lines() )
text() 在圖形中增添文字
title() 圖形標題, 次標題等
範例 1: > urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1)
> points(x,sin(x),type="b", p h= 19 o l=1, lty= 2)
> points(spline(x,sin(x)),t ype= "b", p h= 4)
> urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1) #函數關係作圖
> x= (seq(from=0,to=2*pi,by =0.5 ))
> points(x,sin(x),type="b", p h= 19, ol=1 ,lty =2) # 點與點連接折線
> points(spline(x,sin(x)),t ype= "b", p h= 4, o l=3, lty= 3) # 點與點平滑曲 線
順伯的窩 第 頁 共 頁
> legend(4, 0.5, legend= (" urve", "points","spline"),
ol= ("red", "bla k","green"), lty=1:3, ex=2) #圖例說明
>abline(h=0, ol="blue") # 水平直線 y=0
0 1 2 3 4 5 6
−1.0 −0.5 0.0 0.5 1.0
x
sin(x)
curve points spline
圖 1: 曲線作圖、 點描法與平滑內插曲線 作圖參數: 。
ol: 用於設定默認的繪圖顏色 lty: 直線類型。 參數的值可以為整數:0為空,1為實線 (預設 值),2為虛線,3為點線 p h: 設置點的類型 ex: 設置文本和符合的尺度 p h: 設置點的類 型
> par(mfrow = (2, 2)) # 圖形以 2x2 格輸出
> par(lend = 1) # 設置線結束端的形狀 1="butt"
> par(bg = " ornsilk") # 作圖背景顏色設定
> par(xlog = TRUE) # x 軸是否設為對數單位 範例 2: 汽車行駛哩數與輪胎胎面磨損數據如下:
mileage 0 4 8 12 16 20 24 28 32
tread wear 394 329 291 255 229 204 179 163 150
若已知其回歸線截距 360, 斜率
−7.3
,有三種方法可在其散佈圖增畫回歸線> miles = (0:8)*4 # 0 4 8 ... 32
> tread = s an()
1: 394 329 291 255 229 204 179 163 150
10:
Read 9 items
> plot(miles,tread) # make the s atterplot
>abline(lm(tread ~ miles))
## or as we know the inter ept and slope
> abline(360,-7.3)
## or using points
> points(miles,360 - 7.3*miles,type="l")
## or using lines
> lines(miles,360 - 7.3*miles)
## or using urve
> urve(360 - 7.3*x,add=T) # add a fun tion of x
順伯的窩 第 頁 共 頁
0 5 10 15 20 25 30
plot(body,brain,p h=16,xl ab= "Bod y weight (kg)", ylab="Brain weight (g)",
xlim= (0,280), ylim= (0,1350)) # xlim ylim 限制作圖範圍
text(x=body[ (21,32,56,36 )℄, y=br ain[ (21 ,32, 56,3 6)℄,
labels=X[ (21,32,56,36)℄,po s=4) # pos 文字位置1下2左3上4右方
>plot(1,1,xlim= (1,7.5),yl im= (1. 75,5 ),ty pe=" n",a xes= F,xl ab=" ",yl ab=" ") #不 作圖點
>box() # 圖框格
>points(1:7, rep(4.5, 7), ex=1:7, ol=1:7, p h=0:6) #點型式 p h0~6
>text(1:7,rep(3.5, 7), labels=paste(0:6), ex=1:7, ol=1:7) # 張貼文字
0~6
>points(1:7,rep(2.5,7), p h=(0:6)+7) # 點型式 p h7~13
>text((1:7), rep(2.5,7), paste((0:6)+7), pos=4) # 張貼文字7~13
>points(1:7,rep(2,7), p h=(0:6)+14) # 點型式 p h14~20
順伯的窩 第 頁 共 頁
>text((1:7), rep(2,7), paste((0:6)+14), pos=4) # 張貼文字14~20
0 1 2 3 4 5 6
6 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
0 1 2 3 4 5 6
圖 4: 圖形中不同的點符號與大小
view. olours <- fun tion(){
plot(1, 1, xlim= (0,14), ylim= (0,3), type="n", axes=F,
xlab="",ylab="")
text(1:6, rep(2.5,6), paste(1:6), ol=palette()[1:6℄, ex=2.5)
text(10, 2.5, "Default palette", adj=0)
rain hars <- ("R","O","Y","G","B","I"," V")
text(1:7, rep(1.5,7), rain hars, ol=rainbow(7), ex=2.5)
text(10, 1.5, "rainbow(7)", adj=0)
mtxt <- substring(" m. olors", 1:9,1:9)
# Split â m. olorsâ into its 9 hara ters
text(1:9, rep(0.5,9), mtxt, ol= m. olors(9), ex=3)
text(10, 0.5, " m. olors(9)", adj=0)
}
box()
view. olours()
1.5 練習題
1. 假設您使用命令曲線
curve(cos(x))
繪製了一個繪圖。 您將使用哪條 R 指令將此圖作為 PDF 保存在名為 myplot.pdf 的文件中?2. 詳細說明該指令的效果 par(mfrow= (3,2)) 3. 說明指令 layout() 功能用於什麼?
4. 您將使用哪個命令將散點圖添加到預先存在的繪圖中?
順伯的窩 第 頁 共 頁
1 2 3 4 5 6 Default palette
R O Y G B I V rainbow(7)
c m . c o l o r s cm.colors(9)
圖 5: 圖形中不同的顏色
lty=1 lwd=2
lty=2 lwd=2
lty=3
lty=3 lwd=2
lty=4 lwd=2
lty=5 lwd=2
lty=6 lwd=2
font=1 plain cex=1
font=2 bold cex=2
font=3 italic font=4 bold italic φοντ=5 symbol cex=3
Line type & Fonts family
圖 6: 線型式與粗細大小
順伯的窩 第 頁 共 頁
5. 您將使用函數 plot()的哪個參數來設定點之間連接線段?
6. 繪製一個直線的指令函數是什麼?
7. 您將使用哪個參數來管理繪圖中的顏色設定?
8. 給出顯示圖像的指令函數, 其值以矩陣 X 輸出, 您將使用哪個功能來顯示圖像? 以使輸出與控 制台中顯示 X 的方式一致。
9. 您將使用哪個指令函數在繪圖中添加文字?
10. 您可以使用哪個函數指令, 通過單擊鼠標來查找繪圖中點的坐標?
11. 詳細解釋指令 par(ask=TRUE) 的效果?
12. 函數par()的哪個參數將用於指令函數 urve() 繪製的線的類型?par()的哪個參數將用在散點
圖中顯示其他符號而不是小圓圈?
13. 提供說明列表以顯示以下圖表。 中軸系統必須以紅色顯示。 餘弦曲線必須以藍色顯示?
−10 −5 0 5 10
−2 −1 0 1 2
Sinus and cosinus curves
X axis
sin(x)
β ^
1
14. 靈長類動物的體重與腦容量資料如下, 先建立資料並作 (Bodywt,Brainwt) 的散佈圖, 並在旁 註記靈長類動物名?
Bodywt Brainwt
Potar monkey 10.0 115
Gorilla 207.0 406
Human 62.0 1320
Rhesus monkey 6.8 179
Chimp 52.2 440
15.
順伯的窩 第 頁 共 頁
2 R
軟體與敘述統計
想從事資料科學(DataS ien e)工作的朋友需要培養三個能力,著名的資料科學文氏圖(Drew
Con-way) 清楚的呈現了幾個方向。
•
Ha king Skills: 這裡說的並不是成為駭客所需要的技巧, 而是透過程式邏輯, 能夠有像演算法這樣邏輯性的思考模式,同時具備一些程式設計與資料庫的技巧,將解決問題的邏輯程式化、 視 覺化。
•
Math &Stats knowledge: 透過數學、 統計、 模型等能力,分析或是推演出解決問題的邏輯。 數 學對於資料科學來說, 能了解模型背後的意涵, 進而設計相對應適合的模型, 避免只是盲目的跑 模型、 換模型。•
Substantive Expertise: 擁有專業的領域知識, 能讓你精準的定義問題以及評判解決問題的結果是否正確。 接著就是如何將這些模型被應用在專業領域。
Danger Zone: 白話的說法是 「會跑 Data Mining, 不表示能下正確決策」。 只要資料來源夠多, 你
就會有很高的機率找到強烈相關, 這種現象在大數據時代將會頻繁的發生。 這種相關性, 稱"偽相關
(spurious orrelations)。 教科書通常會再次強調 「相關不見得有因果關係, 多想兩分鐘, 別看到有相
關就要下結論」
TraditionalRea her Math & Statisti s
Ma hinelearning
Ha king Skills
DangerZone
Substantive Expertise Data S ien e
統計是一門科學, 由收集資料
→
整理資料→
分析資料→
解釋意義等規則與程序。對於給定的數據資料, 很大程度上取決於數據資料的結構 (依屬性分類別資料, 數量資料; 依數學 性質分離散資料, 連續資料) 以及正在進行的變量的類型 (單變數,多元變數)再決定可以執行的圖表 和數值摘要指令函數。
要進行統計之前,須先了解資料有哪些型態。 主要分為類別型 (如性別、 國籍)、 順序型(如滿意度, 距離沒有意義)、 區間 (如溫度, 距離有意義)及比例 (又稱為連續型, 一般最常見)。
資料的度量尺度: 衡量資料變數的特性(可進行哪些統計計算), 在統計學中定義四種量尺(s ale)。
1. 名目尺度 (nominal s ale): 類別型態的資料, 如: 婚姻狀態 (1表已婚,2表未婚)、 性別 (1=男 性,2=女性)、 血型、 職業等。 這些變數不能進行四則運算, 但可以計算次數、 眾數。
2. 順序尺度 (ordinal s ale): 具有大小、 順序、 強烈程度等特性的資料。 如: 五點李克特量表 (1 表非常不同意,2表不同意,3表無意見,4表同意,5表非常同意)、 學力(1表國中小,2表高中職,3表 大專,4表碩博士)、考試成績排名、 考試成績15等級分等。 有大小次序關係但不能進行四則運算, 只能計算次數、 眾數、 中位數。
順伯的窩 第 頁 共 頁
3. 區間尺度 (interval s ale): 同時具名目尺度與順序尺度之特性, 衡量資料間的差異有意義但不 具有倍數關係的變數。 如: 智商、 溫度、 問卷中年齡 (0表0-10歲,1表11-20歲,2表21-40歲,3表
41-60歲,4表61歲以上) 等。 可衡量沒有倍數關係的數值資料, 可計算所有統計量數 (眾數、 中 位數、 平均數、 變異數、 標準差等)
4. 比例尺度 (ratios ale): 同時具有名目尺度、 順序尺度與區間尺度特性。 與區間尺度最大差別在
於變數數值資料具有固定的原點0, 數值具有倍數關係, 可進行四則運算, 可計算所有統計量數
(眾數、 中位數、 平均數、 變異數、 標準差等)
資料種類依照取得方式來源範圍、 資料屬性、 數學性質
· · ·
等進行分類1. 來源範圍: 分普查資料與抽樣資料
2. 資料屬性: 分定性資料與定量資料
(a) 定性資料 (類別資料): 如性別、 婚姻狀態、 血型、 職業別等。 僅具名義上的性質, 無法用量 尺進行衡量。
(b) 定量資料(數值資料): 如年齡、身高、 體重或收入等。 可用順序量尺、 區間量尺、 比率量尺 衡量之。
3. 數學性質:分離散資料與連續資料
(a) 離散資料 (間斷資料): 如年度、 五等第、 家庭人口數、 賣場每日銷售飲料數等。 兩數值之 間無法再進行切割, 只能用某些特定數值表示。
(b) 連續資料: 如排隊等待時間、 每天的平均氣溫、 學童的身高體重等。 兩數值之間可再進行 切割, 能用連續的數值表示。
4. 是否分群組:
資料呈現的方式大致可分成: 條列式、 統計表與統計圖。 其中條列式與統計表較適合少數的資料, 統計圖則適合大量的資料。 使用適合的統計圖表可以讓資料分析更容易解讀資料, 並做較準確的估計 及進一步的推論步驟。
類別資料常用統計圖表:
1. 統 計 表: 次 數 分 配 表 (frequen y distribution table)、累積 次 數 分 配 表 ( umulative fre-quen y table) 與交叉表 ( ross table)。
2. 統計圖:長條圖 (bar hart)、 折線圖 (polygon) 與圓面積圖(pie hart) 定量資料常用統計圖表: 是否進行分組(組距型、 非組距型)
1. 統計表: 次數分配表 (frequen y distributiontable)、 相對次數分配表與累積次數分配表
( umulative frequen y table)。
2. 統計圖:直方圖 (histogram)、 折線圖 (polygon)
而對於資料的描述, 可以透過資料的集中 (資料中心趨勢) 與分散 (資料分散差異程度) 兩大方向 來表達。 描述集中趨勢常見的有平均、 眾數與中位數。 描述資料分散差異程度則有四分位數、 全距、 百 分位數、 標準差、 變異數等。
除了個別資料描述外還可以描述不同變數之間的關係。 比如說, 我們想知道是不是身高越高 (公 分), 體重會比較重 (公斤)是否有相關係, 則可以用相關係數來表示。 其中最簡單的一種,是皮爾遜相 關係數 (Pearson produ t-moment orrelation oe ient,通常簡寫為 r)。
順伯的窩 第 頁 共 頁
2.1
次數計算統計表
table() 函數: 對應的就是統計學中的列聯表, 是一種記錄頻數的方法, 對於統計來說有非常重要的應
用。 fa tor(): 資料中的類別因子 個別資料統計表:
範例 1: 單一類別資料: 調查抽菸與否回答資料為 Yes, No, No, Yes, Yes
> x= ("Yes","No","No","Yes"," Yes" )
> table(x)
x
No Yes
2 3
分組資料統計表:
範例 2: 建立分組次數分配表: ut(x,breaks= ())
ut(sals,breaks= (0,1,5,50)) 將sals.txt 資料分成區間
[0, 1]
,(1, 5]
,(5, 50]
三組> ats = ut(sals,breaks= (0,1,5,m ax(s als) )) # spe ify the breaks
> ats # view the values
[1℄ (5,50℄ (0,1℄ (1,5℄ (1,5℄ (5,50℄ (5,50℄ (1,5℄ (0,1℄ (1,5℄ (0,1℄
Levels: (0,1℄ (1,5℄ (5,50℄
> table( ats) # organize
ats
(0,1℄ (1,5℄ (5,50℄
3 4 3
> levels( ats) = ("貧窮","富有","非常富有") # hange labels
> table( ats)
ats
貧窮 富有 非常富有
3 4 3
雙變量類別數據交叉表:
列聯表: (有時稱為雙向頻率表) 是一種表格,在統計中使用至少兩行和兩列來根據頻率計數顯示分類 數據。
更確切地說,
r × c
列聯表顯示了兩個變量的觀察次數(頻率),其觀察到的次數 (頻率)被排列成r
行和c
列。 列聯表的行和列的交集稱為單元。範例 1: (兩類別變數資料) 假設進行了一項學生調查, 以評估吸煙的學生是否學習時間較少,
順伯的窩 第 頁 共 頁
資料如下:
> smokes = ("Y","N","N","Y","N","Y" ,"Y" ,"Y" ,"N" ,"Y" )
> amount = (1,2,2,3,3,1,2,1,3,2)
> table(smokes,amount) # 類別次數表格
amount
smokes 1 2 3
N 0 2 2
Y 3 2 1
> options(digits=3) # 取小數位3位
> prop.table(table(smokes,am ount )) # 比率表格
amount
smokes 1 2 3
N 0.0 0.2 0.2
Y 0.3 0.2 0.1
彙整分組表格數據製作:xtabs(): tabulardata
範例 2: 彙整分組表格數據製作:"tw_marriage.txt 是台灣在2008年15歲以上國民的婚姻 狀態統計資料。
> tw=read.table("d:/math work/data/tw_marriage.txt", sep= "",h eade r=T, skip =0)
> xtabs(widowed~area,data=tw )
area
中 北 外島 東 南
269693 465706 11557 38566 348013
> xtabs(widowed~area+gender, data =tw)
gender
> mytable=xtabs(widowed~area+ gend er,d ata= tw)
> table. omplete <- addmargins(mytable,FUN=su m,qu iet= TRUE )
順伯的窩 第 頁 共 頁
> table. omplete
gender
area F M sum
中 213264 56429 269693
北 379703 86003 465706
外島 9262 2295 11557
東 31147 7419 38566
南 274318 73695 348013
sum 907694 225841 1133535
# margin=1 olumn sum,margin=2 row sum
或可使用 margin.table指令計算行、 列的邊際總和:
> tw.table=xtabs(widowed~area +gen der, data =tw)
> margin.table(tw.table,margi n=1) # 橫列邊際總和
#同 rowSums(xtabs(widowed~area +gen der, data =tw) ) area
中 北 外島 東 南
269693 465706 11557 38566 348013
> margin.table(tw.table,margi n=2) # 直行邊際總和
gender
F M
907694 225841
> olMeans(xtabs(widowed~gend er+a rea, data =tw) )#各區域依照性別平均人數
中 北 外島 東 南
134846.5 232853.0 5778.5 19283.0 174006.5
> prop.table(xtabs(widowed~ge nder +are a,da ta=t w))
# prop.table() 計算各類分組的比率數據
area
gender 中 北 外島 東 南
gender 中 北 外島 東 南