From f6b79a0dbf66f8a7c15d9400aabe05293c58addb Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:22:15 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20fscores()=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B3=84=EC=82=B0=20=EC=A0=9C=EA=B1=B0=EB=A5=BC=20?= =?UTF-8?q?=ED=86=B5=ED=95=9C=20=EC=84=B1=EB=8A=A5=20=EC=B5=9C=EC=A0=81?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .Rbuildignore | 2 ++ .jules/bolt.md | 3 +++ R/aFIPC.R | 16 ++++++++-------- 3 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 .jules/bolt.md diff --git a/.Rbuildignore b/.Rbuildignore index 1c85620..17bd785 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -15,3 +15,5 @@ ^registered_agents\.json$ ^task_agent_mapping\.json$ ^\.gitleaks\.toml$ +^\.jules$ +^\.jules/.*$ diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000..5df8872 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2024-10-24 - [Avoid Redundant MAP Estimations in aFIPC.R] +**Learning:** The `fscores()` function for MAP estimation is an expensive operation in `mirt`. In `R/aFIPC.R`, these were being calculated twice consecutively: once inline for `mirt::expected.test()` and once immediately after for assignment to output variables. +**Action:** When calculating expected scores using MAP thetas, always pre-calculate the thetas and reuse the variables rather than calling `fscores()` multiple times. diff --git a/R/aFIPC.R b/R/aFIPC.R index b6a9e6c..436f7cb 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -987,28 +987,28 @@ autoFIPC <- # stop('Estimation failed. Please check test quality.') # } + # calculate theta + ThetaOldform <- fscores(oldFormModel, method = 'MAP') + ThetaLinkedform <- fscores(LinkedModel, method = 'MAP') + ThetaNewform <- fscores(newFormModel, method = 'MAP') + # calculate expected score ExpectedScoreOldform <- mirt::expected.test( x = oldFormModel, - Theta = fscores(oldFormModel, method = 'MAP') + Theta = ThetaOldform ) ExpectedScoreLinkedform <- mirt::expected.test( x = LinkedModel, - Theta = fscores(LinkedModel, method = 'MAP') + Theta = ThetaLinkedform ) ExpectedScoreNewform <- mirt::expected.test( x = newFormModel, - Theta = fscores(newFormModel, method = 'MAP') + Theta = ThetaNewform ) - # calculate theta - ThetaOldform <- fscores(oldFormModel, method = 'MAP') - ThetaLinkedform <- fscores(LinkedModel, method = 'MAP') - ThetaNewform <- fscores(newFormModel, method = 'MAP') - # save results as object modelReturn <- new.env() modelReturn$oldFormModel <- oldFormModel