Trong báo cáo này, mình sẽ chia sẻ quy trình sử dụng CTT để phân tích kết quả thi của HS.
Code của chương trình không được show vì lí do bảo mật.
Lý thuyết trắc nghiệm cổ điển (Classical Test Theory - CTT) được xem là những thành tựu của khoa học đo lường và đánh giá tính đến những năm 70 của thế kỷ XX. Lý thuyết dựa vào công thức:
\[ X = T + E \]
trong đó:
T (true score) là số đo năng lực thực sự của thí sinh thể hiện qua kỹ năng đang được đo lường
X (observed score) là điểm thực tế (điểm thô)
E (error) là sai số.
Với CTT, độ khó của câu hỏi được xác định là tỷ lệ thí sinh trả lời đúng so với tổng số thí sinh tham gia trả lời câu hỏi đó.
\[ p = \frac{n_r}{n_t} \]
trong đó:
Số đo tham khảo:
Độ phân biệt thể hiện cho khả năng một câu trắc nghiệm phân biệt được năng lực của nhóm TS (giỏi, trung bình, kém, ...), dựa trên phản ứng của các nhóm TS với CH.
Có 2 cách tính độ phân biệt:
Cách 1: Tính đơn giản, có thể tính bằng tay hoặc từ bảng excel
Dựa vào tổng điểm thô, xếp hạng học sinh theo điểm từ cao xuống thấp, 27% top đầu là nhóm giỏi, 27% điểm thấp nhất là nhóm kém.
Độ phân biệt của mỗi câu là:
\[ D=\frac{C-T}{S} \]
Trong đó:
Giá trị tham khảo:
| Độ phân biệt | Giải thích |
|---|---|
| >0.4 | Tốt |
| 0.3 ~ 0.39 | Khá tốt |
| 0.2 ~ 0.29 | Tạm được nhưng cần chỉnh sửa |
| <0.19 | Kém, cần loại bỏ hoặc chỉnh sửa |
Cách 2: Tính hệ số tương quan Point-biserial correlation coefficient
Tính hệ số tương quan \(r_{pb}\) của 1 câu hỏi là trường hợp đặc biệt của hệ số tương quan, chỉ áp dúng với dạng CH trắc nghiệm chỉ đúng Đúng và Sai, tương đương 1 và 0 điểm. Chúng ta sẽ chia TS thành 2 nhóm, nhóm 1 là những TS trả lời đúng - điểm 1, nhóm 2 là những TS trả lời sai - điểm 0. Công thức tính sẽ là:
Trong đó:
Giá trị tham khảo: Độ phân biệt \(r_{pb}\) chấp nhận được cần > 0.2
Độ tin cậy đề cập đến mức độ mà kết quả có thể nhân rộng. Ví dụ, nếu tiến hành một thí nghiệm lặp lại thì có cho kết quả tương tự như lúc trước không. Khi đề cập đến việc tổ chức kiểm tra, người ta đặt câu hỏi “điểm kiểm tra của học sinh sẽ thay đổi bao nhiêu nếu học sinh đó làm nhiều bài kiểm tra tương tự?” Các phép đo độ tin cậy thường được thể hiện dưới dạng chỉ số từ 0 đến 1, trong đó chỉ số 1 cho thấy thử nghiệm lặp lại sẽ có kết quả giống hệt nhau. Ngược lại, độ tin cậy bằng 0 cho thấy điểm kiểm tra của học sinh từ lần tổ chức kiểm tra này sang lần tổ chức kiểm tra khác sẽ không có bất kỳ mối quan hệ nào. Rõ ràng, độ tin cậy cao hơn được mong muốn hơn vì nó cho thấy rằng điểm số của học sinh trong bài kiểm tra đáng “tin cậy”.
Về mặt hình thức, độ tin cậy của bài kiểm tra được định nghĩa là tỷ lệ phương sai (Var - variance) của điểm số thực (T) so với phương sai của điểm số quan sát được (X) trên tổng số học sinh. là:
\[ \rho_{XX'}=\frac{Var(T)}{Var(X)} = \frac{Var(T)}{Var(T)+Var(E)} \]
Khi độ tin cậy của bài test cao, chúng ta sẽ kì vọng độ tương quan giữa điểm thực (T) và điểm nhận được (X) cũng cao.
Một số cách để tính độ tin cậy (reliability Coefficient) của ĐTN đó là:
A. Test-retest (Trắc nghiệm – trắc nghiệm lại): cùng một ĐTN cho một nhóm thí sinh (TS) làm 2 lần rồi tính tương quan giữa 2 bộ điểm. Nếu số lượng TS lớn, từ 1 bộ kết quả, ta có thể tách thành 2 bộ một cách random, như bộ TS chẵn và bộ TS lẻ, sau đó phân tích tương quan giữa các chỉ số của ĐTN từ 2 bộ TS.
B. Inter-rated: TS là 1 ĐTN, nhưng nhiều người chấm, tính độ tương quan giữa các kết quả.
C.1. Parallel-forms (ĐTN tương đương): cùng 1 nhóm TS, làm 2 ĐTN tương đương, rồi tính tương quan giữa 2 bộ điểm. Thay vì để 1 nhóm làm 2 ĐTN tương đương, ta có thể tách đôi ĐTN (như 1 đề có các câu chẵn, 1 đề có các câu lẻ), rồi phân tích độ tương quan giữa các chỉ số của đề chẵn và đề lẻ để ra được độ đồng nhất nội tại (internal consistency) của ĐTN. Tuy nhiên cách này có thể không đánh giá chính xác được độ tin cậy của ĐTN với độ dài ban đầu.
C.2. Định lượng internal consistency với Cronbach’s Alpha: vì có rất nhiều cách để chia đôi ĐTN (chẵn - lẻ là 1 cách), ta có thể tăng độ chính xác của giá trị internal consistency bằng cách giá trị này với tất cả các cách rồi lấy giá trị trung bình. Hệ số Cronbach’s Alpha có thể ước lượng tốt giá trị trung bình này.
\[ \alpha = \frac{I}{I-1} \frac{Var(X) - \sum_{i=1}^{I}Var(item\ scores\ of\ item\ i)}{Var(X)} \]
α = Cronbach’s Alpha
I = Number of items
Var(X) = Variance của điểm của HS
Giá trị tham khảo:
Ta có thể hình dung \(\sum_{i=1}^{I}Var(item\ scores\ of\ item\ i)\) như là \(Var(E)\), khi đó, hệ số Alpha trông sẽ giống như định nghĩa của độ tin cậy. Và \(\rho_{XX'} \ge \alpha\).
\[ \alpha \cong \frac{I}{I-1} \frac{Var(X) - Var(E)}{Var(X)} = \frac{I}{I-1} \frac{Var(T)}{Var(X)} \]
Với đề trắc nghiệm dạng điểm nhị phân (0 và 1) ta có thể dùng Kuder-Richardson formula (KR-20), một trường hợp đặc biệt của hệ số Alpha.
SEM cung cấp thông tin về ước tính về error, từ đó có căn cứ đưa ra khoảng giá trị mà điểm thực (T) có thể rơi vào.
Trong statistics, chúng ta có standard deviation (SD) (\(=\sqrt{Variance}=\sqrt{Var(X)}\) ) để ước tính được phân bố của data. Tuy nhiên trong nghiên cứu về psychometrics (trắc học tâm lí), chúng ta quan tâm đến cả độ tin cậy của phép đo. Công thức của SEM là:
\[ SEM = \sqrt{Var(E)} = \sqrt{(1-\rho_{XX'}) Var(X)} \]
Sau khi biết được SEM, ta có thể ước lượng được khoảng điểm thực của TS dựa vào công thức:
\[ T \in (X_j - SEM.Z, X_j + SEM.Z) \]
trong đó:
Cần đảm bảo file import đã được làm sạch với định dạng như file import trong tài liệu này, một số điểm chính của file đã được làm sạch đó là:
Điểm ở dạng nhị phân, TS làm đúng - 1, làm sai - 0
Không có ô trống (missing value): ở bước làm sạch data cần thay các ô missing value bằng điểm 0 hoặc loại bỏ kết quả của TS (TS có vấn đề)
## 'data.frame': 3850 obs. of 30 variables:
## $ No.1 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.2 : int 1 1 1 1 1 1 1 1 0 1 ...
## $ No.3 : int 0 1 1 1 1 1 1 1 1 1 ...
## $ No.4 : int 1 1 1 1 1 1 1 0 1 1 ...
## $ No.5 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.6 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.7 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.8 : int 1 1 0 1 1 1 1 1 1 1 ...
## $ No.9 : int 1 0 0 0 1 1 1 1 0 1 ...
## $ No.10: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.11: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.12: int 0 0 0 1 0 0 1 1 0 0 ...
## $ No.13: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.14: int 0 0 1 0 1 1 1 1 1 0 ...
## $ No.15: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.16: int 0 0 1 1 1 1 1 0 1 1 ...
## $ No.17: int 1 1 1 0 1 1 1 1 1 0 ...
## $ No.18: int 0 0 0 0 1 1 0 1 1 1 ...
## $ No.19: int 0 0 0 0 0 0 0 1 0 0 ...
## $ No.20: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.21: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.22: int 0 0 0 0 0 0 0 1 0 1 ...
## $ No.23: int 1 0 1 0 1 0 0 0 0 0 ...
## $ No.24: int 1 1 1 1 1 1 1 1 1 1 ...
## $ No.25: int 0 1 0 0 0 1 1 1 1 1 ...
## $ No.26: int 1 1 0 0 0 0 0 0 0 0 ...
## $ No.27: int 1 1 0 1 1 1 1 1 1 1 ...
## $ No.28: int 1 0 0 0 0 1 1 1 0 1 ...
## $ No.29: int 1 1 1 1 1 0 1 1 1 1 ...
## $ No.30: int 1 1 1 1 1 1 1 1 0 1 ...
## itemName itemMean pBis bis alphaIfDeleted easy lowPBis
## 1 No.1 0.5761039 0.339519102 0.428384610 0.7541157
## 2 No.2 0.5062338 0.320857658 0.402153281 0.7553227
## 3 No.3 0.8270130 0.293236047 0.433444615 0.7570750 X
## 4 No.4 0.9303896 0.264835941 0.504126788 0.7593330 X
## 5 No.5 0.7054545 0.442972575 0.585643982 0.7480289
## 6 No.6 0.9425974 0.329805456 0.666772458 0.7577043 X
## 7 No.7 0.8914286 0.347034371 0.579578297 0.7554900 X
## 8 No.8 0.7862338 0.387614234 0.545673635 0.7519416 X
## 9 No.9 0.3223377 0.283587342 0.369506206 0.7575377
## 10 No.10 0.8389610 0.364441695 0.548232800 0.7537643 X
## 11 No.11 0.9096104 0.354994676 0.624819115 0.7556692 X
## 12 No.12 0.2693506 0.348015479 0.467491005 0.7537800
## 13 No.13 0.9275325 0.347384234 0.653165239 0.7565447 X
## 14 No.14 0.1228571 -0.019115146 -0.030853932 0.7702664 X
## 15 No.15 0.9171429 0.369710358 0.667633792 0.7553907 X
## 16 No.16 0.5501299 0.236593428 0.297382670 0.7606859
## 17 No.17 0.7296104 0.370130402 0.496843295 0.7524983
## 18 No.18 0.2529870 0.170196540 0.231374942 0.7637005 X
## 19 No.19 0.2093506 0.224214382 0.317093684 0.7605379
## 20 No.20 0.8714286 0.301556203 0.480816682 0.7570372 X
## 21 No.21 0.9277922 0.318499606 0.599511974 0.7575111 X
## 22 No.22 0.2220779 0.177088132 0.247254778 0.7630648 X
## 23 No.23 0.1784416 -0.038332941 -0.056240701 0.7728632 X
## 24 No.24 0.6077922 0.396904809 0.504270206 0.7504609
## 25 No.25 0.3522078 0.262452156 0.337682885 0.7588762
## 26 No.26 0.2345455 0.002645236 0.003651221 0.7722927 X
## 27 No.27 0.7625974 0.439269812 0.604817357 0.7488330 X
## 28 No.28 0.3838961 0.047955860 0.061065586 0.7719477 X
## 29 No.29 0.4748052 0.373487108 0.468436493 0.7519029
## 30 No.30 0.4823377 0.358500623 0.449474054 0.7528796
Alpha:
## [1] 0.7642333
SEM:
## [1] 2.118703
Tính khoảng điểm thực với khoảng tin cậy (confidence interval) là 95%
## st_raw_score st_T_low st_T_high
## [1,] 22 17.84742 26.15258
## [2,] 21 16.84742 25.15258
## [3,] 20 15.84742 24.15258
## [4,] 20 15.84742 24.15258
## [5,] 24 19.84742 28.15258
## [6,] 24 19.84742 28.15258
Library của CTT có hỗ trợ hàm quy đổi điểm sang thang mới với giá trị trung bình và standard deviation mới.
## List of 2
## $ new.scores: num [1:3850] 797 749 699 699 901 ...
## $ p.scores : num [1:3850] 0.838 0.772 0.69 0.69 0.934 ...
Tóm tắt một vài chỉ số của hệ điểm mới
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -32.72 460.74 604.69 599.98 748.88 1294.10
Vì không có package nào của R dùng để phân tích kết quả thi khác điểm nhị phân, tức là có nhiều thang điểm, nên ta sẽ cần tự thiết lập các chỉ số CTT để phân tích kết quả.
## 'data.frame': 29 obs. of 5 variables:
## $ item_1: num 1 2 0 2 0 1 2 2 1 2 ...
## $ item_2: num 2 1 3 2 1 1 2 1 0 1 ...
## $ item_3: int 0 1 4 1 2 1 1 4 1 1 ...
## $ item_4: num 3 1 1 1 3 2 1 1 1 2 ...
## $ item_5: int 1 1 3 2 1 1 1 1 1 2 ...
## item_1 item_2 item_3 item_4 item_5
## 0.5396552 0.4068966 0.4310345 0.4793103 0.5057471
Tính điểm HS
## [1] 7.0 6.0 11.0 8.0 7.0 6.0 7.0 9.0 4.0 8.0 10.0 4.2 7.0 10.0 8.7
## [16] 9.0 8.0 6.2 3.7 8.0 5.0 5.7 10.7 5.0 9.0 6.0 3.7 4.5 5.0
Tính độ tương quan giữa kết quả trả lời mỗi CH với điểm HS
## [,1]
## item_1 0.08169329
## item_2 0.53016660
## item_3 0.65063469
## item_4 0.27450032
## item_5 0.65813853
Alpha:
##
## Cronbach's alpha for the 'st_data_poly' data-set
##
## Items: 5
## Sample units: 29
## alpha: 0.038
SEM:
## [1] 2.103403
Khoảng điểm thực:
## st_T_low_poly student_score st_T_high_poly
## [1,] 2.847418 7 11.15258
## [2,] 1.847418 6 10.15258
## [3,] 6.847418 11 15.15258
## [4,] 3.847418 8 12.15258
## [5,] 2.847418 7 11.15258
## [6,] 1.847418 6 10.15258