32
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

Nghiên cứu thực nghiệm: Làm quen i Stata 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

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.

25

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.

27

A4. Kết quả do-file

Dưới đây là kết quả từ ví dụ do-file đã được thảo luận trong mục 3.3.

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.