• 沒有找到結果。

簡單回歸分析

在文檔中 R data (頁 60-81)

雙數值變數比較: 如果我們希望比較兩獨立數值變數資料分佈, 除了比較直方圖或其他一些圖來查看 更多數據,我們可以使用並排的箱圖進行比較。

將兩變數數據標準化後作盒鬚圖 (四分位數) 並列, 更能比較其差異。

−1 0 1 2

散佈圖:plot(x,y) 兩成雙數值變數資料關係圖

> data(dataname) # 引進資料

> atta h(dataname) # 連接資料

> plot(variable1,variable2) #資料中兩變數散佈圖

> deta h(dataname) # 脫離資料

範例 1: R語言內建資料檔" ars: 1920s給出了汽車的速度 (speed)和停止的距離(dist) 資 料。

speed 4 47 78 9 101010 1111 121212 1213 131313 14

dist 210 422 1610 1826 341728 1420 242826 3434 4626

speed 1414 1415 151516 1617 171718 1818 181919 19

dist 3660 802026 5432 403240 5042 567684 3646 68

speed 2020 2020 202223 2424 242425

dist 3248 525664 6654 709293 120 85

> data( ars)

> atta h( ars)

> plot(speed,dist)

> ars.lm <- lm(dist ~ speed, data = ars)

> abline(lm(dist ~ speed), ol="red") # 同 abline( oef( ars.lm))

> deta h( ars)

順伯的窩 第 頁 共 頁

5 10 15 20 25

>lm(dist ~ speed) #

Call:

lm(formula = dist ~ speed)

Coeffi ients:

(Inter ept) speed

-17.579 3.932

> oef(lm(dist ~ speed)) #

(Inter ept) speed

-17.579095 3.932409

> oef(lm(dist ~ speed)) #

(Inter ept) speed

-17.579095 3.932409

> devian e(lm(dist ~ speed)) #SSE

[1℄ 11353.52

> summary(lm(dist~speed)) #

順伯的窩 第 頁 共 頁

Call:

lm(formula = dist ~ speed)

Residuals:

Min 1Q Median 3Q Max

-29.069 -9.525 -2.272 9.215 43.201

Coeffi ients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -17.5791 6.7584 -2.601 0.0123 *

speed 3.9324 0.4155 9.464 1.49e-12 ***

Signif. odes:

0  ***  0.001  **  0.01  *  0.05 .  0.1     1

Residual standard error: 15.38 on 48 degrees of freedom

Multiple R-squared: 0.6511 ,Adjusted R-squared: 0.6438

F − statistic : 89.57 on 1 and 48 DF , p-value: 1.49e-12

4.

· · ·

:(離群值偵測: 槓桿值 Vs. 標準化殘差圖。 Cook's Distan e 指標值)

若數據基本滿足線性回歸要求 (本例僅展示主要過程), 所建立的模型可根據擬合值進行預 測。

殘差圖: Residualplots: 殘差

e b i = y i − (ax i + b)

回歸殘差是在回歸模型下每一觀察值對應值與對應擬合值之間的差異。

觀察殘差是為了了解模型除了長期大趨勢外,決定是否要採取何種補救或矯正的措施,降低 預測的誤差。 模型是否有還有其他因素關係影響 (如中期的季節變化, 甚或更微小週期性), 使模型的建立更臻完美 (解釋資料變動性或殘差更小)

範例 4: 殘差分析與預估值

>residuals(lm(dist ~ speed)) #列出所有殘差值

>m=mean( residuals(lm(dist ~ speed)))

>std=sqrt(var( residuals(lm(dist ~ speed))))

>hist(residuals(lm(dist ~ speed)),prob=TRUE ) #殘差直方圖

> urve(dnorm(x, mean=m, sd=std), ol=2,lwd=2, add=TRUE)

>par(mfrow = (1, 4), mar= (5.1,4.1,2.1,1.1))

>plot(lm(dist~speed)) # 畫回歸模型殘差圖

>par(mfrow= (1,1))

> x= (10,18,19) #回歸模型預測

> newdata=data.frame(speed=x)

> predi t(lm(dist~speed), newdata, se.fit = TRUE) #依回歸線作擬合值

$fit

1 2 3

21.74499 53.20426 57.13667

$se.fit

1 2 3

3.124921 2.428529 2.639733

$df

[1℄ 48

$residual.s ale

[1℄ 15.37959

Histogram of residuals(lm(dist ~ speed))

residuals(lm(dist ~ speed))

Density

−20 0 20 40

0.000 0.005 0.010 0.015 0.020 0.025 0.030

回歸模型擬合值與預測值: 線性回歸擬合值

y b i = a + bx i

> fitted(lm(dist~speed))[1:5℄ #前5筆回歸線的擬合值,predi t( )[1:5℄

1 2 3 4 5

順伯的窩 第 頁 共 頁

0 20 40 60 80

-1.849460 -1.849460 9.947766 9.947766 13.880175

> predi t(lm(dist~speed),data .fra me(s peed = (6 ,8,2 1))) #依回歸模型求3筆 預測值

1 2 3

6.015358 13.880175 65.001489

迴歸直線 :(使用非基本套件指令)

>simple.lm(speed,dist,pred = (5 ,6,7 )) # UsingR 套件

>simple.lm(x,y,show.residu als= TRUE ) # UsingR 套件

> lm.res = simple.lm(x,y)

> the.residuals = resid(lm.res) # how to get residuals

> plot(the.residuals)

area 694 905 802 1366 716 963 821 714 1018 887 790 696 771 1006 1191

sale.pri e 192.0 215.0 215.0 274.0 112.7 185.0 212.0 220.0 276.0 260.0 221.5 255.0 260.0 293.0 375.0

輸入數據資料行名稱分別為 "area,"sale.pri e

(a) 作售價 "sale.pri e 對面積 "area 的散佈圖

(b) 用hist() 指令作售價 "sale.pri e 的直方圖及對售價 "sale.pri e取對數值後直方圖

( ) 對售價 "sale.pri e取對數值後,再與面積變數 "area 作散佈圖

(d) 這兩個直方圖強調銷售價格範圍的不同部分。 描述差異?

6. 以下數據給出了彈簧在標尺末端拉伸的伸展量(stret h),在釋放時彈簧所帶動的距離(distan e):

stret h 46 54 48 50 44 42 52

distan e 148 182 173 166 109 141 166

(a) 作stret h,dist 的散佈圖

順伯的窩 第 頁 共 頁

(b) 求stret hdist 的回歸直線

( ) 若彈簧拉伸的伸展量(stret h)分別為40,45,47,預測其彈簧所帶動的距離 (distan e)?

(d) 依回歸模型將彈簧拉伸的伸展量stret h=50,彈簧所帶動距離distan e點以參數p h=4

, ol=2 在原散佈圖標示出來

7. 這裡有兩組數據, 它們是同一個彈簧, 在不同的壓縮長度時所反彈的距離資料。

對於數據集 " elasti 1,值為: stret h (mm): 46,54,48,50, 44,42,52

distan e ( m): 183, 217, 189, 208, 178, 150, 249

對於數據集 " elasti 2,值為: stret h (mm): 25,45,35,40, 55,50,30, 50,60

distan e ( m): 71, 196, 127, 187, 249, 217, 114, 228, 291

(a) 在同一圖表上使用不同的符號或不同的顏色,繪製兩個數據elasti 1elasti 2在同一圖 表上

(b) 這兩組數據有相同的一致性嗎?

8. 從套件 "MASS 中的載入資料檔 "US ereal 中包含有關流行早餐穀物的信息 ("製造商,"卡 路里,"蛋白質,"脂肪,","纖維,"碳水化合物,","展示架位置,","維生素)。連接數據 資料如下:

> library("MASS")

> data('US ereal')

> atta h(US ereal)

> names(US ereal) # to see the names

現在, 調查以下關係, 並對您看到的內容發表評論。 你可以使用表格, 條形圖, 散佈圖等你做調 查:

(a) 製造商 "manufa turer與 展示架位置 "shelf兩者間的關係為何?

(b) 纖維"bre 與製造商 "manufa turer 兩者間的關係為何?

( ) 脂肪 "fat 與維生素 "vitamins 兩者間的關係為何?

(d) 脂肪 "fat 與展示架位置 "shelf 兩者間的關係為何?

(e) 碳水化合物 " arbo與糖 "sugars 兩者間的關係為何?

(f) 鈉含量 "sodium 與 糖"sugars 兩者間的關係為何?

(g) 如何呈現高卡路里 (高於平均值) 與製造商 "manufa turer關係? 製造商高卡路里產品 分別佔多少比率?

(h) 高卡路里 (高於平均值)產品與展示架位置 "shelf兩者間的關係為何? 其中有哪幾個關係是可供預測調查的?

9. 內置數據集 "mammals (MASS 套件) 包含"體重 body"腦重量 brain 的數據。 使用

or() 函數來找出PearsonSpearman相關係數。 它們相似嗎? 使用 plot()命令繪製下列數 據: plot(body, brain);plot(sqrt(body),sqrt(brain));plot((body)^0.1, (brain)^0.1) 看 看你是否期望它們相似。

你應該對這個關係不滿意。 接下來,plot(log(body),log(brain))繪製每個變量的對數(log)值關 係, 看看是否有差異。

順伯的窩 第 頁 共 頁

10. 對於住房價格數據"homedata(UsingR套件)(Simple套件),調查舊評估值與新評估值之間的 關係。 使用 old(y1970)作為預測變量。 數據是否呈現線性關係? 是否存在異常值? 可能導致這 些異常值的原因是什麼? 197075,000美元房屋的預計新評估值是多少?

11. 載入資料檔"babies(UsingR 套件);該數據集包含1236次觀察有關嬰兒及其母親的大量信息。

找出年齡和體重之間的相關係數 (PearsonSpearman)。 重複高度和重量之間的關係。 製作 每對的散點圖,看看你的答案是否有意義

12. 載入資料檔 "mt ars; 包含1974年汽車趨勢問題的汽車信息。 嘗試回答以下問題:

(a) 用names() 查詢有哪些變數

(b) "mpg 的最大值多少?

( ) 哪車種 "mpg 最大?

(d) 列出 "hp" 最大的前5輛車車名?

(e) 將資料檔依 "hp 由大而小次序重新排列

(f) 列出 Mer 450SLC 資料

(g) 製作汽缸數 ( yl)與馬力 (hp) 的散佈圖。 描述闡釋兩者間關係?

(h) 製作馬力 (hp)與每加侖英里數 (mpg)的散佈圖。 並作擬合回歸線。 描述兩者間關係可否 可用線性回歸闡釋?

順伯的窩 第 頁 共 頁

4

附錄

:R

指令

表 9: 基本操作指令

指令 用法說明簡介

sour e("路徑") 載入外部程式

sink("路徑")+sink() 紀錄程式執行結果

demo(套件) 展示套件的示範功能

example(函數) 執行範例程式

library(套件) 載入套件

require(套件) 在自訂函數中使用以載入套件

deta h(pa kage: 套件) 卸載以載入的套件

install.pa kages(套件) 安裝套件

data(資料檔) 載入資料檔

head(資料檔,n);tail(資料檔,n) 查看前 ()n列資料

atta h(資料檔) 使用後可直接使用變數名稱操作

with(資料檔,

{

程式...

}

)atta h, 但效力限制在

{}

範圍

update.pa kages( he kBuilt=T,ask=F) 安裝新版R,用以更新套件 getwd() 查詢目前工作目錄

setwd("路徑") 改變工作目錄

obje ts() 列出目前用過的所有變數, 指定物件則列出可呼叫名稱

rm(物件) 清除物件,(list=ls())清除所有

.First=fun tion{} 設定啟動R前所執行的程式

.Last=fun tion{} 設定結束R前所執行的程式

順伯的窩 第 頁 共 頁

表10: 基本運算指令

+-*/ 加減乘除運算

^,** 指數

%/% 整數商

%% 餘數計算

& 可用於向量的 and

|

可用於向量的 or

seq(by) 產生以by 為遞增值的數列

length() 計算元素個數

sum() 元素相加

umsum() 累積相加

prod() 元素相乘

umprod() 累積相乘

表11: 常用數學函數

exp();log(x,base) 指數; 對數函數

sin()

;

cos()

;

tan()

;asin(),

· · ·

三角函數; 反三角函數

abs() 絕對值函數

sqrt() 開根號函數

sign() 判斷正負號

eiling(x) 大於等於 x 的最小整數

floor(x) 小於等於 x 的最大整數

round(x,n) 將x 四捨五入到第 n

trun (x) 傳回 x 的整數部分

signif(x,k) 顯示 xk 為有效位數

max();min() 傳回元素最大值; 最小值

pmax(x,y,

. . .

);pmin() 傳回指定向量各分量的最大值; 最小值

hoose(n,k);fa torial(x) 組合數

C k n

;階乘

x!

integrate(f,lower,upper) 設定上下限對 f 函數積分,範圍可以是 Inf

順伯的窩 第 頁 共 頁

表12: 常用統計函數

sum(x) x 資料的和

prod(x) x 資料的乘積

max(x) x 資料的最大值

min(x) x 資料的最小值

whi h.max(x) 傳回 x 資料最大值的索引

whi h.min(x) 傳回 x 資料的最小值的索引

range(x) 重排 x 資料的排序, 亦即 (min(x), max(x))

length(x) x 資料的筆數值

mean(x) x 資料的平均值

median(x) x 資料的中位數

var(x) or ov(x) x 資料的變異數;x 為矩陣資料則為共變異

or(x) x 資料的共相關

var(x, y) or ov(x, y) x 與y 的共變異

or(x, y) x 與y 的線性相關

台灣近10年每月失業率 (981-10712)如表:(資料檔:"lost-job. sv)

變數資料失業率為連續型數值資料可作次數分配表、 直方圖與基本的敘述統計量數。

>lost_job <- read. sv("D:/math work/data/lost_job. sv", sep=",",header=T)

>lost_job <- lost_job[,1℄ #資料檔為資料框架構, 選單一向量變數格式

> min(lost_job);max(lost_job) #查看資料的最小、 最大值

[1℄ 3.62

[1℄ 6.13

>table( ut(lost_job,breaks = ( 3.5, 4.0 ,4.5, 5.0 ,5.5, 6.0, 6.5))) #可自行訂分 組點

(3.5,4℄ (4,4.5℄ (4.5,5℄ (5,5.5℄ (5.5,6℄ (6,6.5℄

53 41 5 7 11 3

> uts = ut(lost_job,breaks= (0, 3.5, 5,ma x(lo st_j ob)) )

> levels( uts)= ("低失業率","中失業率","高失業率" ) #失業率假設分成 0~3.5~5~ 三組

> table( uts)

uts

低失業率 中失業率 高失業率

0 99 21

>hist(lost_job, ol= (2,3,4 ,5, 6,7) )

> hist(lost_job, ol= (2,3,4,5 ,6,7 ))

順伯的窩 第 頁 共 頁

表 13: 資料輸入與輸出

s an(file,what,sep,skip,nlin es) 資料輸入

write() 資料輸出 (輸出矩陣前先轉置)

read.table

("d:/file.txt",header=TRUE,s ep = "") 輸入多變數資料檔

read. sv() 輸入逗號分隔的 CSV 格式檔案

read. sv2() 輸入分號分隔的 CSV 格式檔案

read.delim() 輸入 TAB 鍵分隔的檔案

read.fwf() 輸入固定寬度格式檔案

write.table() 輸出多變數資料檔

write. sv() 輸出逗號分隔的 CSV 格式檔案

write. sv2() 輸出分號分隔的 CSV 格式檔案

save() 將部分物件儲存為 Rdata 格式

save.image() 將所有物件儲存為 Rdata 格式

load() 載入Rdata 檔內的所有物件

gdata::read.xls 要先載入套件 library(gdata)

dataname<-read.xls("d:/file. xls" ) 載入xls

xlsx::read.xlsx 載入xlsx

xlsReadWrite::write.xls 輸出 xls

xlsx::write.xlsx 輸出 xlsx

表 14: table 系列

tabulate(x,nbins) 彙整正整數次數或分類出現次數 (nbins 設定項目個數)

table(x1,x2,

. . .

,xk,dnn) xfa torlistdata frame, 彙整分類組合發生次數

margin.table(X,margin) 對 table X 逐列、 逐行 (MA=12) 加總

olSums();rowSums() 計算逐行 (逐列)總和

olMeans();rowMeans() 計算逐行 (逐列)平均

順伯的窩 第 頁 共 頁

15: 文字與字串處理

at("字串或變數",file,sep) 在螢幕或外部檔案顯示一些計算結果或文字

sprintf("%", 字串或變數) 依照% 類型設定,精準控制計算輸出格式

print.data.frame 印出 data frame 變數內容, 至少印出 k 位數

(X,digits=k, quote=F,right=T) quote 設定是否加雙引號,right設定是否靠右

paste(

. . .

,sep, ollapse) 將各字串變數組合, 可將所有元素用

ollapse 連結一起

rep(x,time,length.out,ea h) 重複 x,time=x 重複次數,ea h=x 內元素重複次數

gl(n,k,length,labels,ordere d=F) 以 n個分類個數重複 k 次來設定 labels 分類

fa tor 變數

substr(x,start,stop) 在 x 中取出從 startend 的子字串

strtrim(x,width) 以 width決定取出 x 的寬度

strsplit(x,split) 依 split 字元將x 分開

sub("舊字串","新字串",x);gsub() 將 x 中所有找到的舊字串, 用新字串代替

16: 迴圈控制

ifelse(,T,F) 用於二分類邏輯判斷、 成立執行 T、 否則執行 F

if(){ + }else if(){ + }else{} 用於多分類的邏輯判斷

swit h(計算值, 運算式1, 運算式2,...) 依照計算值(整數或文字) 決定要執行的運算式

for(k in seq){} 以k在範圍 seq 中逐步執行運算式

while(){} 依照(...) 的判斷來執行運算式

repeat{} 重複執行運算式直到跳出(break)

break 終止並跳離迴圈

next 跳過其後的運算,直接執行下一次迴圈

順伯的窩 第 頁 共 頁

表17: 繪圖功能設定

par 圖形設定函數

mai= (a,b, ,d) 設定邊界值 (in h), 順序為底左頂右

mar 與 mai,單位為文字行數

mf ol= (a,b) 以

a × b

矩陣將多張圖形畫在同一頁, 依行排序

mfrow= (a,b) 以

a × b

矩陣將多張圖形畫在同一頁, 依列排序

layout(M) 設定比較不對稱的多圖佈局, 依照 矩陣設計位置

fig=(x1,x2,y1,y2) 依照座標將圖擺在設定位置上

圖形基本設定參數

ol=k or "顏色名稱" 設定顏色 (0,1,2,3,4,5天藍,6,7,8)

olors() 可查詢顏色名稱

ol.axis、 ol.lab ol.main ol.sub改其他部分顏色

lty=k 設定線的種類 (1為實線、 其他會各種虛線)

p h=k or "文字符號" 設定點的種類

font=k 1為一般字體2為粗體字3斜體4粗斜體

font.axis... 改其他部分的字體

lwd=k 設定 k 倍的線寬

ex=k 設定 k 倍的字型大小

ex.axis... 改其他部分的字體 圖形輸出設定

posts ript("路徑") 圖形輸出為.ps

pdf("路徑") 圖形輸出為pdf 格式

jpeg("路徑");png();bmp();tiff() 輸出各類圖檔格式

dev.off() 終止畫圖指令

順伯的窩 第 頁 共 頁

表18: 基本繪圖函數

points(x,y) 加上圖點

lines(x,y) 加上直線

segments(x0,y0,x1,y1) 以設定座標加上線段

arrows(x0,y0,x1,y1,angle, ode) 加上箭頭線段(angle 設定角度、 ode 設定箭頭位置)

abline(a,b) 加上直線

(y = ax + b)

abline(h=y);abline(v=x) 加上水平線或垂直線

segments(x0,y0,x1,y1) 在圖形中增畫線段

polygon(x,y) 在指定位置畫出封閉多邊形、 畫出陰影區域

re t(x1,y1,x2,y2) 作矩形

text(x,y,labels) 在指定位置寫出指定文字

mtext(text,side=2,line=0) 在圖形框邊增加文字

legend(x,y,legend) 在指定位置畫出文字方塊

legend(x,y,legend) 在指定位置畫出文字方塊

在文檔中 R data (頁 60-81)

相關文件