1  โปรแกรมสำหรับใช้ศึกษา ชุดคำสั่งที่ต้องติดตั้ง และการใช้งานเบื้องต้น

Modified

4 พฤษภาคม 2568

ในการศึกษาหรืออ่านตำราเล่มนี้ให้เข้าใจ ขอให้ผู้อ่านใช้คอมพิวเตอร์ในระบบปฎิบัติการ WINDOWS, OSX และ LINUX ทำการติดตั้งโปรแกรมดังต่อไปนี้

R โลโก้

R โลโก้
  1. R ชุดคำสั่งสำหรับการเขียนภาษาอาร์

RStudio โลโก้

RStudio โลโก้
  1. RStudio เครื่องมือหรือซอฟต์แวร์ ที่รวบรวมสิ่งจำเป็นสำหรับการพัฒนาโปรแกรมโปรแกรมอาร์หรือไพธอน ฯลฯ
  1. quarto คือ ระบบเอกสารแบบโอเพนซอร์ส ที่ให้คุณเขียน โค้ด + ข้อความ + ผลลัพธ์ อยู่ในไฟล์เดียวกัน และสามารถแปลงเป็นเอกสารหลายรูปแบบ เช่น PDF, HTML, Word, หรือเว็บไซต์แบบอินเทอร์แอกทีฟได้

โลโกภาษา python และชุดคำสั่ง SymPy

โลโกภาษา python และชุดคำสั่ง SymPy
  1. python และชุดคำสั่ง SymPy ในหนังสือเน้นใช่ชุดคำสั่ง caracas ในการคำนวณคณิตศาสต์เชิงสัญลักษณ์ โดยที่ชุดคำสั่งนี้จะใช้งานได้ ผู้ใช้จำเป็นต้องทำการติดตั้งภาษาไฟธอน และชุดคำสั่งของ SymPy ลงไปด้วยเพื่อให้สามารถใช้งานชุดคำสั่ง caracas ได้
เหตุผลที่ใช้ภาษาอาร์เป็นหลัก
  1. ศูนย์ความเป็นเลิศเศรษฐมิติมีความเชี่ยวชาญภาษาอาร์มากที่สุด

  2. ภาษาอาร์สามารถทำงานร่วมกับภาษาอื่นๆ ได้อีกหลายภาษา เช่น ไพธอน maxima julia observale LaTeX

  3. มีชุดคำสั่งสำหรับงานอื่นๆ ในทางเศษฐศาสตร์ และเศรษฐมิติให้เลือกใช้มากมาย

  4. การสร้างภาพนิทัศน์ด้วยภาษาอาร์มาความสวยงามมากกว่าภาษาอื่น

  5. ไม่เสียค่าใช้จ่ายใดๆ ทั้งสิ้น

ถ้าผู้อ่านยังไม่มีพื้นฐานการใช้งาน โปรแกรมสามารถศึกษาได้จากภาษาอาร์เบื้องต้นได้จาก การสร้างภาพนิทัศน์ด้วยภาษาอาร์

เนื่องจากในหนังสือที่แนะนำไม่กล่าวถึงแบบตัวแปร list ดังนั้นต้องเข้าใจการใช้ตัวแปรหรือโครงสร้างข้่อมูลแบบ list ก่อนถึงจะเข้าใจการนำผลลัพธ์จากชุดคำสั่งหรือแพ็กเกจ caracas ไปใช้งานได้

ในวันที่หนังสือออกเผยแพร่หรือมีการปรับปรุง หนังสือเล่มนี้ใช้โปรแกรมและชุดคำสั่ง version ดังต่อไปนี้

รุ่นของอาร์ชุดคำสั่งที่ใช้ในหนังสือเล่มนี้ ณ วันที่ 2025-05-04

โปรแกรมรุนที่ใช้ R

R.version
               _                           
platform       aarch64-apple-darwin20      
arch           aarch64                     
os             darwin20                    
system         aarch64, darwin20           
status                                     
major          4                           
minor          5.0                         
year           2025                        
month          04                          
day            11                          
svn rev        88135                       
language       R                           
version.string R version 4.5.0 (2025-04-11)
nickname       How About a Twenty-Six      

ชุดคำสั่งต่างๆ ที่ใช้

packageVersion("caracas")
[1] '2.1.1'
packageVersion("ggplot2")
[1] '3.5.2'
packageVersion("plotly")
[1] '4.10.4'
packageVersion("lpSolve")
[1] '5.6.23'
packageVersion("caracas")
[1] '2.1.1'

รุ่น python

library(reticulate)
py_config()
python:         /Users/somsak/.virtualenvs/r-reticulate/bin/python
libpython:      /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/config-3.9-darwin/libpython3.9.dylib
pythonhome:     /Users/somsak/.virtualenvs/r-reticulate:/Users/somsak/.virtualenvs/r-reticulate
version:        3.9.6 (default, Mar 12 2025, 20:22:46)  [Clang 17.0.0 (clang-1700.0.13.3)]
numpy:           [NOT FOUND]

NOTE: Python version was forced by VIRTUAL_ENV
library(reticulate)
# นำเข้าโมดูล sympy
sympy <- import("sympy")
# ดูเวอร์ชัน
py_get_attr(sympy, "__version__")
'1.13.3'

1.1 โครงสร้างข่้อมูลแบบ list เบื้องต้น

ในภาษา R ตัวแปรประเภท list คือ โครงสร้างข้อมูลที่สามารถเก็บข้อมูลหลายชนิดร่วมกันได้ เช่น vector, matrix, data frame, หรือแม้กระทั่ง list ซ้อนกันเองก็ได้

คุณสมบัติของ list ใน R

  • สามารถเก็บข้อมูลหลายชนิด (heterogeneous data)

  • เก็บข้อมูลได้หลายขนาด (ต่าง length กันได้)

  • เข้าถึงแต่ละ element ได้โดยใช้ [[ ]], $, หรือ [ ]

1.1.1 การสร้าง list

my_list <- list(
  Name = c("John","Sarah"),
  scores = c(85, 90, 95),
  passed = TRUE,
  table= data.frame(age = c(30, 40, 60),
             gender = c("M","F","F")) 
)
my_list
$Name
[1] "John"  "Sarah"

$scores
[1] 85 90 95

$passed
[1] TRUE

$table
  age gender
1  30      M
2  40      F
3  60      F

1.1.2 การเข้าถึงค่าภายใน list

# เข้าถึงด้วยชื่อ
my_list
$Name
[1] "John"  "Sarah"

$scores
[1] 85 90 95

$passed
[1] TRUE

$table
  age gender
1  30      M
2  40      F
3  60      F
## เข้าถึงด้วยชื่อ
my_list$Name
[1] "John"  "Sarah"
my_list$table
  age gender
1  30      M
2  40      F
3  60      F
my_list$scores[1]
[1] 85
# เข้าถึงด้วย index
my_list[[1]]       # "John"
[1] "John"  "Sarah"
my_list[[2]]       # 30
[1] 85 90 95
my_list[[3]]      # "85 90 95"
[1] TRUE
my_list[[3]][1]   # ตัวที่ 3 vectorตัวที่ 1
[1] TRUE
my_list[[4]]
  age gender
1  30      M
2  40      F
3  60      F

1.1.3 การเพิ่ม/แก้ไขค่าใน list

my_list$Name[3] <- "Harry"     # เพิ่มชื่อคนที่ 3
my_list$Name[1] <- "Bua" # แก้ชื่อคนที่ 1
my_list$Name # แสดงผล
[1] "Bua"   "Sarah" "Harry"

เพียงเท่านี้ ผู้เขียนมั่นใจว่า ผู้อ่านสามารถใช้งานผลลัพธ์ที่เป็น list จากชุดคำสั่ง caracas ได้แล้ว

1.2 ชุดคำสั่ง caracas

แพ็กเกจ caracas ใน R ใช้สำหรับการคำนวณเชิงสัญลักษณ์ (symbolic computation) โดยทำงานร่วมกับ SymPy ซึ่งเป็นไลบรารี Python ที่โดดเด่นในด้าน symbolic math โดยเฉพาะ เช่น การหาลิมิต อนุพันธ์ อินทิกรัล การแก้สมการเมตริกซ์เชิงสัญลักษณ์ ฯลฯ

ขั้นตอนการใช้งาน caracas
  1. ติดตั้งแพ็กเกจ
install.packages("caracas")

หมายเหตุ ใช้คำสั่งนี้เพื่อติดตั้งเพียงครั้งเดียวเท่านั้น

  1. โหลดแพ็กเกจและติดตั้ง SymPy
library(caracas)
install_sympy()  # ทำครั้งเดียว

install_sympy() จะใช้ reticulate เพื่อติดตั้ง Python และไลบรารี sympy ถ้ายังไม่มี

ปัญหาที่อาจเจอ หาก caracas ไม่สามารถทำงานได้ อาจเกิดจาก:

  • ไม่ได้ติดตั้ง Python

  • ไม่ได้ติดตั้ง sympy

  • เวอร์ชันของ reticulate ไม่รองรับ

ในกรณีนี้ให้ลองใช้คำสั่ง

reticulate::py_config()
caracas::install_sympy()

1.2.1 การประกาศตัวแปรสำหรับการคำนวณเชิงสััญลักษณ์

การประกาศตัวแปรในแพ็กเกจ caracas ใน R จะใช้ฟังก์ชันจาก SymPy ผ่าน reticulate ซึ่งมีวิธีการที่แตกต่างจาก R ปกติเล็กน้อย เพราะเป็น symbolic variables (ตัวแปรเชิงสัญลักษณ์) ที่ใช้ใน พีชคณิตเชิงสัญลักษณ์ (symbolic algebra)

1. การประกาศตัวแปรเชิงสัญลักษณ์ (symbol)

library(caracas)
# ประกาศตัวแปร x,a,b
x <- symbol("x")
a <- symbol("a")
b <- symbol("b")

2. การสร้างนิพจน์ทางคณิตศาสตร์ (Symbolic expression) หรือการสร้างฟังก์ชัน (function)

x <- symbol("x")
f <- x^2 + 3*x + 5
f

\[x^{2} + 3 x + 5\]

ตัวแปร f จะเป็นตัวแปรเชิงสัญลักษณ์โดยอัตโนมัติ

3. การสร้างเมตริกซ์เชิงสัญลักษณ์

A <- matrix(c("x", "y", "z", 1), nrow = 2)
A_sym <- as_sym(A)  # แปลงเป็น symbolic matrix
A_sym

\[\left[\begin{matrix}x & z\\y & 1\end{matrix}\right]\]

สมมติฐานของค่าของตัวแปรที่สามารถกำหนดเพิ่มลงไปได้ในคำสั่ง symbol โดยใช้มีคุณสมบัติที่ต้องการเป็น TRUE หรือ FALSE

'algebraic'= TRUE
'commutative'= TRUE
'complex'= TRUE
'extended_negative'= FALSE
'extended_nonnegative'= TRUE
'extended_nonpositive'= FALSE
'extended_nonzero'= TRUE
'extended_positive'= TRUE
'extended_real'= TRUE
'finite'= TRUE
'hermitian'= TRUE
'imaginary'= FALSE
'infinite'= FALSE
'integer'= TRUE
'irrational'= FALSE
'negative'= FALSE
'noninteger'= FALSE
'nonnegative'= TRUE
'nonpositive'= FALSE
'nonzero'= TRUE
'positive'= TRUE
'rational'= TRUE
'real'= TRUE
'transcendental'= FALSE
'zero'= FALSE

ถ้าไม่กำหนดคุณสมบัติ และต้่องการแก้สมการ \[x^2-4 =0\] โดยใช้ caracas จะได้

x <- symbol("x")
solve_sys(x^2-4,x)
x = -2
x = 2

ถ้ากำหนดให้ \(x<0\) จะได้

x <- symbol("x",'positive'= FALSE)
solve_sys(x^2-4,x)
x = -2

ถ้ากำหนดให้ \(x>0\) จะได้

x <- symbol("x", "positive" = TRUE)
solve_sys(x^2-4,x)
x = 2

และคำนวณสำหรับการตรวจสอบสมมุติฐานของตัวแปรคือ ask() เช่น

ตัวแปร \(x\) มีค่าเป็นลบได้ใช่หรือไม่?

ask(x,"negative")
[1] FALSE

คำตอบเป็น FALSE เพราะ เรากำหนดให้ \(x\) มีค่าเป็นบวกเท่่านั้น

หมายเหตุ

  • ตัวแปรแบบ R ปกติ (เช่น x <- 1) จะใช้ไม่ได้กับฟังก์ชันของ caracas
  • ถ้าใช้ใน Quarto หรือ R Markdown ถ้าผลลัพธ์อยู่แบบเชิงสัญลักษณ์จะต้องใช้ chuck code ในรูปเท่านั้่น เพื่อให้แสดงสมการออกมาถูกต้อง
```{rtex}
x <- symbol("x")
f <- x^2 + 3*x + 5
f
```

1.3 การคำนวณค่าด้วยตัวแปรเชิงสัญลักษณ์

การคำนวณด้วยการกำหนดค่าในตัวแปรเชิงสัญลักษณ์ เช่นจาก

f

\[x^{2} + 3 x + 5\]

ถ้าต้องการหาค่า \(f(3)\) สามารถทำได้ 2 วิธีคือ

1. ใช้คำสั่ง subs()

subs(f,x,3)
c: 23

หรือค่า \(f(a)\)

subs(f,x,"a")

\[a^{2} + 3 a + 5\]

กรณีตั้งแต่ 2 ตัวแปรขึ้นไป เช่น

x <- symbol("x")
y <- symbol("y")
f <- x^2+y^2
f

\[x^{2} + y^{2}\]

ต้องการค่า \(f(1,3)\)

subs(f, list(x=1, y=3))
c: 10

และ \(f(1,a)\)

subs(f, list(x=1, y="a"))

\[a^{2} + 1\]

2. แปลงตัวแปรเชิงสัญลักษณ์กลับไปเป็นฟงก์ชันใน R ด้วยคำสั่ง as_func()

fx <- as_func(f)
fx(1,3)
[1] 10

จะใช้เมื่อต้องการคำนวณเชิงตัวเลขเท่านั้น

หมายเหตุ

คำสั่งหรือชุดคำสั่งที่เกี่ยวข้องกับการใช้งานอื่นๆ จะแทรกให้ทราบเมื่อต้องการใช้งานในบทต่อๆไป

1.4 เนื้อหาเสริมประกอบ

CAS (Computer Algebra System) และ Numerical Computing เป็นเครื่องมือคำนวณในวิชาคณิตศาสตร์และวิศวกรรมที่มีจุดมุ่งหมายต่างกันอย่างชัดเจน CAS คือระบบที่จัดการกับสัญลักษณ์ทางคณิตศาสตร์ (symbolic computation) โดยสามารถจัดการสมการ ฟังก์ชัน และนิพจน์ได้ในรูปแบบ สัญลักษณ์ โดยไม่จำเป็นต้องแทนค่าด้วยตัวเลข

ความสามารถหลักของ CAS

  • แก้สมการเชิงสัญลักษณ์ (symbolic equation solving)

  • หาอนุพันธ์ / อินทิกรัลเชิงสัญลักษณ์

  • แปลงลาปลาส / ฟูริเยร์ แบบ symbolic

  • หาค่า eigenvalue และ eigenvector แบบ symbolic

  • แสดงผลในรูปแบบสูตร (เช่น latex)

  • ปรับรูปสมการให้อยู่ในรูปที่ง่ายขึ้น (simplify)

1.4.1 ตัวอย่างของ CAS:

  • Mathematica (เสียเงิน)

  • Maple (เสียเงิน)

  • SymPy (Python ฟรี)

  • Maxima (ฟรี)

  • caracas (แปลง SymPy จาก Python เป็นคำสั่งใน R)

  • SageMath (ระบบแบบ open-source)

1.4.2 Numerical Computing คืออะไร?

Numerical computing คือการใช้วิธีเชิงตัวเลข (approximation) เพื่อประมาณค่าของคำตอบ โดยอาศัยคณิตศาสตร์เชิงตัวเลขและอัลกอริธึม เช่น การประมาณค่าอนุพันธ์ การหาคำตอบของสมการแบบตัวเลข

1.4.3 ความสามารถหลักของ Numerical Computing:

  • คำนวณค่าประมาณของสมการที่ไม่สามารถแก้ได้เชิงสัญลักษณ์

  • ใช้เมธอดเช่น Newton-Raphson, Runge-Kutta, Monte Carlo

  • ทำงานเร็วกับข้อมูลขนาดใหญ่

  • ใช้ในการจำลอง (simulation) และ optimization

ตัวอย่างเครื่องมือ

  • MATLAB, NumPy, SciPy (Python)

  • Octave, Julia

  • ฟังก์ชัน uniroot(), optim(), nlm() ใน R

สรุปความแตกต่าง

คุณสมบัติ CAS (Symbolic) Numerical Computing
ประเภทการคำนวณ เชิงสัญลักษณ์ (exact) เชิงตัวเลข (ประมาณค่า)
ความแม่นยำ สูงสุด (Exact form) มีค่าคลาดเคลื่อน (Error, tolerance)
ความเร็ว ช้ากว่าในบางกรณี เร็วกว่าโดยเฉพาะกับข้อมูลจำนวนมาก
ตัวอย่างการใช้งาน อินทิกรัล, สมการเชิงอนุพันธ์แบบปิด สมการเชิงอนุพันธ์เชิงตัวเลข, จำลองระบบ
ตัวอย่างภาษา/โปรแกรม SymPy, Maxima, caracas NumPy, SciPy, MATLAB, Julia

การเรียนรู้การใช้งาน CAS (Computer Algebra System) เทียบกับการคำนวณด้วยมือในบริบทของวิชา เศรษฐศาสตร์ มีข้อดีที่ชัดเจนในเชิง ความแม่นยำ, ประสิทธิภาพ, และ การคิดเชิงวิเคราะห์ ดังต่อไปนี้:

1.4.4 ข้อดีของการเรียนรู้การใช้งาน CAS (เมื่อเทียบกับการคำนวณด้วยมือ)

ด้าน ข้อดีของ CAS เปรียบเทียบกับการคำนวณด้วยมือ
1. ความแม่นยำ ไม่เกิดข้อผิดพลาดจากการคำนวณ หรือย้ายข้างผิด มนุษย์อาจพลาดได้ง่าย เช่น ลืมสัญลักษณ์ ลบ/ย้ายผิด
2. ความเร็ว ทำงานซับซ้อนได้ภายในวินาที (เช่น หาค่าดุลยภาพจากระบบสมการหลายตัวแปร) ต้องใช้เวลานาน โดยเฉพาะกรณีสมการที่ซับซ้อน
3. วิเคราะห์เชิงสัญลักษณ์ ได้คำตอบที่เป็น สูตร ไม่ใช่แค่ตัวเลข เช่น \(Y = \frac{G + C_0}{1 - c}\) การแก้มืออาจหยุดที่ค่าตัวเลขโดยไม่เห็นโครงสร้างคำตอบ
4. ทดลอง-วิเคราะห์นโยบาย (Policy Analysis) สามารถเปลี่ยนค่าพารามิเตอร์และดูผลลัพธ์แบบอัตโนมัติ เช่น sensitivity analysis ถ้าเปลี่ยนค่าตัวแปร ต้องคำนวณใหม่ทั้งหมดด้วยมือ
5. ใช้กับกรณีทั่วไป (General Case) เช่น เขียนฟังก์ชันอรรถประโยชน์ \(U(x, y) = x^\alpha y^{1-\alpha}\) แล้วหา MRS ได้ทันที ถ้าใช้มือ ต้องใช้อนุพันธ์หลายขั้นตอน
6. ช่วยพัฒนาทักษะวิเคราะห์ เน้นการตีความสูตรและโครงสร้างโมเดล ไม่ติดกับการคำนวณ มักใช้เวลาไปกับการแก้สมการมากกว่าการตีความ
7. รองรับระบบที่ซับซ้อน เช่น ระบบสมการไม่เชิงเส้น, ODE/PDE, สมการแบบมีเงื่อนไข การทำมืออาจทำไม่ได้หรือใช้เวลานานมาก
8. แสดงผลเป็น LaTeX หรือรูปแบบสวยงาม ใช้งานในงานวิจัย/รายงานได้ทันที เขียนมือ อาจต้องจัดรูปใหม่เพื่อพิมพ์หรือรายงาน

ตัวอย่างในทางเศรษฐศาสตร์

ตัวอย่าง การใช้ CAS ทำอะไรได้ หากคำนวณด้วยมือจะเป็นอย่างไร
IS-LM Model Linearize แล้วแก้ระบบสมการ \(Y, R\) ด้วยเมทริกซ์ ต้องจัดรูปและแก้สมการด้วยมือซึ่งซับซ้อน
ฟังก์ชันอรรถประโยชน์ หา MRS, เงื่อนไขการเพิ่มขึ้นของอรรถประโยชน์ ต้องหาอนุพันธ์ ∂U/∂x และ ∂U/∂y แยกเอง
การหาค่า Maximum (Optimization) ใช้ CAS หา First-order conditions และแก้สมการ ต้องหาอนุพันธ์ ตั้งเงื่อนไข Lagrange เอง
สมการการผลิต Cobb-Douglas หาผลตอบแทนส่วนเพิ่ม, RTS, MPK, MPL ได้ทันที ต้องใช้อนุพันธ์และคำนวณแยกแต่ละพารามิเตอร์
  • การเรียนรู้ CAS ช่วยให้นักเศรษฐศาสตร์เปลี่ยนจาก “คนคำนวณ” เป็น “นักวิเคราะห์”

  • ช่วยให้สามารถเข้าใจโมเดลได้ลึกขึ้น สร้างแบบจำลองได้เร็วขึ้น และทดลองแนวคิดเชิงทฤษฎี/นโยบายได้มีประสิทธิภาพมากขึ้น

1.5 คำเตือน

ข้อความระวังในการใช้ CAS
  1. ระวังการพึ่งพา CAS มากเกินไป
    อย่าใช้ CAS แทนความเข้าใจพื้นฐานทางคณิตศาสตร์ — ควรเข้าใจแนวคิดเบื้องหลังสมการก่อนเสมอ

  2. CAS แสดงผล “สูตร” ไม่ใช่ “คำอธิบาย”
    แม้จะได้ผลลัพธ์ที่ถูกต้อง แต่ยังต้องตีความทางเศรษฐศาสตร์เอง — CAS ไม่สามารถสรุปแนวคิดเชิงนโยบายแทนคุณได้

  3. ผลลัพธ์จาก CAS ขึ้นอยู่กับการป้อนนิพจน์อย่างถูกต้อง
    กรณีป้อนสมการผิด หรือพารามิเตอร์ไม่ครบ อาจได้คำตอบที่ไม่ถูกต้อง หรือ error ที่ยากต่อการวินิจฉัย

  4. CAS บางระบบไม่จัดการกับค่าตัวเลขจริง (numeric) ได้ดี
    หากต้องการผลลัพธ์เชิงตัวเลข (เช่น ค่าประมาณ) อาจต้องใช้ numerical method หรือโปรแกรมเสริมร่วมด้วย

  5. การ simplify ของ CAS อาจไม่เหมือนกันในแต่ละโปรแกรม
    คำตอบจาก SymPy, Maxima หรือ caracas อาจจัดรูปต่างกัน — ต้องเข้าใจรูปแบบของคำตอบก่อนตีความ

  6. CAS ไม่สามารถแทนที่การเขียนสื่อสารอย่างเป็นระบบ
    แม้จะได้คำตอบเร็ว แต่การสื่อสารให้ผู้อื่นเข้าใจยังต้องใช้ทักษะการอธิบาย การเขียน และการตีความอยู่ดี