Giter VIP home page Giter VIP logo

equate.jl's Introduction

Equate

CI Codecov Coveralls

Equate test scores under the equivalent or non-equivalent group with anchor test design.

Supported methods

  • SG (Single Group design)

    • Linear
    • Mean
    • Equipercentile
  • NEAT (Non-Equivalent group design with Anchor Test design)

    • Tucker (Linear equating under some assumptions)
    • Braun & Holland (Linear equating using synthetic population)
    • Chained Linear (also Mean)
    • Chained Equipercentile
    • Frequency Estimation (Equipercentile equating using synthetic population)
  • Presmoothing

    • Log linear smoothing with an arbitrary degree.
  • Kernel smoothong

    • Gaussian kernel is only supported now.
    • The optimal bandwidth can be estimated.

Example1: SG design.

  1. Prepare data set. Integer or Float vector.
using Distributions, Random
Random.seed!(1234)
X = rand(BetaBinomial(100, 4, 10), 500);
Y = rand(BetaBinomial(100, 6, 10), 500);
  1. Convert the data vector to FreqTab
# `data` must be Real vector
julia> ftX = freqtab(X; scale = 0:1:100)
Frequency table stats.
         N :      500 
   Missing :        0 
       min :        1 
      maxs :       71 
         μ : 28.39000 
         σ : 12.68921 
  kurtosis : 0.00127 
  skewness : 0.52615 


julia> ftY = freqtab(Y; scale = 0:1:100)
Frequency table stats.
         N :      500 
   Missing :        0 
       min :        6 
      maxs :       77 
         μ : 37.04000 
         σ : 13.11115 
  kurtosis : -0.44152 
  skewness : 0.22442 
  1. Presmoothing by using presmoothing
  2. (Optional) Continuization by using KernelSmoothing
  3. Equate score X to scale Y by the arbitrary method.
# Linear Equating
julia> eq_lin = Linear(ftX, ftY)
Equating design: EG
Equated method: Linear.
To show the table, extract `table` element.

# Equipercentile equating
julia> eq_eqp = Equipercentile(ftX, ftY)
Equating design: EG
Equated method: Equipercentile(lower).
To show the table, extract `table` element.
  1. Evaluate SEE (Standard Error of Equating). Now, Only BasicSampling(n) is supported.
julia> using Bootstrap, Random
julia> Random.seed!(1234)

julia> @time bootse_lin = bootstrap(x -> coef(Linear(x...)), eq_lin.data, BasicSampling(1000))
  1.727280 seconds (10.12 M allocations: 458.347 MiB, 5.56% gc time, 63.60% compilation time)
Bootstrap Sampling
  Estimates:
     Var │ Estimate  Bias         StdError
         │ Float64   Float64      Float64
    ─────┼─────────────────────────────────
       1 │  1.03325  0.000560431  0.043795
       2 │  7.70597  0.00756638   1.2771
  Sampling: BasicSampling
  Samples:  1000
  Data:     NamedTuple{(:X, :Y), Tuple{Equate.FreqTab, Equate.FreqTab}}: { X 500 × Y 500 }

equate.jl's People

Contributors

takuizum avatar github-actions[bot] avatar

Stargazers

Diego Javier Zea avatar

Watchers

 avatar

equate.jl's Issues

[Feature request] Return coefficient in the linear equating.

For now, the functions to linear equating (e.g. Linear() ) don't return equating coefficient and return only a concordance table.

So I propose to enhance these functions and related structs to be able to return coefficients too.

struct ResultLinear <: SGEquateMethod
    table::DataFrame
    coefficients::Tuples # (A = 1.0, K = 0.0)
end

Thanks.

TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.

If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Handling missing values

For now, freqtab function cannot treat the vector which contains any missing value.

In general, the missing values in the data frame could be omitted before analyzing. However, for example, in single group design, assuming that one subject does not response to Test A but response Test B and we want to take the equivalent score A on scale B, we should choose methods to handle this missing as below.

  1. Remove records contains any missing from both tests and calculate moments or percentile.
  2. Preserve records on the test in which the subject responds at least. In other words, this method is removing missing values separately.

freqtab should be designed to be able to choose which method the user wants to use.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.