跳到主要內容跳到頁尾

LINEST、LOGEST、GROWTH:迴歸函式回傳的陣列怎麼讀

9 分鐘閱讀Lv.3 中級摘要與日期

LINEST 回傳的斜率與截距排列、多個 x 時的順序、verbose 為 TRUE 時的 5 列統計;指數成長用 LOGEST 與 GROWTH。附語法、手算對照與用 INDEX 取單一格的寫法。

發布 更新

文章目錄

FORECAST 跟 TREND 只給你預測值,想知道「每升高 1 度,多賣幾杯」「這條線到底準不準」,要請出 LINEST。它一次回傳一整個陣列,斜率、截距、R² 都在裡面,問題是這個陣列的排列順序有點反直覺,今天主要就是來講怎麼讀它。同一家族還有處理指數成長的 LOGEST 跟 GROWTH。

TREND、FORECAST、SLOPE、INTERCEPT 在 預測函式整理 已經講過,這篇不重複。我自己預測時九成用 FORECAST.LINEAR 和 TREND,只有想看迴歸的細節或同時放多個 x 的時候才打開 LINEST。

怎麼選

想要用這個假設的模型回傳什麼
直線的斜率、截距、統計值LINESTy = m × x + b一列,或 5 列
指數曲線的成長倍率、起點LOGESTy = b × m^x一列,或 5 列
指數曲線的預測值GROWTHy = b × m^x跟新 x 同樣多個值
直線的預測值TREND、FORECASTy = m × x + b預測函式整理

LINEST 對應 TREND,LOGEST 對應 GROWTH:LINEST、LOGEST 給你係數,TREND、GROWTH 直接給你預測值。

範例資料:氣溫與杯數

十天的資料,A 欄是中午氣溫(°C),B 欄是否為週末(1 是、0 否),C 欄是賣出杯數,A1:C1 是標題,資料在 A2:C11:

ABC
1氣溫週末杯數
222058
324063
425181
527072
628079
7301102
831088
9331110
1034096
11361126

手算最小平方法的直線,要先算四個總和:氣溫總和 290、杯數總和 875、氣溫乘杯數的總和 26187、氣溫平方的總和 8600,筆數 n = 10:

  • 斜率 = (10 × 26187 − 290 × 875) ÷ (10 × 8600 − 290²) = 8120 ÷ 1900 ≈ 4.2737
  • 截距 = (875 − 4.2737 × 290) ÷ 10 ≈ −36.4368

每升高 1 度大約多賣 4.27 杯。後面看 LINEST 的結果能不能對上。

直線迴歸

LINEST

用最小平方法配出直線,回傳斜率、截距,還可以多回傳一整組統計值。

語法:

  • 已知 y:要預測的那一欄,這裡是杯數。
  • 已知 x:選填,影響 y 的欄位,可以是多欄。省略的話,x 會當成 1、2、3⋯⋯。
  • 有截距:選填,預設 TRUE,由資料算出截距。填 FALSE 的話截距強制為 0,直線通過原點。
  • 詳細統計:選填,預設 FALSE 只回傳係數那一列,填 TRUE 多回傳 4 列統計值。

先用最單純的一個 x。為了讓位數好讀,我用 ROUND 四捨五入,再包 ARRAYFORMULA,讓整個陣列都能展開。ROUND 不會自己把陣列展開,若只用 ROUND(LINEST(...),4),只會回左上角第一格:

Google 試算表公式
fx

氣溫對杯數的直線迴歸,四捨五入到小數第四位

=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11), 4))

結果會從這格往右溢出兩格:

EF
14.2737-36.4368

斜率在前、截距在後,跟手算的 4.2737 和 −36.4368 一樣。這個順序要記起來,因為很多人以為先截距再斜率。

只想要其中一個值,用 INDEX 挑:

Google 試算表公式
fx

只取截距,也就是第 1 列第 2 欄

=ROUND(INDEX(LINEST(C2:C11, A2:A11), 1, 2), 4)

得到 −36.4368。要預測 38 度時賣幾杯,可以把係數跟 {38, 1} 對位相乘再加總,也就是斜率乘 38 加上截距乘 1:

Google 試算表公式
fx

預測 38 度的杯數

=ROUND(SUMPRODUCT(LINEST(C2:C11, A2:A11), {38, 1}), 2)

手算 4.2737 × 38 − 36.4368 ≈ 125.96,函式也會是 125.96。如果只是要預測值,直接用 TREND 比較省事。

多個 x 的排列

週末也影響杯數,把 A、B 兩欄一起當成 x:

Google 試算表公式
fx

氣溫與週末兩個 x 對杯數的迴歸

=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:B11), 4))

結果一列三格:

EFG
116.87243.5633-22.5837

這就是容易看錯的地方:x 有兩欄,係數的順序是反過來的。最後一欄(週末)的係數排在最前面,第一欄(氣溫)排在它後面,截距永遠排最後。所以 16.8724 是週末的係數,3.5633 才是氣溫的。白話一點:同樣氣溫下,週末比平日多賣約 17 杯;同樣是平日,每升高 1 度多賣約 3.56 杯。

讀取係數時,記得對照原本 x 的欄位。

預測 35 度的週末,把係數依序對上 {1, 35, 1}(週末、氣溫、截距):

Google 試算表公式
fx

預測 35 度週末的杯數

=ROUND(SUMPRODUCT(LINEST(C2:C11, A2:B11), {1, 35, 1}), 2)

結果是 119。同樣 35 度的平日,把第一個 1 換成 0,是 102.13。

詳細統計:5 列

第四個參數填 TRUE,就會從 1 列變成 5 列:

Google 試算表公式
fx

一個 x 的詳細統計

=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11, TRUE, TRUE), 4))

結果是 5 列 2 欄:

列\欄EF
14.2737-36.4368
20.641918.8238
30.84718.8478
444.3298
53470.2316626.2684

每一列的意思:

  • 第 1 列:係數,斜率在前、截距在後。
  • 第 2 列:係數的標準誤差,斜率的 0.6419、截距的 18.8238。標準誤差相對係數愈小,係數愈穩定。
  • 第 3 列:左邊是 R²(0.8471,表示杯數的變化有約 85% 可以用氣溫解釋),右邊是 y 估計值的標準誤差 8.8478。
  • 第 4 列:左邊是 F 統計量 44.329,右邊是自由度 8(10 筆資料減 2 個係數)。
  • 第 5 列:左邊是迴歸平方和 3470.2316,右邊是殘差平方和 626.2684。

R² 也可以只單獨取:,一樣是 0.8471。

x 多於一欄時,統計列的欄數跟著變多,用氣溫與週末兩個 x 算:

Google 試算表公式
fx

兩個 x 的詳細統計

=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:B11, TRUE, TRUE), 4))
列\欄EFG
116.87243.5633-22.5837
21.64180.18455.1952
30.99052.3583#N/A
4364.79957#N/A
54057.570438.9296#N/A

第 3 到 5 列只有前兩格有意義,第三欄的補位格會是 #N/A。R² 從只看氣溫的 0.8471 提高到 0.9905,加上週末這個欄位確實有幫助。

最後一個參數:有截距填 FALSE,直線被迫通過原點。

Google 試算表公式
fx

強制截距為 0

=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11, FALSE), 4))

結果是 3.045 和 0,也就是 y = 3.045 × x。截距那格是 0,不是空白。氣溫 0 度賣 0 杯本來就沒意義,所以這個資料不適合強迫通過原點。

指數迴歸

資料如果是每期乘上差不多的倍數,例如追蹤人數、病毒擴散,直線就配不好,改用指數曲線 y = b × m^x,LOGEST 跟 GROWTH 就是為此準備的。

資料是某個帳號前六週的追蹤人數,A 欄週次、B 欄人數,A1:B1 是標題,資料在 A2:B7:

AB
1週次追蹤人數
21120
32150
43185
54235
65290
76365

每週大約是前一週的 1.25 倍:150 ÷ 120 = 1.25、185 ÷ 150 ≈ 1.23、235 ÷ 185 ≈ 1.27。

LOGEST

配出指數曲線,回傳成長倍率 m 與起點 b。

語法:

  • 參數的意思跟 LINEST 一樣,第三個參數填 FALSE 的話 b 固定為 1。
  • 回傳順序也一樣:m 在前、b 在後,有多個 x 時 m 同樣是反向排列。
Google 試算表公式
fx

追蹤人數的指數迴歸,四捨五入到小數第四位

=ARRAYFORMULA(ROUND(LOGEST(B2:B7, A2:A7), 4))
EF
11.248995.9098

m = 1.2489,代表平均每週成長約 24.89%;b = 95.9098 是曲線在第 0 週的值,所以第 1 週的配適值是 95.9098 × 1.2489 ≈ 119.78,跟實際的 120 很接近。

詳細統計一樣是 5 列,我拿其中最常用的 R² 來看:

Google 試算表公式
fx

LOGEST 的 R²,取第 3 列第 1 欄

=ROUND(INDEX(LOGEST(B2:B7, A2:A7, TRUE, TRUE), 3, 1), 4)

得到 0.9998。要注意,LOGEST 的標準誤差、平方和這類統計值,是針對 ln(y) 取對數之後的直線算的,不是原本的人數,所以第 2、4、5 列的數字不能直接拿來跟原始人數比較。

GROWTH

用同一條指數曲線,直接算出預測值。

語法:

  • 新 x:選填,想預測的 x,可以是一欄多格。省略的話,回傳的是已知 x 對應的配適值。
  • 其餘參數跟 LINEST 對應。

預測第 7、8 週,新 x 用 SEQUENCE 產生:

Google 試算表公式
fx

預測第 7、8 週的追蹤人數

=ARRAYFORMULA(ROUND(GROWTH(B2:B7, A2:A7, SEQUENCE(2, 1, 7)), 2))
E
1454.5
2567.63

和手算對得上:95.9098 × 1.2489^7 ≈ 454.5,第 8 週再乘一次 1.2489 約 567.63。

同一批資料用直線預測, 第 7 週只有 393.67,比 454.5 少了六十人。資料明顯是倍數成長的時候,直線會低估,這是指數曲線的用處。反過來,指數曲線一路乘下去會愈翹愈高,預測得太遠就不太可信,我自己最多看到往後兩三期。

回傳陣列的小提醒

  • 這三個函式本身會回傳陣列;包上 ROUND 的範例要另外加 ARRAYFORMULA,才能保留表格中完整的係數、統計或預測值。輸入後按 Enter,並為右側與下方預留空間;溢出範圍有東西擋住,會顯示 #REF!。
  • 想只留一格,用 INDEX(結果, 列, 欄) 取,LINEST 的 R² 是第 3 列第 1 欄。
  • ROUND 會改變計算結果的精度。後續還要計算時,可直接保留裸函式的完整精度,再用數字格式調整畫面上的小數位數。

需要的時候回來查一下排列順序,就這樣!

分享:
#LINEST#LOGEST#GROWTH#迴歸分析
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。