ในการศึกษาหรืออ่านตำราเล่มนี้ให้เข้าใจ ขอให้ผู้อ่านใช้คอมพิวเตอร์ในระบบปฎิบัติการ WINDOWS, OSX และ LINUX ทำการติดตั้งโปรแกรมดังต่อไปนี้
R ชุดคำสั่งสำหรับการเขียนภาษาอาร์
RStudio เครื่องมือหรือซอฟต์แวร์ ที่รวบรวมสิ่งจำเป็นสำหรับการพัฒนาโปรแกรมโปรแกรมอาร์หรือไพธอน ฯลฯ
quarto คือ ระบบเอกสารแบบโอเพนซอร์ส ที่ให้คุณเขียน โค้ด + ข้อความ + ผลลัพธ์ อยู่ในไฟล์เดียวกัน และสามารถแปลงเป็นเอกสารหลายรูปแบบ เช่น PDF, HTML, Word, หรือเว็บไซต์แบบอินเทอร์แอกทีฟได้
python และชุดคำสั่ง SymPy ในหนังสือเน้นใช่ชุดคำสั่ง caracas ในการคำนวณคณิตศาสต์เชิงสัญลักษณ์ โดยที่ชุดคำสั่งนี้จะใช้งานได้ ผู้ใช้จำเป็นต้องทำการติดตั้งภาษาไฟธอน และชุดคำสั่งของ SymPy ลงไปด้วยเพื่อให้สามารถใช้งานชุดคำสั่ง caracas ได้
ศูนย์ความเป็นเลิศเศรษฐมิติมีความเชี่ยวชาญภาษาอาร์มากที่สุด
ภาษาอาร์สามารถทำงานร่วมกับภาษาอื่นๆ ได้อีกหลายภาษา เช่น ไพธอน maxima julia observale LaTeX
มีชุดคำสั่งสำหรับงานอื่นๆ ในทางเศษฐศาสตร์ และเศรษฐมิติให้เลือกใช้มากมาย
การสร้างภาพนิทัศน์ด้วยภาษาอาร์มาความสวยงามมากกว่าภาษาอื่น
ไม่เสียค่าใช้จ่ายใดๆ ทั้งสิ้น
ถ้าผู้อ่านยังไม่มีพื้นฐานการใช้งาน โปรแกรมสามารถศึกษาได้จากภาษาอาร์เบื้องต้นได้จาก การสร้างภาพนิทัศน์ด้วยภาษาอาร์
เนื่องจากในหนังสือที่แนะนำไม่กล่าวถึงแบบตัวแปร list ดังนั้นต้องเข้าใจการใช้ตัวแปรหรือโครงสร้างข้่อมูลแบบ list ก่อนถึงจะเข้าใจการนำผลลัพธ์จากชุดคำสั่งหรือแพ็กเกจ caracas
ไปใช้งานได้
ในวันที่หนังสือออกเผยแพร่หรือมีการปรับปรุง หนังสือเล่มนี้ใช้โปรแกรมและชุดคำสั่ง version ดังต่อไปนี้
โปรแกรมรุนที่ใช้ R
_
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" )
packageVersion ("ggplot2" )
packageVersion ("lpSolve" )
packageVersion ("caracas" )
รุ่น 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__" )
โครงสร้างข่้อมูลแบบ list เบื้องต้น
ในภาษา R ตัวแปรประเภท list
คือ โครงสร้างข้อมูลที่สามารถเก็บข้อมูลหลายชนิดร่วมกันได้ เช่น vector, matrix, data frame, หรือแม้กระทั่ง list ซ้อนกันเองก็ได้
คุณสมบัติของ list
ใน R
สามารถเก็บข้อมูลหลายชนิด (heterogeneous data)
เก็บข้อมูลได้หลายขนาด (ต่าง length กันได้)
เข้าถึงแต่ละ element ได้โดยใช้ [[ ]]
, $
, หรือ [ ]
การสร้าง 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
การเข้าถึงค่าภายใน 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
age gender
1 30 M
2 40 F
3 60 F
# เข้าถึงด้วย index
my_list[[1 ]] # "John"
my_list[[3 ]] # "85 90 95"
my_list[[3 ]][1 ] # ตัวที่ 3 vectorตัวที่ 1
age gender
1 30 M
2 40 F
3 60 F
การเพิ่ม/แก้ไขค่าใน list
my_list$ Name[3 ] <- "Harry" # เพิ่มชื่อคนที่ 3
my_list$ Name[1 ] <- "Bua" # แก้ชื่อคนที่ 1
my_list$ Name # แสดงผล
[1] "Bua" "Sarah" "Harry"
เพียงเท่านี้ ผู้เขียนมั่นใจว่า ผู้อ่านสามารถใช้งานผลลัพธ์ที่เป็น list จากชุดคำสั่ง caracas
ได้แล้ว
ชุดคำสั่ง caracas
แพ็กเกจ caracas
ใน R ใช้สำหรับการคำนวณเชิงสัญลักษณ์ (symbolic computation) โดยทำงานร่วมกับ SymPy
ซึ่งเป็นไลบรารี Python ที่โดดเด่นในด้าน symbolic math โดยเฉพาะ เช่น การหาลิมิต อนุพันธ์ อินทิกรัล การแก้สมการเมตริกซ์เชิงสัญลักษณ์ ฯลฯ
ติดตั้งแพ็กเกจ
install.packages ("caracas" )
หมายเหตุ ใช้คำสั่งนี้เพื่อติดตั้งเพียงครั้งเดียวเท่านั้น
โหลดแพ็กเกจและติดตั้ง SymPy
library (caracas)
install_sympy () # ทำครั้งเดียว
install_sympy()
จะใช้ reticulate
เพื่อติดตั้ง Python และไลบรารี sympy
ถ้ายังไม่มี
ปัญหาที่อาจเจอ หาก caracas
ไม่สามารถทำงานได้ อาจเกิดจาก:
ในกรณีนี้ให้ลองใช้คำสั่ง
reticulate:: py_config ()
caracas:: install_sympy ()
การประกาศตัวแปรสำหรับการคำนวณเชิงสััญลักษณ์
การประกาศตัวแปรในแพ็กเกจ 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<0\) จะได้
x <- symbol ("x" ,'positive' = FALSE )
solve_sys (x^ 2-4 ,x)
ถ้ากำหนดให้ \(x>0\) จะได้
x <- symbol ("x" , "positive" = TRUE )
solve_sys (x^ 2-4 ,x)
และคำนวณสำหรับการตรวจสอบสมมุติฐานของตัวแปรคือ ask()
เช่น
ตัวแปร \(x\) มีค่าเป็นลบได้ใช่หรือไม่?
คำตอบเป็น FALSE
เพราะ เรากำหนดให้ \(x\) มีค่าเป็นบวกเท่่านั้น
หมายเหตุ
ตัวแปรแบบ R ปกติ (เช่น x <- 1
) จะใช้ไม่ได้กับฟังก์ชันของ caracas
ถ้าใช้ใน Quarto หรือ R Markdown ถ้าผลลัพธ์อยู่แบบเชิงสัญลักษณ์จะต้องใช้ chuck code ในรูปเท่านั้่น เพื่อให้แสดงสมการออกมาถูกต้อง
```{rtex}
x <- symbol ("x" )
f <- x^ 2 + 3 * x + 5
f
```
การคำนวณค่าด้วยตัวแปรเชิงสัญลักษณ์
การคำนวณด้วยการกำหนดค่าในตัวแปรเชิงสัญลักษณ์ เช่นจาก
ถ้าต้องการหาค่า \(f(3)\) สามารถทำได้ 2 วิธีคือ
1. ใช้คำสั่ง subs()
หรือค่า \(f(a)\)
กรณีตั้งแต่ 2 ตัวแปรขึ้นไป เช่น
x <- symbol ("x" )
y <- symbol ("y" )
f <- x^ 2 + y^ 2
f
\[x^{2} + y^{2}\]
ต้องการค่า \(f(1,3)\)
และ \(f(1,a)\)
subs (f, list (x= 1 , y= "a" ))
\[a^{2} + 1\]
2. แปลงตัวแปรเชิงสัญลักษณ์กลับไปเป็นฟงก์ชันใน R ด้วยคำสั่ง as_func()
จะใช้เมื่อต้องการคำนวณเชิงตัวเลขเท่านั้น
คำสั่งหรือชุดคำสั่งที่เกี่ยวข้องกับการใช้งานอื่นๆ จะแทรกให้ทราบเมื่อต้องการใช้งานในบทต่อๆไป
เนื้อหาเสริมประกอบ
CAS (Computer Algebra System) และ Numerical Computing เป็นเครื่องมือคำนวณในวิชาคณิตศาสตร์และวิศวกรรมที่มีจุดมุ่งหมายต่างกันอย่างชัดเจน CAS คือระบบที่จัดการกับสัญลักษณ์ทางคณิตศาสตร์ (symbolic computation) โดยสามารถจัดการสมการ ฟังก์ชัน และนิพจน์ได้ในรูปแบบ สัญลักษณ์ โดยไม่จำเป็นต้องแทนค่าด้วยตัวเลข
ความสามารถหลักของ CAS
แก้สมการเชิงสัญลักษณ์ (symbolic equation solving)
หาอนุพันธ์ / อินทิกรัลเชิงสัญลักษณ์
แปลงลาปลาส / ฟูริเยร์ แบบ symbolic
หาค่า eigenvalue และ eigenvector แบบ symbolic
แสดงผลในรูปแบบสูตร (เช่น latex)
ปรับรูปสมการให้อยู่ในรูปที่ง่ายขึ้น (simplify)
Numerical Computing คืออะไร?
Numerical computing คือการใช้วิธีเชิงตัวเลข (approximation) เพื่อประมาณค่าของคำตอบ โดยอาศัยคณิตศาสตร์เชิงตัวเลขและอัลกอริธึม เช่น การประมาณค่าอนุพันธ์ การหาคำตอบของสมการแบบตัวเลข
ความสามารถหลักของ Numerical Computing:
คำนวณค่าประมาณของสมการที่ไม่สามารถแก้ได้เชิงสัญลักษณ์
ใช้เมธอดเช่น Newton-Raphson , Runge-Kutta , Monte Carlo
ทำงานเร็วกับข้อมูลขนาดใหญ่
ใช้ในการจำลอง (simulation) และ optimization
ตัวอย่างเครื่องมือ
MATLAB , NumPy , SciPy (Python)
Octave , Julia
ฟังก์ชัน uniroot()
, optim()
, nlm()
ใน R
สรุปความแตกต่าง
ประเภทการคำนวณ
เชิงสัญลักษณ์ (exact)
เชิงตัวเลข (ประมาณค่า)
ความแม่นยำ
สูงสุด (Exact form)
มีค่าคลาดเคลื่อน (Error, tolerance)
ความเร็ว
ช้ากว่าในบางกรณี
เร็วกว่าโดยเฉพาะกับข้อมูลจำนวนมาก
ตัวอย่างการใช้งาน
อินทิกรัล, สมการเชิงอนุพันธ์แบบปิด
สมการเชิงอนุพันธ์เชิงตัวเลข, จำลองระบบ
ตัวอย่างภาษา/โปรแกรม
SymPy, Maxima, caracas
NumPy, SciPy, MATLAB, Julia
การเรียนรู้การใช้งาน CAS (Computer Algebra System) เทียบกับการคำนวณด้วยมือในบริบทของวิชา เศรษฐศาสตร์ มีข้อดีที่ชัดเจนในเชิง ความแม่นยำ , ประสิทธิภาพ , และ การคิดเชิงวิเคราะห์ ดังต่อไปนี้:
ข้อดีของการเรียนรู้การใช้งาน 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 หรือรูปแบบสวยงาม
ใช้งานในงานวิจัย/รายงานได้ทันที
เขียนมือ อาจต้องจัดรูปใหม่เพื่อพิมพ์หรือรายงาน
ตัวอย่างในทางเศรษฐศาสตร์
IS-LM Model
Linearize แล้วแก้ระบบสมการ \(Y, R\) ด้วยเมทริกซ์
ต้องจัดรูปและแก้สมการด้วยมือซึ่งซับซ้อน
ฟังก์ชันอรรถประโยชน์
หา MRS, เงื่อนไขการเพิ่มขึ้นของอรรถประโยชน์
ต้องหาอนุพันธ์ ∂U/∂x และ ∂U/∂y แยกเอง
การหาค่า Maximum (Optimization)
ใช้ CAS หา First-order conditions และแก้สมการ
ต้องหาอนุพันธ์ ตั้งเงื่อนไข Lagrange เอง
สมการการผลิต Cobb-Douglas
หาผลตอบแทนส่วนเพิ่ม, RTS, MPK, MPL ได้ทันที
ต้องใช้อนุพันธ์และคำนวณแยกแต่ละพารามิเตอร์
คำเตือน
ระวังการพึ่งพา CAS มากเกินไป
อย่าใช้ CAS แทนความเข้าใจพื้นฐานทางคณิตศาสตร์ — ควรเข้าใจแนวคิดเบื้องหลังสมการก่อนเสมอ
CAS แสดงผล “สูตร” ไม่ใช่ “คำอธิบาย”
แม้จะได้ผลลัพธ์ที่ถูกต้อง แต่ยังต้องตีความทางเศรษฐศาสตร์เอง — CAS ไม่สามารถสรุปแนวคิดเชิงนโยบายแทนคุณได้
ผลลัพธ์จาก CAS ขึ้นอยู่กับการป้อนนิพจน์อย่างถูกต้อง
กรณีป้อนสมการผิด หรือพารามิเตอร์ไม่ครบ อาจได้คำตอบที่ไม่ถูกต้อง หรือ error ที่ยากต่อการวินิจฉัย
CAS บางระบบไม่จัดการกับค่าตัวเลขจริง (numeric) ได้ดี
หากต้องการผลลัพธ์เชิงตัวเลข (เช่น ค่าประมาณ) อาจต้องใช้ numerical method หรือโปรแกรมเสริมร่วมด้วย
การ simplify ของ CAS อาจไม่เหมือนกันในแต่ละโปรแกรม
คำตอบจาก SymPy, Maxima หรือ caracas อาจจัดรูปต่างกัน — ต้องเข้าใจรูปแบบของคำตอบก่อนตีความ
CAS ไม่สามารถแทนที่การเขียนสื่อสารอย่างเป็นระบบ
แม้จะได้คำตอบเร็ว แต่การสื่อสารให้ผู้อื่นเข้าใจยังต้องใช้ทักษะการอธิบาย การเขียน และการตีความอยู่ดี
Andersen, M. M., & Højsgaard, S. (2023).
caracas: Computer Algebra .
https://github.com/r-cas/caracas
Berkelaar, M. (2024).
lpSolve: Interface to ’Lp_solve’ v. 5.5 to Solve Linear/Integer Programs .
https://doi.org/10.32614/CRAN.package.lpSolve
Meurer, A., Smith, C. P., Paprocki, M., Čertı́k, O., Kirpichev, S. B., Rocklin, M., Kumar, A., Ivanov, S., Moore, J. K., Singh, S., และคณะ. (2017). SymPy: symbolic computing in Python.
PeerJ Computer Science ,
3 , e103.
https://doi.org/10.7717/peerj-cs.103
Sievert, C. (2020).
Interactive Web-Based Data Visualization with R, plotly, and shiny . Chapman; Hall/CRC.
https://plotly-r.com
Ushey, K., Allaire, J., & Tang, Y. (2025).
reticulate: Interface to ’Python’ .
https://doi.org/10.32614/CRAN.package.reticulate
Wickham, H. (2016).
ggplot2: Elegant Graphics for Data Analysis . Springer-Verlag New York.
https://ggplot2.tidyverse.org