統計學(二) 筆記 - 第十三章 實驗設計與變異數分析(Experimental Design and Analysis of Variance)

筆記說明

此筆記用途在於台北科技大學資訊與財金管理系大二下統計學重點整理
並非所有人都適用,部分對我而言稍加容易的內容並不會寫在此內。
這是觀看影片心得後的筆記,老師上課可能不太適用會忘記抄到

介紹實驗設計與變異數分析 An Introduction to Experimental Design and Analysis of Variance

主要還是對平均數做檢定,只是透過變異數去進行。

統計學研究主要分成實驗型或觀察型

  • 實驗型 Experimental study
    將控制一個或多個因素,然後觀察因素如何去影響變異數。EX:一群人吃早餐、另一群不吃早餐
  • 觀察型 Observational study
    不去對因素進行控制。EX:我們沒辦法叫一群人都吸毒、另一組都不吸毒
  • 因果關係 Cause-and-effect relationships
    實驗型比觀察型更能夠找出因果關係(關聯)。EX: A 跟 B 有正相關
  • ANOVA (Analysis of variance)
    此算法可用來分析資料,無論是實驗型或是觀察型

主要介紹這三種實驗設計

  • 完全隨機設計 a Completely Randomized Design
  • 隨機集區設計 a Randomized Block Design
  • 因子實驗 a Factorial Experiment

名詞介紹

  • 因子 factor
    EX:綠茶類型就是 factor
  • treatment
    factor 中的選項
  • 實驗單位 Experimental units
    對每位接受實驗的 object 就是實驗
  • 完全隨機分配 completely randomized design
    將 teatment 隨機平均分配給每個 Experimental units

舉例:
綠茶是 factor,其中有 50 嵐綠茶、清心綠茶、comebuy 綠茶,這些則叫做 treatment。
其中有 30 位成年人要喝裡面的綠茶,來表示他們是否喜歡,而這 30 位成年人則是 Experimental units
再來我們將 50 嵐綠茶、清心綠茶、comebuy 綠茶 隨機分給尚未分配到飲料的實驗單位,這樣就是 completely randomized design

ANOVA (Analysis of variance)

  • 測試三個或以上的母體平均數,請不要被名子給誤導
  • 資料獲得可以從觀察型或是實驗型
  • 我們可以對樣本結果進行假設測試
    • \(H_0: \mu_1 = \mu_2 = … = \mu_k \)
    • \(H_1: \text{Not all population means are equal}\),只要其中一個不一樣即可。
    • 如果拒絕 \(H_0\),我們沒辦法得出所有的母體平均數都相同
    • 拒絕 \(H_0\) 表示我們至少有兩組或以上的母體平均數不同
  • 每個母體的觀察值(變數)都必須是常態分配
  • 我們是檢測每個母體的變異數來得知 \(H_0\) 是否為 true
  • 每個觀察值都是互相獨立

用圖表進行解釋

  • 當樣本母體平均數都非常靠近時,\(H_0\)為真,\(\sigma_{\bar{x}}^2 = \frac{\sigma^2}{x}\),這裡的 x 為樣本平均數,\(\mu\) 為母體平均數

  • 當樣本母體平均數距離相差過大時,則拒絕\(H_0\),\(\sigma_{\bar{x}}^2 != \frac{\sigma^2}{x}\),這裡的 x 為樣本平均數,\(\mu\) 為母體平均數

  • 因此 ANOVA 可以比較母體之間 treatments 變異數,也可以比較母體內 treatments 變異數,下方進行解釋

分析變異數與完全隨機變數 Analysis of Variance and the Completely Randomized Design

比較母體之間 treatments 變異數 Between-Treatments Estimate of Population Variance

  • 我們要估計 \(\sigma^2\),如果 \(H_0\)為真,則變異數差異不大,反之就會大。
  • 公式 \(MSTR = \frac{\sum_{j=1}^k n_j (\bar{x_j}-\bar{\bar{x}})^2}{k-1}\)
    • 其中 x 表示平均數,\(\bar{\bar{x}}\) 為總平均數,\(\bar{x_j}\) 是 factor 中的每一個 treatment,n 為母體數量
    • \(k-1\) 是自由度,k 是母體數量
    • \( (\bar{x_j}-\bar{\bar{x}})^2 \) 是 SSTR,sum of square due to treatments,中文意思為處理間平方和
  • MSTR = mean square due to treatments,中文意思為處理間均方

比較母體內 treatments 變異數 Within-Treatments Estimate of Population Variance

  • 我們要估計 \(\sigma^2\),如果 \(H_0\)為真,則變異數差異不大,反之就會大。
  • 公式 \(MSE = \frac{\sum_{j=1}^k (n_j-1)s^2_j}{\bar{n_T}-k}\)
    • k 為母體數量、\(\bar{n_T}\)樣本個數、\((n_j-1)\) 第 j 組的數量、\(s^2_j\) 第 j 組的標準差
    • \(\sum_{j=1}^k (n_j-1)s^2_j\) 是 SSE,sum of squares due to error,誤差平方和
    • \(\bar{n_T}-k\) 是自由度,k 是母體數量
  • MSE = mean square error 中文為均方誤差

比較變異數的估計:F 檢定 Comparing the Variance Estimates: The \(F\) test

如果 \(H_0\) 成立,ANOVA 假設是有效,樣本描述是使用 \(MSTR / MSE\),則 F 檢定的自由度在 MSTR 時\(k-1\) 是自由度,MSE \(\bar{n_T}-k\) 是自由度

如果 k 母體的平均數不相等,則 \(MSTR / MSE\) 的值將會膨脹,因為 MSTR 有 \(\sigma^2\)

因此我們可以得出,如果我們使用 F test,如果 F test 過大時,則拒絕 \(H_0\),表示 \(MSTR / MSE\) 將出現過大的數值

  • \(H_0\) 所有母體平均數相同
  • \(H_1\) 有兩個或以上的母體平均數不同

用表格來說明

ANOVA Table

SST 為 data set 中全部的 treatmeat ,並表示自由度為 \(n_T -1\) 後的總樣本變異量
假如將整個資料做為一個樣本,則計算全部的總和平方(total sum of squares, SST)
公式為 \(SST = \sum_{j=1}^k \sum_{i=1}^{n_j} (\bar{x_ij}-\bar{\bar{x}})^2 = SSTR+SSE\),其中 \(\bar{\bar{x}}\) 為樣本總平均數

ANOVA 整個過程中可以視為將整個平方和與自由度分給 treatments and error。

將整個平方和並使用適合的自由度、提供變異數估計與 F 值,來進行假設檢定判斷是否所有母體平均都等於。

測試 k 個母體平均值是否相同 Test for the Equality of k Population Means

  • Hypotheses
    • \(H_0: \mu_1 = \mu_2 = … = \mu_k \)
    • \(H_1: \text{Not all population means are equal}\),只要其中一個不一樣即可。
  • Test Statistic
    \(F = MSTR / MSE \)
  • Rejection Rule
    • p-value Approach: Reject \(H_0\) if \(p-value \leq \alpha\)
    • Critical Value Approach: Reject \(H_0\) if \(F \geq F_a\)
    • \(F_a\) numerator(分子) 自由度為 \(k-1\)、denominator(分母) 自由度為 \(n_T - k\),\(n_T\) 是全部的樣本總數量,k 為母體數量

舉例:專門幫車子打蠟公司,將考慮三種打蠟材質,他們想知道這三種打蠟材質的持久性,15 輛車平均分配給 3 種打蠟材質,之後進行一次洗車,如果蠟還沒有脫落就再次洗車,直到沒有蠟為止,我們想知道這三種打蠟材質是否洗車次數都一樣?

名詞定義

  • Factor: 車蠟
  • Treatments: Type1, Type2, Type3
  • Experimental units: Cars
  • Reesponse variable: 經過幾次的洗車

資料

進行判斷

  • Hypotheses
    • \(H_0: \mu_1 = \mu_2 = \mu_3 \)
    • \(H_1: \text{Not all population means are equal}\),只要其中一個不一樣即可。
    • \(\mu_1\) 第 1 種材質的蠟
    • \(\mu_2\) 第 2 種材質的蠟
    • \(\mu_3\) 第 3 種材質的蠟
  • Mean Square Between Treatments
    • \(\bar{\bar{x}} = (\bar{x_1} + \bar{x_2} + \bar{x_3}) / 3 = (29+30.4+30)/3 = 29.8\)
    • \(SSTR = 5(29-29.8)^2 + 5(30.4-29.8)^2 + 5(30-29.8)^2 = 5.2\)
    • \(MSTR = 5.2/(3-1) = 2.6\)
  • Mean Square Error
    • \(SSE = 4(2.5) + 4(3.3) + 4(2.5) = 33.2\)
    • \(MSE = 33.2 / (15-3) = 2.77\)
  • Rejection Rule
    • p-value approach: Reject \(H_0\) if \(p-value \leq 0.05 \)
    • Critical value approach: Reject \(H_0\) if \(F \geq 3.89\)
    • 其中 numerator 自由度是 2、denominator 自由度是 12
    • 其中是透過 probability distribution app 計算得出

  • Test Statistic
    \(F = MSTR / MSE = 2.60 / 2.77 = 0.939\)
  • ANOVA Table

  • Conclusion
    • 其中是透過 probability distribution app 計算得出

    • p-value approach: Reject \(H_0\) if \(p-value = 0.42 \leq 0.05 \),並不符合
    • Critical value approach: Reject \(H_0\) if \(F=0.939 \geq 3.89\),並不符合
    • 因此不可以拒絕 \(H_0\)
    • 因此我們不能得出這三種不同的蠟材質是否洗車次數並不一樣

舉例:老闆想要知道不同工廠經理工作時數是否不一樣,總共有三個工廠(B、P、D)、每個工廠 5 個經理,顯著性水準為 0.05

名詞定義

  • Factor: 公司
  • Treatments: 三個工廠(B、P、D)
  • Experimental units: 工廠經理
  • Reesponse variable: 工作時數

資料

進行判斷

  • Hypotheses
    • \(H_0: \mu_1 = \mu_2 = \mu_3 \)
    • \(H_1: \text{Not all population means are equal}\),只要其中一個不一樣即可。
    • \(\mu_1\) B 工廠
    • \(\mu_2\) P 工廠
    • \(\mu_3\) D 工廠
  • 顯著性水準 0.05
  • Mean Square Between Treatments
    • \(\bar{\bar{x}} = (\bar{x_1} + \bar{x_2} + \bar{x_3}) / 3 = (55+68+57)/3 = 60\)
    • \(SSTR = 5(55-60)^2 + 5(68-60)^2 + 5(57-60)^2 = 490\)
    • \(MSTR = 490/(3-1) = 245\)
  • Mean Square Error
    • \(SSE = 4(26.0) + 4(26.5) + 4(24.5) = 308\)
    • \(MSE = 308 / (15-3) = 25.667\)
  • Rejection Rule
    • p-value approach: Reject \(H_0\) if \(p-value \leq 0.05 \)
    • Critical value approach: Reject \(H_0\) if \(F \geq 3.89\)
    • 其中 numerator 自由度是 2、denominator 自由度是 12
    • 其中是透過 probability distribution app 計算得出

  • Test Statistic
    \(F = MSTR / MSE = 245 / 25.667 = 9.55\)
  • ANOVA Table

  • Conclusion
    • 其中是透過 probability distribution app 計算得出

    • p-value approach: Reject \(H_0\) if \(p-value = 0.0033 \leq 0.05 \),符合
    • Critical value approach: Reject \(H_0\) if \(F=9.55 \geq 3.89\),符合
    • 因此可以拒絕 \(H_0\)
    • 因此我們知道三個工廠的工廠經理工作時數並不相同

多重比較 Multiple Comparison Procedures

當我們前面拒絕 \(H_0\) 時,我們則需要再找出是那些母體平均數不同時,則可以使用 Fishers’s least significant difference(LSD, 最低顯著差異) 來確認哪些母體平均數不同

最低顯著差異 Fishers’s least significant difference(LSD)

  • Hypotheses
    • \(H_0: \mu_i = \mu_j \)
    • \(H_1: \mu_i != \mu_j\)
    • 如果有 3 個變數,理論上就應該要做 3 次 LSD;如果有 4 個那就需要做 10 次。
      EX: 有 a,b,c 三變數,則 LSD 要做的有 ab, ac, bc。
  • Test Statistic \(t = \frac{\bar{x_i} - \bar{x_j}}{\sqrt{MSE (1/n_i + 1/n_j)}}\)
    • 其中 MSE 是誤差均方
  • Rejection Rule
    • p-value approach: Reject \(H_0\) if \(p-value \leq \alpha\)
    • Critical Value approach: Reject \(H_0\) if \(t \leq -t_{a/2} \) or \(t \geq t_{a/2}\)
    • 其中 \(t_{a/2}\) 的自由度為 \(n_T - k\),\(n_T\) 是全部的樣本總數量,k 為母體數量

進行移項優化的,更方便計算的最低顯著差異 Fishers’s least significant difference(LSD)

  • Hypotheses
    • \(H_0: \mu_i = \mu_j \)
    • \(H_1: \mu_i != \mu_j\)
    • 如果有 3 個變數,理論上就應該要做 3 次 LSD;如果有 4 個那就需要做 10 次。
      EX: 有 a,b,c 三變數,則 LSD 要做的有 ab, ac, bc。
  • Test Statistic \(t = \bar{x_i} - \bar{x_j}\)
    • 其中 MSE 是誤差均方
  • Rejection Rule
    • Critical Value approach: Reject \(H_0\) if \( |\bar{x_i} - \bar{x_j} | \geq LSD \)
    • 其中 LSD 是將 t 統計的分母移項至 \(t_{a/2}\) 那邊,因此 \(LSD = t_{a/2} \sqrt{MSE (1/n_i + 1/n_j)} \)
    • 其中 \(t_{a/2}\) 的自由度為 \(n_T - k\),\(n_T\) 是全部的樣本總數量,k 為母體數量

舉例:前面我們知道 工廠裡的經理工作時數不一致,因此我們要進行分析 LSD 來找出是哪個工廠的平均工作時數與其他工廠不同

  • compute
    • \(\alpha = 0.05\)
    • 自由度為 \(n_T - k = 15 - 3 = 12\)、\(t_{0.025} =2.179\)
      \(n_T - k\),\(n_T\) 是全部的樣本總數量,k 為母體數量
    • \(LSD = t_{a/2} \sqrt{MSE(1/n_i + 1/n_j)}\)
    • \(LSD = 2.179 \sqrt{25.667(1/5 + 1/5 )} = 6.98\)
    • 其中 25.667 是前面有進行計算,可以點舉例的 link 回去
  • LSD 對工廠 B 和工廠 P,求方便定義,下面數學公式工廠 B 為 1、工廠 P 為 2、工廠 D 為 3
    • Hypotheses
      • \(H_0 : \mu_1 = \mu_2 \)
      • \(H_1: \mu_1 != \mu_2\)
    • Rejection Rule
      Reject \(H_0\) if \(|\bar{x_1} - \bar{x_2}| \geq 6.98\)
    • Test Statistic
      \(|\bar{x_1} - \bar{x_2}| = |55-68| = 13\)
    • Conclusion
      我們可以知道工廠 B 和工廠 P 的平均工作時數並不同。
  • LSD 對工廠 B 和工廠 D,求方便定義,下面數學公式工廠 B 為 1、工廠 P 為 2、工廠 D 為 3
    • Hypotheses
      • \(H_0 : \mu_1 = \mu_3 \)
      • \(H_1: \mu_1 != \mu_3\)
    • Rejection Rule
      Reject \(H_0\) if \(|\bar{x_1} - \bar{x_3}| \geq 6.98\)
    • Test Statistic
      \(|\bar{x_1} - \bar{x_3} |= |55-57| = 2\)
    • Conclusion
      我們可以知道工廠 B 和工廠 D 的平均工作時數相同,無法拒絕 \(H_0\)。
  • LSD 對工廠 P 和工廠 D,求方便定義,下面數學公式工廠 B 為 1、工廠 P 為 2、工廠 D 為 3
    • Hypotheses
      • \(H_0 : \mu_2 = \mu_3 \)
      • \(H_1: \mu_2 != \mu_3\)
    • Rejection Rule
      Reject \(H_0\) if \(|\bar{x_2} - \bar{x_3}| \geq 6.98\)
    • Test Statistic
      \(|\bar{x_2} - \bar{x_3}| = |68-57| = 11\)
    • Conclusion
      我們可以知道工廠 P 和工廠 D 的平均工作時數並不同。
  • 過去資料

  • Conclusion
    我們可以知道工廠 P 的工作時數與其他並不同,且工時來的更長更高;其他兩家則沒有明顯差異。

型一誤差 Type1 I Error Rates

  • 比較型一誤差率 comparison-wise Type 1 error rate
    • 假設此兩個變數母體相同,但我們卻拒絕 \(H_0\),的誤判機率是 0.05。
  • 實驗型一誤差率 experiment-wise Type 1 error rate
    • 由於我們上面 LSD 會做多次的假設檢定也就會產生多次的比較型一誤差率,我們要確保我們從未發生過 Type 1 error,因此我們可以透過數學公式進行驗證
    • \(a_{EW} = 1 - (1-a)^k\),k 是進行得比較次數,a 則是顯著性水準
  • 如果 \(a_{EW} \) 太大時,我們可以在一開始就將在ANOVA將顯著性水準設定更小,即可避免此問題;但要注意,在固定樣本情況時,如果將顯著性水準過低則有可能考慮造成 Type2 Error 錯誤機率提高。
  • 可透過 Bonferroni adjstment 對顯著性水準進行調整,調整公式為 \(\alpha / k \),這樣就可以將 \(a_{EW} \) 降低。

隨機區組設計 Randomized Block Design

  • 如果使用 Excel 資料分析雙因子變數分析:無重複試驗
  • 實驗單位 Experimental units
    對每位接受實驗的 object 就是實驗
  • 完全隨機分配 completely randomized design
    將 teatment 隨機平均分配給每個 Experimental units

主要是為了避免在每個實驗單位有異質性的可能,而導致得出結果不一樣,而產生出的一種隨機選擇方法。
EX: 評測小孩子喜不喜歡喝牛奶,但可能裡面有些小孩本身對牛奶過敏(異質性),就有機會導致我們的結果出錯。

因此後來為了防止異質性的問題,我們將同質性的資料組成 BLOCK,之後再使用 ANOVA 算法。(但 ANOVA 的公式因為 block,而改變,下方則有提到。)

ANOVA Procedure

  • 我們將總和平方(SST, sum of squares total)分成部分,由選項平方和(sum of squares due to treatments)、由集區的平方和(sum of squares due to blocks)、誤差平方和(sum of squares due to error)。
  • 因此公式為 \(SST = SSTR + SSBL + SSE\)
    • 其中 SSTR 自由度為 \(n_T - k\),\(n_T\) 是全部的樣本總數量,k 為母體數量
    • SSBL 自由度為 \(k-1\)
    • SSE 為 \((k-1)(b-1)\),b 則是 block。
  • ANOVA table 如下。

  • F 計算方式為 \(F = MSTR / MSE \)

舉例:石油公司研發出三種新的混合方式,他們想確認每加侖的油可以跑多少英里?會不會不同。這邊找了五台汽車進行測試。資料如下:

由於我們不能確定,每台車的耗油量(異質型),因此我們就要記錄每一台車(block, 內容全部同執行)所使用的油量。

我們可以確定名詞了

  • Factor 混和油 (Gasoline blend)
  • Treatments 選項 (blend X, blend Y, blend Z)
  • Blocks 車子 (automobiles)
  • Response variable 每加侖跑多少英里(Mile per gallon)

計算 ANOVA table

  • compute
    • \(SST = (31-29)^2 + (30-29)^2 + … + (26-29)^2 = 62\)
    • Mean Square of Treatment 為 29,因此 SSTR 計算如下
      • \(SSTR = 5[ (29.8-29)^2 + (28.8-29)^2 + (28.4-29)^2 ] = 5.2 \),主要是因為我們 treatments 都有 5 筆資料,因此我們優化,將 5 提出來最後再做乘法。
      • \(MSTR = 5.2 / (3-1) = 2.6 \)
    • Mean Square Due to Blocks
      • \(SSBL = 3[(30.333-29)^2 + … + (25.667-29)^2] = 51.33\),主要是因為我們 treatments 都有 3 筆資料,因此我們優化,將 3 提出來最後再做乘法。
      • \(MSBL = 51.33/ (5-1) = 12.8\)
    • Mean Square Due to Error
      • \(SSE = 62 - 5.2 - 51.33 = 5.47\)
      • \(MSE = 5.47 / [ (3-1) (5-1)] = 0.68\)
  • 畫成表格如下

  • F 計算方式為 \(F = MSTR / MSE \)
    • 其中 F 是透過 \(2.60 / 0.68 = 3.82\),自由度分子(x1) 則是 2、分母則是(x2) 8,因此機率算出為 0.07
    • 用 probability distribution app 計算如下

  • Rejection Rule
    • p-value approach: Reject \(H_0\) if \(p-value \leq 0.05 \)
    • critical value approach: Reject \(H_0\) if \(F \geq 4.46\)
    • 在分子自由度為 2、分母自由度為 8 時,\(F_{0.05} = 4.46\)
  • conclusion
    • p-value approach: Reject \(H_0\) if \(0.07 \leq 0.05 \),不符合
    • critical value approach: 由於 F 為 3.82, Reject \(H_0\) if \(3.82 \geq 4.46\),不符合
    • 並沒有符合。因此我們沒有辦法拒絕 \(H_0\),因此我們沒有辦法表示油的混和方式對汽車每加侖的英里數有不同。

因子實驗 Factorial Experiment

  • 如果使用 Excel 資料分析雙因子變數分析:重複試驗
  • 上述之前我們都是只針對一個 Factor 來進行探討,現在我們要針對多個 Factor來進行探討,但一樣是使用 ANOVA 來計算,但也會有些計算不同。
  • 舉例:如果 a factor 有 \(\alpha\) 個 treatment,b factor 有 \(\beta\) 個 treatment,那我們蒐集的資料就是有 \(\alpha \beta\) 個組合。
  • 主要用來判斷兩個因子是否有交互作用,也可以檢查到兩因子對變數的假設檢定

Two-Factor Factorial Experiment

ANOVA

  • 公式為 \(SST = SSA + SSB + SSAB + SSE\)
    • 其中 SST 為 sum of squares total,自由度為 \(n_T -1 \)是全部的樣本總數量。
    • SSA sum of squares A,自由度為 \(n_a-1\),為 a 樣本總數量
    • SSB sum of squares B,自由度為 \(n_b-1\),為 b 樣本總數量
    • SSAB sum of squares A and B,自由度為 \((n_a-1)(n_b-1)\)
      SAB 為 A 與 B 的關聯組合,其中 SSAB 與 SSA、SSB 不同,SSAB 表示 A 中 treatment 與 B 中 treatment 的組合
    • SSE sum of squares error,自由度為 \(ab(r-1)\),r 表示一個 a 的 treatment 與一個 b 的 treatment 中有幾筆資料
  • ANOVA table
    • 我們可以透過 F 檢定來知道,SSA、SSB、SSAB、SSE、SST 有沒有都 reject \(H_0\)
  • 計算步驟如下
    • \(\alpha\) 表示 a 的所有 treatment
    • \(\beta\) 表示 b 的所有 treatment
    • \(r\) 表示有幾筆資料
    • \(\bar{\bar{x}} \) 為總資料數量
    • \(\sum_{i=1}^a\) 則是有幾個 treatment
    • \(\bar{x_i.}\) 則是平均,這裡每一個 tretmnet 的平均值

舉例:薪資調查公司,調查兩個產業與三個地點,我們想知道產業與地點是否會影響到他們的薪資,資料如下

x 軸為地點、Y 軸為產業

  • Factors
    • Factors A: 產業(2 treatment)
    • Factor B: 地點 (3 treatment)
  • Replications
    每一個實驗的情景 3 次。
  • ANOVA Table 計算
    • 可以使用 excel 中的資料分析,雙因子試驗計算,並選擇重複試驗,因為我們的 ANOVA 公式有 SSAB。有交互作用時則需要選擇重複試驗

  • conclusions
    • ctitical value approach
      • 產業: \(F=4.19 \leq F_a = 4.75\)
        不同的產業,薪水並不會有差別
      • 地點: \(F= 4.69 > F_a = 3.89\)
        不同的地點,薪水並會有差別
      • 交互作用: \(F=1.55 < F_a = 3.89\)
        此二因素並沒有關聯
    • p-value approach
      • 產業: \(p-value=0.06 > a = 0.05\)
        不同的產業,薪水並不會有差別
      • 地點: \(p-value = 0.03 \leq a = 0.05\)
        不同的地點,薪水會有差別
      • 交互作用: \(p-value=0.25 > a = 0.05\)
        此二因素並沒有關聯

我打到快死掉了QQQ,大二下怎麼那麼忙啦…。也謝謝丁秀儀老師的線上教學可以讓我將資料彙整並供我學習。

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: