[R Lang] R Lang 與高級醫學統計學(5)

2024 年 4 月 10 日
文章摘要
FakeGPT
加載中...
此內容由人工不智慧生成。

這篇文章講資料的視覺化分析。

繪圖套件 ggplot2

ggplot2 是一套龐大且強大的繪圖系統。其概念是使用結構性語法,先指定資料,再指定變數,然後指定幾何元素,最後處理標題與標註資料以及背景的主題樣式。這個處理模式幾乎等同於在 Excel 等試算表類統計軟體中的處理模式。

ggplot2 的繪圖元件

  1. 資料(data):繪圖的資料來源,一般會先使用 ggplot() 來輸入資料。
  2. 幾何元件(geometry):繪圖的類型,例如柱狀圖、散佈圖、盒鬚圖等。
  3. 座標系統(coordinate system):繪圖的座標系統,預設是 coord_cartesian(),即笛卡兒座標系。

ggplot2 的語法結構

ggplot2 的語法結構一般遵循下面:

ggplot(data = $data) +
$geom_function(
mapping=aes($mappings),
stat=$stat,
position = $position
) +
$coordinate_function +
$facet_function +
$scale_function +
$theme_function

以 ggplot2 繪製的徒刑必須要包含至少兩個必要的元件——ggplot(data)geom_funtion(mapping)

ggplot2 繪圖入門示例

雙變數

我們使用 R Lang 內建的資料集 mpg 來進行練習。mpg 是 1999年到 2008年之間 38 個流行車型的燃油經濟資料。

我們假設要繪製一個散佈圖,x 變數和 y 變數分別是 displ(發動機排氣量)和 hwy(高速油耗)。那麼我們的程式碼如下:

library(ggplot2) # 載入 ggplot2 套件
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) # 使用 ggplot() 函式載入 mpg 資料,使用 geom_point() 函式來繪製散佈圖

繪製結果如下:

ggplot2 散布圖

三個及以上變數

如果我們需要繪製三個以上的變數,我們可以使用顏色來區分:

library(ggplot2)
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))

繪圖結果如下:

ggplot2 散布圖

套用多個幾何元件圖層

我們可以將多個繪圖元件作為不同的圖層疊加在一起:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class)) + geom_smooth(mapping = aes(x = displ, y = hwy))

繪圖如下:

ggplot2 多套件

回歸模型的套用

我們也能在 ggplot2 中套用不同的統計模式,像是迴歸模型(regression models)。假設我們想求得發動機排氣量和高速油耗之間的關聯性,可以使用簡單線性迴歸,類似在上面使用 geom_smooth() 的方式,只需要加上 method = “lm” 即可(lm 代表 linear regression),繪圖的時候 ggplot2 也會自動預設加上信賴區間。

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class)) + geom_smooth(mapping = aes(x = displ, y = hwy), method = "lm")

geom_smooth() 預設支援常用的幾種回歸模式。例如線性回歸(lm)、廣義線型模型(glm)、廣義加成模型(gam),還可以自定義模型。例子如下,使用 y=x2+exp(x)y = x^2 + exp(x) 這個自定義方程。

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class)) +
geom_smooth(mapping = aes(x = displ, y = hwy), method = "lm", formula = y ~ x^2 + exp(x))

繪圖如下: ggplot 回歸模型

套用不同的主題

要套用不同的主題,調用不同的主題函式即可。

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class)) +
theme_bw()

aes 或 geom_$function 引數

  • x:設定 x 變數。
  • y:設定 y 變數。
  • alpha:透明度。數值為 0~1。學習前端的讀者應該會很好理解。
  • color:前景顏色,可以使用顏色的英文或者 16 進位碼。
  • fill:背景顏色。
  • linestyle:線條的類型,0~6 代碼分別為:空白(blank)、實線(solid)、虛線(dashed)、點線(dotted)、點虛線(dotdash)、長虛線(longdash)、雙虛線(twodash)
  • size:線條粗細
  • shape:圖形類別,0~16
  • weight:權重

排列位置調整

排列方式會有分散排列(dodge)、填滿在某個元件之中(fill)、堆疊(stack)、分散點排列(jitter)、推移(nudge)等。

## 預設為 stack
ggplot(data = mpg, mapping = aes(fl, fill = drv)) +
geom_bar()

ggplot 直方圖

## 修改 position 為 dodge
ggplot(data = mpg, mapping = aes(fl, fill = drv)) +
geom_bar(position = 'dodge')

ggplot 直方圖

## 修改 position 為 fill
ggplot(data = mpg, mapping = aes(fl, fill = drv)) +
geom_bar(position = 'fill')

ggplot 直方圖

加入誤差棒

有時候在繪圖的時候,我們會在圖上面加註誤差棒,以了解數據的誤差範圍。若誤差棒的長度愈長,代表其誤差愈大。誤差棒的長度一般是標準差(standard deviation)或標準誤(standard error)。ggplot2 可使用 geom_errorbar()geom_linerange()geom_pointrange()geom_crossbar() 等。

各種統計用圖的資料類型一覽

變數數目變數類型圖形類型ggplot2幾何元件解釋與適用資料
1連續直方圖geom_histogram()觀察數據分佈的大致情況,應用在連續性的數值上
1連續多邊圖geom_freqpoly()觀察數據分佈的大致情況,和直方圖很類似,只不過繪製成折線,適合疊加多個變數後比較
1連續點圖geom_dotplot()觀察數據分佈的大致情況,和直方圖很類似,只不過以點來呈現
1連續核密度估計圖geom_density()觀察數據分佈的大致情況,將直方圖轉換成折線方式呈現,使用機率密度的函數來計算繪製
1連續分位圖geom_qq, geom_qq_line()適用於監測數據分佈是否常態
1連續盒鬚圖geom_boxplot()了解資料的分散狀況,可從盒鬚圖中觀察出中位數、四分位數和最大最小值
1離散柱狀圖/長條圖geom_bar()比較一個變數小規模的資料分析,適用於離散型資料
2連續散佈圖geom_point將兩個變數以點呈現,可協助瞭解兩者之間有無關聯,可搭配 geom_smooth()
2連續面積圖geom_area()
2連續折線圖geom_line()連續性的資料,把所有的點用線段連結起來,觀察 x 軸的變數序列上 y 的變化情形
2連續鬚軸圖geom_rug()在兩個軸上精簡表示兩個連續變數的圖,通常適合小資料集
2連續平滑曲線圖geom_smooth()把所有的資料平滑化後繪製,一般協助觀察並找出資料的特徵
2連續 + 離散柱狀圖geom_col()
2連續 + 離散盒鬚圖geom_boxplot()了解資料的分散狀況,可從盒鬚圖中觀察出中位數、四分位數和最大最小值
2連續 + 離散提琴圖geom_violin()同時顯示數據分布和其機率密度,結合盒鬚圖和核密度估計圖
3連續等高線圖geom_contour(), geom_contour_fill()GIS 地形高度資料
3連續影像網格geom_raster()地圖資料,和 geom_tile() 與 geom_rect() 相同,當所有的圖磚大小相同時,繪製地圖的效率較 geom_tile() 或 geom_rect() 來得高
3連續圖磚geom_tile(), geom_rect()繪製矩形範圍,定義邊界(數值範圍四個角落,geom_rect)或圖磚大小(geom_tile)。通常使用作為地圖上或熱點圖的資料呈現
[R Lang] R Lang 與高級醫學統計學(5)
https://blog.kynix.tw/posts/1731063199160/
作者
Adrian Chen
建檔時間
2024 年 4 月 10 日
協議
BY-NC-SA 4.0
姓名標示-非商業性-相同方式分享 4.0 國際