knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5, out.width = "100%" )
日本語チュートリアルは こちら もご参照ください。
注意: CRANビルド時間短縮のため、計算負荷の高いコード例は
eval=FALSEとしています。完全な実行結果は pkgdownサイト をご覧ください。
exametrikaパッケージは、教育テストデータを分析するための包括的なテストデータエンジニアリングツールを提供します。荘島(2022)で説明されている方法に基づき、このパッケージは研究者と実務家に以下の機能を提供します:
本パッケージは以下の心理測定モデルと技法を実装しています:
本パッケージは、テストデータにおける局所依存性をモデル化する3つの相補的なアプローチを実装しています:
LRAとベイジアンネットワークの長所を組み合わせたモデル
局所依存バイクラスタリング(LDB)
バイクラスタリングとフィールドレベルの依存構造を統合
バイクラスターネットワークモデル(BINET)
| モデル | 主な焦点 | 適用場面 | |--------|----------|----------| | LDLRA | 項目レベルの依存関係 | 項目関係が習熟度によって変化する場合 | | LDB | フィールドレベルの構造 | 項目が自然なグループを形成し依存関係を持つ場合 | | BINET | クラス進行 | フィールド内に複雑な学習パターンが存在する場合 |
# CRANからインストール install.packages("exametrika") # または開発版をGitHubからインストール if (!require("devtools")) install.packages("devtools") devtools::install_github("kosugitti/exametrika")
本パッケージには以下が必要です:
library(exametrika)
Exametrikaは2値データと多値データの両方に対応しています:
dataFormat関数は分析用の入力データを前処理します:
data <- dataFormat(J15S500) str(data)
本パッケージには、荘島(2022)からの様々なサンプルデータセットが学習用に含まれています:
| データセット | 項目数 | 受験者数 | 種別 | 用途 | |-------------|-------:|---------:|------|------| | J5S10 | 5 | 10 | 2値 | クイックテスト | | J5S1000 | 5 | 1,000 | 順序 | GRM | | J12S5000 | 12 | 5,000 | 2値 | LDLRA | | J15S500 | 15 | 500 | 2値 | IRT, LCA | | J15S3810 | 15 | 3,810 | 順序(4件法) | 順序LRA | | J20S400 | 20 | 400 | 2値 | BNM | | J20S600 | 20 | 600 | 名義(4cat) | 名義Biclustering | | J35S500 | 35 | 500 | 順序(5件法) | 順序Biclustering | | J35S515 | 35 | 515 | 2値 | Biclustering, Network | | J35S5000 | 35 | 5,000 | 多肢選択 | 評定LRA |
TestStatistics(J15S500)
ItemStatistics(J15S500)
CTT(J15S500)
IRT関数は、ロジスティックモデルを用いてパラメータを推定します。modelオプションで指定でき、2PL、3PL、4PLモデルに対応しています。
result.IRT <- IRT(J15S500, model = 3) result.IRT
head(result.IRT$ability)
plot(result.IRT, type = "IRF", items = 1:6, nc = 2, nr = 3) plot(result.IRT, type = "IRF", overlay = TRUE) plot(result.IRT, type = "IIC", items = 1:6, nc = 2, nr = 3) plot(result.IRT, type = "TRF") plot(result.IRT, type = "TIC")
Graded Response Model(Samejima,1969)はIRTを多値反応モデルに展開したものです。
result.GRM <- GRM(J5S1000) result.GRM
plot(result.GRM, type = "IRF", nc = 2) plot(result.GRM, type = "IIF", nc = 2) plot(result.GRM, type = "TIF")
潜在クラス分析では、データセットとクラス数の指定が必要です。
result.LCA <- LCA(J15S500, ncls = 5) head(result.LCA$Students)
plot(result.LCA, type = "IRP", items = 1:6, nc = 2, nr = 3) plot(result.LCA, type = "CMP", students = 1:9, nc = 3, nr = 3) plot(result.LCA, type = "TRP") plot(result.LCA, type = "LCD")
潜在ランク分析では、データセットとランク数の指定が必要です。
result.LRA <- LRA(J15S500, nrank = 6) head(result.LRA$Students)
plot(result.LRA, type = "IRP", items = 1:6, nc = 2, nr = 3) plot(result.LRA, type = "RMP", students = 1:9, nc = 3, nr = 3) plot(result.LRA, type = "TRP") plot(result.LRA, type = "LRD")
result.LRAord <- LRA(J15S3810, nrank = 3, mic = TRUE)
plot(result.LRAord, type = "ScoreFreq") plot(result.LRAord, type = "ScoreRank")
plot(result.LRAord, type = "ICBR", items = 1:4, nc = 2, nr = 2) plot(result.LRAord, type = "ICRP", items = 1:4, nc = 2, nr = 2)
plot(result.LRAord, type = "RMP", students = 1:9, nc = 3, nr = 3)
result.LRArated <- LRA(J35S5000, nrank = 10, mic = TRUE)
plot(result.LRArated, type = "ScoreFreq") plot(result.LRArated, type = "ScoreRank") plot(result.LRArated, type = "ICRP", items = 1:4, nc = 2, nr = 2)
Biclustering(J35S515, nfld = 5, ncls = 6, method = "B")
result.Ranklustering <- Biclustering(J35S515, nfld = 5, ncls = 6, method = "R") plot(result.Ranklustering, type = "Array") plot(result.Ranklustering, type = "FRP", nc = 2, nr = 3) plot(result.Ranklustering, type = "RRV") plot(result.Ranklustering, type = "RMP", students = 1:9, nc = 3, nr = 3) plot(result.Ranklustering, type = "LRD")
result <- GridSearch(J35S515, method = "R", max_ncls = 10, max_nfld = 10, index = "BIC") result$optimal_ncls result$optimal_nfld plot(result$optimal_result, type = "Array")
result.IRM <- Biclustering_IRM(J35S515, gamma_c = 1, gamma_f = 1, verbose = TRUE) plot(result.IRM, type = "Array") plot(result.IRM, type = "FRP", nc = 3) plot(result.IRM, type = "TRP")
result.B.ord <- Biclustering(J35S500, ncls = 5, nfld = 5, method = "R") result.B.ord plot(result.B.ord, type = "Array") plot(result.B.ord, type = "FRP", nc = 3, nr = 2) plot(result.B.ord, type = "FCRP", nc = 3, nr = 2) plot(result.B.ord, type = "FCRP", style = "bar", nc = 3, nr = 2) plot(result.B.ord, type = "FCBR", nc = 3, nr = 2) plot(result.B.ord, type = "ScoreField") plot(result.B.ord, type = "RRV")
result.B.nom <- Biclustering(J20S600, ncls = 5, nfld = 4) result.B.nom plot(result.B.nom, type = "Array") plot(result.B.nom, type = "FRP", nc = 2, nr = 2) plot(result.B.nom, type = "FCRP", nc = 2, nr = 2) plot(result.B.nom, type = "FCRP", style = "bar", nc = 2, nr = 2) plot(result.B.nom, type = "ScoreField") plot(result.B.nom, type = "RRV")
library(igraph) DAG <- matrix( c( "Item01", "Item02", "Item02", "Item03", "Item02", "Item04", "Item03", "Item05", "Item04", "Item05" ), ncol = 2, byrow = TRUE ) g <- igraph::graph_from_data_frame(DAG) adj_mat <- as.matrix(igraph::get.adjacency(g))
result.BNM <- BNM(J5S10, adj_matrix = adj_mat) result.BNM
BNM_GA(J5S10, population = 20, Rs = 0.5, Rm = 0.002, maxParents = 2, maxGeneration = 100, crossover = 2, elitism = 2 )
BNM_PBIL(J5S10, population = 20, Rs = 0.5, Rm = 0.005, maxParents = 2, alpha = 0.05, estimate = 4 )
DAG_dat <- matrix(c( "From", "To", "Rank", "Item01", "Item02", 1, "Item04", "Item05", 1, "Item01", "Item02", 2, "Item02", "Item03", 2, "Item04", "Item05", 2, "Item08", "Item09", 2, "Item08", "Item10", 2, "Item09", "Item10", 2, "Item08", "Item11", 2, "Item01", "Item02", 3, "Item02", "Item03", 3, "Item04", "Item05", 3, "Item08", "Item09", 3, "Item08", "Item10", 3, "Item09", "Item10", 3, "Item08", "Item11", 3, "Item02", "Item03", 4, "Item04", "Item06", 4, "Item04", "Item07", 4, "Item05", "Item06", 4, "Item05", "Item07", 4, "Item08", "Item10", 4, "Item08", "Item11", 4, "Item09", "Item11", 4, "Item02", "Item03", 5, "Item04", "Item06", 5, "Item04", "Item07", 5, "Item05", "Item06", 5, "Item05", "Item07", 5, "Item09", "Item11", 5, "Item10", "Item11", 5, "Item10", "Item12", 5 ), ncol = 3, byrow = TRUE) edgeFile <- tempfile(fileext = ".csv") write.csv(DAG_dat, edgeFile, row.names = FALSE, quote = TRUE)
result.LDLRA <- LDLRA(J12S5000, ncls = 5, adj_file = edgeFile) result.LDLRA
plot(result.LDLRA, type = "IRP", nc = 4, nr = 3) plot(result.LDLRA, type = "TRP") plot(result.LDLRA, type = "LRD")
if (exists("edgeFile")) unlink(edgeFile)
conf <- c( 1, 6, 6, 8, 9, 9, 4, 7, 7, 7, 5, 8, 9, 10, 10, 9, 9, 10, 10, 10, 2, 2, 3, 3, 5, 5, 6, 9, 9, 10, 1, 1, 7, 9, 10 ) edges_data <- data.frame( "From Field (Parent) >>>" = c(6, 4, 5, 1, 1, 4, 3, 4, 6, 2, 4, 4, 3, 6, 4, 1, 7, 9, 6, 7), ">>> To Field (Child)" = c(8, 7, 8, 7, 2, 5, 5, 8, 8, 4, 6, 7, 5, 8, 5, 8, 10, 10, 8, 9), "At Class/Rank (Locus)" = c(2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5) ) edgeFile <- tempfile(fileext = ".csv") write.csv(edges_data, file = edgeFile, row.names = FALSE)
result.LDB <- LDB(U = J35S515, ncls = 5, conf = conf, adj_file = edgeFile) result.LDB
plot(result.LDB, type = "Array") plot(result.LDB, type = "TRP") plot(result.LDB, type = "LRD") plot(result.LDB, type = "RMP", students = 1:9, nc = 3, nr = 3) plot(result.LDB, type = "FRP", nc = 3, nr = 2) plot(result.LDB, type = "FieldPIRP")
if (exists("edgeFile")) unlink(edgeFile)
conf <- c( 1, 5, 5, 5, 9, 9, 6, 6, 6, 6, 2, 7, 7, 11, 11, 7, 7, 12, 12, 12, 2, 2, 3, 3, 4, 4, 4, 8, 8, 12, 1, 1, 6, 10, 10 ) edges_data <- data.frame( "From Class (Parent) >>>" = c(1, 2, 3, 4, 5, 7, 2, 4, 6, 8, 10, 6, 6, 11, 8, 9, 12), ">>> To Class (Child)" = c(2, 4, 5, 5, 6, 11, 3, 7, 9, 12, 12, 10, 8, 12, 12, 11, 13), "At Field (Locus)" = c(1, 2, 2, 3, 4, 4, 5, 5, 5, 5, 5, 7, 8, 8, 9, 9, 12) ) edgeFile <- tempfile(fileext = ".csv") write.csv(edges_data, file = edgeFile, row.names = FALSE)
result.BINET <- BINET( U = J35S515, ncls = 13, nfld = 12, conf = conf, adj_file = edgeFile ) print(result.BINET)
plot(result.BINET, type = "Array") plot(result.BINET, type = "TRP") plot(result.BINET, type = "LRD") plot(result.BINET, type = "RMP", students = 1:9, nc = 3, nr = 3) plot(result.BINET, type = "FRP", nc = 3, nr = 2) plot(result.BINET, type = "LDPSR", nc = 3, nr = 2)
if (exists("edgeFile")) unlink(edgeFile)
Shojima, K. (2022) Test Data Engineering: Latent Rank Analysis, Biclustering, and Bayesian Network (Behaviormetrics: Quantitative Approaches to Human Behavior, 13), Springer.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.