Upload
doanthuy
View
223
Download
0
Embed Size (px)
Citation preview
1
Nghiên cứu thực nghiệm: Làm quen với Stata
Daniel Tiong (The Australian Economic Review, Vol. 50, No.2, 2017).
Người dịch: Phùng Thanh Bình (2/9/2017)
Tóm lược
Bài báo này cung cấp một hướng dẫn giúp sinh viên bước đầu tiếp cận với
nghiên cứu thực nghiệm, cũng như có một nền tảng trong việc sử dụng phần
mềm Stata. Trọng tâm là tậm trung vào việc làm sạch dữ liệu và tầm quan trọng
của nó đối với việc viết một bài nghiên cứu đạt chuẩn. Tôi cũng khái quát nội
dung cơ bản về Stata, tầm quan trọng của do-files, một số vấn đề thường gặp
với dữ liệu, và thực hành mã hóa đúng đắn. Trong phần kết, tôi có lời khuyên
rằng không phải mọi thứ trong nghiên cứu cần làm là lập kế hoạch, nhưng với
kinh nghiệm thực hành nghiên cứu tốt sẽ làm cho mọi thứ dễ dàng hơn để thích
ứng khi các kế hoạch không diễn ra như ý.
1. Giới thiệu
Khi lần đầu thực hiện một dự án nghiên cứu, việc cảm thấy áp lực là một điều
rất bình thường. Ví dụ, câu hỏi bắt đầu từ đâu hoặc khi nào kết thúc – một bài
luận nghiên cứu không phải là một bài tập có thể được giải quyết một cách dễ
dàng trong đồ án của một bằng đại học điển hình. Trái với đồ án môn học,
nghiên cứu thách thức khả năng phản biện và tư duy sáng tạo; nghĩa là, bạn
phải đưa ra các giải pháp sáng tạo cho các vấn đề nghiên cứu của mình. Nghiên
cứu là thứ gì đó dường như rất dễ làm nản lòng lúc đầu, nhưng điều đó không
thể cản trở những ai thực sự có hứng thú muốn tìm lời giải cho những câu hỏi
2
về thế giới. Điều này được minh họa bằng lời nói sau đây của Einstein: ‘Nếu ta
biết được điều ta đang làm gì, thì đó không thể gọi là nghiên cứu’.
Do đó, không phải tất cả lời khuyên nghiên cứu có thể được mô tả theo kiểu
‘one size fits all’ (không có lời khuyên nào đúng cho tất cả mọi người). Lời
khuyên có tác dụng với người này chưa chắc có thể áp dụng cho người khác.
Vì thế, bài báo này tập trung vào hai điểm. Thứ nhất, tôi trình bày tổng quan về
nghiên cứu thực nghiệm ở mục 2. Tiếp theo thảo luận này, tôi giới thiệu các nội
dung cơ bản của phần mềm Stata ở mục 3, trong đó nhấn mạnh đến khâu làm
sạch và quản lý dữ liệu. Mục 4 là phần kết luận với vài lời khuyên để thực hành
một nghiên cứu tốt.
2. Nghiên cứu thực nghiệm
2.1 Phân loại nghiên cứu
Nói chung, một bài nghiên cứu có thể rơi vào một trong ba loại sau: lý thuyết,
thực nghiệm, và hỗn hợp giữa lý thuyết và thực nghiệm.
Một bài nghiên cứu lý thuyết (theoretical paper) nói chung không liên quan đến
dữ liệu. Bắt đầu tư các giả định hợp lý nào đó về việc thế giới vận hành như thế
nào, nghiên cứu lý thuyết xây dựng – hoặc mở rộng – các mô hình để cố gắng
dự đoán điều gì sẽ xảy ra theo các kịch bản nhất định. Ví dụ, khái niệm cân
bằng Nash là một dạng khái niệm lý thuyết mà ai quen với lý thuyết trò chơi đều
sẽ nhận biết.
Ở đối cực bên kia, nghiên cứu thực nghiệm (empirical research) thì dựa nhiều
vào dữ liệu. Cụ thể, mục đích cuối cùng của nghiên cứu thực nghiệm thường là
giao thoa của ba yếu tố: một câu hỏi nghiên cứu thú vị, dữ liệu phù hợp để trả
lời câu hỏi đó và một chiến lược nhận diện thực nghiệm (thường bằng cách ước
lượng mối quan hệ nhân quả) nhờ đó câu hỏi được trả lời. Trong chiến lược này,
riêng thống kê mô tả và tương quan thường không đủ để cung cấp một lập luận
3
thuyết phục. Các vấn đề với bất kỳ thành nào trong số này sẽ có những hậu
quả lên các thành phần khác: đặc biệt, quản lý dữ liệu tồi sẽ ảnh hưởng tiêu
cực lên kết quả chung của bài nghiên cứu của bạn.
Trong khi cả nghiên cứu lý thuyết và nghiên cứu thực nghiệm sử dụng các cách
tiếp cận khác nhau, nhưng vẫn có nhiều lời khuyên đủ khái quát cho cả hai lĩnh
vực. Cụ thể, chọn một chủ đề trong lĩnh vực mà bạn quan tâm nhất. Làm như
thế sẽ có hai điểm lợi. Thứ nhất, bạn thường cảm thấy hạnh phúc hơn khi thảo
luận điều gì đó mà mình thích, cho dù là thảo luận với bạn bè, gia đình, đồng
nghiệp, hoặc thậm chí tại một buổi hội thảo. Thứ hai, chọn chủ đề mình thích
sẽ cho bạn động cơ để tiếp tục với nghiên cứu của mình, bất kể những khó khăn
gì sẽ đến trong suốt quá trình thực hiện nghiên cứu đó.
Điều này được bổ sung bởi quan sát của Creedy (2001) như sau: ngay cả nếu
bạn có rơi vào ngõ cụt, bạn cần phải có thiện ý và năng lượng để theo đuổi
những mục tiêu đó ngay từ đầu. Không có gì là cách tốt nhất để làm nghiên cứu
và việc nghiên cứu đầy rẩy những thách thức. Tuy nhiên, chính điều đó làm cho
bạn cảm thấy hài lòng hơn khi hoàn thành công việc nghiên cứu của mình vào
cuối mỗi ngày.
Trong thực tế, các thách thức của nghiên cứu thực nghiệm thường phức tạp
hơn nhiều so với những gì mà bạn gặp trong khi học kinh tế lượng căn bản.
Thực vậy, có một ý tưởng nghiên cứu rõ ràng, dữ liệu thích hợp và một chiến
lược thực nghiệm chặt chẽ ngay từ đầu là chuyện hiếm có. Ví dụ, biết được dữ
liệu của bạn trông như thế nào và quản lý chúng ra sao cũng quan trọng như
có một nền tảng kinh tế lượng vững chắc. Theo quan điểm này, thậm chí một
chiến lược nhận dạng hoàn hảo cũng không đáng tin cậy nếu như bạn không
thể quản lý dữ liệu một cách hợp lý. Các ví dụ về điều này trãi từ quan sát bị
thiếu cho đến thay đổi trong phân loại ngành hoặc không nhận biết khả năng bị
chệch do chọn mẫu trong dữ liệu của bạn. Ở chừng mực nào đó, kinh tế lượng
4
căn bản đang được giảng dạy ở bậc đại học tựa như kiểu hỏi bạn sẽ làm gì với
một triệu đôla với giả định là ngay từ đầu bạn đã có sẵn một triệu đôla.
2.2. Dữ liệu và các mô hình kinh tế lượng
Ngay cả trong nghiên cứu thực nghiệm cũng có nhiều yêu cầu khác nhau. Nói
chung, có ba loại dữ liệu thường dùng: dữ liệu chéo, dữ liệu chuỗi thời gian, và
dữ liệu bảng. Mỗi loại dữ liệu có các mô hình kinh tế lượng riêng, và mỗi mô
hình cũng có các yêu cầu riêng về việc nên đưa biến nào vào. Ví dụ, mô hình
hồi quy tuyến tính đơn giản:
Yi = 0 + 1Xi + ei (1)
yêu cầu dữ liệu cả Yi và Xi cho những người nghiên cứu xử lý dữ liệu chéo;
nghĩa là dữ liệu được thu thập tại cùng một thời điểm. Những người nghiên cứu
với các quan sát về các biến riêng lẻ, nhưng được thu thập ở nhiều thời điểm
khác nhau – tức dữ liệu chuỗi thời gian – có thể chạy cùng một mô hình, nhưng
thay Yi bằng Yt và Xi thành Xt.
Một ví dụ khác là các biến công cụ (instrumental variables). Nếu phương trình
hồi quy như trên tồn tại tương quan giữa Xi và hạng nhiễu ei, thì nỗ lực xác định
1 là không có hiệu lực. Tuy nhiên, nếu có sẵn một biến công cụ Zi, thì cách tiếp
cận bình phương bé nhất hai bước (two-stage least squares) sẽ cho phép ta
xác định ảnh hưởng nhân quả 1. Cho nên, trong khi ưu tiên thu thập dữ liệu về
Yi và Xi, thì người nghiên cứu cũng cần thu thập dữ liệu về biến công cụ Zi.
Ngoài các ví dụ này, việc lựa chọn giữa các mô hình kinh tế lượng còn phụ
thuộc vào dữ liệu mà bạn có. Xem Phụ lục A1 để hiểu thêm về vấn đề này.
Nói chung, nghiên cứu thực nghiệm là một quá trình từ từ: một số công việc cơ
bản cần phải được chuẩn bị trước khi bạn tiến hành phân tích kinh tế lượng.
Việc quản lý và làm sạch dữ liệu không phải là những chuyện chỉ làm một lần
mà không bao giờ đụng đến nữa. Một người nghiên cứu thực nghiệm nên nhớ
5
rằng công việc với dữ liệu thường không thể đoán trước được. Có lẽ, bạn cần
thu thập thêm dữ liệu mới. Dữ liệu của bạn có thể đột nhiên thay đổi đơn vị đo
lường giữa chừng trong mẫu. Lỗi chính tả và lỗi đánh máy có thể được tìm thấy
ở nhiều nước hoặc nhiều địa chỉ. Tất cả những thứ này đều tạo ra vô số vấn đề
mà bạn cần giải quyết như một phần của quá trình nghiên cứu.
3. Làm quen với Stata
Như đã nói đến ở mục 2, bạn cần dữ liệu nếu bạn muốn chạy một mô hình kinh
tế lượng. Tuy nhiên, việc này giả định rằng dữ liệu của bạn là có sẵn ở định
dạng đúng với mô hình bạn cần. Quy tắc chung là bạn không nên giả định rằng
giả định đó là đúng (và coi như bạn là người may mắn nếu giả định đó là đúng).
Một ví dụ cho trường hợp này được minh họa ở mục 3.1. Đối với những người
nghiên cứu thực nghiệm, xử lý số liệu là một thực tế hàng ngày, đặc biệt là khâu
làm sạch dữ liệu. Theo suy nghiệm thì làm sạch dữ liệu là quá trình chỉnh sửa
các lỗi trong dữ liệu thô và chuyển hóa chúng thành thứ gì đó mà mô hình của
bạn có thể sử dụng.
Tuy nhiên, quá trình làm sạch dữ liệu không chỉ dừng lại ở đó. Quản lý dữ liệu
tốt cũng liên quan đến việc lưu giữ tư liệu một cách cẩn thận về các thao tác
bạn làm sạch dữ liệu như thế nào và chú thích những chi tiết này như một phần
trong phụ lục ở báo cáo nghiên cứu cuối cùng. Sổ tay thực hành nghiên cứu rõ
ràng sẽ làm cho bài nghiên cứu của bạn đáng tin cậy hơn trong mắt những
người sẽ đọc công trình của bạn. Nếu bạn xử lý dữ liệu với một phần mềm thống
kê như Stata (hoặc Eviews, R và SAS), bạn có thể lưu giữ tư liệu về các bước
bạn đã làm bằng cách sử dụng các chú thích, tôi sẽ thảo luận vấn đề này sau.
Bây giờ, một trong những câu hỏi quan trọng ở đây là: ‘Tại sao là Stata?’ Nó có
thể làm gì và tại sao chúng ta muốn sử dụng Stata? Mô tả trên trang web của
Stata (<http://www.stata.com/why-use-stata/>) có viết:
6
Stata là một phần mềm thống kê tích hợp, đầy đủ, cung cấp mọi thứ
bạn cần cho việc phân tích dữ liệu, quản lý dữ liệu, và vẽ đồ thị.
Bất kỳ ai sử dụng Stata đều sẽ sử dụng nó cho mọi khía cạnh của phân tích dữ
liệu, quản lý dữ liệu và vẽ đồ thị. Mối quan tâm của chúng ta ở đây là ở khâu
quản lý dữ liệu, vì đó là việc phải được làm trước phân tích dữ liệu hoặc vẽ đồ
thị. Cụ thể hơn, tôi giới thiệu các lệnh cơ bản trong Stata, do-files, các vấn đề
hay gặp trong dữ liệu (như quan sát bị thiếu, tạo biến, các biến dạng string và
dạng float), và các gói tùy chọn trong Stata.
Stata được gọi là một phần mềm dạng dòng lệnh (command-line software). Từ
‘dòng lệnh’ bắt nguồn từ thực tế rằng nếu bạn muốn Stata làm điều gì, bạn
thường phải gõ vào cửa sổ lệnh điều mà bạn muốn. Đặc điểm này làm cho
Stata có ưu thế đáng kể so với các chương trình được sử dụng phổ biến hơn
như Excel xét về khía cạnh minh bạch. Ví dụ, công thức được nhập vào các ô
Excel rất khó đọc. Theo cách này, thì đặc điểm dòng lệnh của Stata làm cho
bất kỳ điều chỉnh nào trong dữ liệu càng rõ ràng hơn. Tuy nhiên, các công việc
đơn giản hơn cũng có thể được thực hiện bằng cách sử dụng các trình đơn thả
xuống (drop-down menus). Ví dụ, nếu bạn muốn trợ giúp về một lệnh cho sẵn
(mà máy tính của bạn chưa cài đặt), thì lệnh help (hoặc findit) sẽ cung cấp tài
liệu về lệnh đó cho bạn. Nói cách khác, bạn có thể sử dụng thực đơn ‘help’ để
đến hộp thoại tìm kiếm để tìm các lệnh mà bạn cần.
Khi mở Stata, bạn sẽ được chào hỏi với giao diện như minh họa ở Hình 1 và
giao diện này gồm các thành phần sau đây:
(i) Cửa sổ các biến trong bộ dữ liệu
(ii) Cửa sổ mô tả thuộc tính của từng biến
(iii) Cửa sổ báo cáo kết quả
(iv) Cửa sổ lệnh
(v) Cửa sổ lưu giữ lịch sử các lệnh đã được thực hiện
7
Bất cứ khi nào bạn gõ vào (iv), Stata sẽ đọc nó như một lệnh và sẽ cho bạn kết
quả của lệnh đó ở (iii). Điều đó nói lên rằng, đối với các dự án nghiên cứu lớn,
sử dụng (iv) có thể trở nên khá phức tạp, đặc biệt nếu dự án của bạn kéo dài.
Đối với các dự án như thế thì chúng ta nên lưu giữ các lệnh vào do-files, và vấn
đề này sẽ được thảo luận ở phần sau.
3.1. Cú pháp và định dạng dữ liệu
Các lệnh trong Stata theo một cấu trúc được gọi là ‘cú pháp’ (syntax). Cơ bản,
cú pháp Stata giống như việc ta ghép chữ với nhau trong tiếng Anh để tạo một
câu đầy đủ. Bạn có thể tưởng tượng rằng nếu bạn lấy các từ trong một câu và
sắp xếp lại một cách ngẫu nhiên, bạn kỳ vọng sẽ không nhận được thứ gì có
nghĩa. Các lệnh Stata vận hành theo đúng nguyên tắc này. Mỗi lệnh bạn thực
hiện trên Stata đều có cú pháp riêng của nó, theo cách mà bạn cần phải nhập
chúng theo một cách nhất định để Stata hiểu bạn đang yêu cầu Stata làm gì.
Một ví dụ đầu tiên về cú pháp là tải dữ liệu (data loading) vào Stata. Trước khi
làm việc với bất kỳ dữ liệu nào, Stata cần biết dữ liệu của bạn đang được lưu
giữ ở đâu. Thư mục mà dữ liệu được lưu giữ được gọi là thư mục làm việc
(workinh directory) và được thực hiện theo cú pháp sau đây:
cd [‘’] directory_name[‘’]
ở đây cd là lệnh để xác định thư mục làm việc và directory_name là ‘đường dẫn’
đến nơi dữ liệu của bạn được lưu giữ.
Lưu ý rằng nếu sau khi gõ vào biểu thức directory_name mà bạn nhận kết quả
báo lỗi, thì bạn phải thay thế nó bằng một đường dẫn thích hợp, và đường dẫn
này sẽ là khác nhau tùy người sử dụng là ai. Bất cứ thứ gì trong dấu ngoặc là
tùy chọn. Ví dụ, nếu tên thư mục của bạn có khoảng trống trong đó, thì bạn phải
sử dụng các dấu ngoặc kép, nếu không thì Stata sẽ không thể diễn giải được
lệnh của bạn một cách chính xác.
8
Hình 1: Giao diện của Stata
Vì thế, ví dụ, nếu bạn lưu giữ dữ liệu trong thư mục C:\Data (đối với người sử
dụng Windows), thì bạn có thể gõ như sau:
cd c:\Data
Nhưng nếu đường dẫn thực ra là C:\Data files, thì bạn cần phải gõ vào như sau:
cd “c:\Data files”
Nhiệm vụ tiếp theo là mở hoặc ‘đọc’ tập tin dữ liệu của bạn trong Stata. Stata
có thể xử lý nhiều định dạng dữ liệu khác nhau và có các lệnh riêng cho mỗi
loại định dạng. Danh mục các lệnh phổ biến được giới thiệu trong Bảng 1.
9
Bảng 1: Các lệnh tải dữ liệu trong Stata
Đối với các định dạng dữ liệu đặc biệt hơn, bạn có thể gõ lệnh help import –
hoặc tìm kiếm qua trình đơn thả xuống – bạn sẽ thấy nhiều lệnh khác nhau để
đọc dữ liệu trong Stata.
Cụ thể, Stata sẽ xử lý các cột trong một bảng tính như các biến đơn lẻ. Mỗi
dòng thường được xem là một quan sát. Nói chung, bạn sẽ cần phải chắc chắn
rằng dữ liệu của bạn có định dạng thích hợp trước khi tải chúng về Stata. Một
ví dụ như thế là dữ liệu về lãi suất được cung cấp bởi Ngân hàng dự trữ Úc
(RBA). Hình 2 minh họa dữ liệu thô sẽ trông như thế nào trong bảng tính Excel
và Hình 3 minh họa dữ liệu này khi đã được tải về Stata.
Hình 2 và 3 minh họa một số vấn đề trong dữ liệu cần xử lý ngay trước khi bạn
tiếp tục việc phân tích:
Hình 2: Dữ liệu thô về lãi suất của RBA, bảng tính Excel
10
Hình 3: Dữ liệu thô về lãi suất của RBA, biên tập trên Stata (Stata editor)
(i) Sáu dòng đầu tiên chứa các thông tin, dù hữu ích cho việc mô tả các
biến, nhưng không thích hợp cho việc phân tích dữ liệu.
(ii) Các biến nói chung nên gồm các con số. Cột thứ hai (mục tiêu lãi suất
tiền mặt) là một ví dụ minh họa, nhưng có ‘chữ’ trong các cột sẽ gây rắc
rối đến việc hồi quy và thống kê mô tả.
(iii) Dữ liệu là dữ liệu chuỗi thời gian, nhưng Stata chưa thể nhận ra chúng
là dữ liệu chuỗi thời gian.
(iv) Các tên biến ở dòng đầu tiên là rất chung chung (nghĩa là, các biến
được gọi là v1, v2, v3).
Tất cả các vấn đề vừa kể trên có thể được xử lý trong Stata, mặc dù có khi sẽ
tiện lợi hơn nếu bạn thực hiện các thao tác nhất định trong Excel trước khi
chuyển sang tập tin Stata. Một ví dụ về dữ liệu sau khi qua khâu làm sạch được
minh họa trong Hình 4.
Hình 4: Dữ liệu của RBA, thích hợp cho phân tích trên Stata
11
Các chi tiết về việc có được Hình 4 như thế nào được trình bày ở Phụ lục A2.
Một quy tắc thực nghiệm chung ở đây là hãy lưu dự phòng dữ liệu thô của bạn
trước khi chỉnh sửa chúng theo bất kỳ cách nào. Nếu bạn lỡ xóa thứ gì trong dữ
liệu thô và đột nhiên lưu lại, thì bạn có thể sẽ gặp rắc rối, đặc biệt là nếu dữ liệu
đó chưa có sẵn một cách công khai (ví dụ, dữ liệu có từ việc điều tra hoặc dữ
liệu có từ thí nghiệm).
3.2 Các lệnh cơ bản
Đối với các mục đích thí nghiệm, Stata cũng cung cấp một số bộ dữ liệu đã
được cho sẵn, và bạn có thể tự do đọc hoặc chỉnh sửa bất kỳ lúc nào. Một ví
dụ như thế là bộ dữ liệu sp500, bộ dữ liệu này có thể được sử dụng đơn giản
bằng cách gõ lệnh:
sysuse sp500
vào (iv) and nhấn ‘Enter’. Ngay cả nếu bạn không có bất kỳ mô hình cụ thể nào
trong đầu, bạn vẫn có thể có được thống kê mô tả. Một số lệnh thống kê mô tả
quan trọng được trình bày trong Bảng 2.
Bảng 2: Các ví dụ về thống kê mô tả trong Stata
Để thực hiện các lệnh như thế bạn cần xem danh sách các biến. Một trong các
biến trong tập tin sp500 là open, nên nếu bạn gõ bất kỳ lệnh gì, chẳng hạn như
summarize open, bạn sẽ có bảng thống kê tóm tắt (summary statistics) về biến
open như sau:
12
Các kết quả tương tự cũng được thể hiện trong Hình 1. Nếu ta quan tâm đến
thống kê tóm tắt của biến open cho một khoảng giá trị nhất định, thì ta cũng có
thể sử dụng thêm câu lệnh if, nghĩa là trong trường hợp này Stata cũng cung
cấp thống kê tóm tắt, nhưng chỉ cho một khoảng giá trị đã được xác định. Ví dụ,
nếu ta gõ lệnh:
summarize open if open > 1200
Thì ta có bảng thống kê tóm tắt như sau:
Thảo luận sâu hơn về các câu lệnh if được trình bày ở Phụ lục A7. Từ đây, bạn
có thể đi xa hơn và thực hiện mô hình hồi quy đơn giản trên Stata. Bạn cũng có
thể làm điều này với lệnh regress. Đây là một ví dụ (mặc dù là vô ích): nếu bạn
muốn hồi quy biến open với một biến khác, ví dụ biến close, bạn có thể gõ:
regress open close
Stata sẽ cho bạn kết quả của mô hình hồi quy tuyến tính giản đơn như sau:
opent = 0 + 1closet + et (2)
trong đó et la hạng nhiễu kinh tế lượng như thông thường. Thậm chí với lệnh
như regress, bạn có thể sửa đổi theo nhiều cách khác nhau:
(i) regress open close, noconstant (bỏ hệ số cắt và chỉ chạy mô hình hồi
quy opent = 1closet + et).
13
(ii) regress open close, vce(robust) (cho bạn kết quả hồi quy với các sai số
chuẩn đã được điều chỉnh phương sai thay đổi thay vì các sai số chuẩn
theo OLS thông thường).
Cuối cùng, Stata cũng cho phép ta sử dụng các phiên bản viết tắt của hầu hết
các lệnh. Ví dụ, regress có thể được viết gọn là reg. Các lệnh tabulate và
summarize có thể lần lượt được viết tắt là tab và sum.
3.3 Do-files và chỉ dẫn mã hóa dữ liệu
Nói chung, phần lớn công việc nghiên cứu trong Stata không diễn ra trong cửa
sổ lệnh. Bất kỳ dự án nào thực hiện nhiều hơn một vài giờ sẽ có thể có rất nhiều
lệnh mà bạn cần phải nhập vào cửa sổ lệnh mỗi khi bắt đầu thực hiện lại dự án.
Thật lý tưởng vì có một cách để bạn viết các lệnh này sao cho bạn không cần
phải viết chúng lại lần nữa làm gì.
Trong Stata, cách để làm điều này là thông qua do-files – một dạng các tập tin
văn bản thực hiện tất cả các mã hóa của bạn theo từng dòng. Nghĩa là, bất cứ
khi nào Stata thấy một dòng, nó sẽ giải thích dòng đó như một lệnh mặc định
trừ phi bạn xác định theo một cách khác. Điều này có nghĩa là một do-file lưu
lại các lệnh bạn đã thực hiện trong suốt quá trình làm sạch dữ liệu, mô hình hóa
kinh tế lượng và vẽ đồ thị, mà những người khác cũng có thể sử dụng.
Nó cũng có nghĩa là khi bạn hoàn thành công việc của mình vào cuối ngày, bạn
có thể trở lại vào ngày kế tiếp và bắt đầu ngay tại chổ mà bạn dừng lại của ngày
hôm trước. Các lợi ích khác của do-files bao gồm: (i) có thể làm dấu và sửa lỗi
dễ dàng hơn; (ii) có nhiều cách thuận tiện hơn để tạo ra kết quả cho chính bạn
hoặc các đồng nghiệp của bạn; và (iii) có một nơi làm việc được tổ chức tốt hơn.
Do-files cũng đơn giản hơn để viết các câu lệnh (statements) và các vòng lặp
(loops), nhưng chúng ta sẽ thảo luận ngắn gọn vấn đề này ở mục 3.4. Thảo
luận sâu hơn về vấn đề này sẽ được trình bày ở Phục lục A7.
14
Cá nhân tôi thường bắt đầu một do-file với các lệnh sau đây:
clear all
set more off
Lệnh clear all nghĩa là xóa sạch mọi thứ từ bộ nhớ để tránh lẩn lộn lới các tập
tin có thể đã được thực hiện trước đây. Lệnh set more off nghĩa là làm mất tác
dụng một tính chất nào đó của Stata mà nó có thể gây ra phiền phức hơn đáng
có (một ví dụ minh họa rắc rối này được trình bày ở Phụ lục A3).
Một khi các lệnh như trên đã được thực hiện, thì bạn có thể gõ bất cứ lệnh gì
mà bạn muốn như làm sạch dữ liệu, hồi quy hoặc vẽ đồ thị. Một khi các lệnh đó
đã được thực hiện, thì bạn có thể lưu lại dữ liệu của mình. Để làm điều này, bạn
có thể sử dụng lệnh save, theo sau là tên tập dữ liệu mà bạn muốn lưu (lưu ý:
hãy cẩn thận không nên lưu đè lên dữ liệu thô ban đầu).
Nếu bạn muốn lưu đè lên tập tin đang sử dụng, thì chính bản thân lệnh save sẽ
không làm thế và bạn cần phải đưa thêm lựa chọn replace vào dòng lệnh save
của mình. Ví dụ, nếu bạn có một tập tin tên ‘sp500.dta’ và bạn muốn lưu đè lên
nó, bạn sẽ phải gõ như sau:
save sp500.dta, replace
trong trường hợp này, tập tin sẽ được lưu đè lên tập tin hiện có.
Một lời khuyên thực hành nghiên cứu tốt khi viết một do-file là bạn có thể (hoặc
nên) để lại các chú thích trong do-file để mô tả các mã hóa của bạn có nghĩa là
gì. Một đồng thuận phổ biến mà tôi nhận được khi nói chuyện với nhiều người
sử dụng Stata là: bất cứ thứ gì dường như hiển nhiên khi bạn viết mã hóa hôm
nay sẽ trở nên mơ hồ khi bạn quay trở lại sau đó một tháng. Các chú thích sẽ
giúp bạn dễ dàng hơn khi đọc lại các mã hóa của mình, hoặc khi đọc các mã
hóa của một người khác.
15
Stata sẽ lờ đi các chú thích trong do-file của bạn. Cụ thể, điều này có nghĩa là
Stata sẽ không cố gắng và giải thích những dòng trong do-files mà đã được chú
thích khác với các lệnh phải thực hiện. Có ba cách khác nhau để bạn ghi chú
thích các dòng mã hóa:
(i) đánh dấu * để ghi chú thích mỗi dòng riêng lẻ;
(ii) đánh dấu // để ghi chú thích trong cùng một dòng;
(iii) đánh dấu /* và */ cho nhóm các chú thích lớn hơn.
Thực sự, /* bắt đầu chú thích và sẽ tiếp tục cho đến khi bạn sử dụng */ để kết
thúc chú thích.
Ví dụ bạn tạo một do-file như sau (không có trong bản tiếng Anh):
clear all
set more off
sysuse sp500
* Chú thích: Mở tập tin sp500
sum open
* Chú thích: Thống kê tóm tắt cho chuỗi open
reg open close, vce(robust) // hồi quy tuyến tính giản đơn
/* Lưu ý: Ở đây open là giá mở cửa, close là giá đóng cửa
và vce()robust là để điều chỉnh các sai số chuẩn nếu mô
hình có hiện tượng phương sai thay đổi */
Vì vậy, nếu ta muốn kết nối tất cả các khái niệm ta đã sử dụng từ mục 3.1 và
3.2, thì hãy xem ví dụ về một do-file với các chú thích dưới đây. Tôi cũng sử
dụng câu lệnh if, và trong trường hợp này có nghĩa là ta yêu cầu Stata cung cấp
thống kê tóm tắt, nhưng chỉ trong điều kiện đã cho trước.
16
Kết quả từ do-file này được trình bày ở Phụ lục A4.
3.4 Tạo biến và một số vấn đề phổ biến về dữ liệu
Một áp dụng phổ biến trong quản lý dữ liệu của Stata là tạo biến, thường thông
qua lệnh generate. Ví dụ, giả sử bạn có tập dữ liệu sp500 và điều bạn muốn là
xem xét chênh lệch giữa giá mở cửa và giá đóng cửa vào một ngày bất kỳ nào
đó. Để làm điều này, bạn thực hiện lệnh sau đây:
generate spread=high – low
Còn muốn xem xét chênh lệch trong giá đóng cửa ngày này qua ngày kia thì
làm sao? Lệnh generate cũng có thể xử lý vấn đề này, nhưng cú pháp thì hơi
phức tạp chút. Lệnh cụ thể trông như sau:
generate close_diff=close[_n] – close[_n-1]
Lệnh trên nói lên điều này: tạo một biến có tên close_diff, sao cho bất kỳ số
quan sát nào ký hiệu là ‘_n’, giá trị của nó bằng với giá trị của biến close tại
quan sát đó, trừ giá trị của close tại quan sát trước đó (ký hiệu là ‘_n-1’).
Có một số thao tác tạo biến mà lệnh generate không thể thực hiện được. Đối
với các thao tác này, Stata dùng lệnh egen (mở rộng của generate). Như cái
17
tên cho biết, egen có thể tạo ra các biến mà generate không thể thực hiện được.
Điều này trãi từ các biến có từ các giá trị của thống kê tóm tắt (như trung bình,
trung vị, độ lệch chuẩn, giá trị nhỏ nhất, giá trị lớn nhất) cho đến các biến kết
hợp với các giá trị của các biến khác (cũng được gọi là ghép nối, concatenation).
Ngoài việc tạo biến, cũng có các lệnh khác mà bạn thấy hữu ích cho thao tác
dữ liệu (xem Bảng 3).
Bảng 3: Các lệnh về thao tác dữ liệu trong Stata
Bây giờ tôi sẽ nêu bậc các ví dụ khác về các vấn đề thường gặp trong quản lý
dữ liệu mà bạn có thể sẽ gặp:
Những quan sát bị thiếu (missing observations). Rất thường gặp trên thực tế là
một số quan sát sẽ không có bất kỳ dữ liệu nào được thu thập. Điều này có thể
là do sai sót hoặc do nhiều yếu tố khác, như những người thất nghiệp thì làm
sao có dữ liệu về tiền lương, những người tham gia điều tra từ chối trả lời một
câu hỏi nào đó hoặc các lỗi do bị chệch trong chọn mẫu. Nói chung, Stata sẽ
đặt nhãn cho những quan sát bị thiếu bằng dấu chấm. Tuy nhiên, dữ liệu thô
đôi khi đặt nhãn các quan sát bị thiếu bằng nhiều cách khác như N/A hoặc 999.
Điều này có nghĩa là bạn phải đọc thật cẩn thận bất cứ hồ sơ nào đi kèm với dữ
liệu thô vì cả hai trường hợp này đều có thể tạo ra nhiều vấn đề khi làm việc với
dữ liệu.
Tôi thảo luận trường hợp N/A ngay dưới đây. Đối với trường hợp sau (999), bạn
sẽ phải thay thế các mã như thế bằng dấu chấm của Stata cho các biến bị thiếu
quan sát; nếu không thì các quan sát bị thiếu sẽ làm chệch đáng kể các giá trị
18
ước lượng. Một điều cũng rất đáng quan tâm ở đây là bất kỳ các quan sát có
giá trị bằng 0 sẽ không giống với các quan sát bị thiếu. Stata sẽ tính các quan
sát bằng 0 trong hồi quy, nhưng sẽ lờ đi các dấu chấm của quan sát bị thiếu.
Biến string và biến float (strings và floats). Stata có thể chấp nhận các ‘chữ’
(word) như dữ liệu, chứ không chỉ là các con số (number). Bất kỳ bến nào chứa
các ký tự (letter) đều được xem là một biến dạng chuỗi (string variable), bất kể
biến đó có chứa thứ gì khác. Trái lại, bất kỳ biến nào chỉ chứa các con số
và/hoặc các quan sát bị thiếu được xem là ‘bằng số’ (numeric), hoặc gọi phổ
biến hơn là một biến float (float variable). [Lưu ý: khi sử dụng Stata, bạn sẽ thấy
rằng Stata sẽ hiện biến string màu đỏ, và biến float màu đen trong biên tập dữ
liệu (data editor)].
Các biến string thường phát sinh trong các trường hợp như địa chỉ và tên, cũng
như các quan sát bị thiếu. Stata nói chung không chấp nhận các biến string
trong hồi quy, cho nên trong trường hợp các quan sát bị thiếu mà được mã hóa
dưới dạng N/A, thì bạn sẽ không thể chạy hồi quy với biến đó trừ khi bạn sửa
lại dữ liệu. Nếu bạn gặp phải các vấn đề như thế, các lệnh replace và destring
có thể trở nên hữu ích, cùng với các câu lệnh if.
Diễn dịch ngày – thời gian (date-time translation). Thời gian có thể được đo bằng
phút, giờ, ngày, tuần, tháng, và năm. Di chuyển giữa tất cả các tần suất này –
hoặc thậm chí Stata nhận diện các tần suất này ngay từ đầu – thì cũng là một
thứ đau đầu. Nếu bạn có bất kỳ dữ liệu chuỗi thời gian hoặc dữ liệu bảng nào,
đây là một lĩnh vực cần phải xem xét kỹ. Bạn có thể gõ help datetime translation
để tham khảo tài liệu cho vấn đề này, nhưng cảnh báo rằng đó là một lĩnh vực
rất rộng đấy.
Hợp nhất các bộ dữ liệu (dataset merging). Nếu bạn có sẵn nhiều bộ dữ liệu
nhưng bạn muốn tất cả chúng được lưu trong cùng một nơi, thì bạn cần phải
19
hợp nhất chúng lại. Các lệnh merge và append được sử dụng một cách đặc
trưng cho mục đích này.
Định dạng lại (reshaping). Dữ liệu bảng – tức là dữ liệu được lưu giữ cả qua thời
gian và giữa các cá thể – thường rơi vào hai định dạng khác nhau: dài (long) và
rộng (wide). Một bộ dữ liệu theo định dạng dài có một biến đóng vai trò là ‘ngữ
cảnh’ (context) của dữ liệu và một biến khác liệt kê các giá trị của dữ liệu. Trái
lại, một bộ dữ liệu theo định dạng rộng thì mỗi biến là một cột. Bảng 4 là một ví
dụ giả định để minh họa hai loại định dạng này.
Bảng 4: Ví dụ về bộ dữ liệu theo định dạng dài và rộng
Ba cột bên trái của Bảng 4 minh họa dữ liệu ở định dạng ‘dài’ và ba cột bên
phải Bảng 4 là cùng một bộ dữ liệu, nhưng ở định dạng ‘rộng’. Trong Stata, lệnh
reshape cho phép bạn chuyển đổi giữa hai loại định dạng này khi cần. Một ví
dụ về cách thực hiện chuyển đổi như thế nào được trình bày ở Phụ lục A6.
Câu lệnh và vòng lặp (statements and loops). Một phần quan trọng khi làm việc
với dữ liệu liên quan đến việc sử dụng các câu lệnh logic (logical statements).
Ví dụ, bạn có thể hỏi chính mình liệu rằng có thể dễ dàng có được các thống
kê tóm tắt và giản đồ tần suất về tiền lương chỉ cho những ai có việc làm hay
không? Câu trả lời hiển nhiên là ‘có’: nếu chúng ta giả sử rằng bộ dữ liệu như
thế ghi nhận tiền lương bằng 0 cho những ai thất nghiệp, và thế thì câu lệnh
cho ví dụ này sẽ như sau:
histogram wage if wage > 0
Các câu lệnh như thế có thể trở nên phức tạp hơn rất nhiều. Một thảo luận chi
tiết hơn về vấn đề này được trình bày ở Phụ lục A7.
20
3.5 Các chương trình được viết riêng cho người sử dụng và các tài nguyên khác
Vì Stata rất linh hoạt, nên một số người nghiên cứu có các yêu cầu cụ thể mà
Stata có thể không nhất thiết phải cung cấp đầy đủ. Đối với các trường hợp như
thế, những người sử dụng Stata khác sẽ tự tạo ra và đóng góp các gói lệnh của
mình vào kho lưu ký dữ liệu SSC (Boston College Statistical Software
Components), những người sử dụng khác khi cần có thể tìm kiếm và cài đặt bổ
sung bằng cách sử dụng lệnh ssc install trong Stata. Các lệnh như thế cũng có
tài liệu đi kèm theo một định dạng quen thuộc như các tài liệu trợ giúp chính
thức của Stata. Một số gói hữu ích tiềm năng được trình bày ở Bảng 5.
Bảng 5: Các gói lệnh SSC
Ngoài chức năng hỗ trợ thêm, có nhiều nơi mà bạn có thể tham khảo khi bạn
cần một số phần nhất định cho việc mã hóa của mình. Nếu gặp phải bất cứ vấn
đề nào, và khả năng là bạn không phải là người đầu tiên gặp phải vấn đề như
thế. Tôi xin cung cấp bạn một danh sách các tài nguyên mà bạn có thể thấy
hữu ích cho việc nghiên cứu của mình:
(i) Stack Overflow (<stackoverflow.com>): một cộng đồng những người lập
trình, ở đó có vô số câu hỏi được đặt ra và rất nhiều câu hỏi trong số đó
đã được trả lời.
(ii) Statalist (<statalist.org>): diễn đàn chính thức của Stata. Giống như
Stack Overflow ở trên, có rất nhiều thảo luận đang hoạt động về mọi
thứ của Stata.
21
(iii) Institute for Digital Research and Education at University of California,
Los Angeles (UCLA) (<http://www.ats.ucla.edu/stat/stata/>): một tài
nguyên tốt về các áp dụng phổ biến của Stata. Nhiều ví dụ chi tiết được
tìm thấy ở đây.
Ngoài các nguồn tài nguyên này, bạn còn có Google – mặc dù khả năng lớn là
bạn sẽ tìm thấy các nguồn tài nguyên vừa nói ở trên. Đồng nghiệp của bạn,
cũng như giáo viên hướng dẫn của bạn cũng có thể là những người có thể giúp
bạn. Thực tế, kinh nghiệm thực hành nghiên cứu tốt sẽ giúp bạn khi nó mang
đến cho bạn những phản hồi, cả về tốc độ cũng như chất lượng mà các phản
hồi bạn nhận được.
4. Lời khuyên cho nghiên cứu
Ngoài việc sử dụng Stata, còn nhiều yếu tố khác mà bạn có lẽ muốn ghi nhớ
khi viết một bài nghiên cứu thực nghiệm lần đầu trong đời:
Đối xử với dự án nghiên cứu của bạn giống như ai đó sẽ đọc nó (treat your work
like someone else will read it). Điều này không chỉ bao gồm chính bài nghiên
cứu, mà còn là cách mã hóa Stata mà bạn viết ra. Mã hóa có thể đọc được có
ý nghĩa rất lớn nếu bạn muốn nhận được những lời khuyên hữu ích từ người
hướng dẫn của bạn hoặc các đồng nghiệp của bạn về các phương pháp mà
bạn đang sử dụng.
Đặt tên các biến của bạn một cách thích hợp (name your variables
appropriately). Điều này áp dụng cho cả cách mã hóa và bài nghiên cứu của
bạn. Tên biến ngắn gọn là ổn trong một vài trường hợp, nhưng không thể đọc
được bài luận của bạn nếu như bạn sử dụng các biến đó ở những chổ không
thật sự cần thiết; ví dụ như bảng kết quả hồi quy.
Làm cho mã hóa của bạn linh hoạt (make your code flexible). Không nên giả sử
rằng công việc xử lý dữ liệu của bạn đã được thực hiện xong rồi. Thường thì
22
bạn phải xử lý số liệu không chỉ tại thời điểm bắt đầu dự án nghiên cứu của
mình, mà còn kéo dài trong suốt quá trình nghiên cứu. Các ví dụ phổ biến
thường gồm việc thích nghi với dữ liệu mới hoặc khi thay đổi hướng nghiên cứu,
cả hai trường hợp đều rất mất thời gian nếu như bạn không viết mã hóa với sự
lường trước những khả năng này trong đầu.
Nghiên cứu là một hàm của thứ ta không biết (research is a function of
obituaries). Đây là điều mà giáo viên hướng dẫn của tôi kể với tôi khi tôi mới bắt
đầu với dự án nghiên cứu của mình. Ngay cả điều tốt nhất của chúng ta cũng
không phải là hoàn hảo. Thực vậy, ta luôn thất bại đối với nhiều thứ mà ta cố
gắng. Có lẽ, một ý tưởng nào đó không thể được thực hiện hoặc mô hình không
phù hợp với dữ liệu. Trong bất kỳ bài nghiên cứu nào mà bạn đọc, luôn luôn có
những câu chuyện chưa được kể về những thứ ta không biết đằng sau cách mà
bài nghiên cứu đó đã được thực hiện như thế nào. Bất kể thế nào chăng nữa,
những gì mà mỗi người thấy vào cuối ngày là những kết quả đã hoàn thành –
và đối với chúng ta, đó là phần khiến ta cảm thấy hài lòng nhất.
Điều cuối cùng cần nhớ là tiến trình nghiên cứu về bản chất là một quá trình
ngẫu nhiên. Bạn có thể không bao giờ được đảm bảo rằng điều bạn đang làm
sẽ suông sẻ theo cách mà bạn kỳ vọng. Có những giai đoạn bạn có thể trải qua
cả tuần mà không có bất kỳ tiến bộ nào, rồi sau đó chỉ trong một ngày nhưng
bạn có thể đạt được những đột phá không ngờ, trước khi trở lại với đương đầu
với những khó khăn. Chìa khóa để vượt qua điều này là hãy làm việc một cách
liên tục. Nghiên cứu không phải là cuộc đua nước rút 100m, mà nó giống như
việc chạy marathon. Bạn sống cùng với bài nghiên cứu qua một thời gian dài,
nhưng miễn là bạn cứ tiếp tục làm việc chăm chỉ, cuối cùng bạn sẽ kết thúc với
một bài nghiên cứu mà chính bạn sẽ cảm thấy vô cùng hãnh diện.
23
Phụ lục 1: Thảo luận xa hơn
Chi tiết bổ sung cho các mục chính trong bài báo này có thể được tìm thấy ở
đây. Cụ thể, tôi đưa ra các thảo luận xa hơn về các mô hình kinh tế lượng, cùng
với cách mã hóa được dùng để tạo ra các hình trong bài báo. Tôi cũng đi vào
chi tiết về các vòng lặp (loops) và các câu lệnh logic (logical statements) cho
những ai quan tâm.
A1. Các mô hình kinh tế lượng: Các ví dụ
Trong phần này, tôi trình bày ngắn gọn một số ví dụ về các mô hình kinh tế
lượng, mà tất cả các mô hình này có thể được thực hiện trong Stata.
Để bắt đầu, hãy xem dữ liệu chéo. Một ví dụ có thể sử dụng dữ liệu này là mô
hình probit nhị nguyên (binary probit model) dùng để mô hình hóa xác suất của
một biến kết quả (outcome variable) Yi chỉ nhận hai giá trị 0 hoặc 1. Để minh
họa, hãy xem mô hình hồi quy tuyến tính giản đơn sau đây:
Yi = 0 + 1Xi + ei (A1)
Nếu biến phản ứng (response variable, cũng được gọi là biến phụ thuộc:
dependent variable) Yi là biến kết quả nhị phân, thì một cách để mô hình hóa
sẽ như sau:
Pr(Yi =1|Xi) = ∫1
√2𝜋𝑒𝑥𝑝 (−
𝑍
2)
𝛽0+𝛽1𝑋𝑖
−∞𝑑𝑧
= (0 + 1Xi ) (A2)
Trong đó () là hàm phân phối xác suất tích lũy của phân phối chuẩn hóa.
Theo cách này, ta cũng có thể viết:
Pr(Yi = 0|Xi) = 1 – Pr(Yi = 1|Xi) (A3)
Còn mô hình về dữ liệu chuỗi thời gian thì sao? Một trong những mô hình phổ
biến (ubiquitous models) là mô hình tự hồi quy bậc 1 [AR(1)] như sau:
24
Yt = 0 + 1Yt-1 + et (A4)
Mô hình này có thể được mở rộng bằng cách đưa thêm độ trễ của một biến độc
lập vào vế phải, và mô hình như thế được gọi là ARDL(1,1):
Yt = 0 + 1Yt-1 + 1Xt-1 + et (A5)
Cuối cùng, chúng ta xem xét một mô hình dữ liệu bảng. Một trong những ví dụ
đơn giản nhất là mô hình tác động cố định (fixed-effects model), mô hình hóa
phản ứng Yit của một cá nhân i tại thời điểm t thông qua dạng mô hình sau đây:
Yit = Xit + i + uit (A6)
Trong đó Xit là một vectơ 1 x k của các biến giải thích thay đổi theo thời gian
(time-varying regressors), i là tác động cố định không thay đổi theo thời gian
(time-invariant fixed effect) của cá nhân i và uit là hạng nhiễu kinh tế lượng.
Stata có thể chạy tất cả các mô hình này. Cụ thể, các mô hình chuỗi thời gian
nói trên có thể được thực hiện y như hồi quy OLS chuẩn. Môi hình probit có thể
được ước lượng bằng cách sử dụng lệnh probit (lệnh này có thể được mở rộng
cho các kết quả phản ứng đa khả năng với lệnh oprobit). Mô hình ảnh hưởng
cố định có thể được ước lượng với lệnh xreg cùng với lựa chọn fe.
Ghi chú của người dịch: Tôi nghĩ bạn đọc không nên đọc phần Phụ lục A1 này,
vì tác giả viết quá xơ xài.
A2. Dữ liệu RBA: Quá trình làm sạch dữ liệu
Dưới đây là một ví dụ về cách mà bạn có thể làm sạch dữ liệu tương tự như
được minh họa ở Hình 2 và 3. Trong thực tế, thực hiện tất cả điều này thông
qua Stata không phải luôn luôn là cách hiệu quả nhất: một số công việc đủ đơn
giản cần làm trước (với Excel) trước khi nhập dữ liệu sang Stata. Việc mã hóa
chính nó cũng không nhất thiết là cách hiệu quả nhất, nhưng nó giúp đưa đến
kết quả cuối cùng mà chúng ta thấy ở Hình 4.
26
A3. Lệnh Set More Off
Nếu lựa chọn ‘more’ không được tắt đi, thì sau đây là một ví dụ minh họa cho
hậu quả có thể có. Hãy xem xét một đoạn mã hóa (snippet of code) sau đây:
clear all
set more on
sysuse sp500
tabulate open
Một bản kết quả thu gọn trông như sau:
Mỗi lần bạn nhấn một phím nào đó, Stata sẽ tiếp tục cho hiện kết quả cho đến
khi nó chạy hết tất cả các kết quả (mất thời gian và bực bội vô cùng). Như bạn
có thể đoán, phần cứ lặp đi lặp lại khiến bạn không thể nào nhập bất kỳ lệnh
nào khác cho đến khi Stata cho hiện tất cả các kết quả của lệnh tabulate này.
28
A5. Bỏ các biến có định dạng string (destringing variables)
Trước tiên ta thiết lập hai trường hợp của các quan sát bị thiếu (missing
observations), như đã thể hiện rõ trong bài báo: một là khi tồn tại quan sát ‘N/A’
(vì thế tạo ra một biến dạng string) và một là khi có một quan sát bị thiếu được
ký hiệu bằng số, ví dụ ‘999’. Chúng ta chỉ giữ ba quan sát cho đơn giản hóa vấn
đề. Phần giới thiệu ban đầu (preamble) về tạo ra các dữ liệu này được bỏ qua.
Bộ dữ liệu được tạo ra trông như thế này:
Trong trường hợp các quan sát N/A, bước đầu tiên là ta thay thế chúng bằng
các dấu chấm của Stata. Khi bạn làm thế, trước hết bạn cần chắc chắn rằng
bạn tôn trọng sự thật là biến var1 is một biến dạng string. Nói cách khác, các
dấu chấm phải được chèn trong các dấu ngoặc kép. Một khi điều này đã được
thực hiện, sau đó lệnh destring sẽ làm phần việc còn lại. Trong phần này, một
câu lệnh if được chèn vào để báo cho Stata rằng chúng ta chỉ muốn thay thế
các quan sát có N/A lúc ban đầu.
Kết quả do-file như sau:
29
A6. Định dạng lại dữ liệu (reshaping data)
Phần do-file sau đây phát họa quá trị định dạng lại bộ dữ liệu trong ví dụ được
minh họa ở mục 3.4.
A7. Macro cục bộ, câu lệnh và vòng lặp (local macros, statements và loops)
Khi càng quen thuộc với Stata, bạn càng nhận ra rằng mình càng đòi hỏi nhiều
hơn. Một khía cạnh rất quan trọng của việc quản lý dữ liệu là khả năng xem xét
dữ liệu có thỏa mãn các điều kiện nhất định hay không. Ví dụ, bạn có thể muốn
chạy một mô hình hồi quy chỉ với những quan sát khác không. Hoặc, bạn có
thể cần tạo tới 10 biến trễ của một biến chuỗi thời gian. Logic có điều kiện, thông
qua các lệnh if, foreach, và while sẽ giúp bạn làm được điều này. Đối với các
công việc đơn giản, điều này rất dễ thấy, nhưng bạn có thể nhanh chóng gặp
những trường hợp rất phức tạp.
Để sử dụng các lệnh này, khái niệm macro là cần thiết. Nói một cách đơn giản,
đó là cái gì đó lưu giữ giá trị (store values). Những giá trị này có thể là ‘chữ’,
con số hoặc thậm chí cả hai. Macros có thể là global (cho toàn bộ Stata) hoặc
30
là local (chỉ cho do-file). Ở đây tôi sẽ chỉ tập trung vào các local macro. Cú pháp
để định nghĩa một macro như sau:
Local <name> [=] <value>
ở đây <name> là tên mà bạn đặt cho macro và <value> sẽ là giá trị mà macro
sẽ nhận. Để sử dụng macro, bạn sẽ phải sử dụng các dấu ngoặc đơn (single
quotation marks). Các lệnh dưới đây minh họa một số ứng dụng của macro:
local x 1
display ‘x’
local y sp500
sysuse ‘y’
Trong trường hợp dòng cuối, điều này có hiệu lực như việc gõ lệnh sysuse
sp500.
Như đã được đề cập trước đây, macros thường được sử dụng để chạy các câu
lệnh có điều kiện. Một trong số các câu lệnh phổ biến nhất là if, thực hiện dưới
dạng sau:
if exp{
stata commands
}
Tóm lại, nếu một điều kiện nhất định thỏa mãn, thì Stata sẽ chạy đúng. Ngược
lại, nó sẽ không cho ra bất cứ điều gì. Cú pháp nói trên cũng nhằm vào câu hỏi:
Bạn thực sự có cần thiết phải viết câu lệnh if theo cách như trên không? Câu
trả lời là ‘không’, nhưng nó được xem như một thực hành tốt để bắt đầu một
dòng lệnh mới trước khi viết một câu lệnh và đặt bất kỳ lệnh nào xuất hiện bên
trong.
Một ví dụ về việc bộ dữ liệu sp500 có thể sử dụng như thế nào sau đây:
sysuse sp500
local model 1
31
if(‘model’==1) {
regress open close
}
Lưu ý rằng trong trường hợp này, tôi định nghĩa một local macro gọi là model
có giá trị là 1. Phần sau cho Stata biết: nếu macro gọi ‘model’ bằng 1, thì chạy
bất kỳ lệnh nào ở bên trong dấu ngoặc mốc (curly brackets).
Bạn cũng có thể lưu ý rằng ta sử dụng hai dấu bằng ==, thay vì sử dụng một
dấu bằng như thường lệ. Điều này là bởi vì các phép toán logic (logical
operations) trong Stata khác với các lệnh thông thường. Các phép toán thường
được sử dụng như ở Bảng A1.
Bảng A1: Các phép toán logic
Bảng A1 trình bày các ký hiệu logic trong Stata và ý nghĩa của chúng. Có quan
hệ gần gủi với câu lệnh if là các vòng lặp foreach và while. Vòng lặp foreach lặp
lại một lệnh cho một danh sách các biến đã được xác định (specified varlist).
Một ứng dụng của vòng lặp foreach là để tạo ra các giá trị biến trễ, và nhiều
ứng dụng khác nữa. Cú pháp đơn giản của một lệnh như thế như sau:
foreach lname in varlist{
commands referring to lname
}
32
Các vòng lặp như thế tùy thuộc nhiều vào các ‘counters (lệnh đối lập)’. Cụ thể,
câu lệnh ‘exp’ thường là một local macro của một loại nào đó đã được xác định
trước, ngay trước khi vòng lặp bắt đầu. Bên trong bản thân vòng lặp while, chúng
ta cũng cần một cách để ‘đi trước (advance)’ lệnh đối lập này để chúng ta không
mắc kẹt vào một vòng lặp không xác định (nếu lệnh đối lập không được đặt
trước, thì vòng lặp while sẽ không bao giờ kết thúc trong trường hợp như thế).
Đây là một ví dụ:
local i=1
while(‘i’<10){
stata commands
local i=’i’+1
}
Hơn nữa, bạn cũng có thể đan xen (nest) các vòng lặp và câu lệnh. Nói cách
khác, bạn cũng có thể đặt các vòng lặp bên trong các vòng lặp khác. Số lượng
logic yêu cầu cho điều này có thể khá rộng và có thể không thể kiểm soát,
nhưng các ứng dụng thực tế về các vòng lặp đan xen là khá nhiều.
Tài liệu tham khảo
Angrist, J. D. and Pischke, J. 2009, Mostly Harmless Econometrics, Princeton
University Press, Princeton, New Jersey.
Angrist, J. D. and Pischke, J. 2014, Mastering Metrics, Princeton University
Press, Princeton, New Jersey.
Creedy, J. 2001, ‘Starting research’, Australian Economic Review, vol. 34, pp.
116–24.
Hirschberg, J., Lu, L. and Lye, J. 2005, ‘Descriptive methods for cross-section
data’, Australian Economic Review, vol. 38, pp. 333–50.