## Loading required package: CDM
## Loading required package: mvtnorm
## **********************************
## ** CDM 8.2-6 (2022-08-25 15:43:23)       
## ** Cognitive Diagnostic Models  **
## **********************************
## * TAM 4.2-21 (2024-02-19 18:52:08)
## Loading required package: stats4
## Loading required package: lattice
## Loading required package: MASS
## Loading required package: msm
## Loading required package: polycor
## 
## Attaching package: 'ltm'
## The following object is masked from 'package:mirt':
## 
##     Science
# 載入測驗資料
data <- read_xlsx("IQ.xlsx")

# 查看資料的結構與前幾行
head(data)
## # A tibble: 6 × 22
##      ID    IQ Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10
##   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
## 1     1   112     0     1     1     0     1     1     1     0     1      0
## 2     2    90     1     1     0     0     1     1     1     0     0      0
## 3     3   142     1     1     1     1     1     1     1     1     1      1
## 4     4    86     1     1     0     1     1     0     0     1     1      0
## 5     5    89     1     1     0     1     0     1     0     0     0      1
## 6     6    86     1     1     1     0     0     1     0     0     1      0
## # ℹ 10 more variables: Item11 <dbl>, Item12 <dbl>, Item13 <dbl>, Item14 <dbl>,
## #   Item15 <dbl>, Item16 <dbl>, Item17 <dbl>, Item18 <dbl>, Item19 <dbl>,
## #   Item20 <dbl>
# 提取測驗作答部分 (假設題目欄位為第 3 到第 22 列)
data_irt <- data[, 3:22]
# 使用 Rasch 模型進行能力估計
data_Mirt <- mirt(data_irt,
                  1,
                  itemtype = 'Rasch')
## Iteration: 1, Log-Lik: -3295.881, Max-Change: 0.03525Iteration: 2, Log-Lik: -3295.669, Max-Change: 0.01993Iteration: 3, Log-Lik: -3295.614, Max-Change: 0.01067Iteration: 4, Log-Lik: -3295.597, Max-Change: 0.00592Iteration: 5, Log-Lik: -3295.592, Max-Change: 0.00319Iteration: 6, Log-Lik: -3295.590, Max-Change: 0.00178Iteration: 7, Log-Lik: -3295.589, Max-Change: 0.00111Iteration: 8, Log-Lik: -3295.589, Max-Change: 0.00057Iteration: 9, Log-Lik: -3295.589, Max-Change: 0.00035Iteration: 10, Log-Lik: -3295.588, Max-Change: 0.00029Iteration: 11, Log-Lik: -3295.588, Max-Change: 0.00011Iteration: 12, Log-Lik: -3295.588, Max-Change: 0.00005
# 模型摘要
summary(data_Mirt)
##           F1    h2
## Item1  0.491 0.241
## Item2  0.491 0.241
## Item3  0.491 0.241
## Item4  0.491 0.241
## Item5  0.491 0.241
## Item6  0.491 0.241
## Item7  0.491 0.241
## Item8  0.491 0.241
## Item9  0.491 0.241
## Item10 0.491 0.241
## Item11 0.491 0.241
## Item12 0.491 0.241
## Item13 0.491 0.241
## Item14 0.491 0.241
## Item15 0.491 0.241
## Item16 0.491 0.241
## Item17 0.491 0.241
## Item18 0.491 0.241
## Item19 0.491 0.241
## Item20 0.491 0.241
## 
## SS loadings:  4.824 
## Proportion Var:  0.241 
## 
## Factor correlations: 
## 
##    F1
## F1  1
# 進行每個題目的擬合檢查與繪圖
for (i in 1:length(data_irt)) {
  # 針對 Rasch 模型計算題目擬合指標,並繪製題目特徵曲線
  itemplot <- itemfit(data_Mirt,
                      group.bins = 15,        
                      # 分組的數量(將數據分成15組)
                      empirical.plot = i,     
                      # 繪製第 i 題的經驗曲線
                      empirical.CI = 0.95,    
                      # 設置95%置信區間
                      method = 'ML')         
  #使用最大似然法估計
  print(itemplot) # 輸出結果
}

# 提取潛在能力估計分數 (latent trait scores)
latent_IQ <- as.vector(fscores(data_Mirt)) # 提取每個受試者的能力分數

# 重新計算總分 (測驗作答的總得分)
sum_score <- apply(data_irt, 1, sum)

# 將結果整合成新的資料框
IQ_measures <- data.frame(ID = data[, 1], # 假設第一欄為受試者 ID
                          IQ = data[, 2], # 假設第二欄為 IQ 分數
                          sum_score = sum_score,
                          latent_IQ = latent_IQ)

# 查看整合後的資料
head(IQ_measures)
##   ID  IQ sum_score  latent_IQ
## 1  1 112        14  0.1663636
## 2  2  90        10 -0.6508563
## 3  3 142        19  1.4905519
## 4  4  86         9 -0.8450976
## 5  5  89         9 -0.8450976
## 6  6  86        10 -0.6508563
# IQ 與潛在能力分數的散佈圖
plot(IQ_measures$IQ, IQ_measures$latent_IQ,
     xlab = "IQ",
     ylab = "Latent Trait (Ability)",
     main = "Scatterplot: IQ vs Latent Ability",
     col = "blue", pch = 19)

# IQ 與總得分的散佈圖
plot(IQ_measures$IQ, IQ_measures$sum_score,
     xlab = "IQ",
     ylab = "Sum Score",
     main = "Scatterplot: IQ vs Sum Score",
     col = "red", pch = 19)

# 計算相關係數
cor_IQ_Latent <- cor(IQ_measures$IQ, IQ_measures$latent_IQ)
cat("Correlation between IQ and Latent Ability:", cor_IQ_Latent, "\n")
## Correlation between IQ and Latent Ability: 0.8726615
cor_IQ_SumScore <- cor(IQ_measures$IQ, IQ_measures$sum_score)
cat("Correlation between IQ and Sum Score:", cor_IQ_SumScore, "\n")
## Correlation between IQ and Sum Score: 0.8661066
# 使用 IQ 預測潛在能力分數
lm_IQ_Latent <- lm(latent_IQ ~ IQ, data = IQ_measures)
summary(lm_IQ_Latent)
## 
## Call:
## lm(formula = latent_IQ ~ IQ, data = IQ_measures)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.46208 -0.27398  0.01064  0.25525  1.16320 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.849034   0.158932  -30.51   <2e-16 ***
## IQ           0.048687   0.001578   30.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4073 on 298 degrees of freedom
## Multiple R-squared:  0.7615, Adjusted R-squared:  0.7607 
## F-statistic: 951.7 on 1 and 298 DF,  p-value: < 2.2e-16
# 可視化回歸線
plot(IQ_measures$IQ, IQ_measures$latent_IQ,
     xlab = "IQ",
     ylab = "Latent Trait (Ability)",
     main = "Regression: Latent Ability vs IQ",
     col = "blue", pch = 19)
abline(lm_IQ_Latent, col = "red", lwd = 2)

# 使用 IQ 預測總得分
lm_IQ_sum <- lm(sum_score ~ IQ, data = IQ_measures)
summary(lm_IQ_sum)
## 
## Call:
## lm(formula = sum_score ~ IQ, data = IQ_measures)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.1535 -1.2134  0.1599  1.2274  5.2843 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -8.860013   0.736941  -12.02   <2e-16 ***
## IQ           0.218890   0.007318   29.91   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.889 on 298 degrees of freedom
## Multiple R-squared:  0.7501, Adjusted R-squared:  0.7493 
## F-statistic: 894.7 on 1 and 298 DF,  p-value: < 2.2e-16
# 可視化回歸線
plot(IQ_measures$IQ, IQ_measures$sum_score,
     xlab = "IQ",
     ylab = "sum_score",
     main = "Regression: sum_score vs IQ",
     col = "red", pch = 19)
abline(lm_IQ_sum, col = "blue", lwd = 2)

# 潛在能力分數的分佈
hist(IQ_measures$latent_IQ,
     breaks = 20,
     col = "skyblue",
     main = "Distribution of Latent Trait (Ability)",
     xlab = "Latent Trait (Ability)")

# IQ 分數的分佈
hist(IQ_measures$IQ,
     breaks = 20,
     col = "pink",
     main = "Distribution of IQ Scores",
     xlab = "IQ")

# 提取 Rasch 模型的題目參數
item_params_mirt <- coef(data_Mirt, IRTpars = TRUE)

# 檢查 item_params 的結構(確保參數名稱與位置正確)
str(item_params_mirt)
## List of 21
##  $ Item1    : num [1, 1:4] 1 -1.97 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item2    : num [1, 1:4] 1 -2.21 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item3    : num [1, 1:4] 1 -1.68 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item4    : num [1, 1:4] 1 -1.45 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item5    : num [1, 1:4] 1 -1.13 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item6    : num [1, 1:4] 1 -1.09 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item7    : num [1, 1:4] 1 -0.592 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item8    : num [1, 1:4] 1 0.152 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item9    : num [1, 1:4] 1 -0.492 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item10   : num [1, 1:4] 1 -0.248 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item11   : num [1, 1:4] 1 -0.0396 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item12   : num [1, 1:4] 1 0.495 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item13   : num [1, 1:4] 1 0.314 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item14   : num [1, 1:4] 1 1.32 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item15   : num [1, 1:4] 1 -1.97 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item16   : num [1, 1:4] 1 -1.52 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item17   : num [1, 1:4] 1 -1.59 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item18   : num [1, 1:4] 1 -1.3 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item19   : num [1, 1:4] 1 -0.78 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ Item20   : num [1, 1:4] 1 -0.329 0 1
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:4] "a" "b" "g" "u"
##  $ GroupPars: num [1, 1:2] 0 0.921
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr "par"
##   .. ..$ : chr [1:2] "MEAN_1" "COV_11"
##  - attr(*, "class")= chr [1:2] "mirt_list" "list"
# 提取難度參數 b(矩陣形式的第 2 列)
difficulty_params_mirt <- sapply(item_params_mirt[names(item_params_mirt) != "GroupPars"], function(x) x[1, "b"])

# 查看提取結果
print(difficulty_params_mirt)
##       Item1       Item2       Item3       Item4       Item5       Item6 
## -1.96741931 -2.20839960 -1.68150305 -1.45254683 -1.12640448 -1.08821186 
##       Item7       Item8       Item9      Item10      Item11      Item12 
## -0.59196800  0.15249816 -0.49211113 -0.24788802 -0.03958903  0.49502092 
##      Item13      Item14      Item15      Item16      Item17      Item18 
##  0.31405468  1.32038029 -1.96741931 -1.51876765 -1.58700354 -1.30483281 
##      Item19      Item20 
## -0.77988298 -0.32863191
# 1. 執行 Rasch 模型
model_TAM <- tam(data_irt)
## ....................................................
## Processing Data      2024-12-01 21:06:32.363067 
##     * Response Data: 300 Persons and  20 Items 
##     * Numerical integration with 21 nodes
##     * Created Design Matrices   ( 2024-12-01 21:06:32.364285 )
##     * Calculated Sufficient Statistics   ( 2024-12-01 21:06:32.36706 )
## ....................................................
## Iteration 1     2024-12-01 21:06:32.368153
## E Step
## M Step Intercepts   |---
##   Deviance = 6611.5511
##   Maximum item intercept parameter change: 0.275712
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.093087
## ....................................................
## Iteration 2     2024-12-01 21:06:32.37326
## E Step
## M Step Intercepts   |---
##   Deviance = 6592.7838 | Absolute change: 18.7673 | Relative change: 0.00284665
##   Maximum item intercept parameter change: 0.020698
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000403
## ....................................................
## Iteration 3     2024-12-01 21:06:32.373719
## E Step
## M Step Intercepts   |--
##   Deviance = 6592.1091 | Absolute change: 0.6747 | Relative change: 0.00010234
##   Maximum item intercept parameter change: 0.014873
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001499
## ....................................................
## Iteration 4     2024-12-01 21:06:32.374083
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.7179 | Absolute change: 0.3912 | Relative change: 5.935e-05
##   Maximum item intercept parameter change: 0.011448
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001963
## ....................................................
## Iteration 5     2024-12-01 21:06:32.374438
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.4908 | Absolute change: 0.2271 | Relative change: 3.445e-05
##   Maximum item intercept parameter change: 0.008797
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001952
## ....................................................
## Iteration 6     2024-12-01 21:06:32.374795
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.3587 | Absolute change: 0.1321 | Relative change: 2.004e-05
##   Maximum item intercept parameter change: 0.006751
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001741
## ....................................................
## Iteration 7     2024-12-01 21:06:32.375146
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.2817 | Absolute change: 0.077 | Relative change: 1.168e-05
##   Maximum item intercept parameter change: 0.005177
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001468
## ....................................................
## Iteration 8     2024-12-01 21:06:32.375483
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.2367 | Absolute change: 0.045 | Relative change: 6.82e-06
##   Maximum item intercept parameter change: 0.003969
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.001197
## ....................................................
## Iteration 9     2024-12-01 21:06:32.375826
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.2105 | Absolute change: 0.0263 | Relative change: 3.99e-06
##   Maximum item intercept parameter change: 0.003042
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000957
## ....................................................
## Iteration 10     2024-12-01 21:06:32.376163
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1951 | Absolute change: 0.0154 | Relative change: 2.34e-06
##   Maximum item intercept parameter change: 0.002332
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000754
## ....................................................
## Iteration 11     2024-12-01 21:06:32.376519
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.186 | Absolute change: 0.009 | Relative change: 1.37e-06
##   Maximum item intercept parameter change: 0.001788
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000589
## ....................................................
## Iteration 12     2024-12-01 21:06:32.376867
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1808 | Absolute change: 0.0053 | Relative change: 8e-07
##   Maximum item intercept parameter change: 0.00137
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000458
## ....................................................
## Iteration 13     2024-12-01 21:06:32.377228
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1777 | Absolute change: 0.0031 | Relative change: 4.7e-07
##   Maximum item intercept parameter change: 0.00105
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000354
## ....................................................
## Iteration 14     2024-12-01 21:06:32.377584
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1758 | Absolute change: 0.0018 | Relative change: 2.8e-07
##   Maximum item intercept parameter change: 0.000805
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000273
## ....................................................
## Iteration 15     2024-12-01 21:06:32.37794
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1748 | Absolute change: 0.0011 | Relative change: 1.6e-07
##   Maximum item intercept parameter change: 0.000617
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.00021
## ....................................................
## Iteration 16     2024-12-01 21:06:32.378275
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1741 | Absolute change: 6e-04 | Relative change: 1e-07
##   Maximum item intercept parameter change: 0.000473
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000162
## ....................................................
## Iteration 17     2024-12-01 21:06:32.378601
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1738 | Absolute change: 4e-04 | Relative change: 6e-08
##   Maximum item intercept parameter change: 0.000363
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 0.000124
## ....................................................
## Iteration 18     2024-12-01 21:06:32.378929
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1735 | Absolute change: 2e-04 | Relative change: 3e-08
##   Maximum item intercept parameter change: 0.000278
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 9.5e-05
## ....................................................
## Iteration 19     2024-12-01 21:06:32.379254
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1734 | Absolute change: 1e-04 | Relative change: 2e-08
##   Maximum item intercept parameter change: 0.000213
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 7.3e-05
## ....................................................
## Iteration 20     2024-12-01 21:06:32.37959
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1733 | Absolute change: 1e-04 | Relative change: 1e-08
##   Maximum item intercept parameter change: 0.000164
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 5.6e-05
## ....................................................
## Iteration 21     2024-12-01 21:06:32.379922
## E Step
## M Step Intercepts   |--
##   Deviance = 6591.1733 | Absolute change: 0 | Relative change: 1e-08
##   Maximum item intercept parameter change: 0.000126
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 4.3e-05
## ....................................................
## Iteration 22     2024-12-01 21:06:32.380261
## E Step
## M Step Intercepts   |-
##   Deviance = 6591.1733 | Absolute change: 0 | Relative change: 0
##   Maximum item intercept parameter change: 9.6e-05
##   Maximum item slope parameter change: 0
##   Maximum regression parameter change: 0
##   Maximum variance parameter change: 3.3e-05
## ....................................................
## Item Parameters
##    xsi.index xsi.label     est
## 1          1     Item1 -1.9669
## 2          2     Item2 -2.2079
## 3          3     Item3 -1.6810
## 4          4     Item4 -1.4521
## 5          5     Item5 -1.1259
## 6          6     Item6 -1.0877
## 7          7     Item7 -0.5915
## 8          8     Item8  0.1529
## 9          9     Item9 -0.4917
## 10        10    Item10 -0.2474
## 11        11    Item11 -0.0392
## 12        12    Item12  0.4954
## 13        13    Item13  0.3145
## 14        14    Item14  1.3208
## 15        15    Item15 -1.9669
## 16        16    Item16 -1.5183
## 17        17    Item17 -1.5865
## 18        18    Item18 -1.3043
## 19        19    Item19 -0.7794
## 20        20    Item20 -0.3282
## ...................................
## Regression Coefficients
##      [,1]
## [1,]    0
## 
## Variance:
##        [,1]
## [1,] 0.9205
## 
## 
## EAP Reliability:
## [1] 0.751
## 
## -----------------------------
## Start:  2024-12-01 21:06:32.362714
## End:  2024-12-01 21:06:32.383236 
## Time difference of 0.02052188 secs
# 1-2.檢驗試題難度 
xsi_params <- model_TAM$xsi[1:1]
# 1-2-1.檢驗試題難度資料匡
print(head(xsi_params))
##             xsi
## Item1 -1.966916
## Item2 -2.207892
## Item3 -1.681005
## Item4 -1.452055
## Item5 -1.125924
## Item6 -1.087732
# 1-3.模型適配度item_fit
msq.itemfit(model_TAM)
## $itemfit
##      item fitgroup    Outfit   Outfit_t     Outfit_p     Infit    Infit_t
## 1   Item1        1 1.1204386  0.7047519 0.4809646480 1.0289322  0.3117560
## 2   Item2        2 1.2031823  0.9934260 0.3205023993 1.0688199  0.6047865
## 3   Item3        3 1.1716886  1.1226887 0.2615697181 1.0544049  0.6410243
## 4   Item4        4 1.0593392  0.4852398 0.6275062691 1.0548604  0.7301201
## 5   Item5        5 0.8787064 -1.1444457 0.2524388474 0.9473591 -0.8188566
## 6   Item6        6 0.9094273 -0.8583668 0.3906899787 0.9498326 -0.7954308
## 7   Item7        7 0.9366212 -0.8214879 0.4113684158 0.9686934 -0.6159221
## 8   Item8        8 1.2332663  3.4907245 0.0004817126 1.1743443  3.5875787
## 9   Item9        9 0.8905202 -1.5490004 0.1213816290 0.9270945 -1.5270609
## 10 Item10       10 0.9078802 -1.4455877 0.1482928891 0.9231328 -1.7013715
## 11 Item11       11 0.8802878 -1.9931768 0.0462420908 0.9093185 -2.0437908
## 12 Item12       12 0.8892420 -1.5991161 0.1097948127 0.9041320 -1.9496410
## 13 Item13       13 0.9022448 -1.5234963 0.1276345787 0.9295124 -1.4961079
## 14 Item14       14 1.0660329  0.5852387 0.5583872516 1.0318691  0.4538056
## 15 Item15       15 1.3530232  1.8297036 0.0672942795 1.1211669  1.1625283
## 16 Item16       16 0.9130229 -0.6064056 0.5442454452 0.9553171 -0.5445193
## 17 Item17       17 0.9646924 -0.2015790 0.8402458775 0.9832814 -0.1758510
## 18 Item18       18 0.9794630 -0.1319635 0.8950131606 0.9908041 -0.1077117
## 19 Item19       19 1.1034706  1.1954391 0.2319155024 1.0473035  0.8829108
## 20 Item20       20 1.0870406  1.2886026 0.1975362900 1.0707601  1.5004652
##        Infit_p
## 1  0.755225997
## 2  0.545320890
## 3  0.521506906
## 4  0.465316774
## 5  0.412868232
## 6  0.426362923
## 7  0.537945912
## 8  0.000333763
## 9  0.126745876
## 10 0.088873244
## 11 0.040974220
## 12 0.051218925
## 13 0.134625533
## 14 0.649968788
## 15 0.245020947
## 16 0.586084158
## 17 0.860410978
## 18 0.914224412
## 19 0.377284485
## 20 0.133493947
## 
## $summary_itemfit
##           fit        M         SD
## Outfit Outfit 1.022480 0.14014153
## Infit   Infit 1.002047 0.07505481
## 
## $time
## [1] "2024-12-01 21:06:32 CST" "2024-12-01 21:06:32 CST"
## 
## $CALL
## msq.itemfit(object = model_TAM)
## 
## attr(,"class")
## [1] "msq.itemfit"
# 1-4.適配度圖示化(以18題為例)
plot(model_TAM,items = 18)
## Iteration in WLE/MLE estimation  1   | Maximal change  0.9488 
## Iteration in WLE/MLE estimation  2   | Maximal change  0.1044 
## Iteration in WLE/MLE estimation  3   | Maximal change  0.0031 
## Iteration in WLE/MLE estimation  4   | Maximal change  2e-04 
## Iteration in WLE/MLE estimation  5   | Maximal change  0 
## ----
##  WLE Reliability= 0.713

## ....................................................
##  Plots exported in png format into folder:
##  /Users/Shared/作業4/Plots
# 2. 提取 EAP 能力估計和標準誤
eap_abilities <- model_TAM$person$EAP        # 提取 EAP 能力分數
eap_se <- model_TAM$person$SD.EAP           # 提取 EAP 標準誤

# 3. 整合能力估計和標準誤到資料框
person_abilities <- data.frame(
  ID = data[, 1], # 第一列是受試者 ID
  IQ = data[, 2], # 第二列是受試者 IQ
  EAP = eap_abilities,
  SE = eap_se
)

# 4. 查看結果
print(head(person_abilities))
##   ID  IQ        EAP        SE
## 1  1 112  0.1667368 0.4682997
## 2  2  90 -0.6502470 0.4413045
## 3  3 142  1.4906969 0.5791548
## 4  4  86 -0.8445068 0.4405079
## 5  5  89 -0.8445068 0.4405079
## 6  6  86 -0.6502470 0.4413045
# 計算相關性
cor_IQ_EAP <- cor(person_abilities$IQ, person_abilities$EAP)
cat("Correlation between IQ and EAP Ability:", cor_IQ_EAP, "\n")
## Correlation between IQ and EAP Ability: 0.8726578
# 能力估計分佈圖
hist(eap_abilities, breaks = 20, col = "skyblue",
     main = "Distribution of EAP Ability Estimates",
     xlab = "EAP Ability")

# 標準誤分佈圖
hist(person_abilities$SE, breaks = 20, col = "pink",
     main = "Distribution of Standard Error",
     xlab = "Standard Error")

# 能力估計與其標準誤關係圖
plot(eap_abilities, eap_se,
     xlab = "EAP Ability",
     ylab = "Standard Error",
     main = "EAP Ability vs. Standard Error",
     col = "red", pch = 19)

# 安裝並載入 ltm 套件
library(ltm)

# 假設 data_irt 是你的作答數據,進行 Rasch 模型分析
model_lTM_rasch <- rasch(data_irt)

# 設定能力值的上下限
# 假設上下限分別設定為 -4 和 4
ability_limits <- seq(-4, 4, by = 1)

# 使用 factor.scores 提取每個人的能力值,並應用上下限
rasch_scores <- factor.scores(
  model_lTM_rasch,
  resp.patterns = data_irt, # 使用原始數據
  qrs = ability_limits      # 設定能力值上下限
)

# 查看得分結果
head(rasch_scores$scores)
## NULL
# 1. 提取 z1 能力估計和標準誤
z1_abilities <- rasch_scores$score.dat$z1      # 提取 EAP 能力分數
z1_se <- rasch_scores$score.dat$se.z1           # 提取 EAP 標準誤

# 2. 整合能力估計和標準誤到資料框
person_abilities_ltm <- data.frame(
  ID = data[, 1], # 第一列是受試者 ID
  IQ = data[, 2], # 第二列是受試者 IQ
  z1 = z1_abilities,
  SE = z1_se
)

# 3. 計算相關性
cor_IQ_z1 <- cor(person_abilities_ltm$IQ, person_abilities_ltm$z1)
cat("Correlation between IQ and z1 Ability:", cor_IQ_z1, "\n")
## Correlation between IQ and z1 Ability: 0.8725787
# TAM 套件的能力估計值
eap_abilities_tam <- model_TAM$person$EAP

# mirt 套件的能力估計值
latent_abilities_mirt <- as.vector(fscores(data_Mirt))

# ltm 套件的能力估計值
latent_abilities_ltm <- rasch_scores$score.dat$z1  
# 整合能力估計值
abilities_df <- data.frame(
  TAM = eap_abilities_tam,
  mirt = latent_abilities_mirt,
  ltm = latent_abilities_ltm
)

# 檢查整合結果
head(abilities_df)
##          TAM       mirt        ltm
## 1  0.1667368  0.1663636  0.1479396
## 2 -0.6502470 -0.6508563 -0.6837206
## 3  1.4906969  1.4905519  1.4872948
## 4 -0.8445068 -0.8450976 -0.8816281
## 5 -0.8445068 -0.8450976 -0.8816281
## 6 -0.6502470 -0.6508563 -0.6837206
library(corrplot)
## corrplot 0.92 loaded
# 計算相關矩陣
correlation_matrix <- cor(abilities_df, use = "complete.obs")

# 查看相關矩陣
print(correlation_matrix)
##            TAM      mirt       ltm
## TAM  1.0000000 1.0000000 0.9999984
## mirt 1.0000000 1.0000000 0.9999983
## ltm  0.9999984 0.9999983 1.0000000
# 繪製相關矩陣圖
corrplot(correlation_matrix, type = "lower", order = "hclust", tl.col = "black", tl.cex = 0.7, tl.srt = 45)

#TAM難度
difficulty_tam <- model_TAM$xsi
# 提取完整參數表
params_table <- mod2values(data_Mirt)

# 查看參數表
head(params_table)
##   group  item class name parnum    value lbound ubound   est prior.type prior_1
## 1   all Item1  dich   a1      1 1.000000   -Inf    Inf FALSE       none     NaN
## 2   all Item1  dich    d      2 1.967419   -Inf    Inf  TRUE       none     NaN
## 3   all Item1  dich    g      3 0.000000      0      1 FALSE       none     NaN
## 4   all Item1  dich    u      4 1.000000      0      1 FALSE       none     NaN
## 5   all Item2  dich   a1      5 1.000000   -Inf    Inf FALSE       none     NaN
## 6   all Item2  dich    d      6 2.208400   -Inf    Inf  TRUE       none     NaN
##   prior_2
## 1     NaN
## 2     NaN
## 3     NaN
## 4     NaN
## 5     NaN
## 6     NaN
# 篩選出難度參數
difficulty_mirt <- params_table[params_table$name == "d", "value"]

# 查看難度參數
print(difficulty_mirt)
##  [1]  1.96741931  2.20839960  1.68150305  1.45254683  1.12640448  1.08821186
##  [7]  0.59196800 -0.15249816  0.49211113  0.24788802  0.03958903 -0.49502092
## [13] -0.31405468 -1.32038029  1.96741931  1.51876765  1.58700354  1.30483281
## [19]  0.77988298  0.32863191
# 提取 ltm 的難度參數
difficulty_ltm <- coef(model_lTM_rasch)
# 整合難度參數
difficulty_df <- data.frame(
  TAM = difficulty_tam$xsi,          # TAM 的難度參數
  mirt = difficulty_mirt,            # mirt 的難度參數
  ltm = difficulty_ltm[, "Dffclt"]   # ltm 的難度參數(通常標為 "Dffclt")
)

# 查看整合結果
print(difficulty_df)
##                TAM        mirt         ltm
## Item1  -1.96691557  1.96741931 -2.05033928
## Item2  -2.20789226  2.20839960 -2.30144965
## Item3  -1.68100512  1.68150305 -1.75259962
## Item4  -1.45205511  1.45254683 -1.51362832
## Item5  -1.12592363  1.12640448 -1.17389365
## Item6  -1.08773240  1.08821186 -1.13396820
## Item7  -0.59150824  0.59196800 -0.61673793
## Item8   0.15292428 -0.15249816  0.15904464
## Item9  -0.49165566  0.49211113 -0.51281420
## Item10 -0.24744341  0.24788802 -0.25816758
## Item11 -0.03915397  0.03958903 -0.04117492
## Item12  0.49543112 -0.49502092  0.51606104
## Item13  0.31447326 -0.31405468  0.32733970
## Item14  1.32075438 -1.32038029  1.37627790
## Item15 -1.96691557  1.96741931 -2.05017521
## Item16 -1.51827400  1.51876765 -1.58286903
## Item17 -1.58650802  1.58700354 -1.65353771
## Item18 -1.30434576  1.30483281 -1.35982508
## Item19 -0.77941543  0.77988298 -0.81271033
## Item20 -0.32818366  0.32863191 -0.34245868
# 計算相關矩陣
correlation_matrix_diff <- cor(difficulty_df, use = "complete.obs")

# 查看相關矩陣
print(correlation_matrix_diff)
##      TAM mirt ltm
## TAM    1   -1   1
## mirt  -1    1  -1
## ltm    1   -1   1
# 繪製相關矩陣圖
corrplot(correlation_matrix_diff, type = "lower", order = "hclust", tl.col = "black", tl.cex = 0.7, tl.srt = 45)