在 Colab 上使用 GDINA¶
- 2026-03-13
- jw
[重要] 要先在 Edit/Notebook settings 中變更為 R.
用 apt 直接在 colab 雲端機器上安裝 r-cran-gdina 比用 r 安裝快。(但需要等待 apt 更新時間)
或者使用一般 r 的安裝套件方式。
install.package('GDINA')
In [ ]:
Copied!
system('sudo apt upgrade')
system('sudo apt install r-cran-gdina')
system('sudo apt upgrade')
system('sudo apt install r-cran-gdina')
- 載入 GDINA 套件。
- 使用範例 dat, 建立 Q-matrix.
In [ ]:
Copied!
library(GDINA)
dat <- sim10GDINA$simdat
Q <- matrix(c(1,0,0,
0,1,0,
0,0,1,
1,0,1,
0,1,1,
1,1,0,
0,0,1,
1,0,0,
1,1,1,
1,0,1),
10,3)
Q
library(GDINA)
dat <- sim10GDINA$simdat
Q <- matrix(c(1,0,0,
0,1,0,
0,0,1,
1,0,1,
0,1,1,
1,1,0,
0,0,1,
1,0,0,
1,1,1,
1,0,1),
10,3)
Q
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 0 | 1 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 1 |
執行 GDINA 模式估計。
In [ ]:
Copied!
est <- GDINA(dat = dat, Q = Q, model = "GDINA")
est <- GDINA(dat = dat, Q = Q, model = "GDINA")
Iter = 1 Max. abs. change = 0.38004 Deviance = 13295.93 Iter = 2 Max. abs. change = 0.06152 Deviance = 12263.41 Iter = 3 Max. abs. change = 0.03254 Deviance = 12192.94 Iter = 4 Max. abs. change = 0.02122 Deviance = 12166.79 Iter = 5 Max. abs. change = 0.01370 Deviance = 12154.64 Iter = 6 Max. abs. change = 0.00948 Deviance = 12148.36 Iter = 7 Max. abs. change = 0.00672 Deviance = 12144.88 Iter = 8 Max. abs. change = 0.00526 Deviance = 12142.82 Iter = 9 Max. abs. change = 0.00418 Deviance = 12141.54 Iter = 10 Max. abs. change = 0.00345 Deviance = 12140.68 Iter = 11 Max. abs. change = 0.00294 Deviance = 12140.08 Iter = 12 Max. abs. change = 0.00255 Deviance = 12139.63 Iter = 13 Max. abs. change = 0.00225 Deviance = 12139.29 Iter = 14 Max. abs. change = 0.00204 Deviance = 12139.01 Iter = 15 Max. abs. change = 0.00191 Deviance = 12138.78 Iter = 16 Max. abs. change = 0.00179 Deviance = 12138.59 Iter = 17 Max. abs. change = 0.00168 Deviance = 12138.43 Iter = 18 Max. abs. change = 0.00157 Deviance = 12138.29 Iter = 19 Max. abs. change = 0.00146 Deviance = 12138.17 Iter = 20 Max. abs. change = 0.00137 Deviance = 12138.06 Iter = 21 Max. abs. change = 0.00128 Deviance = 12137.97 Iter = 22 Max. abs. change = 0.00120 Deviance = 12137.88 Iter = 23 Max. abs. change = 0.00113 Deviance = 12137.81 Iter = 24 Max. abs. change = 0.00106 Deviance = 12137.74 Iter = 25 Max. abs. change = 0.00099 Deviance = 12137.68 Iter = 26 Max. abs. change = 0.00094 Deviance = 12137.63 Iter = 27 Max. abs. change = 0.00088 Deviance = 12137.58 Iter = 28 Max. abs. change = 0.00083 Deviance = 12137.54 Iter = 29 Max. abs. change = 0.00079 Deviance = 12137.50 Iter = 30 Max. abs. change = 0.00074 Deviance = 12137.46 Iter = 31 Max. abs. change = 0.00070 Deviance = 12137.43 Iter = 32 Max. abs. change = 0.00067 Deviance = 12137.40 Iter = 33 Max. abs. change = 0.00063 Deviance = 12137.38 Iter = 34 Max. abs. change = 0.00060 Deviance = 12137.36 Iter = 35 Max. abs. change = 0.00057 Deviance = 12137.34 Iter = 36 Max. abs. change = 0.00054 Deviance = 12137.32 Iter = 37 Max. abs. change = 0.00052 Deviance = 12137.30 Iter = 38 Max. abs. change = 0.00049 Deviance = 12137.28 Iter = 39 Max. abs. change = 0.00047 Deviance = 12137.27 Iter = 40 Max. abs. change = 0.00045 Deviance = 12137.26 Iter = 41 Max. abs. change = 0.00043 Deviance = 12137.25 Iter = 42 Max. abs. change = 0.00041 Deviance = 12137.24 Iter = 43 Max. abs. change = 0.00039 Deviance = 12137.23 Iter = 44 Max. abs. change = 0.00037 Deviance = 12137.22 Iter = 45 Max. abs. change = 0.00036 Deviance = 12137.21 Iter = 46 Max. abs. change = 0.00034 Deviance = 12137.21 Iter = 47 Max. abs. change = 0.00032 Deviance = 12137.20 Iter = 48 Max. abs. change = 0.00031 Deviance = 12137.20 Iter = 49 Max. abs. change = 0.00030 Deviance = 12137.19 Iter = 50 Max. abs. change = 0.00028 Deviance = 12137.19 Iter = 51 Max. abs. change = 0.00027 Deviance = 12137.18 Iter = 52 Max. abs. change = 0.00026 Deviance = 12137.18 Iter = 53 Max. abs. change = 0.00025 Deviance = 12137.17 Iter = 54 Max. abs. change = 0.00024 Deviance = 12137.17 Iter = 55 Max. abs. change = 0.00023 Deviance = 12137.17 Iter = 56 Max. abs. change = 0.00022 Deviance = 12137.17 Iter = 57 Max. abs. change = 0.00021 Deviance = 12137.16 Iter = 58 Max. abs. change = 0.00020 Deviance = 12137.16 Iter = 59 Max. abs. change = 0.00019 Deviance = 12137.16 Iter = 60 Max. abs. change = 0.00018 Deviance = 12137.16 Iter = 61 Max. abs. change = 0.00017 Deviance = 12137.16 Iter = 62 Max. abs. change = 0.00017 Deviance = 12137.16 Iter = 63 Max. abs. change = 0.00016 Deviance = 12137.16 Iter = 64 Max. abs. change = 0.00015 Deviance = 12137.15 Iter = 65 Max. abs. change = 0.00015 Deviance = 12137.15 Iter = 66 Max. abs. change = 0.00014 Deviance = 12137.15 Iter = 67 Max. abs. change = 0.00013 Deviance = 12137.15 Iter = 68 Max. abs. change = 0.00013 Deviance = 12137.15 Iter = 69 Max. abs. change = 0.00012 Deviance = 12137.15 Iter = 70 Max. abs. change = 0.00012 Deviance = 12137.15 Iter = 71 Max. abs. change = 0.00011 Deviance = 12137.15 Iter = 72 Max. abs. change = 0.00011 Deviance = 12137.15 Iter = 73 Max. abs. change = 0.00010 Deviance = 12137.15 Iter = 74 Max. abs. change = 0.00010 Deviance = 12137.15
In [ ]:
Copied!
summary(est)
summary(est)
Test Fit Statistics Loglik = -6068.57 AIC = 12219.15 | penalty [2 * p] = 82.00 AICc = 12140.74 | penalty [2 * p * (p+1) / (n - p - 1)] = 324.22 BIC = 12420.36 | penalty [log(n) * p] = 283.22 CAIC = 12461.36 | penalty [(log(n) + 1) * p] = 324.22 SABIC = 12290.15 | penalty [log((n + 2)/24) * p] = 153.00 No. of parameters (p) = 41 No. of estimated item parameters = 34 No. of fixed item parameters = 0 No. of distribution parameters = 7 Attribute Prevalence Level0 Level1 A1 0.4148 0.5852 A2 0.4735 0.5265 A3 0.4920 0.5080
In [ ]:
Copied!
coef(est)
coef(est)
- $`Item 1`
- P(0)
- 0.1582
- P(1)
- 0.8278
- $`Item 2`
- P(0)
- 0.1216
- P(1)
- 0.7664
- $`Item 3`
- P(0)
- 0.1109
- P(1)
- 0.9103
- $`Item 4`
- P(00)
- 0.1319
- P(10)
- 0.2597
- P(01)
- 0.4882
- P(11)
- 0.8374
- $`Item 5`
- P(00)
- 0.1136
- P(10)
- 0.0654
- P(01)
- 0.0675
- P(11)
- 0.798
- $`Item 6`
- P(00)
- 0.1736
- P(10)
- 0.8834
- P(01)
- 0.9331
- P(11)
- 0.9069
- $`Item 7`
- P(0)
- 0.2597
- P(1)
- 0.591
- $`Item 8`
- P(0)
- 0.1297
- P(1)
- 0.5643
- $`Item 9`
- P(000)
- 0.1384
- P(100)
- 0.0511
- P(010)
- 0.5329
- P(001)
- 0.3725
- P(110)
- 0.3092
- P(101)
- 0.4261
- P(011)
- 0.7841
- P(111)
- 0.8126
- $`Item 10`
- P(00)
- 0.1716
- P(10)
- 0.3439
- P(01)
- 0.5148
- P(11)
- 0.7011
畫出每個題目在不同屬性上的成功機率。
In [ ]:
Copied!
plot(est, withSE = TRUE)
plot(est, withSE = TRUE)
畫出第 1, 20, 50 個人在三個屬性上的精熟程度
In [ ]:
Copied!
#plot mastery probability for individuals 1, 20 and 50
plot(est, what = "mp", person = c(1, 20, 50))
#plot mastery probability for individuals 1, 20 and 50
plot(est, what = "mp", person = c(1, 20, 50))
Warning message: “`aes_string()` was deprecated in ggplot2 3.0.0. ℹ Please use tidy evaluation idioms with `aes()`. ℹ See also `vignette("ggplot2-in-packages")` for more information. ℹ The deprecated feature was likely used in the GDINA package. Please report the issue at <https://github.com/Wenchao-Ma/GDINA/issues>.”
分類準確率
In [ ]:
Copied!
CA(est)
CA(est)
Classification Accuracy
Test level accuracy = 0.738
Pattern level accuracy:
000 100 010 001 110 101 011 111
0.7787 0.6716 0.6358 0.7300 0.7022 0.7574 0.7843 0.7875
Attribute level accuracy:
A1 A2 A3
0.8822 0.8831 0.9252
Q-matrix 驗證. 有星號表示 Q-matrix 建議修改的位置。
In [ ]:
Copied!
Qv <- Qval(est)
Qv
Qv <- Qval(est)
Qv
Q-matrix validation based on PVAF method Suggested Q-matrix: A1 A2 A3 1 1 0 0 2 0 1 0 3 0 0 1 4 1 0 1 5 0 1 1 6 1 1 0 7 1* 0 1 8 1 1* 0 9 0* 1 1 10 1 1* 1 Note: * denotes a modified element.
In [ ]:
Copied!
sessionInfo()
sessionInfo()
R version 4.5.2 (2025-10-31) Platform: x86_64-pc-linux-gnu Running under: Ubuntu 22.04.5 LTS Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C time zone: Etc/UTC tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] GDINA_2.9.12 lavaan_0.6-10 loaded via a namespace (and not attached): [1] future_1.69.0 listenv_0.10.1 digest_0.6.39 [4] magrittr_2.0.4 RColorBrewer_1.1-3 evaluate_1.0.5 [7] grid_4.5.2 pbdZMQ_0.3-14 iterators_1.0.14 [10] fastmap_1.2.0 foreach_1.5.2 jsonlite_2.0.0 [13] promises_1.5.0 scales_1.4.0 truncnorm_1.0-9 [16] pbivnorm_0.6.0 codetools_0.2-20 numDeriv_2016.8-1.1 [19] textshaping_1.0.5 shinydashboard_0.7.3 mnormt_2.1.2 [22] cli_3.6.5 shiny_1.13.0 rlang_1.1.7 [25] crayon_1.5.3 parallelly_1.46.1 future.apply_1.20.2 [28] withr_3.0.2 base64enc_0.1-6 repr_1.1.7 [31] otel_0.2.0 tools_4.5.2 parallel_4.5.2 [34] uuid_1.2-2 nloptr_2.2.1 ggplot2_4.0.2 [37] httpuv_1.6.16 globals_0.19.0 IRdisplay_1.1 [40] vctrs_0.7.1 R6_2.6.1 mime_0.13 [43] stats4_4.5.2 lifecycle_1.0.5 MASS_7.3-65 [46] Rsolnp_2.0.1 ragg_1.5.1 pillar_1.11.1 [49] later_1.4.8 gtable_0.3.6 glue_1.8.0 [52] Rcpp_1.1.1 systemfonts_1.3.2 IRkernel_1.3.2 [55] farver_2.1.2 xtable_1.8-4 htmltools_0.5.9 [58] labeling_0.4.3 compiler_4.5.2 S7_0.2.1 [61] alabama_2025.1.0