diff --git a/.JuliaFormatter.toml b/.JuliaFormatter.toml new file mode 100644 index 0000000..76c30b0 --- /dev/null +++ b/.JuliaFormatter.toml @@ -0,0 +1,3 @@ +always_for_in = true +short_to_long_function_def = true +always_use_return = true diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e3b752b..5cc6786 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -18,7 +18,6 @@ jobs: fail-fast: false matrix: version: - - '1.6' - '1.8' - 'nightly' os: diff --git a/.gitignore b/.gitignore index 5bf4af9..b200bf8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /Manifest.toml -.vscode \ No newline at end of file +.vscode + +.DS_Store \ No newline at end of file diff --git a/Project.toml b/Project.toml index 0338a13..62e01c5 100644 --- a/Project.toml +++ b/Project.toml @@ -4,19 +4,34 @@ authors = ["Philipp Gewessler and constributors"] version = "0.1.0" [deps] +Bootstrap = "e28b5b4c-05e8-5b66-bc03-6f0c0a0a06e0" Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" -InvertedIndices = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +Reexport = "189a3867-3050-52da-a836-e630ba90ab69" SCS = "c946c3f1-0d1f-5ce8-9dea-7daa1f7e2d13" -Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +StatsAPI = "82ae8749-77ed-4fe6-ae5f-f523153014b0" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +Term = "22787eb5-b846-44ae-b979-8e399b8463ab" [compat] -julia = "1.6" +Combinatorics = "1" +Distributions = "0.25" +JuMP = "1" +PrecompileTools = "1" +ProgressMeter = "1" +SCS = "2" +StatsBase = "0.34" +Tables = "1" +Term = "2" +julia = "1.8" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/README.md b/README.md index 1efafe0..1944c7f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,50 @@ -# ClassicalTestTheory +# ClassicalTestTheory.jl [![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://p-gw.github.io/ClassicalTestTheory.jl/stable) [![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://p-gw.github.io/ClassicalTestTheory.jl/dev) [![Build Status](https://github.com/p-gw/ClassicalTestTheory.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/p-gw/ClassicalTestTheory.jl/actions/workflows/CI.yml?query=branch%3Amain) [![Coverage](https://codecov.io/gh/p-gw/ClassicalTestTheory.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/p-gw/ClassicalTestTheory.jl) +ClassicalTestTheory.jl is a Julia package for data analysis using [Classical Test Theory](https://en.wikipedia.org/wiki/Classical_test_theory#:~:text=It%20is%20a%20theory%20of,the%20reliability%20of%20psychological%20tests.). + +## Installation +```julia +] add https://github.com/p-gw/ClassicalTestTheory.jl.git +``` + +## Getting started +ClassicalTestTheory.jl provides two entry points to doing data analsis. +The input data can either be a numeric `Matrix` or a [`PsychometricTest`](https://github.com/JuliaPsychometrics/PsychometricTests.jl). +While `Matrix` methods provide full functionality, `PsychometricTest` methods provide some +additional convenience such as scale analysis. +For details on how to use ClassicalTestTheory.jl with `PsychometricTest` see [XXX](#). + +Consider some input data `x`, + +```julia-repl +julia> n_persons = 100; +julia> n_items = 8; + +julia> x = rand(0:100, n_persons, n_items); +``` + +we can get some descriptive analysis of the items, + +```julia +itemanalysis(x) +``` + +or estimate the internal consistency (e.g. using Cronbach's alpha) + +```julia +reliability(x, Alpha()) +``` + +The package will automatically calculate the coefficient from the data and construct appropriate confidence intervals. + +To get multiple estimates of reliability just pass a vector of methods: + +```julia +coefficients = [Alpha(), GLB(), Mu(2)] +reliability(x, coefficients) +``` diff --git a/benchmark/Manifest.toml b/benchmark/Manifest.toml new file mode 100644 index 0000000..f607c19 --- /dev/null +++ b/benchmark/Manifest.toml @@ -0,0 +1,973 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.9.2" +manifest_format = "2.0" +project_hash = "bad6e93102698bc7b3813aeca167b6ccbe3d4aa4" + +[[deps.AbstractTrees]] +git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.4" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.6.2" + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + + [deps.Adapt.weakdeps] + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.11" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] +git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.39" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BenchmarkTools]] +deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] +git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8" +uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +version = "1.3.2" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "44dbf560808d49041989b8a96cae4cffbeb7966a" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.11" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.CategoricalArrays]] +deps = ["DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "1568b28f91293458345dabba6a5ea3f183250a61" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.10.8" + + [deps.CategoricalArrays.extensions] + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.ClassicalTestTheory]] +deps = ["Combinatorics", "Distributions", "InvertedIndices", "JuMP", "LinearAlgebra", "Memoization", "ParallelUtilities", "Printf", "ProgressMeter", "PsychometricTests", "Random", "SCS", "SplittablesBase", "Statistics", "StatsBase", "Tables", "Term", "ThreadsX"] +path = ".." +uuid = "e40851f3-a233-49cf-835f-c29ce827671a" +version = "0.1.0" + +[[deps.CodeTracking]] +deps = ["InteractiveUtils", "UUIDs"] +git-tree-sha1 = "8dd599a2fdbf3132d4c0be3a016f8f1518e28fa8" +uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" +version = "1.3.2" + +[[deps.CodecBzip2]] +deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] +git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" +uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" +version = "0.7.2" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.2" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.9.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.0.5+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Conda]] +deps = ["Downloads", "JSON", "VersionParsing"] +git-tree-sha1 = "8c86e48c0db1564a1d49548d3515ced5d604c408" +uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" +version = "1.9.1" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.3" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.15.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.15" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.DimensionalData]] +deps = ["Adapt", "ArrayInterface", "ConstructionBase", "Dates", "Extents", "IntervalSets", "IteratorInterfaceExtensions", "LinearAlgebra", "PrecompileTools", "Random", "RecipesBase", "SparseArrays", "Statistics", "TableTraits", "Tables"] +git-tree-sha1 = "8a6e9c0ac3a861b983af862cefabc12519884a13" +uuid = "0703355e-b756-11e9-17c0-8b28908087d0" +version = "0.24.13" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "27a18994a5991b1d2e2af7833c4f8ecf9af6b9ea" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.99" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.Extents]] +git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.1" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "e27c4ebe80e8699540f2d6c805cc12203b614f12" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.20" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] +git-tree-sha1 = "f372472e8672b1d993e93dada09e23139b509f9e" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.5.0" + +[[deps.Format]] +git-tree-sha1 = "03bcdf8ab1a5b9e6455ccb45c30910d282aa09f4" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.2" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.35" + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + + [deps.ForwardDiff.weakdeps] + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.Highlights]] +deps = ["DocStringExtensions", "InteractiveUtils", "REPL"] +git-tree-sha1 = "0341077e8a6b9fc1c2ea5edc1e93a956d2aec0c7" +uuid = "eafb193a-b7ab-5a9e-9068-77385905fa72" +version = "0.5.2" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0cb9352ef2e01574eeebdb102948a58740dcaf83" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2023.1.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.IntervalSets]] +deps = ["Dates", "Random"] +git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.7" +weakdeps = ["Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JuMP]] +deps = ["LinearAlgebra", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays"] +git-tree-sha1 = "3cacc9aa90f3313e0375b1c4ac4641c8d57349ef" +uuid = "4076af6c-e467-56ae-b986-b466b2749572" +version = "1.13.0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.3" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "7.84.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.10.2+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.24" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "2ce8695e1e699b68702c03402672a69f54b8aca9" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2022.2.0+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.10" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MathOptInterface]] +deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] +git-tree-sha1 = "5c5cd501ae1d76d3ccd7c7e6b4325a15dde7f31c" +uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +version = "1.18.0" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+0" + +[[deps.Memoization]] +deps = ["MacroTools"] +git-tree-sha1 = "073f080e733bc6697411901224ed4fd15fefaffa" +uuid = "6fafb56a-5788-4b4e-91ca-c0cea6611c73" +version = "0.2.1" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.4" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.1.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.10.11" + +[[deps.MutableArithmetics]] +deps = ["LinearAlgebra", "SparseArrays", "Test"] +git-tree-sha1 = "964cb1a7069723727025ae295408747a0b36a854" +uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" +version = "1.3.0" + +[[deps.MyterialColors]] +git-tree-sha1 = "01d8466fb449436348999d7c6ad740f8f853a579" +uuid = "1c23619d-4212-4747-83aa-717207fae70f" +version = "0.3.0" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OpenBLAS32_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "2fb9ee2dc14d555a6df2a714b86b7125178344c2" +uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" +version = "0.3.21+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.21+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.2" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.17" + +[[deps.ParallelUtilities]] +deps = ["DataStructures", "Distributed", "SplittablesBase"] +git-tree-sha1 = "704ef2c93e301b6469ba63103a4e7bf935e6990c" +uuid = "fad6cfc8-4f83-11e9-06cc-151124046ad0" +version = "0.8.6" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.7.2" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.9.2" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.2" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.1.2" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.0" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "ee094908d720185ddbdc58dbe0c1cbe35453ec7a" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.2.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.Profile]] +deps = ["Printf"] +uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.7.2" + +[[deps.PsychometricTests]] +deps = ["DimensionalData", "Format", "LinearAlgebra", "PrecompileTools", "StatsBase", "Tables", "Term"] +git-tree-sha1 = "52b9832750bc1db614f84e0601e1418a4d191118" +repo-rev = "main" +repo-url = "https://github.com/JuliaPsychometrics/PsychometricTests.jl.git" +uuid = "f849c049-6981-48c9-9be9-354155c91302" +version = "0.1.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.8.2" + +[[deps.RCall]] +deps = ["CategoricalArrays", "Conda", "DataFrames", "DataStructures", "Dates", "Libdl", "Missings", "REPL", "Random", "Requires", "StatsModels", "WinReg"] +git-tree-sha1 = "d441bdeea943f8e8f293e0e3a78fe2d7c3aa24e6" +uuid = "6f49c342-dc21-5d91-9882-a32aef131414" +version = "0.13.15" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Referenceables]] +deps = ["Adapt"] +git-tree-sha1 = "e681d3bfa49cd46c3c161505caddf20f0e62aaa9" +uuid = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" +version = "0.1.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.0+0" + +[[deps.SCS]] +deps = ["MathOptInterface", "Requires", "SCS_GPU_jll", "SCS_MKL_jll", "SCS_jll", "SparseArrays"] +git-tree-sha1 = "0d50e34ba04e847507f247c393deb82993951b59" +uuid = "c946c3f1-0d1f-5ce8-9dea-7daa1f7e2d13" +version = "1.2.1" + +[[deps.SCS_GPU_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll"] +git-tree-sha1 = "6a61274837cfa050bd996910d347e876bef3a6b3" +uuid = "af6e375f-46ec-5fa0-b791-491b0dfa44a4" +version = "3.2.3+1" + +[[deps.SCS_MKL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "MKL_jll"] +git-tree-sha1 = "1ca6e41193c08fb345b58a05a6cfa8e309939313" +uuid = "3f2553a9-4106-52be-b7dd-865123654657" +version = "3.2.3+1" + +[[deps.SCS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll"] +git-tree-sha1 = "e4902566d6207206c27fe6f45e8c2d28c34889df" +uuid = "f4f2fc5b-1d94-523c-97ea-2ab488bedf4b" +version = "3.2.3+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "04bdff0b09c65ff3e06a05e3eb7b120223da3d39" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShiftedArrays]] +git-tree-sha1 = "503688b59397b3307443af35cd953a13e8005c16" +uuid = "1277b4bf-5013-50f5-be3d-901d8477a67a" +version = "2.0.0" + +[[deps.SnoopPrecompile]] +deps = ["Preferences"] +git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" +uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" +version = "1.0.3" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.1.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.3.0" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.2" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.6.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.0" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.0" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StatsModels]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Printf", "REPL", "ShiftedArrays", "SparseArrays", "StatsBase", "StatsFuns", "Tables"] +git-tree-sha1 = "8cc7a5385ecaa420f0b3426f9b0135d0df0638ed" +uuid = "3eaba693-59b7-5ba5-a881-562e759f1c8d" +version = "0.7.2" + +[[deps.StringManipulation]] +git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] +git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.10.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Term]] +deps = ["AbstractTrees", "CodeTracking", "Dates", "Highlights", "InteractiveUtils", "Logging", "Markdown", "MyterialColors", "OrderedCollections", "Parameters", "PrecompileTools", "ProgressLogging", "REPL", "Tables", "UUIDs", "Unicode", "UnicodeFun"] +git-tree-sha1 = "ffac67f6fbcbb32027d924b93ba91b7633af9220" +uuid = "22787eb5-b846-44ae-b979-8e399b8463ab" +version = "2.0.5" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.ThreadsX]] +deps = ["ArgCheck", "BangBang", "ConstructionBase", "InitialValues", "MicroCollections", "Referenceables", "Setfield", "SplittablesBase", "Transducers"] +git-tree-sha1 = "34e6bcf36b9ed5d56489600cf9f3c16843fa2aa2" +uuid = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d" +version = "0.1.11" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.13" + +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "53bd5978b182fa7c57577bdb452c35e5b4fb73a5" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.78" + + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.VersionParsing]] +git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" +uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" +version = "1.3.0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WinReg]] +git-tree-sha1 = "cd910906b099402bcc50b3eafa9634244e5ec83b" +uuid = "1b915085-20d7-51cf-bf83-8f477d6f5128" +version = "1.0.0" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.48.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" diff --git a/benchmark/Project.toml b/benchmark/Project.toml new file mode 100644 index 0000000..866d178 --- /dev/null +++ b/benchmark/Project.toml @@ -0,0 +1,9 @@ +[deps] +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +ClassicalTestTheory = "e40851f3-a233-49cf-835f-c29ce827671a" +Conda = "8f4d0f93-b110-5947-807f-2305c1781a2d" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" +PsychometricTests = "f849c049-6981-48c9-9be9-354155c91302" +RCall = "6f49c342-dc21-5d91-9882-a32aef131414" +StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" diff --git a/benchmark/attitude.csv b/benchmark/attitude.csv new file mode 100644 index 0000000..3f3d3b0 --- /dev/null +++ b/benchmark/attitude.csv @@ -0,0 +1,31 @@ +"rating","complaints","privileges","learning","raises","critical","advance" +43,51,30,39,61,92,45 +63,64,51,54,63,73,47 +71,70,68,69,76,86,48 +61,63,45,47,54,84,35 +81,78,56,66,71,83,47 +43,55,49,44,54,49,34 +58,67,42,56,66,68,35 +71,75,50,55,70,66,41 +72,82,72,67,71,83,31 +67,61,45,47,62,80,41 +64,53,53,58,58,67,34 +67,60,47,39,59,74,41 +69,62,57,42,55,63,25 +68,83,83,45,59,77,35 +77,77,54,72,79,77,46 +81,90,50,72,60,54,36 +74,85,64,69,79,79,63 +65,60,65,75,55,80,60 +65,70,46,57,75,85,46 +50,58,68,54,64,78,52 +50,40,33,34,43,64,33 +64,61,52,62,66,80,41 +53,66,52,50,63,80,37 +40,37,42,58,50,57,49 +63,54,42,48,66,75,33 +66,77,66,63,88,76,72 +78,75,58,74,80,78,49 +48,57,44,45,51,83,38 +85,85,71,71,77,74,55 +82,82,39,59,64,78,39 diff --git a/benchmark/data.csv b/benchmark/data.csv new file mode 100644 index 0000000..4c22d9e --- /dev/null +++ b/benchmark/data.csv @@ -0,0 +1,501 @@ +"V1","V2","V3","V4","V5","V6","V7","V8","V9" +-0.111029890355496,-0.206774171327461,-0.78062163078687,0.798910811777381,0.365922576696257,0.244104489938768,-0.860707454128615,-1.68549021002726,-0.96816977592738 +0.965864454116626,-0.931971319340889,0.94468843935768,0.0628218239488244,-0.14796814231603,-0.29598548481481,0.930450596661614,-0.0140388681774198,1.46632494754109 +0.00425232608592285,1.17904349637683,1.16637801364878,0.592653154501033,0.214240257747005,0.975752859140071,1.71622683098068,-0.763416483218034,1.49424608343399 +-0.301608475236817,0.100517050481232,0.965680793271385,0.711691921461804,-0.930126703641859,-0.679841525990579,0.768553051168579,-0.813618900474385,-1.49110706642286 +-0.768443218013561,0.0916685593513006,0.113524892556075,-1.05804340665462,-0.430644947509362,-1.29895327579319,-2.18092551388417,-1.54219884227613,-1.419066901969 +-0.98366820619776,0.513249852074711,-0.493582760541644,-0.152110018946282,-0.0425900184020123,0.277035910291996,-0.764359372158658,-1.2206419812228,-1.11899996843231 +0.829405713998565,-1.00790752865058,0.160681110333197,-0.890298915848799,-0.280745862102815,-0.575561605856424,0.969330850077569,-0.82193913215895,-0.716659958850944 +0.87543151946139,0.733813395003666,0.452875368040506,-0.101044923727219,-0.241019912600956,0.674691254834692,-0.559024404240915,0.601477482107281,-1.38234371321305 +-0.570191261511068,-2.12928028291266,-1.34855630762208,0.794976706208553,-0.172825461051928,-0.291433231350234,0.460796691843778,-1.51790945528322,-0.408400996973365 +-0.749601676502341,0.20819504512748,-0.652543799073772,-1.43163611070238,0.704768792074209,0.395092480348978,0.843151211559854,-0.763032203523801,-1.60760819686996 +0.555135884257091,1.02135339996629,-0.354371306603432,0.493237856871395,0.76864600112025,1.40936306408472,-1.5447278698993,0.134874018146824,0.0653790288931647 +-0.302865446585585,-1.57933360332745,-0.818721211870032,-0.932117377302693,-1.467383188926,-0.0892401157027414,-0.564411087823607,0.334314313570948,-1.05710508247465 +0.987143808749663,0.53932750881537,1.70094340831383,0.445231972369775,1.15343997486912,1.1654638937435,1.40677178619842,2.32467955024842,0.282853368648754 +0.508783280694115,0.488108370484885,-0.637339339146419,0.550079989691934,0.62356457833512,0.965382234767394,1.65611105018712,-0.387071096164069,-0.772050982184443 +1.52260588328837,-0.463550752327308,-0.574485421927446,0.435673318843039,-0.536019311711564,1.10613062289204,-0.405577036500599,-0.0436328512536946,0.0172147286474563 +0.252028248426582,0.886140906864813,-0.410086793875883,-0.371588226132803,-1.15494262695402,-0.443412696752644,0.0990841205334893,1.21680178925537,-1.25875642880881 +0.15198577353218,-1.51463186730329,-0.821452364844412,0.0368653119590248,1.37245869500505,0.152637929321413,-1.25867905543128,0.336904175227183,1.33431021475226 +0.969687127745842,0.00909373632130023,-0.718674945069861,-0.426236551739247,-0.774076398881374,-1.4146472202992,0.356905598858776,-0.0210769576431493,-0.376655233583988 +-0.276526169942459,-0.0606122609278201,-1.74016819099028,-0.563820698865575,-0.643406265108497,-1.28796805381845,0.567950080304146,1.33195029051987,2.70114623460006 +-0.287014004594933,-0.437313937192907,0.0924853065969032,1.71380869380446,1.41907026924301,1.71996585775534,1.42932595980858,-0.2141999804264,1.70674045842982 +1.12138055589429,1.6468049181696,1.00528540650222,1.50510606389359,1.5877939103683,1.64034434777964,1.66893520100899,1.79605125449609,-0.161847048713009 +0.729619350223315,1.090208405601,1.53344591575158,0.280723563671806,-0.149452503512917,-0.561982737543926,0.557347889991604,-1.24314245831566,-0.761378979114899 +-1.1050498954744,-0.992535741942601,0.355944233560337,0.125452449524216,-0.696217657382495,1.05585557406324,-1.6958186710713,0.761840628365654,0.816354680470836 +-0.833698027742797,-2.25815479719949,0.416909313127923,-1.87159742015404,0.651885734476478,-0.629131065708433,0.691290140145517,-0.608514725259424,0.921962770784745 +-1.48465254140067,0.608777218145537,0.128629477946069,-1.57729798481609,-1.26110464834857,-1.06529598678036,-0.24109733713145,0.647292030943547,2.00678694401576 +0.17625708668731,-1.31414098428815,-1.27780958847616,0.487222237982858,-0.373754385154372,0.496794531939423,-0.653837847717103,0.871517806001823,1.71913474460545 +0.280397990429153,-0.507278840595316,-1.01969356783281,-0.127968138901892,-1.53426496529233,-0.36143986541007,-0.0612915040254038,-0.69994153098219,1.46993773100706 +-0.24866348612476,-0.430911615577592,0.866914675747281,-0.904991263296261,-0.773725219857158,-0.681750237182812,-0.0614741079173566,0.159905700965208,0.308570514370103 +1.02384696226732,-0.230163225618095,-0.300913175141833,2.15267543575636,-0.460120211292381,0.427886847091275,-0.961345744316498,0.513780820977749,0.308840101558693 +1.36720190145806,-0.0590604794349788,1.01509926721768,2.6252495492643,1.10004586189788,1.24418099245166,-0.522135231298583,0.891517197023817,0.784286905814897 +-0.871358404152697,0.360525789522999,-1.3204799678685,-0.827870679852371,-1.73743578969165,0.073238672910846,-0.509508138742464,-1.34709040043758,0.454770594401678 +-0.945640872639945,-0.383346330744664,1.58837539976171,0.15092362040665,-0.0056015172704299,0.100174518235347,-0.286171140931391,-1.52144599359065,0.29897579701326 +-0.0420451597546204,0.668455585335877,0.486599002323462,1.27129893862996,-1.81569392889255,1.10607130534001,1.17412150476992,-0.479172373532586,-0.216000628990387 +0.0698198200923982,-0.507853505381086,-0.478012570067946,0.00152050038786362,-0.760924113539774,0.217549329156501,-0.0137253174270909,-0.943818765700439,-0.511514723073098 +-1.73094057510134,-0.892375227798306,-0.898836913157129,-0.9712721066903,-0.418677722375896,0.320862796595459,-1.99161497848466,-1.05089904924074,-0.729060521366993 +0.367466626624,0.355094583808206,0.437649399330084,0.369653031366327,1.17258547977419,1.50802515256516,-0.558464841649483,-1.50643398354049,1.31033961402395 +-0.840703691583498,-0.240137474665448,-1.24507975671045,-1.29691825626442,-1.38327580977854,-1.65497787071224,-1.06758336573439,-2.12819818879325,-0.81645453317098 +1.29110224096385,0.893406418614096,1.71319025880954,-0.0764194726003392,0.36698798092749,-0.377953036163717,0.627189211732022,-0.96080528070212,1.32277694864965 +0.405165456803097,0.479398030411015,0.497651262174997,-0.0740678194464042,0.791778075825387,-0.00690875035479055,2.00739684385256,0.628114439720611,0.82847810857744 +1.03246255063595,0.333029123854058,0.250482867076374,1.40394735756531,0.673602710690085,-1.26097018426879,-0.29817122070583,-1.10660087413812,1.06774607953368 +-0.175938545569208,-1.04110813177026,-1.05673033127773,-1.01140404598557,0.76917534244519,-1.41161676634522,-1.01670393067091,-1.66985968783848,0.519046672912943 +0.430051169341154,1.77047954005467,0.082758512096482,1.22401437618748,0.666713906748332,0.341147548254378,0.596804512393,1.25291588065151,0.461623942931509 +2.22511824552562,0.00679539942423069,2.33708818559128,-0.757289076003813,1.27431683293938,0.408227832757505,0.391281085225461,0.0329039868437259,1.24081808350179 +1.31935360678513,1.71368112817576,0.68174144885266,1.47883204104855,3.57174496118119,1.85774390663237,1.06428494052208,1.03153217229861,0.563063497537421 +0.435963886027092,-0.763381524992416,-0.525777097083884,0.385963867718016,-1.22463241870628,-1.6026460239901,0.343293031994882,-0.983313812531755,-1.00102115411093 +0.339152631558075,-0.10075675380307,-0.619427887768678,-1.38555308165319,-0.292325360513158,0.94805989726266,2.03202267165607,-0.504915285133105,0.726444954946928 +2.12895952939706,1.63860452006981,1.25951381311456,1.97529320588719,-0.0104207403818624,2.431567625723,-0.616099263336177,-0.792974152073996,-0.0991223934622818 +-1.45192701009847,-0.208962502594465,-1.22219476038976,-0.846603852614351,0.855996481297175,-0.420317571886189,-0.650795424329268,-0.351606076098788,-1.09596099027925 +-1.17513705085362,-0.806734297235486,-0.789997148256803,0.165399078740261,-1.3932070873216,-1.787941742985,-0.591145877796277,-0.922875097275722,1.08315290095651 +0.486855306063305,-0.658967836190521,1.42486875706643,-0.469217695048175,2.04084151653324,0.760682941879232,1.07007271496238,1.1693501594922,1.31227455501727 +1.72257464530244,1.93602746517652,0.910223352720614,1.65458323706426,0.609800729164146,-0.292505177404766,0.930558315187997,1.91783431922756,1.30453863404637 +2.32167364958368,1.63601293746802,1.27203164731898,-0.489366962347482,0.68309692169051,0.970645270000942,-0.757609708833869,-0.101259535747065,-0.51174797778852 +-2.60615602802213,-1.25764511292464,-2.57895117845955,-1.62918840760166,0.195630414701922,-0.153515946055451,-0.856531610579071,0.979668760634081,-0.256766827370121 +0.0950595814632783,-0.620425727985721,-0.661610129188949,-1.4908833075777,-0.985835663794357,-0.180861486356974,0.853912251501069,-0.224926611195117,-0.234577991881042 +-1.11828243964066,-0.959052648169185,-0.834359260360428,-1.67442866908021,-0.858993448583073,-2.32272778660963,-1.52771488124643,-0.803022331355511,0.28989690748731 +0.595004089962213,0.532592352431619,0.254202727389535,0.125339270379555,-1.47990573102872,1.14545363116525,-0.5419955359763,0.569601164715781,-0.695449227875588 +-2.51745763589172,-3.19758927679727,-2.64293571251503,0.0482328831953895,-0.986636438584176,-1.44588102262069,-1.09043489663486,-1.5594784852649,-2.07818423426832 +1.19945606939388,2.30526411026572,1.28215681470053,1.56701113292168,0.14503191894094,-0.325773936371252,0.0774645406810839,-0.123792073218608,-0.424802449028498 +1.00449652486361,0.94943130488211,1.50667979979274,0.145503607251268,1.0307910279856,1.00215419908403,0.518361692220257,-1.20508911806413,-2.1111128359413 +-0.248632607063926,-0.294342668617589,0.295292592120898,-1.27015002751935,-0.978880623719214,0.591140866040308,0.0952844336105726,0.251547649325157,0.591090447790795 +-2.71425851637975,-1.19126643629103,-0.387040295288878,-0.998580443614651,-1.37045286900846,0.186881257784264,-0.827365564197006,-2.0823075551645,-1.72490046913281 +0.887576565126159,-0.860917785813332,1.53532149640288,-0.449688008476579,0.396141457446359,-1.41824859009087,0.396343018139695,1.58283069368779,1.25667205580506 +-0.362148406118918,-0.826925242384277,0.659217800028593,0.199749058761238,-0.0329491585249607,1.77609214565545,-0.249024190991912,-0.699817636732636,-1.53856298877615 +-1.20647181061503,-0.401012067320146,-0.76360483245423,-0.162803577700972,-0.278837436550059,-0.988795197583263,-0.388508037208915,-0.484226218444929,-0.327272840658128 +-0.249151246349262,0.32981673215112,0.818622336728169,0.933894126122012,1.37488753197603,-0.417100638746344,0.409697533909299,-0.0135525941012792,0.0303960878090345 +1.74903466804532,1.29872077516234,-0.0892631191100606,0.184809395471744,-0.398622355811072,0.466289967498365,1.67954703469101,1.48198415590028,2.14506159601985 +-1.5503590211971,-0.957984990781352,0.210680531302416,-0.919981156643445,-0.725697369401672,-0.830848070077039,1.36467998797707,-1.46896202444784,0.433484978859665 +-0.549307366542413,-0.275049047990005,-0.918016262426693,0.271310081905069,2.28655870217912,-0.0508940259784705,-0.262180757820859,-0.722769636841297,0.548404050427127 +-1.6964689879597,-0.023444087094239,0.0103879727734387,-0.347495838713008,0.0836784153759508,-0.122347195052136,-1.44012478529661,0.262269141487249,-0.525988235769346 +0.91694741200769,-0.581577387141238,-0.213103777043857,-0.0670478287418474,0.874305009087368,0.595204235598231,-0.785887866467129,-1.06301245480884,-0.654594183584146 +-0.0903980127362444,0.756209391821574,0.230453304454162,-1.69185723012114,-1.09424430035785,0.227934834820413,-0.32819956737491,-1.39435747079964,0.0706217808319812 +-0.396832508488312,-0.503833246274239,-0.995820340396535,1.4246226489756,0.958426742422306,1.11119355408856,0.246859783507688,0.13568156021464,-0.259454631463921 +-0.587749434339869,0.240832729850084,-0.699980833295563,-0.795785331970814,0.302645097766812,-0.846034479452298,1.43894414778772,0.51505889034122,-1.38116516160834 +0.655032006245088,1.03639037291812,0.682477379138039,1.26077812126528,-1.02606232633033,0.0508858163491998,-0.660636154571647,-0.231822214945248,0.177463130076396 +0.363410473686682,0.25839197270022,0.359781574849754,0.302272467145077,0.587955637779022,0.0771051384101673,-0.0387019063776086,0.562459558025394,-1.06825742123354 +1.62742137643321,0.348112143651259,-0.14770595603089,-0.190297618193629,-0.5272384199494,0.39243432552714,-0.148664518728341,-0.71166772200026,-0.593921569642074 +0.841771868452189,0.525671828258042,0.918047595231868,0.130761593320132,1.25669687733151,-1.44202264695653,0.412158888913707,1.21096602555646,3.37526460065756 +-1.42888091752279,-0.533421878110302,0.541157433457146,-1.03742401221453,-0.301554535586692,-0.0182986879092162,0.837298847326666,2.23295571373669,-0.3894864453198 +-0.75600506551315,-1.49212653098216,-0.690864096892814,1.57350882376961,0.167079040104814,-0.267360464801708,0.293625381093685,0.0384283566959424,0.47351187163996 +-0.51504121362398,0.203229882195359,0.954597832831776,0.274705053576983,-0.484526258540521,1.29809385026685,-0.311703256018728,0.924776801156959,0.2071154210497 +0.173083300904474,2.10453606665151,0.540108880920421,1.95384499122893,2.91881143595241,1.33919448562539,1.43073385862631,1.98864954951791,0.250166187741377 +-1.03760366024486,-0.709795454990996,-1.56179076932321,-1.18279480222015,-1.027394564048,-0.373181504784248,-0.0183459895473095,-0.786167999503353,0.182430737762748 +0.804390000478002,1.07283220575558,0.876774864008598,0.101728447468402,0.19492523575378,-1.26946410565604,-0.794970631858651,-1.37027787353124,0.151621393841688 +-1.97356537088429,-1.8791485455476,-1.82074815172005,-0.399064371952114,-0.126280418622195,-0.518909433116332,-0.424247205754606,-0.454887700143838,0.349013060044028 +1.12864621153422,-0.00845772027084901,0.53764809649585,-0.559823882697528,-0.974917636277858,-1.270283865158,0.364675540164308,-1.53510801333979,0.290337272680119 +-0.788745234920752,-1.5068140188647,-0.421291071023375,0.494964063832052,-0.694142613551725,-1.49124357876795,-0.849118756539784,0.657708098672867,0.898338481760926 +1.29596787871817,0.701037745412647,-0.398236047044985,-0.118582576981064,0.673373599543227,-0.714765048833251,-0.842338774022566,0.679606686824333,0.53907510422523 +1.80404944493886,1.50905162152085,1.37378854796665,2.34967484390567,1.01262876354198,0.590664962515498,1.81782424590346,2.37594264674105,-0.058013512258177 +1.86750588540649,0.775919841501858,-0.435510912693198,0.605409431117479,1.56376655744581,0.328384706273708,-0.173674154066519,-0.431427093909032,2.13265514721177 +1.07857373348316,2.61870054327544,0.760466764242382,1.1485492201151,0.619092956622316,0.84478524454757,0.567532453655922,0.263656530006458,0.0767917842393354 +-0.423631739108593,-0.81405881264059,0.913042331143434,0.513078633245519,-0.318598889500247,-1.22461401129071,-0.254753846985732,-0.558854295021816,-2.27796655633088 +-1.84932507613669,-0.715870604514026,0.239275856338545,-0.581666818548903,0.881417401632253,-0.438106144701117,-0.309000485423442,-1.47164489989421,0.343848262356673 +0.292646019801971,1.18593858421354,1.91776796432426,1.01330572556767,1.50736904646422,-0.854803104794247,-0.205196589465414,0.733488371922638,-0.477988081814839 +0.0389684888954394,1.2792476152225,-0.451181727588193,-1.6629160772128,-2.30608308508701,-1.80090324398092,0.270883514203747,0.188080901916055,0.300382914838531 +2.21065020182906,-0.676623586559728,1.1697909503098,-0.0222154243769174,1.41630241101021,1.28532707630343,0.272839927645024,0.774429078672768,1.0688691438463 +0.619981361866216,2.3805549845055,0.246863936576082,-0.778550563670103,-0.447811636085204,0.189422353730611,0.66341322195298,1.21063285262691,0.729312328366826 +-0.180154749257074,0.708324572332818,0.421572127162526,-0.567500144993927,-1.17562301197902,-2.1328234780008,0.116048620435585,0.0136756851515859,0.769364777754319 +1.37870627705626,-0.30717588232955,1.3768300191605,1.06917407337619,0.571618242149889,0.950658924283525,-0.226375551581145,0.104229603862974,-0.510651127877006 +-0.146115820226927,0.745220326402945,-1.32905480668146,-0.200666815831596,-0.412327481709063,-0.0179585525523266,-0.0545317164788836,0.823743769760623,0.317093327888087 +-0.561205446603496,0.56366819064521,-1.77407113423957,-1.57011600288671,0.348149376690892,-0.986032399380085,-0.424977949040934,-0.285219897994803,-1.57188273637113 +0.565384390124616,-0.276135510077145,-0.48706197754369,0.0465691874991613,-0.0576573552986393,0.364937908114917,0.373396862391679,1.39939629879582,2.13344032934696 +-1.95952187690184,-1.10528857963176,-3.28253249926689,-0.525764265680508,-0.507359783278117,-0.508790969046275,-1.80333892145181,-0.249241422410008,-0.296081036008442 +-1.69235373703627,-2.57637917147624,1.46956598015227,-0.270991824132955,0.16385502099242,0.79762493353718,-1.113456398006,-0.81735624157926,-0.631000339550175 +0.333734644975978,0.204763759851567,-0.941965976287811,1.63399384107814,-0.206991770352941,-0.518247945500363,0.265598758102466,0.384603043341752,0.43716522235692 +-0.335682675351102,-1.1437949326997,-0.754634538502689,0.324888989670213,-0.944721680800034,0.535601088829795,0.249835020955194,-1.92687394160764,-0.111067894909201 +-0.679233640613446,0.964032656331769,0.971651380162898,-1.79267172482901,-0.637693751254316,-1.32429025831123,0.202001452443314,1.67150559932795,-0.20148462975988 +0.0438778884286075,-1.55936443420506,1.21580767414777,-1.78454113266818,0.129438574406653,-1.1035956497976,0.244941465728607,-1.19772316020627,-0.158697798761678 +-0.13328685303304,-1.83718762134996,-1.38138818138283,-1.96380690799183,-0.542050494403104,-1.82146021995318,0.429385049251624,-0.490196707787203,-1.82128438451987 +-0.241261913565519,-2.0060985579226,0.169262671380323,0.362912878376233,0.373977751992978,-0.699958967279736,-0.470444383259843,1.14523583584716,-0.196759548024386 +-1.83562050418607,0.289705782213033,-1.39104124654408,0.0345925473717372,-0.495349617186768,-0.0198788213894789,-0.772836440961178,-0.910331761944381,-1.1243370014953 +1.45130717447385,-0.431813502750283,0.666067284954825,0.647513380443125,3.04394625886342e-05,-0.155090987167087,0.494189611379658,1.26253681232866,1.20084592872876 +-0.0981190437718014,0.140466554087503,-1.35554332142195,-0.121836084994535,-1.60688556954414,-1.25019075954655,1.1249903134991,0.587940702309984,-0.433971755160572 +-1.65264086773846,-0.507524894057345,0.55736346494264,-0.612805252358196,-0.465522543529789,0.879196821612213,-0.266366761479953,-1.17308163240665,1.15562106885451 +0.631068028162258,0.0415634224472436,2.03417023387334,0.51516639462816,-0.0506618025315659,1.59688100035246,0.50975418620934,-0.390033976361101,-0.672328850249179 +-0.265731016785793,-0.739321284280489,1.54275518616394,-0.519775972613546,0.329451241381572,0.663623183921369,-0.255246897928089,-0.145650540826907,0.39063071472818 +0.111545287804767,0.606760525932841,0.902101362266981,2.0968248996557,0.867671743411333,1.97693872684128,-0.161842316858509,0.143381909007511,-0.562457379388143 +-0.3258284694746,-0.728767474646199,-0.881572522979807,-1.09946601876204,-0.672336081726541,1.38989918406934,-1.72163513498275,-0.522388528292738,-1.63603559514688 +-1.31491362297784,-0.381550023542374,-1.0926402320623,0.146272774649631,0.910934520323952,-1.11795392771002,0.392291405031828,0.704483331013702,-0.436710492318295 +1.65415321600159,1.51952551401919,1.00268420015209,2.39859829588542,0.869001500003946,-0.366102053394943,1.02415709052415,0.816462212776562,1.2675306652762 +0.838084696625224,2.21947057279523,1.24852488334322,2.88644062960069,1.77685006454949,0.764059352161798,1.25458225128189,1.93337936565345,-0.00458978941603572 +0.646933589557523,0.236048284490397,-0.449648542318989,-2.59703418625049,-0.474526347597497,-0.0209075987858505,0.686870379104151,-0.455136486556351,0.0935388988524579 +0.0876641778814493,0.540918032129985,0.268340534477058,0.119218261324724,-1.3011958996073,-0.948994544262196,-0.53057733948161,1.2229377754402,-0.931478848670529 +-0.397852200132722,-1.02964812695755,-0.461951759086367,-0.824627035405463,-1.31483528206157,-0.273052282185013,-0.414879489956004,-1.50668433372358,2.13782826319217 +2.44803793154239,1.59789568071764,1.14814704091679,0.20411548592,0.97037419164587,1.22086586680704,0.902418007071436,1.58818916604249,-0.170138665527798 +0.113764743107334,0.759147379196701,-0.557973324715694,-0.472121907446114,-0.900191754711258,-0.17037791477005,0.12475655142526,0.0679795195519387,-0.866042294942266 +-1.45389439282197,-1.7487850761607,-0.65317240686649,-1.59133896867105,-0.636028456731149,-0.629930120562319,-1.58501474258564,0.37355953134174,-0.127363122836179 +1.73261965614451,-0.793853021933768,1.15496292191566,0.422723901339094,0.487835030291526,-0.60233317778434,-0.905964844007575,1.21394406636281,1.69130734212033 +-1.39312959190611,-0.0470023223867929,-0.683130588283805,-0.27461987935795,-1.49352349671741,2.24510935482317,0.446457544668631,-0.0507528804240418,-1.55695103772451 +-0.90952979399418,-1.44116318063627,-0.51764766227577,-0.25103564241917,1.26152019393955,-0.00377455154777251,-1.48013968403912,-0.435240445412979,-0.508088665932537 +1.30190878267131,-0.109927709216187,0.256539967217039,-0.435521473505875,-0.0592846899472156,-0.514282067879705,0.822451114564444,0.306210008744485,1.12767927657809 +0.647322227226007,1.38684439937396,1.19171244244244,-1.61615046145607,0.909011146416043,0.4423124103387,-0.545023216418051,-1.38550504138469,-2.04034422095751 +0.371177647992934,0.0478270027070011,-1.61337069107432,-0.133684012943997,0.453613550743985,-1.0819928551204,-1.0956857921996,1.90419362455673,0.1633525136606 +0.651823751501226,1.82111439761966,0.39623937426144,-0.203847596029737,0.882625772123846,0.0742648735597029,0.485458764318047,-1.16412906868446,1.6971211674336 +1.72946003995109,-0.0377014644868755,-0.696073905159265,-1.08977049325056,1.67880401204599,0.296989983494837,-0.657544066827215,0.266525925825817,1.51936925229466 +-0.936858902957,-0.909756801461432,-1.29248156187012,-1.04402239338413,-1.7113722120252,-0.415575220592636,-1.26836017051668,-0.762739063959882,-0.897545796558401 +-0.470986818618441,-0.242324418032934,-0.785479252158703,0.159114244269543,0.4257779215017,-0.642745295562052,0.20763872916773,-0.267441845045241,-0.88224259273617 +-1.08688962439571,-0.735402889211343,-1.572746763203,-0.415475195108218,0.316522995517461,-1.15900549328213,-1.46179139342212,-0.0556276005035514,-0.329843669410207 +-0.494598284841288,1.21910404837591,0.145337593517326,0.628249723463363,0.770764904351933,-1.02379082111216,0.721298219459305,0.131903835904275,1.60658932326867 +-0.623223301810086,-0.45010184200205,1.31137079922658,-0.56878568810964,-0.496695976429427,-0.191850909140935,-0.23788586963795,0.698709462493321,1.91173609379972 +-0.886600995561711,-2.29766743794033,-1.26845474951428,-0.081912830715861,-0.342750485222157,0.332194977108938,-0.193195083183807,1.54056593236687,0.137684492231109 +1.17413380422837,0.712490837110664,1.44557138933984,-0.0221121292575706,1.62448196930147,0.797086211631966,1.14715791100087,0.974351508998585,0.389468404099005 +1.00817770699956,0.0881514328040414,-1.05229660329923,0.151462215235259,0.355321176563345,-0.956017662476582,1.32261726144025,-1.48272320880718,-0.341346029638495 +1.82818133862469,1.41467877847349,1.08159037883245,0.772886864092736,1.35760628212028,0.741613845318989,1.71122952887119,1.27129838388164,1.05575567937789 +0.307063025767855,1.01852297428809,-1.28735131941817,1.9739560651891,-1.11665867363422,0.306040103412618,0.946990831582173,-0.390576219111094,0.963410064917459 +-0.0309397858652909,-0.283897278530716,2.15327806436482,0.359769354673788,0.341785227441549,0.8837641544272,0.466288057348094,-0.0906650817973082,-0.249765292958333 +0.286051042010956,-0.143657323508223,-0.257002806493269,0.455522419628713,0.8253526202189,0.0259272334100504,-0.744443588479485,1.08455663415462,-2.10444739572148 +-0.73476311920851,0.715643907464546,1.51020904357734,-1.6207195970885,-1.56605283626161,-1.34992169197607,0.306817437753111,-0.23303604650146,-1.3793233131868 +-0.106261202220487,-0.115615265890917,0.0800390331911626,-0.851038039055619,0.865178422339192,0.0579919349794614,2.04872017080587,3.25829029917992,1.41087822741435 +0.872011983854706,1.07267474991038,0.725115310889376,0.740690894176758,0.40774870079321,0.887546149763471,0.245733068895736,0.0355534412631671,-0.32230492058055 +-0.838793718711422,-0.047103496719044,0.709625803830259,-1.55628119853812,-0.576429561804642,-2.22445875470078,-0.825634369938935,-1.54148750226455,1.02749276538536 +-1.88840292713095,-1.22931439302863,-1.75287790131091,-2.19413544605633,-1.71330003586599,-2.28287125088643,-0.319055741600011,-0.985579129935488,-0.355080483352946 +-0.584657143838503,-1.08464058887631,-0.274201586879806,-0.057096277075992,-0.714415315597955,0.344237415523434,-0.377528017480533,1.30710243684866,-0.538211166917376 +1.18504933236119,0.0269587778667858,0.603262114501047,0.767822283495498,0.125158810297264,-0.455957524881943,-1.25879768529016,-0.601551890407,0.403927081193521 +-1.57047970069828,-0.999787193609296,-1.72994226918135,-2.01323084586802,-2.06147244989251,-0.791062632877821,-0.242691724213431,0.914060290427019,0.466142683376374 +0.0701380156284017,-0.57446424064305,-1.81874316163433,0.807489308920535,0.18281826413688,-1.51242300968153,-0.259825837322282,-0.137977507814243,0.206020622784174 +-1.23229238111973,-0.972291044414439,-0.648978416183834,-0.475375008301614,-0.395158731477014,1.04635745849275,0.00293443930435441,-1.0689701194674,-2.11487287215983 +-0.406088634081712,-0.655382334728999,0.934137595608279,-0.643907051771004,-0.388716588007481,-1.52089728382226,0.193655394534485,1.0036132844396,0.620410000605271 +-0.122698061816152,-0.424810161210483,1.06379347659517,-0.984993576761963,-0.273573433487522,-1.55720745232724,0.369672632803677,-0.120305669530682,-0.0122212276414243 +1.69611068344765,1.86751004858587,0.726334093244576,-0.0759114165236782,-0.391921855980957,-1.20964083605047,0.0325268751399672,-0.411296264844183,0.923112904130175 +-1.49742456539152,-0.853120086441721,-1.17094208769506,0.347340314702131,0.709789129258954,-0.360696717914424,0.460499479526004,0.706808048521495,-2.37397748881585 +0.0717180522504882,-0.304056826069745,-0.0146086268318555,-0.344020338492481,-0.472698732246695,-1.28606945181799,0.0574280295430907,-0.797770496923834,-0.494049874744489 +-0.470078228421577,-0.968014059622048,1.18064996246465,-1.08941667000376,-0.0578079388223255,-1.9543989050229,-1.25733807251856,0.228952336056428,-0.587046300879868 +-1.3064214777532,-0.0609699762672542,-0.68567614855099,-0.795001517360902,-2.49818105041352,-0.279398422259243,-0.831635006612435,0.468644606760834,0.574102478132994 +0.000653149110871443,0.246927334556939,0.2780984727258,-0.0701442935694357,-0.32109514799384,-0.561047706946067,-0.6122751656032,0.944034871246435,0.108386413937867 +-0.225577394159533,-1.43419197417632,-1.48526877176046,-0.00222915911482646,-1.60515521497553,-0.237245496015412,-0.60655849258171,-0.356531338583592,1.91368155855548 +2.3649569937895,1.27475489993641,2.4590921020502,3.07954493634714,1.28178313230891,1.97442675000959,0.412454748914339,1.842580798243,1.41430569441938 +1.26264242960659,0.628460379948521,1.34885137886467,-1.06439416609558,0.639738192571143,-0.0161127228553807,0.603726662913236,0.0137335044678213,-0.0533103229088543 +0.600248044910406,0.689919347016899,-0.592543169129447,-0.48333132587075,-0.302190093185115,-1.93906350916664,-2.13640290504794,-0.389232226830271,1.11141498674536 +-0.489422783743214,0.293607620199307,-1.06534466455358,-1.86199106511361,-0.687698306165695,-0.773779236717453,-1.07849966195419,0.0501725816286803,0.0709061135171816 +-1.98379717110685,-2.11142670035523,-2.71745046848918,-2.34200392164915,-0.462868553670168,-0.829754520725108,-0.722076625364356,-0.8907648460066,-0.499534325682925 +0.43371425309756,0.503453046290726,1.18247540823713,0.744172094221885,1.36309435500695,0.245480781496577,1.49021363782168,1.21525479120505,-0.604656852310608 +-0.151622165059211,-0.510581394504111,-0.0954185530593175,-0.148003044602093,0.342224683486713,1.25269915371861,-0.30630047358564,-1.30937645288732,-0.0174747486076019 +2.25794815672633,3.18043525219788,1.33461804241526,0.231335910653211,1.31459767242975,1.83084646403186,1.13122237084289,-0.108722852538487,0.436669856108059 +0.403605897071747,-0.724348805169245,0.0728836415505381,1.12550036506547,1.03967418671374,-0.33041220260489,-0.564738227286479,0.402001862407591,-0.263098872578946 +-0.856228588152808,0.592777937599275,-1.24731859062628,1.20557830617048,-0.207643628067311,0.884520498124413,0.0121698548351731,0.228219956292661,-0.299320338979607 +2.27282458179317,0.521897893502298,1.57920784482435,2.04020321558439,0.234443426800782,1.89617267069,1.18308741925964,0.185582263178856,0.682862903551283 +0.564527164238347,1.22689212568765,0.288021267566172,0.769654127043735,0.955677868227038,0.418130816763863,0.352249027229036,-1.26440922205866,1.77130077626037 +0.281902515091857,1.81882033787241,0.647593048452737,0.493936520746388,0.660004637665056,1.31736860449968,-0.708350115168475,1.13561765202489,0.37359678577609 +-0.925705992945463,0.529586114130138,-0.208884180684217,-0.927686879120343,0.284516019317872,-0.609247215139677,0.260891048919814,0.831161126034425,0.125302028581814 +0.776954524821253,1.69757040560635,0.597687586025835,0.582447042069146,0.732372737793533,0.123987110048412,-1.59560752294639,0.065510674119193,-0.1127592042303 +-0.428770062728115,-0.38249290118964,-0.311889003062423,-0.576384375107384,-0.873924970432755,-1.15412120850523,-1.11357564930105,0.287646323410484,-0.460285718579159 +-0.872353669700639,-1.3426559114759,-2.06767466326501,-0.2634917226944,0.136852477464832,-0.732366991613468,0.402429945027155,-0.476843742736094,0.60879424503927 +0.480569110515984,-0.496859590656718,0.297883667815781,0.640156609754826,0.951081942497114,-0.64920298626235,0.569454498536499,1.47202613815339,1.11751162006607 +0.108335904646258,-0.543007092357577,-0.846785871464441,-0.646044755671297,0.548957123080484,0.481745394882584,-1.04130258317695,-1.54886298970437,-0.261583269257619 +-0.153348453698678,-0.835367288725226,-0.210125497194518,-0.630717750084226,-1.42884474781758,-0.167580970931553,-1.32217027582035,1.91819416726706,-0.325351270754898 +0.905958107615516,-0.65967519126116,-0.734413159807504,-0.943289943882009,-0.842399077446326,-0.307450811397329,0.464618989951127,0.630238284682026,-0.224216393837585 +-0.745073267120601,-0.711724445877066,0.925500115603322,1.17205943813739,1.78159808672657,1.21012657111535,-0.13218738384984,-1.75028580169125,0.111889155873167 +-0.129781626392458,-0.23025960238108,1.45941658397872,-1.28130333672001,-1.18561362439693,-0.153586479468183,-0.655489756630387,-1.34137117622279,-0.752617687889045 +0.123872513526715,0.741969956373163,-0.438812632556804,1.13464088755807,1.05040641240423,-2.17991609420489,-0.970796138743172,-0.961909090796274,-1.08336205047473 +1.38587359121884,2.01794610801655,0.132349584894218,0.971599992358564,0.389137132357429,2.07376420842015,1.06358254477102,0.15180079742276,-0.455380884897575 +-0.49605628213436,-0.142254504690752,-0.280722582218791,-0.290621789410461,0.688932693702711,-0.901707452602085,0.234746101122956,-1.12939257244426,-0.0441241607705459 +2.26936370243984,1.94928247888297,0.986914859513979,1.9968141488636,1.00024775456635,1.8208439826836,1.35132526318347,0.901602071626022,0.837650256975475 +-3.24785498112791,-2.37663972527152,-0.905891403622161,-1.06849969951393,-0.720563280302153,-0.591100422766223,-0.855017750994618,-2.2482188272857,-0.185555130321621 +-1.49506937436683,-1.36989776454141,-0.10548095400438,-1.26922041184017,0.526747948976231,-0.675113605069651,-1.20923937407168,0.251376124556368,-1.44510587489097 +0.461403783532488,-1.33408214311969,-0.264280774227298,0.233140054447501,0.740226129692933,0.244269706431444,0.378738337378242,1.15659220775595,1.56349827261275 +-0.176727937848842,-0.638964358222129,-0.436167548926332,-0.999340279114517,0.740799224230987,-0.316777380310768,0.86969232471154,-0.39386628243303,-0.694097240855348 +-0.510206387084226,0.170066522799879,-0.811158736907796,-0.796417574862442,0.254485663011732,1.52662043453779,0.0829837523423987,0.813230806585934,-1.3215934475001 +-0.878260802199795,-1.18132252107757,-0.657154151379277,-0.935425767833724,0.227351532364832,0.518419848524655,-0.328219907557392,2.17687331114596,-0.634840085129407 +-0.807116707669032,-0.0855131801102137,-1.114563203409,0.228388587344237,0.529012398983332,-1.30255517287218,-0.0119734005435324,-1.63244885002934,-1.31511533749998 +1.81903971436817,2.23452256893066,2.39112990127813,0.339983103634082,0.89872547885355,1.76349574396587,1.61844052707165,0.33772543143527,0.775738720545407 +-0.184616018405377,-0.293202652214468,-1.09997789242511,-0.255627831661015,-0.108523180751931,-0.516030127305634,0.416930765880032,0.610042780686017,1.17272980120277 +-0.0355820253534778,1.22880536599779,2.24737800132158,-1.55223768493734,-0.681445001823633,-1.08604776501582,-1.17429968760345,-0.51679093349263,-0.44015927036804 +1.4363135777787,0.611935613656437,0.108108900014558,1.85660592564074,0.541383747984203,2.11603033797224,0.279531008162169,0.283575882165983,0.406396530542015 +0.0211734422303941,-0.924656599778478,0.0677357224087112,0.731859085588601,1.15204632571392,-0.690767525981564,1.31600033827725,-0.738440374721066,-0.0622036574021253 +0.0533792979179594,1.71114683164066,1.03623567046276,0.203971717113318,0.0790991473444158,-1.30457887886912,0.925239608715413,-0.179922516970874,0.287715566491399 +1.09133666856141,0.562670000228722,0.309803389852727,0.104273288567165,-0.439876200332944,-0.812983255678684,-0.417964236125259,-1.740361674444,0.553635149377331 +0.823661827410111,0.999957274102372,1.25379890455381,0.369449869399327,-0.92530047562369,0.287078875033779,1.41780185553825,0.558796588267678,-1.77548360373118 +0.223257441157731,-0.131329499064543,-0.784122973129191,-0.937663051494407,0.800457445093917,-0.667177791252065,1.09249925710284,1.56368117669246,-0.0300251035540052 +1.15806393831271,-0.480107435988313,1.03750899702996,1.82963557947563,2.11347043677646,1.42383870423059,-0.542705967813272,0.488763578850837,0.870429875117026 +0.960274659218265,1.59069149271288,0.120838387860572,1.29918534882066,-0.196284632142004,0.805944104800467,-0.475452039443338,-1.41849528160103,0.404460551859971 +-0.0908114845622182,1.24650301222303,1.57538616065188,0.0254684770645683,0.811796617277875,-0.867440794243151,0.20657571889435,0.729979143687068,0.72069444284819 +1.02979520369018,0.956372384476101,1.15301374277029,-1.3742487982962,-1.67642680636719,0.40697179293273,-0.206323577721695,-1.04688645080568,1.05665115499932 +0.0851182975383487,-0.139338569523905,-1.41023595783983,0.922796532524537,-1.3071144543804,0.715585217377341,1.2571714160182,1.67275192614061,1.03172407890627 +0.883218363177115,-0.886104127573589,0.0424454977909331,1.55732637641127,0.425727326868228,-0.471993355164725,0.0961492168551903,-0.988117852987712,-1.20152619425264 +0.0156636041117824,-1.28261362671931,-0.999114184409542,-0.580337740919315,0.456274030905177,0.390587018587493,-1.43266905403851,-2.80234473426179,-0.0887543117718969 +1.33091885899289,0.53489432019517,0.448221667429924,0.27833520980302,0.672127426551295,-0.314665518337044,0.0156135873055241,0.345856086060383,-0.807239827768866 +2.65548044861804,1.34736479309763,2.39300170222888,0.697146598563156,0.598558441905183,0.428898868427912,1.68995445368435,1.62275632578838,-0.284872038393339 +-0.131350134535533,0.324148413601096,-0.387092244496118,0.00384639261525069,0.828536576500278,-0.568753685397215,-0.926396350630655,0.387233130332333,0.549946376971751 +0.216239386505919,0.290500413656987,-1.74474535193339,0.185998663437217,0.63564698744465,-1.18314682634601,0.700781041631204,1.77437774889735,0.660677940540066 +0.939252087468252,-1.40536975374162,-0.373947875259105,1.26525989866359,-1.00552586177985,-0.0944252323228215,-0.507689106950443,0.148975936206611,-0.283196574427914 +-1.87527266842212,-1.71207703198527,-1.80349446267921,-0.775507918490327,-1.05628179203674,-1.26497801836911,-0.265440123807129,-1.27289840264802,0.312363264201168 +0.00689779705287014,-0.326719552021792,1.02747708663413,1.84015153473828,0.0448923201411943,-0.58459730215173,1.08505853384772,1.92947185308627,0.8358389356931 +-1.28524845339445,-2.41904583266231,-0.519172568110112,-1.25442432486157,-2.28603155406481,-1.49878835315433,-0.606455347818283,-0.766905130353634,-2.64094435750066 +0.403508635103419,-0.108278917287874,0.346736043730968,-0.557911517687769,0.442553087021381,0.129141159041473,0.172380483035033,-0.903276874662596,0.136729620570568 +-0.0321959133799357,0.356286490691364,0.9624599862717,1.12504726799254,0.123517720697601,-0.768912654017833,1.88641191491646,1.00149682971369,0.598130735503542 +-0.0808490541402762,-0.146622834166005,0.00675912312765975,-0.911567654726733,-0.85623254286575,-1.18986678032296,-3.04123945036311,-1.52167089330019,-1.71975459616214 +-0.256509660961344,0.405646957923069,1.69968486620926,1.02729539890199,-0.580722452910848,0.513341255251551,0.465889196638658,-0.548782338825971,-0.100857688500626 +1.57787201632855,-0.460669800069507,-0.420536533772999,1.01865169767434,-1.18765306694629,0.744705402550039,0.54527304098583,-0.0446529636184335,0.702582267476193 +-0.696042474497142,-0.941075748725152,-0.809502987621826,-0.615707387779454,-0.180612404854881,-0.713040769930362,-0.326453159263484,0.101168314975423,-0.210206345665886 +-0.436989849463017,0.0482139947813219,-0.909195434992008,-0.119579285240873,-0.0129271063337281,-0.00811578554435011,0.386075456045056,-0.546191001233406,0.322843072579447 +-2.06795061100449,-0.215721632614677,-0.916958237588315,-0.229353949347893,0.463961090844817,-0.848100951988994,0.768368546790706,-0.239679922823284,-0.218178725011651 +1.6757604692805,0.960494141853521,0.130410598207297,1.71519308638742,0.492633877119065,0.83182396716502,2.70879761647187,2.99060066542535,1.40372408029682 +0.48730802998921,1.65549928188253,0.530329642140059,-0.0683241691458223,0.208294947568176,1.83356130029711,2.00302307648766,-0.303371656972036,-0.643065233454869 +-0.226898414030876,-0.532518602241601,-0.159222834980883,-1.58488729344799,-0.26075105938778,0.315247902144317,0.119420745945256,0.477485891257619,0.710201646770404 +-1.57942675191632,-1.68050621507333,0.0137092264292238,-0.916719394936901,-0.740827403837844,0.422253705729207,-0.70263925808622,-0.911157786372922,-0.0766772630626993 +0.769514336390583,1.46663332938207,-0.148259384325135,0.96742572891999,1.04871596171753,0.112170844629485,0.831535423337911,-0.0118093092822663,0.851313061928842 +0.230060356349597,-0.680330932648664,-1.46279308513207,0.978220012224579,-1.1488907359468,0.0526986937268617,-0.155122963394348,-2.21572749890354,-1.11477313885292 +2.64611648881638,-1.02801520234212,0.794405564238916,0.260771337208931,1.87213791286599,2.18347340871549,-0.0132525248113209,0.702326243536981,0.0477498455613886 +0.417369251600346,0.122706413406224,0.334000859452875,0.858145581412753,-0.3410834942153,0.825687947936743,0.317908913058137,0.562646375086027,0.11792356795385 +-0.0287047332240902,-0.2347333785469,-1.17405971191895,-0.349040592788047,-0.225772290161114,0.211835885414632,0.707461742756742,0.271690634356522,-2.28078316404773 +-1.37548673534465,-1.69340793307034,-1.25446727513757,-1.1467065673406,-1.41787589340922,0.537650039053218,-0.834550993078351,-0.561960617520734,0.163414365185843 +-0.279889422787639,-0.151117566040261,-0.270489105751237,0.329988842360095,0.455137609788077,0.165257011865054,0.994826303404711,0.887784237514403,0.518319663259285 +0.0534526078066793,0.876555823378117,0.0409178979387197,0.042856387594726,0.0776361085896483,-0.028078805294334,0.0683184708855045,0.868455636082072,0.165946484140158 +-0.931829437317825,-1.2889606348467,0.0511813718607032,-0.333205912208326,0.927952364726375,-0.208136553686258,0.159207798852597,-1.22619840711194,-0.0185887004721071 +0.12220613972666,-0.273189464913316,-0.40653338320487,0.230996631262042,0.0503975634815153,0.664295528639641,-1.38055623083231,-0.465864242366939,-0.3994357637058 +0.950706944280949,0.729391362440084,0.346571648285985,0.125939493343444,1.33752744179734,-0.852797994470719,0.821374435674916,2.06495851226989,-0.315177699145412 +-0.821814192686438,-0.575625947972465,-3.0112107037433,-0.0334971104595332,-0.966945266326286,-0.118845359473678,-0.864265452076683,-0.282827454453956,-0.400190582623138 +0.979887099532015,1.73974819815258,0.566436550090644,1.05214722855808,-0.257053970832505,1.149447584841,0.924896457419743,1.73884167045953,1.08464669191175 +0.118514762122911,0.226939309422559,-0.438602854162222,-0.416248093715253,-0.442533822539006,0.139704413792141,-1.5791209183018,-0.604269377089391,0.393257046175055 +1.16328394810825,0.859010841074518,-0.208026076991245,1.02817946338373,0.864046012561436,-0.681623305492815,-0.524802461750327,-0.276508491941085,1.07989460217011 +0.340234255347329,-0.674818674388258,0.253406618589744,1.98134545658644,1.33351381712771,1.39143191052307,0.125189829047231,-0.0476841113418101,-0.0146448702993291 +-0.40245889264943,0.841235162955051,-0.774230934223989,1.95551521453504,0.78250258249738,2.18122094180862,-0.484222452883142,1.61472843442433,-0.483010403431631 +0.509988425335795,1.88654496337745,0.0462926623171318,-0.67458780731582,-0.740891160990206,2.90270433136778,2.00477568747508,0.391486221029286,0.414002243712176 +-0.0597673035948025,0.164833051846546,0.0576891019326538,-0.350768131237078,-0.421335690419613,-0.958307181247478,0.612981041159182,0.200306872613179,-0.256592256898644 +0.394488190424305,-2.42315621766741,-0.773835140332408,-0.202216027119803,0.234436907367806,1.15376112841125,0.595238790412452,-0.431184295788817,0.262592863539452 +-1.46351522836189,0.245166743040674,0.375835863987105,-0.295692936540945,0.223293016399493,0.752925184661617,2.21230308184035,-0.247530745177361,-0.815011090820499 +-0.144920720109165,-0.339781866716101,0.529979073029534,-0.157430388745424,-0.573172123871824,-0.626517991375788,0.43774813446968,-0.656627024783026,-0.0274273932475653 +0.973928650610304,1.98142074755578,0.823986537515958,-0.356675082024979,0.2844296141364,-0.766470845338607,0.128542033364926,-0.124818357837732,-0.134547213148209 +0.837752998039214,0.425272299162191,-1.19820574414268,-1.23131399274095,-0.0113831816400976,-0.346573930967236,-0.973493589404688,0.119392438368493,-0.878788985181927 +-0.509804267005058,-1.51304176600444,-0.51613015077728,0.317268532827683,-0.378011703697307,0.135982766892968,-0.764280816609862,0.846131323697402,1.21171628243176 +0.179661899348467,-0.926564741528075,0.152907979879501,-0.81483095650654,0.150371499933562,1.18262641837564,0.106232231860468,-0.468271434280389,-1.03363377791346 +0.797175657177714,0.920569467499024,0.393818969326257,-0.707848151985178,0.79513341399166,1.60992712228458,-1.59964495129531,2.59750697131463,0.387013272235565 +-0.663630647100048,-1.73750834068789,-0.172200473150844,-1.14760291891087,0.464229383515596,-0.857031649103178,0.147820102349273,-0.112725883849963,-1.05978006717849 +1.38644454040343,1.11131203929576,0.0879263784270314,0.504632173158207,1.10559058042936,-0.883935169367603,1.38768901398153,1.36433734175938,0.888985398781667 +0.976279980383745,0.322071832615844,0.489506200777226,0.376114165846927,1.71347585959132,1.27015682024892,0.364926228069685,0.55216101732279,-0.0692581755414985 +0.066658127198094,-0.675973190428292,0.174685582239267,-0.0704787970224487,0.0884158364356173,0.351479539445911,-1.65481374067222,0.134537242976991,-0.858021766072068 +0.183303140550692,2.37955869993811,0.652964737922365,0.27308910465259,-0.118203278768564,0.155336066247688,0.496872780742647,1.16126359632757,0.487560887131973 +-1.61769067251358,0.369146954467092,-0.218478088231727,-1.38558502854024,-0.1720729765588,-0.394576795191819,0.217974115077225,-0.192431882040974,-0.333516994648928 +-0.470182986731244,-0.672764235127327,-0.240058319545816,-0.420533633229516,0.181386643122979,-0.500954541839902,-1.12321259017641,-1.10766408354611,0.820842181665122 +-0.834831443841054,-0.121781624936814,0.0326076637081326,0.983813741478726,1.15893565163555,-0.42025971559667,-2.13996667264316,1.99882767900671,-0.63139739566001 +-0.49582269330515,-1.13599428425097,-1.86952396625115,-0.00283151145284916,-1.09947789756268,0.306618926869074,1.35445310208295,0.366446776481073,0.709194375059233 +0.766094219353702,-0.0872941253347714,-0.477187619881252,0.1429297224361,0.620232450904158,1.22466086611516,-0.471138751658157,-0.604262726292721,-1.0095609770193 +-0.790538482401785,-0.816788022308018,0.39813842953905,-0.811646980037977,0.855048764580253,0.132417493646052,0.849286230016562,-0.727947295345589,0.498195709403039 +0.6361243250898,1.23790225184111,-0.425488029786079,1.9566285693194,0.585593830894188,0.612692266949502,-0.255907763546284,0.457917076673353,0.349780676793898 +0.299224127340392,-1.18722429602258,-0.289369914703324,-0.0553954002311163,1.97430794415469,0.923594093067743,0.960627622412651,0.441219114145674,0.536492671655731 +0.0401833955614253,-0.387184844774691,0.244575122658585,-2.13345556985785,0.446920751678631,0.138936661808732,0.872085430617582,-0.526220585480895,-0.587898295411639 +1.27940489178887,-0.52155464546767,0.920224030246193,3.26753224540331,0.896941962508697,0.470095912354768,0.124566384551124,1.53660648779938,0.362824970004069 +0.777804911195523,1.57361074978788,-0.109941841919693,1.62108152646506,1.97698387903419,0.532054213010531,1.31077825596333,0.85990638003235,1.19471428865171 +0.989949057369159,0.840362684217604,0.834651610322578,2.44400325439144,0.535550306220294,1.05143615543413,0.414780819204295,0.676228830882797,1.29862709414375 +0.223636221982946,0.545519860679877,0.123555502499911,0.564885375526963,0.0307778171028779,-0.138963311090736,0.805937932684896,0.916601836272067,0.487057473335749 +0.580392848206604,2.22991334592105,-0.520442111019052,0.54066607972911,1.07285512163461,-1.22641395870222,0.776830899180365,0.529716033499376,2.66116453000059 +0.0468740959917467,0.450143005772537,0.540879409124221,-0.593325443620658,0.120993008942523,1.21740962570178,1.1848222344539,-0.364023348500688,-1.16052989267795 +0.100396803408981,0.334391288572453,0.627376959736194,0.366665438979419,0.280078667979747,0.320352266643192,1.86758900493168,0.513718923972742,0.354020397776156 +-1.47979300997854,-0.182961376713259,-1.00520606129361,-0.941754785233228,-1.43670188900829,-0.522865946653919,0.809992446558202,-1.40350634724948,-0.185841937236087 +-0.30133968678056,0.0345067521742149,-0.489633891470398,0.863029279270271,0.31937821791865,-0.0652739601731318,0.273571329091708,-0.652749917063796,0.216830531369758 +0.300009948020744,0.200660599542487,0.741480911062119,-0.74425144401834,0.653379840596065,-0.280008134746825,-0.53588899464954,-0.647526646527385,-0.058642295424004 +0.710109165208851,-0.504898157145021,0.692188915026253,0.41301166333517,-1.5582104438547,1.51614334121902,-0.948153136915673,-1.63961075245274,-0.665605152033011 +-0.717184320475834,-0.702027845748029,0.506704420944059,-0.779888789804184,-0.510653236822779,1.09162751535738,-0.739684206398515,1.97261080497543,-0.140520764347959 +-1.07179095031054,-2.61831512708309,-2.28176546846123,-1.48392840313977,-2.71981086464007,-0.818236723777438,-0.701556827690969,-1.1290377107747,0.276964704901743 +-0.49886626445744,-0.312432954073767,0.56158563182821,0.116307340802194,-0.717143091173238,0.099469574348058,1.82918047662571,1.00372386095202,-0.459373433292143 +-0.347623826064684,1.03823474643335,1.06474901639361,-0.304534157989892,-0.107327983264152,-0.310020662915064,1.1056740543678,0.387663401341695,0.415325706556482 +-0.122225289657656,-0.0214285517920918,-1.19003535755572,0.336530436137282,0.702812370148093,0.245593544005893,0.0584459767206854,-0.122707585103447,-0.227037628790026 +0.0263070629571648,0.729977721569306,1.09708532094314,1.38027820322183,1.70679638767784,0.300933840619669,-0.264000750768062,-0.430294212634578,-0.391348338165893 +-1.10258854412766,-0.285509272815328,0.385885830682272,-1.28427830823585,-0.96171454360958,0.461564708551175,1.14175181450249,0.296368532386136,-1.72155441976818 +1.61627864937471,-0.767244644473385,0.765063098711496,1.70672545012139,-0.0379295379319815,1.35923603157659,1.66893256515894,-0.882221895580124,-0.383134311231036 +-2.18564792592829,-0.72192432223008,-0.826468482121094,-0.236047344995047,-2.62111651519974,0.318096063255635,-0.601463623260646,-1.20770809212855,0.20698557857622 +0.069724304872167,-1.05810637223894,0.876923247795415,0.794380377916685,-1.66067339210595,-0.849420158784595,0.877642150840369,0.205640008515287,-0.378148080687351 +-0.560120690651923,-0.393366943723924,0.812706759959107,0.386895186315093,-0.156616948550963,2.02845626104433,-0.988261021209569,1.27683619642885,-0.516784214112936 +1.22050417345976,0.0549455415531365,-1.38727364880197,-0.184939586303034,-0.833128740067737,-1.16954676220558,1.06339399941125,-0.573797423257104,1.28308579757099 +1.23656990040217,0.347239262329443,0.128529154014408,0.532239114828588,0.0945448571195671,1.35914080603182,0.314963769850765,0.918713084569119,0.255328515076814 +-1.20152522774429,-1.92269427448557,0.0428613318466475,-0.597709170905438,0.4943459516633,-1.1286429630476,-0.777083674898336,0.244939795532249,0.674096399426818 +-1.35501408198622,-0.607683749766537,-2.48180206579687,0.425158317712364,0.401122943702338,-1.49004401537656,0.472386829212308,0.0570375963036987,0.607670427884542 +-0.256783516516714,-0.524900289994156,0.355758250375829,-1.81711819735698,0.226585740776714,-1.28545755997283,0.502910150086693,0.689865716294518,0.0721716746164555 +0.24155367388511,0.15139982055263,1.7956690191194,-0.727224335237979,0.638457226001035,0.113950432283771,1.25008183189828,-0.946998684879518,-0.803550878003975 +-0.256362940909676,0.0757209825032333,-0.00795777017866055,1.128013542658,-1.06826410711021,0.692943856642061,-1.46909868527938,-0.0304711250452793,0.199020861788034 +-0.480987423365294,-0.0255274420434311,-0.86783339682008,-0.404574424716481,-0.301838045622678,-1.11212235616782,-1.03115013812006,-0.886724730713035,1.12663214665558 +0.189789898746268,1.03771585516514,-1.18737241777796,1.82868063365396,0.075098951616436,0.510993747307159,1.72713845629584,-0.579414729453304,0.821574394731111 +-0.0882706968548767,-0.0499299710612478,-1.23908981287604,0.174720564502712,-0.780102569671619,0.696808891152395,0.437694543447329,0.167925355620825,1.41168450477694 +0.12819500245555,1.30345788793983,1.52267157945216,1.54275282734455,1.09011949432437,2.045843454978,2.45769746379279,1.04560938840653,0.492241679946443 +-0.137533001287445,-0.491913453243248,-1.25454116320505,-0.866676797550337,-1.01269255158307,0.846971256741334,1.55759856517154,-1.35737716336659,-1.36420606142378 +-0.31642526738884,0.159024410236195,0.127216318599995,-1.05651807574576,-0.936727708798348,-0.832728277625183,-0.581387114482645,-1.20170030791685,-0.62159456750269 +-2.81249489828657,-1.98663112323294,-1.18766803469136,-2.23626915252246,-2.07848090942384,-0.345019138169747,-0.500230590091506,-2.20833445343462,-1.88926956172678 +-0.265268195338634,-0.63193303553319,-0.35380577147722,-0.425632658794947,-0.238012564019603,0.420312919302339,-0.100425920320404,-0.205092612433211,-0.788164780632036 +-0.905913392596149,-0.162787956311066,0.825807647102359,-1.3634607670432,-1.43751278557042,-0.674638520519881,-0.107034671948492,-1.34093327412398,-0.637135257831561 +0.430662305560145,0.684596382995734,0.348850075524869,0.232458653590683,0.130179800751206,2.02273542267554,-0.370833624123033,-0.524998876184656,-0.431559016619852 +-0.345558502845444,-1.0040665443486,-0.28333996889212,0.205224386568086,0.0274000562164336,0.213049693458793,1.09427291292874,-0.601157586725343,-0.0921980882511382 +1.41142749554284,0.357078058882489,0.0281681602568962,-1.32507936456397,-0.420197462664909,0.909191086021194,-0.0178344819278268,-0.0698077221633755,-0.196792879505805 +-0.488392536766324,-0.176554733255387,-0.484887883627417,-0.185385457342625,-0.590268442009375,0.266336437251384,0.0139865236904641,-0.829910184514345,-0.00643948248817645 +-1.21125485894791,-1.02494777497128,-1.85761673784921,-0.890494671469829,0.842159020796198,0.596738703199903,0.143138796037635,0.220418317146918,-0.158495254454754 +0.504053727329427,0.014623981092394,-0.0126602070738149,-0.112860665115846,0.691972371892966,-0.306659919282233,-1.03629429579558,-0.0170579669402827,-1.20549041827723 +1.23026236722944,0.658711711036965,1.7471046939354,0.603444993199479,0.0596638526284599,0.594864807411071,1.93144880203418,-0.195725032287482,-1.37098732212909 +0.669526764262547,1.0180807342454,0.526412112630016,-0.873824961141699,-0.63491097615307,0.187935177275799,-0.73594486636479,0.638349078406673,-0.890451839186244 +0.894869416623905,0.242896516070083,0.407470022657859,-0.363051311848941,1.47593512166504,0.201337906775795,-0.257940590027309,-0.195865541335172,1.17284121925858 +-0.959663391259779,-1.46704647199581,-0.860789740954662,-0.273701743916407,-1.18280928774286,-0.970343307358046,-1.66511547761836,-2.14058828116076,-1.21164873602307 +1.27634036254413,0.430220238365635,1.6116928722372,0.41570598454718,1.57372604045226,0.917124985295522,1.35848609332513,0.223100220583228,1.10722556111981 +-1.49073665460649,-0.590599967066028,-0.578797800942072,0.794848848087656,-1.59018386600443,0.772024776084067,-1.19649061800739,-0.373145886789311,0.696210005491243 +0.741880082024206,0.99717267964167,0.94492477680474,1.9845985254578,1.39351222177531,0.732462409539186,1.18986909992989,0.479651035619762,-0.437582205765785 +2.90416994553376,-0.522353611737757,1.28739560864098,0.134036040628383,0.485341560792365,1.21168799535817,0.924979053487474,-0.503061199421123,0.293213128970105 +-0.295903586897711,-0.77563607942294,-0.903977564191226,0.632598695673302,0.774154462066867,-0.702422941998752,-0.689198581431051,-0.264496839477838,-0.175530696275526 +-0.324145914115235,-0.422675777306296,-0.447123285917416,1.28011833038,0.20522647526334,1.14753595286782,0.868469075718081,0.110124663503101,0.65156576497141 +1.67660192088392,2.76659433240258,1.31660595957126,0.510760145274442,0.575385189938399,-1.27228747088884,-0.66753656259919,0.372958065540686,0.360091874129221 +0.858595524891275,0.386994532219092,-0.0415678926311291,0.87972803575887,-0.300528282406474,-0.361220774272773,1.17971450420461,0.443450033628585,0.68010178501486 +0.585020085126686,1.41934366803353,-0.565722107291122,-1.25395505139264,-0.596881925738489,-0.35997117365225,1.46037810978903,-0.51818582007652,0.020946065207275 +1.01414453045958,0.802760152227362,0.412197689800943,1.12347133368771,0.885090945430681,0.691741973179572,0.100276229006227,-0.191360575429398,0.825827597485916 +-0.924184848018887,1.12486329505566,0.986170685218898,-0.436078115418204,0.458168847849722,-0.857000682958579,-0.0691537992363577,-0.122704196447629,-0.659454932862106 +-0.932888886249535,-1.27796923376792,-0.969840827997724,-1.18683596586413,0.0584705726220373,0.829702219612578,-0.410609612537185,-0.638001902828397,-0.0615116574254683 +0.425688602654656,-0.667417862041326,-0.478700390515335,-1.26908732654473,0.51994274759388,0.789723925043661,-0.0520996752119292,-0.226477702822655,-0.0970475732282351 +-1.95750336902481,-1.12954178016659,0.840567840651709,0.736658851352612,-0.662790635966929,0.557603358389425,0.70463920779735,0.709920877393191,0.480964173489905 +0.912657466440378,-0.322341764267431,0.198212374635528,-0.138040881285201,1.22996135816776,1.83869954745779,1.26684694083512,1.44467723871552,0.314372059597613 +1.0921301266614,1.76595227798144,1.13803935544798,1.25642407629472,0.482936108259764,0.629276675358146,1.13389511997325,0.676591453068583,2.21295849290567 +0.830497488683094,1.18219162009311,-1.69630468359652,0.463508875582601,0.87143047825682,0.125368306344716,0.0378062225373548,-0.122002953852059,0.641123844325317 +0.21635777085107,0.296727499125791,0.454760240295286,-0.065240548956648,0.152394826809578,0.501790259060789,-0.34276331353388,2.19450707677309,1.05313622345082 +1.23894068027148,1.36382655804092,0.742661029770427,0.870642632828081,0.0729239337835984,0.17022551205999,-0.419748068288129,-1.35946884201548,0.490523792636412 +-0.0663969720419533,0.260478331302656,-0.231630781760473,-0.0359700474973992,0.821945483049244,1.54416940822976,1.41712863625262,0.3396116556638,0.252117985956162 +1.70493838189158,1.43590325673567,-0.287809893831371,-1.47690412913648,-1.0432572057671,-2.18527907178763,-0.991921751252759,-1.19029909530127,-0.313905494169431 +0.26192350100038,-0.340328724428388,-2.1659745763348,0.740690953824022,1.50331963732694,1.70122514439401,-1.18617248605933,-0.411072503822329,1.85740211016565 +0.403673304549432,-0.356861033016138,0.173759768256464,-1.13350996014609,-0.121633162632978,0.18262440420844,1.27509486240952,-0.411537739724934,0.491562826605948 +-0.748239048011321,-0.753750486105897,-0.289267910634903,0.357694712961298,-0.713331837434846,-0.0622199076988079,0.0349834941171861,-0.509064300063865,1.39928022268859 +-0.529623861357042,-0.511056392389742,0.710181095738085,-0.532074141381273,1.22175386305372,1.28296877553332,0.137589555729638,2.02469436450461,0.251769748127914 +-0.033584501186908,0.304364078622187,1.25672946947974,0.258408704223544,-0.384690245124371,0.224254085617411,0.962253578663809,1.71576392156527,-0.457235577391228 +-0.548428415669067,-0.898387261489475,-0.578128809108692,-0.436961377885178,0.443087386172196,0.406633900926303,-0.0930095582128132,-0.577610654416997,-1.48706754579669 +-2.3379982276978,-0.766004982891516,-1.79579153074168,-1.84243326227519,-1.49293152255427,-1.37996978604717,0.567029381102813,-0.398928615917219,-1.34649952785468 +-1.54952868566114,-0.653801888307826,0.361313204843151,-0.0192166158562931,1.18562901411503,-0.240876072711197,-0.0169730594623477,-1.79502092865587,-1.5377014308594 +0.649664380400136,1.60657653939133,-0.375030441817016,0.839894015603558,1.65722844166664,0.876226827484159,0.434101439238269,-1.03358194081933,0.473281637102254 +-1.73580953762912,0.842242522918885,-0.327805632115469,0.871871662346426,0.539192315519684,-0.313037877702524,0.349438816052722,-0.163517821017278,0.000419320282081664 +-0.392614805327934,-0.966517185785942,-0.430980741170202,0.558638829643789,-0.659420204371094,-1.21661283690287,-0.144003840449223,-0.459375686545692,-0.732809118735448 +0.331850158291977,1.33954234596896,-0.944216623442675,0.0440218601343133,1.09721343394521,-0.52062507703486,-0.211196333558042,-1.09080625851578,0.322265620768935 +0.486747632531436,-0.153706548845531,0.834541657983718,-0.860339073222353,-0.208867350699266,1.40305077551594,-1.47156612339519,-0.479890602380867,-2.28592839716529 +0.275853818973558,1.13961164647499,-0.594246094901284,0.31743396628925,1.63451678769546,-0.69734496701179,0.80614591155032,-1.17636005211361,1.79355594740408 +-0.264844904265769,-1.51433132656048,-1.06614146019707,-1.55971156260664,-0.329169410588441,0.502371864185065,-1.67738615908545,-1.32665154291432,-0.0213223282097696 +-0.297877461950638,0.23471457890677,-0.219757987390509,-0.273549565887017,-1.65418457376998,0.42251559462886,0.890638135069492,-0.306258278407263,-1.16103505500647 +-0.343417749282735,0.494077240339583,0.708214415383271,0.0347393898248039,0.028510755928583,-0.0545748332806737,0.239242645787084,-1.18632309433973,-0.442913866291801 +0.921528732536924,-0.308077546521137,1.96494526316873,1.73428317823449,0.176146105331044,0.308675866242561,-0.255933089499717,-1.02002045691714,0.411911142290357 +-0.237748140894234,0.316488629668423,1.37931017424835,0.0680765195064053,-0.407893029159988,0.905541051585692,-0.414316881438742,-1.44536701312526,-1.11030253165473 +1.22614453277986,0.463275388923509,0.228914792659438,-0.363571602667846,0.259305223686061,0.774937167771865,0.497807153336168,2.29206913990062,1.23264947120185 +0.545713696915175,-0.746228795173603,-0.720118483216619,0.0916471472085644,-1.06222653151939,0.513396219669483,-0.877381443367026,-0.482973443441454,-0.912621204268905 +0.89619276778777,0.643185604315478,1.22279142640877,0.983295231101835,-0.407826996330459,0.797780228462288,1.76959893878175,0.505847439017995,0.411155656505774 +0.167928240234859,0.155171482185354,-0.860602437062035,0.144919718442671,1.15881470588345,0.156807346295932,0.00896547632533101,-2.10212800164998,0.511766839101138 +-0.601177113065057,0.101207110467656,-0.0586235445837926,0.052053576158265,-0.684561326631821,-0.862833800642236,0.979096785201097,0.757268241601312,-0.907090046222224 +1.68064924408469,1.8183921845578,1.04849613142161,0.965620161456201,1.21357946876511,0.168827771679212,1.10069681797378,-0.48822901392048,0.822338842795857 +-0.278889622744602,-0.401320880644159,-1.41357750635225,0.783889891958417,0.0416728287490312,0.171167826213456,-0.827355581303875,0.388333008713483,-2.24687066678854 +-1.43756778735441,-1.33047651057539,-0.681774786554376,-0.0670785220244454,0.699485729548625,-0.1660366323078,-0.0702605927616796,-0.0418676000578795,0.824732485654545 +-1.38806111256863,-1.94005664684813,-0.983896695012411,-1.1441332419167,0.150562177293166,-0.0864383876146245,0.218499590780566,0.474535351910393,0.244512551308731 +1.76388178075388,0.315750661209534,0.580661596958321,0.508208606861483,0.995345750037447,0.317151738074987,1.86993231716544,-0.0489932714031187,1.31169063734517 +-0.387794393342837,-0.170751455820437,-0.117223045713758,0.0395274548873979,-0.408157813753434,0.705011759776022,-0.114227287039933,1.43705082867278,-1.4357715330906 +1.40200914301295,1.8552211954437,-0.26688548455771,1.23945795895326,0.77547569763172,0.708622524544307,1.23441741246621,0.111088605906365,0.795992333738971 +1.39916510444291,-0.326126026523944,1.38474360881847,0.455616298834361,1.16692135812335,-0.998414718988164,0.600820753560662,0.909230008196162,0.142741249577751 +-1.79691984721876,-1.39358371107976,-1.36478395615302,-1.11105927003783,-1.30229141238518,0.124969167728663,0.796953278596549,0.332890787457409,0.810285374183508 +-0.411063333683614,-0.0408087486999335,-0.284019132496586,-0.561926044803269,1.08135867305498,0.905345433980677,1.28110417692571,1.2328245714321,-0.434829990901058 +-0.967858703865201,-1.30400307986155,-1.2453987926325,-0.809218696227026,-0.912334070175014,0.281922430323553,0.278171192845645,-0.0848926118491104,1.6944961613254 +-0.421742081737315,-0.274024735942999,-0.800325336210189,1.4672187086652,-1.22186917695362,0.469505280961929,-0.722374233844536,-0.464474985963793,1.50730642993519 +-0.762479033872186,-0.280685418989667,-0.325664324361142,0.226197776444444,1.876786889436,0.17674287689517,-1.16906942915918,0.116611621685194,-0.279581922575636 +-0.702065423840685,-1.2663331760555,-0.8400414905191,0.183480165522693,-1.18739722926047,0.859720911823678,-1.08068684195874,0.680225321843442,-0.1167832488909 +0.149992596949673,0.137488631882713,-0.363961903850046,0.646560492729967,0.108909530683554,0.572246810236667,1.73187388987921,-0.310081568443542,0.0156276847683538 +0.497311482878103,-0.870702730053491,-1.55944896186101,1.25427570782829,-0.9558093603244,-0.0605547033847006,-0.189464595443345,-0.741424044182912,-0.871262076141341 +0.97167466200714,0.0382924990994042,-0.211295695198918,-0.271099313820831,0.445843342659317,0.486807127779195,2.22244887809227,1.10985981290297,1.59091106074685 +-1.21060023814004,-0.403139053364157,-0.792485617900335,-0.284024378738307,-2.95192143735122,0.313918085346894,0.803204601894137,0.781099165754087,1.28567990954108 +-0.592474161253503,0.140653807013317,-0.0163050057888814,-1.38257488219077,-1.44652369819594,-1.64072876847543,-0.430612119777531,0.45171340397022,0.836135682626962 +-1.65409923765743,-0.0906085950475873,-0.375042291909975,-1.01012388004087,-0.133624696786899,0.212650603025601,-0.335029976529388,-0.443248480155265,-0.625514156172776 +0.829058067309399,0.918531441046065,1.38531605354269,1.25192880278758,-0.0895438620757017,0.102513718808483,-0.102702712040291,0.245413500273568,-0.579044399911129 +-0.714887540105628,-0.00714539578140802,0.131635099149682,-0.00127927293149566,1.32433968241838,0.837208263922436,0.443264426395141,-0.351670272166869,-0.401255734625454 +1.03752925462298,0.100337064656756,1.13509031429378,0.112903704241891,-0.0859728649038787,0.0277189693147167,0.515612294937993,-0.629222486586913,0.315597204883881 +-0.324855743528332,1.46589152974732,-0.487566015483499,0.392941696492286,-0.788123643151977,0.091687049501235,1.02078881080963,0.117801606966864,-0.419508824922097 +0.416491197376492,-0.903601686509438,0.712259021536107,-0.560919709701271,0.330405842878484,0.832587820569563,-2.20552979905802,-0.899269883942522,-0.31835048041349 +-0.344855261813402,-0.394415027670741,-0.301447320725246,0.632517183882409,0.671790235699948,0.662402333463095,0.815851122276449,-0.338940193230717,0.077036586056116 +0.0550637335868062,-1.12488449396114,-0.121092660815407,1.55584817635849,1.16802422948914,0.715384340551873,0.749374181992083,0.722056242330976,0.201252538052975 +1.06983973192471,0.337728044863637,0.820387563163258,-0.898820921056152,1.21662216466452,-1.26578443509187,0.784031707745762,0.51466482259799,0.12280906383008 +0.872649872822473,0.604960020965423,0.022094931954653,1.35159519471749,0.457557840768176,1.43611330682591,-0.580071896964511,0.290377077695135,-1.25029716191363 +0.103241247366601,-1.11561973288419,0.0928350987555501,-1.36838265384463,-0.913689591056154,-0.898483783905313,-1.09622533435186,-0.624582705750118,-1.08984625827132 +1.23595326028876,1.07403401787642,1.02955697071547,0.580581995447518,1.58260769007262,1.27883173447993,0.842663392481283,-0.0424314699799908,1.21802674304441 +-1.15397865532412,-2.08465219279555,0.304228399417016,-0.483888362466503,0.145913734575831,-0.756654694161253,1.26093144755879,-1.0460107873782,-2.40975619957513 +0.587634775596735,1.06911738555437,-0.522832479460029,2.21318507002211,0.858053147768521,1.45126802550815,0.571825229335984,0.980638892002269,-0.622774677766614 +1.63710964685886,1.51790148123118,0.399576252123992,-0.348106469264387,0.148444185967452,1.26041187641152,2.2295001711939,-1.45701757853793,1.08823202723391 +0.0453384885484498,-2.32202126091186,-1.10085492039832,-0.690428345240828,-1.60327819464088,-0.828741679684012,-1.54319076181794,-0.173070214615244,-0.6840826202906 +1.02488771715805,0.0724848130829028,1.81570358618644,1.01836899002053,-0.794003541407916,-0.88299307380166,0.963637908392073,0.92890819275927,1.66987059874521 +-0.252218985202283,-0.653336603888272,-0.851701746935356,-2.43033654558988,-2.16389712319875,-0.904357760700434,-1.46876261969813,-0.387345514399304,-1.96674685554742 +-1.17003764845974,1.15638585387232,-0.428015547600939,-1.51165360198464,0.173994191466234,-0.791389210349874,0.109640310626937,-0.587985101489757,0.451449534857253 +-0.936898251737768,-0.69604512892375,-1.15170863310365,-0.96632948552178,-2.23539960518214,-2.20421232602596,-0.312019633743862,1.04526592103055,0.092540098103775 +-0.770403695027791,-0.324048305926437,-0.812177238247991,-0.107194969051988,0.438250312971894,0.0708517178811954,-1.51214019350526,0.49598246489712,-0.408618851402832 +-0.0423792097688233,-0.490080250201464,0.556999197853427,-0.411788972357762,-1.01683615568384,-1.28536099450312,-1.44401836579981,-1.44822361060589,-0.600146607089063 +0.594299629692266,-0.140906677300196,-0.108101957201467,1.10639158661996,0.124839359356856,-0.468940401570736,-0.113987835465241,1.76951195938899,-0.208114669728385 +-0.75406599674893,-1.61979851333527,0.324286954077276,-0.677117747363357,-1.93056949823667,-0.243791183588439,1.72098036355541,0.281728512717863,1.75312512692437 +0.290775771626993,1.96444238168429,0.450079702131391,1.96836369807081,0.490746278674525,-0.16329918612613,0.975626098162201,0.481414278958531,1.38797493771798 +-0.169783564281841,-0.115589356003125,-0.955842194317219,0.685669603682658,0.560119943932721,0.595687044360019,-1.6358114241239,0.522338389357249,-0.994260219399509 +-1.81427539489294,-0.690541650726788,-0.275808431574534,-0.406927299183381,-1.29632099848102,-0.380178935315181,-1.19730235148618,0.171466784298674,-0.0624160869756474 +-1.31028732155808,-0.885518899197102,-1.17152219576641,-0.518232642229629,-1.57569441814436,-1.59867360385078,-1.4984383572028,-2.0317410643945,0.603234241337162 +-0.512574930837672,0.0820533894160344,-0.977719517890997,-1.14820334236257,-0.294817868642396,0.268228660582469,0.969622605724761,1.04362445630182,2.27419843763729 +-0.959453017860248,-1.11841099662896,0.050619245761591,-0.443078164729706,-0.388320119706022,-1.85406636783109,-0.940345564975712,-0.400121168327436,-0.494504750596479 +-0.356132061995382,-0.700727070758039,0.41209607720472,0.534616117046717,0.123438478580199,-0.609750661160318,0.615910730604535,-0.250158062462294,-0.178415342764023 +0.714149133551573,0.111855039023061,0.496694389417551,0.110671423534544,0.384278026599701,-1.32113358860855,-0.369038568573429,-0.00211432537757483,0.906540803268757 +-0.874900256104576,-0.397693287734205,0.354018194850067,-2.44388285236145,-0.11966849293813,-0.762938939658774,-0.177559944626053,-1.46383147853325,-1.44784771829861 +-2.36711171913511,-1.96807791514693,-0.779646223399254,-0.868827195912648,-2.06984554018711,-1.23054191540638,-1.17873469411251,-1.48200499456982,0.186843996940456 +-0.331462185278158,-0.224465337141639,-0.305714159458461,-0.280759175479019,0.387451323700863,0.737202329476812,0.488636722488431,-0.258509438072054,-0.396167179482898 +0.815729175875208,0.226212679081337,0.277498105153335,0.768321959403977,-0.0290772120361241,0.394989672193582,-0.73703243542858,1.14900441155063,-0.67632875498001 +-0.676051768162176,-1.2608364272013,-0.217232854288091,-0.0134165679671566,0.861013049354063,-0.416274034690141,-1.42379876193097,0.44989907877574,-0.40927424785552 +-0.833290761418215,0.120870180789201,-0.623286947909028,1.16972285749137,1.41993639055183,-0.364013086445927,0.829413331975624,-0.0374823059146824,0.509481538760598 +1.72779352497407,0.891413713932554,0.932817552993402,0.504958141851425,0.399427552677351,0.420821486068405,0.400341563171713,1.51624239931591,-0.238148551517922 +0.702393570143472,-0.808447352497411,0.245223480319675,0.00932551735509483,-0.404378396829741,1.34591940850852,-0.186272003771799,-0.394107757662144,0.0467454225882261 +-0.759550801660698,0.0343213983320109,-2.26482788535992,-0.612865151432414,-0.878102731017824,-0.328960716880649,-0.485344737619826,-0.163803083695781,-0.248054820017629 +0.260828132913792,0.723211817509334,-0.173774640168725,-1.91011131490452,0.19023473679558,-1.22449521618011,-0.49353090619202,0.827319022685767,1.21128028606958 +0.79094769971563,1.13512323232796,0.864711271533644,0.504191273111053,0.849279252865926,0.20113637028623,-0.545276548413213,-0.329079012831147,0.297998283951791 +-0.354801265477632,0.616594743254969,0.792500270676753,0.0445502252982614,-0.192648170823547,0.634713994200178,-1.73471380851247,-0.604437286604438,-0.291710087379521 +-0.986110763655615,0.77542288124515,-0.815287924039143,-0.822579296604596,-0.903541769301814,-0.992454422382313,-0.9988932179256,-0.80163915878552,-0.0213899708315798 +0.249267485463803,0.900114482797006,0.712032553183695,-0.661737960247274,2.28155288095781,0.363615678330072,-0.885479335812278,0.770860071224771,0.407459668394103 +0.0656036285378686,-0.32761283047728,0.114026740674198,0.849178325273831,-0.738103854212583,1.09892351736736,0.824711405103388,-0.357496063575116,-0.716976824256056 +-0.385337613710514,-0.133172537156823,-0.0671765313762064,-0.130884869626083,-1.32960733142122,0.68296450316644,0.0500403787929382,1.01327641675908,0.515670089876548 +-0.578012688567024,0.150351652561554,0.591238779798969,0.2510951504602,0.223481448935513,-0.361974059189703,-0.352068792476749,0.159943963878182,0.436571949680992 +3.10729897401654,2.2199058501113,2.14646105040703,0.484236037514438,1.81478195978589,1.61785045415808,0.0329876618320496,0.241649313844067,1.74622744962094 +0.740254916964364,1.01989603126913,0.949841701842115,-0.174750918803954,0.701423202135606,-0.217182580544305,-0.704202854958466,0.409574590554772,-0.036213958084883 +-0.593813946679038,0.624337577645944,-1.03121223764933,-0.654774571378641,-1.0482127964088,-3.16005481453899,1.07913442153674,-0.801540477292715,-0.296446495746214 +-1.97654131148265,-0.0246172367241229,-1.62321757758329,-0.300504165575377,-0.610479744743658,-1.95067922934721,-0.0273003564953014,-2.25891403103119,0.592899076054865 +-0.265675076863215,-0.0655958042838892,0.443115863361718,-0.404239801100383,-0.699051451676848,-0.776061724164466,-0.278936052206807,-0.0398982489794093,-0.228150979346522 +0.643369896396861,0.116426615665445,1.46986526942722,-0.385674191236003,1.02256918563997,0.930297643874379,-0.137569292655377,0.6418303853131,-1.00196288109568 +-0.321351143540899,-1.48223663433386,-0.0269463886121436,0.0839576506772104,-0.943072535332822,-0.326257416044327,0.208659395860667,0.214383648754069,-1.93280735476865 +-0.438151783268317,-0.931670580749033,-0.126609279948407,-2.95417604442509,-2.44862562061646,-0.264480756391507,-1.49720749306728,-0.13155702224272,-0.0836212531108426 +0.814376302708418,1.08260885895811,-0.518236372213638,1.44056561673317,-0.381392770100172,-0.278951696069285,-0.510258310907941,1.6511275333633,-0.43304098319701 +-0.478107173257391,0.271840605860073,0.393643011670306,-0.262850897439097,-1.38450057674538,-0.599618583751476,-1.14574295125743,0.986997087759595,-0.417708728514852 +-0.936103041724464,-0.25864531702225,0.638419399680192,0.0808552072083271,0.151947520087218,0.0385844987061899,0.791580619745494,-0.617206707242678,-1.81192146932867 +-0.411569707984762,0.248658970613153,-0.549802711846596,0.897647932151652,-0.170793214455025,-1.06884149433975,-0.925774545268623,1.36537165535184,0.176168538272621 +-0.474873640621746,-1.37724344188309,-1.06516426901006,0.822700065900627,-1.07790344613573,1.84989083968958,-0.336244498705126,-0.0257418398093265,-0.853007479368077 +-0.453331796727791,-0.831612404941553,-0.0573094476804534,-0.240389011732678,0.436191908310093,1.41562499841805,-1.13489510407795,1.03985794164752,-1.23252092096524 +-0.463955469243233,-0.0304837371483583,2.0897694476569,-0.0108621329169964,0.222963503064354,0.336547398786141,-0.507748399842308,0.762911008802207,1.3656593915121 +0.670553553785726,0.508459329041629,0.476884387613096,1.1329884413175,-1.08353400484517,0.798524648006295,0.53734873433806,0.0208321931940496,0.878841104426437 +1.13588709752865,0.427686081339181,0.514485588038881,-0.328107298314126,0.0819238564898606,0.301803970799609,-1.03289228246961,-0.559056241688639,1.34143277215925 +1.16780538644555,0.451185127154324,0.348228355857748,0.598134406762037,2.28114901846728,1.77354008823691,0.0411072174167109,1.01459188792562,0.00811980498782261 +-0.0135483225207536,-1.68741023097245,0.798579236668005,-0.888794277591845,-1.10373913624268,0.45175748831378,-0.58945958737345,0.477719281695806,-0.541576298089464 +-0.268289621711842,1.4858259056652,-1.17367191087193,-0.359867259185062,1.08439318669693,0.785412380587551,1.69698909819963,-0.672918035900423,0.100208134598953 +-0.678291511265529,-0.163947116423478,0.673231641965572,-1.41329513039806,0.0489494865482372,-1.52978802010621,-0.310659463226546,-1.93568328209416,-0.0488440564721557 +-0.55135068427616,-0.66620974430993,-0.708674357410211,0.0304278883327402,-0.978691847689823,0.0365283310228222,0.235249553767603,-0.277100233071681,0.05111514068047 +1.05560068604996,1.27503647271375,0.566864924614948,1.08903920386604,0.469279046986341,1.25012645118249,0.540892953063235,0.31919334964215,-0.957504118852053 +-0.980906672117612,-0.0189911684523433,0.120197527123687,-0.680731772230277,-0.168270942276938,-0.289394824146834,-1.65259865323018,-0.373669048199263,0.294329380209814 +0.499294490612981,-0.592136688682187,-0.17981022587741,0.550899037029202,-0.314378763046838,-1.46514082601652,-1.79281997544221,-1.3493861769483,-1.17851814845092 +-0.0679425849730613,-0.794371997450158,-2.58151681295441,-1.94350144053799,0.195320596918969,-0.389685917118352,1.17050516313715,0.909109570126359,0.497946626519229 +-1.15062045245418,-1.18597012648725,-0.88775753158736,-1.22251051389502,0.246808039503041,1.49160945597948,0.57648967415191,0.411157420523344,1.12642798467258 +0.100158495675873,-1.32399104822148,-0.514186951690171,0.344260020939475,1.27529372901644,2.61408602396403,-0.050241138163728,-1.2605859633705,0.263619749352747 +1.42465467107631,1.36197177762154,0.60628257114713,-0.0156479933320413,-0.0363174310011355,1.40474900532185,0.396493521316173,0.891510091991401,0.823150765143422 +1.74603673210211,1.35244155991512,2.42440063222136,1.03297694793185,-0.462040139908601,1.4118125925405,2.00116047408919,0.652774994319787,2.3983135386906 +1.08099092960524,0.421051816423678,1.73754593714848,1.14700249187399,1.09040880553643,0.695195891012241,0.750064970044761,0.456890304601581,0.796133672235179 +0.302694160281263,-1.6403242454966,-0.188911299318824,-1.51900443666529,-0.552961623425218,-0.52626642543935,-1.04146010002155,2.69738174584375,0.287605694862825 +-0.282727171628041,-0.947687561500049,-1.31427248537361,-0.381417048042835,-0.804647956470914,-0.634925168458779,1.48749362710817,0.637764708652252,-0.0142770014200894 +1.18406800313113,1.26008594061534,1.46948829874829,-0.19734726721162,-0.419162245281191,1.33414857948028,-0.199990441197516,-0.772377860903891,0.0413250188207407 +-2.17760074992327,-1.9529555889374,-0.0495628840164648,-0.43418891065169,-0.714927754571589,-0.806608495722986,-0.813639036950261,0.242980058353971,-0.467359361755964 +0.180112412196713,0.600540375507427,1.42604641116429,0.385795259121452,0.196806943557884,1.14702481663295,-0.646696820006319,-0.0659183044783601,-0.779599641495563 +-1.31083035142046,-0.752288330372449,-0.641748826067841,0.994757115197672,-0.896246794147945,0.891383361576063,0.532726485670141,-0.324651796751015,1.04614720114469 +0.0814321247258127,-1.40983108458511,0.0762093619673255,-0.604714445511917,1.0536756020607,-0.665023171413789,0.294757661794959,0.59507621689268,0.0656169681883922 +-0.613719789666516,1.14290657453755,0.706769988493003,1.26573383287453,1.1457260654182,-0.0746539305678811,-0.48746726379207,-0.343962304133609,-0.761994744750747 +0.329551658891719,-1.05168585816116,-0.508051609244275,-0.604756729697464,-1.1501813120188,-0.127437898386637,1.36645329113616,0.738177591533215,-0.0680926425505856 +-0.0973158818102723,-0.24947778110296,1.34482164733374,0.807920239588021,-0.913459005265644,0.252457948744299,0.755214558427282,0.139935574927102,2.21282130087005 +0.313653530525133,0.139851826782461,1.42237576418286,1.66729052522724,0.977152773435745,0.963465238690054,0.251622133618539,-0.287477509858987,-0.0760727812594268 +-0.806280572863527,-0.49498682716141,1.66954320008279,0.00424605787860827,0.906082446435571,-0.206334743167738,0.978349165437514,1.85816836987851,-1.08111285342209 +0.37536452971954,0.938724456158228,-1.84994329361888,-0.1541321905511,-0.0320746672601909,-1.33829421526298,0.729983281126853,1.039392794796,-0.252854776143269 +0.43248957457022,-0.263823586963075,0.88248994684767,1.60143530279822,0.121134828302221,1.14941604560676,-0.166820889150136,-1.02569747183713,-0.178492897192431 +-0.117738295295305,-1.33371031488207,1.4558465761787,0.161282798261349,-0.274308520619722,0.567570531786502,1.10404257821374,0.0298159811986174,1.29888733271517 +-0.565882448656881,-0.948204854327638,-1.6334806930247,-0.646759462922658,1.15371635297221,0.150784005645955,-2.0619950968543,0.506743998398101,-0.284142168301545 +0.742625676096226,-0.101203986343898,-0.550867300370664,-0.920897972369527,-0.0489705882995633,-1.99774584949215,0.907818072943296,0.25072577982182,0.0434841307868322 +0.397331319037422,0.506109093990959,1.01390572286878,0.755778678355154,-0.271640150288756,-0.0351377420032418,1.41505944485466,-1.76170892131104,0.0658514976638509 +0.421360692402301,0.868848034398283,-0.172181900811362,0.903550664625544,1.24303572547453,0.010874550390972,1.26551550277794,-0.413803218116875,-0.955896261523428 +-0.581493289194656,0.162706840074634,0.182697261995097,-1.37966971696544,0.804236827986091,-0.812634962422841,0.503537865010168,0.551059096360738,1.37457471621413 +1.24323277978058,0.347506876915918,0.786940035571037,0.210226363375497,1.65623776253527,0.199358330426587,1.22828002970217,-0.118959639074242,-0.778813203600177 +-0.425832759949346,0.586149781895376,-0.12437279702939,1.16508114885243,-0.0177578745905035,-0.455777137843835,0.858518077012621,-0.779536726555712,1.34407395572587 +0.818159859825595,0.94297443868215,1.02765434288543,-0.114870948892137,-0.880731528412955,1.21210795480808,1.12029151131496,0.563055752986072,-1.44467306971166 +-0.221018784361375,0.679177635055535,1.71330500169045,-0.394698955488924,0.531728753540514,-0.0766784360172516,0.0939199705472353,-0.0525990027904756,-1.8549164193987 +1.09161661292813,0.543255686803918,1.13853187918176,-0.47033147033576,0.750740326102787,-0.68917228152721,0.720063822401139,1.56205350389795,0.863416058908774 +-2.27252324509917,-0.611102463557751,-2.12736026273442,0.0289670044065369,0.902126662707763,-1.12188451430704,1.16373822481537,1.53020535201818,0.955739661183979 +1.43060420567113,0.351158158395045,0.786702845873969,-0.516871625340592,-0.815327220541612,0.765541970039008,-0.34573791344404,0.645107519494302,-0.531925746956219 +1.6470326319593,-0.807953710452946,-0.133673298199115,1.19056072895996,0.69125576154533,2.31339714675051,0.169078985317852,-0.421234862926833,0.122234469340997 +0.81929155953062,-1.59335451987479,0.729818540668258,-0.619262710325813,-1.67756698009275,-1.91123491607817,0.0701859193401157,-0.732179967290949,0.115996690420657 +0.659972424348312,1.80682104442721,0.190412811528472,-0.52069215539332,-1.74505438998053,2.05331889383091,-0.41857289050989,-0.661258458037549,0.659764233234164 +-0.033799573962061,0.716034335455321,-0.662445712592922,0.0699972111184404,-0.455879124926307,-0.641756688893425,1.29260468853547,0.413677042503884,0.149557947199321 +0.127795277910253,-0.0411735008281099,-0.375721638158422,1.28298769573228,-0.154494253799041,0.0405515579329776,1.80729854660408,0.328737480213126,-0.377471414159971 diff --git a/benchmark/reliability.jl b/benchmark/reliability.jl new file mode 100644 index 0000000..79d0b40 --- /dev/null +++ b/benchmark/reliability.jl @@ -0,0 +1,50 @@ +using ClassicalTestTheory +using PsychometricTests +using DelimitedFiles +using CSV +using DataFrames + +data = CSV.read("benchmark/attitude.csv", DataFrame) +m = Matrix(data) +test = PsychometricTest(data) + +ia = ClassicalTestTheory.itemanalysis(test) + +ClassicalTestTheory.reliability(m, ClassicalTestTheory.PSYCH_METHODS) + +# lambda1 +lambda1(m) +lambda1(test) +lambda1(test_scales) +lambda1(test_scales, nothing) + +@benchmark lambda1($m) +@benchmark lambda1($test) +@benchmark lambda1($test_scales) +@benchmark lambda1($test_scales, $:a) +@benchmark lambda1($test_scales, $nothing) + +@profview [lambda1(m) for _ in 1:10_000] +@profview [lambda1(test) for _ in 1:10_000] +@profview [lambda1(test_scales) for _ in 1:10_000] + +@profview_allocs lambda1(test_scales, :a) sample_rate = 1 + +@code_warntype lambda1(test) +@code_warntype lambda1(test_scales) +@code_warntype lambda1(test_scales, :a) + +# maxlambda4 + +# find +find(test, 6) + +@benchmark find($test, $6) + +@code_warntype find(test, 6) + +@profview_allocs find(test, 6, criterion = alpha) sample_rate = 1 + +# test bootstrapping +using Bootstrap + diff --git a/src/ClassicalTestTheory.jl b/src/ClassicalTestTheory.jl index 53e8720..efec878 100644 --- a/src/ClassicalTestTheory.jl +++ b/src/ClassicalTestTheory.jl @@ -1,36 +1,53 @@ module ClassicalTestTheory -using Base: split +using Base: @kwdef +using Bootstrap using Combinatorics -using SCS using Distributions -using InvertedIndices using JuMP using LinearAlgebra +using OrderedCollections +using Printf using ProgressMeter using Random +using Reexport +using SCS +using StatsAPI using StatsBase -using Statistics - -export Test, SubTest -export eachitem, eachperson -export scores, responses, nitems, npersons +using Tables +using Term -export split, splithalf +@reexport import StatsAPI: confint, stderror +import Base: split -export difficulty, facility, itc +# reliability measures +export lambda1, lambda2, lambda3, lambda4, maxlambda4, lambda5, lambda6, alpha +export L1, L2, L3, L4, L5, L6, Alpha +export GUTTMAN_METHODS, PSYCH_METHODS, mu_up_to -export λ1, λ2, λ3, λ4, maxλ4, λ5, λ6 -export α export kr20, kr21 -export glb +export KR20, KR21 + +export glb, mu +export GLB, Mu + +export reliability + +export estimate, bootstrap_sample + +# item statistics +export itc, itemanalysis + +# find export find +include("references.jl") include("utils.jl") -include("types.jl") include("split.jl") +include("reliability/reliability.jl") include("item_statistics.jl") -include("reliability.jl") include("find.jl") +include("precompile.jl") + end diff --git a/src/find.jl b/src/find.jl index a80cf3d..87e8f37 100644 --- a/src/find.jl +++ b/src/find.jl @@ -1,23 +1,58 @@ """ - find(t::AbstractTest, n; criterion=glb) - -Perform an exhaustive search to find the optimal subtest of `t` with `n` items. + find(m::AbstractMatrix, n::Int; criterion = glb, progress = true) +Perform an exhaustive search to find the subset of `n` items with maximum reliability. """ -function find(t, n; criterion=glb) - is = vcat(trues(n), falses(nitems(t) - n)) - perms = multiset_permutations(is, length(is)) - n_perms_iter = Int(length(perms) / 2) +function find(m::AbstractMatrix, args...; kwargs...) + is = _find(m, args...; kwargs...) + return m[:, is] +end + +function _find( + m::AbstractMatrix, + n::Int; + criterion::F = glb, + progress = true, + kwargs..., +) where {F} + if n >= size(m, 2) + throw( + ArgumentError( + "The subset size must be smaller than the size of the orginial test.", + ), + ) + end + + is = axes(m, 2) + combs = combinations(is, n) - optimal_subtest = is + optimal_is = zeros(Int, n) max_crit = -Inf - @showprogress for perm in Iterators.take(perms, n_perms_iter) - subtest, _ = split(t, perm) - crit = criterion(subtest) + + prog = Progress( + length(combs), + dt = 0.5, + barglyphs = BarGlyphs("[=> ]"), + enabled = progress, + ) + + for (i, c) in enumerate(combs) + subtest = view(m, :, c) + crit = criterion(subtest; kwargs...) + if crit > max_crit max_crit = crit - optimal_subtest = subtest + optimal_is = c end + + ProgressMeter.update!( + prog, + i, + showvalues = [(:items, optimal_is), (:reliability, max_crit)], + ) end - return optimal_subtest + + ProgressMeter.finish!(prog) + + return optimal_is end diff --git a/src/item_statistics.jl b/src/item_statistics.jl index f0f44ec..9e29735 100644 --- a/src/item_statistics.jl +++ b/src/item_statistics.jl @@ -47,44 +47,102 @@ Henrysson, S. (1963). Correction of item-total correlations in item analysis. *P Zubin, J. The method of internal consistency for selecting test items. *J. educ. Psychol, 1934, 25*, 345-356. """ -function itc(x, i::Int; correction=true) - if correction in (true, :henrysson) - return _itc_henrysson(x, i) - elseif correction == false - return _itc_uncorrected(x, i) - elseif correction == :zubin - return _itc_zubin(x, i) - elseif correction == :guilford - return _itc_guilford(x, i) +function itc(x, i; corrected = true, standardize = false) + if corrected in (true, :henrysson) + return _itc_henrysson(x, i; standardize) + elseif corrected == false + return _itc_uncorrected(x, i; standardize) + elseif corrected == :zubin + return _itc_zubin(x, i; standardize) + elseif corrected == :guilford + return _itc_guilford(x, i; standardize) else - error("Unknown correction type: $(correction)") + error("Unknown correction type: $(corrected)") end end -function _itc_uncorrected(x, i) - return cor(responses(x, i), scores(x)) +function _itc_uncorrected(m::AbstractMatrix, i; standardize) + responses = vec(m[:, i]) + total_scores = vec(sum(m, dims = 2)) + return cor(responses, total_scores) end -function _itc_henrysson(x, i) - # here the second value returns the test with all items except i - _, corrected_test = split(x, i) - return cor(responses(x, i), scores(corrected_test)) +function _itc_henrysson(m::AbstractMatrix, i; standardize) + is = filter(x -> x != i, axes(m, 2)) + corrected_m = view(m, :, is) + responses = vec(m[:, i]) + total_scores = vec(sum(corrected_m, dims = 2)) + return cor(responses, total_scores) end -function _itc_zubin(x, i) - itc = _itc_uncorrected(x, i) - st = std(scores(x)) - fv = facility(x, i) - y = cdf(Normal(), fv) - pqy = fv * (1 - fv) / y - return (itc * st - pqy) / sqrt(st^2 + 1 - 2 * itc * st) +struct ItemStatistics{Ti,T<:Real} + item::Ti + n::Int + missings::Int + itc::T + itc_std::T + itc_corrected::T + mean::T + std::T end -function _itc_guilford(x, i) - itc = _itc_uncorrected(x, i) - st = std(scores(x)) - fv = facility(x, i) - y = cdf(Normal(), fv) - pqy = fv * (1 - fv) / y - return (itc * st - pqy) / sqrt(st^2 + pqy^2 - 2 * itc * st * pqy) +function ItemStatistics(name, test_data, item_data, item_index) + return ItemStatistics( + string(name), + sum(!ismissing, item_data), + sum(ismissing, item_data), + itc(test_data, item_index, corrected = false), + itc(test_data, item_index, corrected = false, standardize = true), + itc(test_data, item_index, corrected = :henrysson), + mean(item_data), + std(item_data), + ) +end + +function ItemStatistics(m::AbstractMatrix, j; name = "Item " * string(j)) + item_responses = vec(m[:, j]) + return ItemStatistics(name, m, item_responses, j) +end + +struct ItemAnalysis + statistics::Vector{ItemStatistics} +end + +function Base.show(io::IO, items::ItemAnalysis) + tbl = Tables.columns(items.statistics) + + rounded_cols = [:itc, :itc_std, :itc_corrected, :mean, :std] + + for col in rounded_cols + coldata = Tables.getcolumn(tbl, col) + coldata .= round.(coldata, digits = 2) # TODO: keep trailing digits + end + + header = ["item", "N", "missings", "itc", "itc (std)", "itc (cor)", "mean", "std"] + print( + io, + Term.Panel( + Term.Table( + tbl; + header, + header_style = "green bold", + columns_style = ["bold yellow", "", "", "", "", "", "", ""], + style = "dim", + box = :SIMPLE, + compact = false, + ), + title = "{dim}Item Analysis", + style = "dim", + subtitle = "{dim}ClassicalTestTheory.jl", + subtitle_justify = :right, + fit = true, + ), + ) + + return nothing +end + +function itemanalysis(m::AbstractMatrix) + item_statistics = [ItemStatistics(m, j) for j in axes(m, 2)] + return ItemAnalysis(item_statistics) end diff --git a/src/precompile.jl b/src/precompile.jl new file mode 100644 index 0000000..281bfa9 --- /dev/null +++ b/src/precompile.jl @@ -0,0 +1,32 @@ +using PrecompileTools + +@setup_workload begin + m = rand(0:100, 20, 4) + + @compile_workload begin + # reliability measures + methods = [GLB(), GUTTMAN_METHODS..., KR20(), KR21(), mu_up_to(1)...] + reliability(m, methods) + + result = reliability(m, Alpha()) + + data(result) + sampling_method(result) + ci_method(result) + estimate(result) + estimate(result, "Alpha") + confint(result) + confint(result, "Alpha") + bias(result) + bias(result, "Alpha") + stderror(result) + stderror(result, "Alpha") + samples(result, "Alpha") + + # item statistics + ia = itemanalysis(m) + + # find + find(m, 2, criterion = alpha) + end +end diff --git a/src/references.jl b/src/references.jl new file mode 100644 index 0000000..85acf68 --- /dev/null +++ b/src/references.jl @@ -0,0 +1,4 @@ +const GUTTMAN1945 = "Guttman, L. (1945). A basis for analyzing test-retest reliability. *Psychometrika, 10*(4), 255-282." +const WOODHOUSE1977 = "Woodhouse, B., & Jackson, P. H. (1977). Lower bounds for the reliability of the total score on a test composed of non-homogeneous items: II: A search procedure to locate the greatest lower bound. *Psychometrika, 42*(4), 579-591." +const TENBERGE1978 = "Ten Berge, J. M., & Zegers, F. E. (1978). A series of lower bounds to the reliability of a test. *Psychometrika, 43*, 575-579." +const KUDERRICHARDSON1937 = "Kuder, G. F., & Richardson, M. W. (1937). The theory of the estimation of test reliability. *Psychometrika, 2*(3), 151–160." diff --git a/src/reliability.jl b/src/reliability.jl deleted file mode 100644 index a0477c5..0000000 --- a/src/reliability.jl +++ /dev/null @@ -1,232 +0,0 @@ -const GUTTMAN1945 = "Guttman, L. (1945). A basis for analyzing test-retest reliability. *Psychometrika, 10*(4), 255-282." - -""" - λ1(m::Matrix) - λ1(t::Test) - -Return the lower bound estimate of the reliability L₁ described in $GUTTMAN1945 - -``\\lambda_1 = 1 - \\frac{\\sum_{j=1}^{n} s_j^2}{s_t^2}`` -""" -function λ1(m::Matrix) - sum_sj = sum(x -> var(x), eachitem(m)) - st = var(scores(m)) - return 1 - (sum_sj / st) -end - -function λ1(t::AbstractTest) - sum_sj = tr(t.itemcov) - st = var(scores(t)) - return 1 - (sum_sj / st) -end - -""" - λ2(m::Matrix) - λ2(t::Test) - -Return the lower bound estimate of the reliability λ₂ described in $GUTTMAN1945 - -``\\lambda_2 = \\lambda_1 + \\frac{\\sqrt{\\frac{n}{n-1}C_2}}{s_t^2}`` -""" -function λ2(x) - n = nitems(x) - C2 = cov(x) .^ 2 - zerodiag!(C2) - st = var(scores(x)) - return λ1(x) + sqrt(n / (n - 1) * sum(C2)) / st -end - -""" - λ3(m::Matrix) - λ3(t::Test) - -Return the lower bound estimate of the reliability λ₃ described in $GUTTMAN1945 - -``\\lambda_3 = \\frac{n}{n-1}\\lambda_1`` -""" -function λ3(x) - n = nitems(x) - return n / (n - 1) * λ1(x) -end - -""" - α(x) - -Estimate Cronbach's α. `α` is an alias for [`λ3`](@ref). -""" -const α = λ3 - -""" - λ4(m::Matrix) - λ4(t::Test) - -Return the lower bound estimate of the reliability λ₄ described in $GUTTMAN1945 - -``\\lambda_4 = 2\\( 1 - \\frac{s_a^2 + s_b^2}{s_t^2} \\)`` - -The calculation of λ₄ is based on splitting `t` in half. -It is a lower bound of the reliability no matter how the test is split. - -The split of the test can be controlled by the `type` keyword argument (see also [`splithalf`](@ref)). - -To get the maximum lower bound see [`maxλ4`](@ref). -""" -function λ4(x; kwargs...) - subtests = splithalf(x; kwargs...) - st = var(scores(x)) - vars = var.(scores.(subtests)) - return 2 * (1 - sum(vars) / st) -end - -function λ4(x, is) - subtests = split(x, is) - st = var(scores(x)) - vars = var.(scores.(subtests)) - return 2 * (1 - sum(vars) / st) -end - -""" - maxλ4(x; method=:auto, n_samples=1_000) - -Return the maximum lower bound estimate of the reliability λ₄ described in $GUTTMAN1945 - -By default (if `n_samples=nothing`) the maximum value is found by brute force iteration over -the split-half permutations of `x`. -As the number of permutations grows, this method becomes infeasible. -For large numbers of items a (local) maximum of λ₄ can be found by sampling random split-half -permutations. -To use sampling, specify `n_samples::Int`. - -See also [`λ4`](@ref). -""" -function maxλ4(x; method=:auto, n_samples=10_000)::Float64 - if method == :auto - if nitems(x) <= 25 - maxλ = _maxλ4_brute_force(x) - else - maxλ = _maxλ4_random(x, n_samples) - end - elseif method == :bruteforce - maxλ = _maxλ4_brute_force(x) - elseif method == :sample - maxλ = _maxλ4_random(x, n_samples) - else - error("Unknown method") - end - - return maxλ -end - -function _maxλ4_brute_force(x) - n = nitems(x) - n_include = ceil(Int, n / 2) - is = vcat(trues(n_include), falses(n - n_include)) - - perms = multiset_permutations(is, length(is)) - n_perms_iter = Int(length(perms) / 2) - - if n_perms_iter > 1e6 - @info "Brute forcing $(n_perms_iter) permutations. Adjust your expectations accordingly..." - end - - # we only need to iterate over the first half of the permutations, because - # multiset_permutations(...) returns a sorted vector and λ4 is symmetric with regards - # to the splits, e.g. [0, 1] and [1, 0] yield identical values of λ4. - maxλ = maximum(λ4(x, perm) for perm in Iterators.take(perms, n_perms_iter)) - return maxλ -end - -function _maxλ4_random(x, n_samples::Int) - n = nitems(x) - n_include = ceil(Int, n / 2) - is = vcat(trues(n_include), falses(n - n_include)) - maxλ = maximum(λ4(x, shuffle!(is)) for _ in 1:n_samples) - return maxλ -end - -""" - λ5(x) - -Return the lower bound estimate of the reliability λ₅ described in $GUTTMAN1945 - -``\\lambda_5 = \\lambda_1 + \\frac{2\\sqrt{\\bar{C}_2}}{s_t^2}`` -""" -function λ5(x) - covmat = LowerTriangular(copy(cov(x))) - zerodiag!(covmat) - C2 = sum(covmat .^ 2, dims=1) - C2_max = maximum(C2) - st = var(scores(x)) - return λ1(x) + 2 * sqrt(C2_max) / st -end - -""" - λ6(x) - -Return the lower bound estimate of the reliability λ₆ described in $GUTTMAN1945 - -``\\lambda_6 = 1 - \\frac{\\sum_{j=1}^n e_j^2}{s_t^2}`` -""" -function λ6(x) - covmat = cov(x) - inv_covmat = inv(covmat) - smc = 1 .- 1 ./ diag(inv_covmat) - return 1 - sum(1 .- smc) / sum(covmat) -end - -""" - kr20 -""" -function kr20(x) - n = nitems(x) - item_facilities = facility.(eachitem(x)) - item_difficulties = 1 .- item_facilities - st = var(scores(x)) - return (n / (n - 1)) * ((st - sum(item_facilities .* item_difficulties)) / st) -end - -""" - kr21 -""" -function kr21(x) - n = nitems(x) - avg_facility = mean(facility.(eachitem(x))) - avg_difficulty = 1 - avg_facility - st = var(scores(x)) - return (n / (n - 1)) * ((st - n * avg_difficulty * avg_facility) / st) -end - -""" - glb(x) - -Return the greatest lower bound estimate (glb) of the reliability as described in -Woodhouse, B., & Jackson, P. H. (1977). Lower bounds for the reliability of the total score on a test composed of non-homogeneous items: II: A search procedure to locate the greatest lower bound. *Psychometrika, 42*(4), 579-591. -""" -function glb(x) - n = nitems(x) - - C = cov(x) - C̃ = zerodiag(C) - upr = diag(C) - lwr = zeros(n) - - model = Model(SCS.Optimizer) - set_silent(model) - set_string_names_on_creation(model, false) - - @variable(model, y[1:n]) - @expression(model, A, Symmetric(C̃ + diagm(y))) - - @objective(model, Min, sum(y)) - @constraint(model, lwr .<= y .<= upr) - @constraint(model, A in PSDCone()) - - optimize!(model) - - if termination_status(model) == OPTIMAL - sum_y = sum(value.(y)) - return (sum(C̃) + sum_y) / sum(C) - else - error("something went wrong") - end -end diff --git a/src/reliability/glb.jl b/src/reliability/glb.jl new file mode 100644 index 0000000..d902b2b --- /dev/null +++ b/src/reliability/glb.jl @@ -0,0 +1,36 @@ +""" + glb(m::AbstractMatrix) + +Return the greatest lower bound estimate (glb) of the reliability as described in +$WOODHOUSE1977 +""" +function glb(m::AbstractMatrix) + n = size(m, 2) + + C = cov(m) + C̃ = zerodiag(C) + upr = diag(C) + lwr = zeros(n) + + model = JuMP.Model(SCS.Optimizer) + + set_silent(model) + set_string_names_on_creation(model, false) + + @variable(model, y[1:n]) + @expression(model, A, Symmetric(C̃ + diagm(y))) + + @objective(model, Min, sum(y)) + @constraint(model, lwr .<= y .<= upr) + @constraint(model, A >= 0, PSDCone()) + + optimize!(model) + + termination_status(model) == OPTIMAL || error("Failed to optimize GLB of reliability") + + sum_y = sum(value.(y)) + return (sum(C̃) + sum_y) / sum(C) +end + +struct GLB <: ReliabilityMeasure end +(method::GLB)(data) = glb(data) diff --git a/src/reliability/guttman.jl b/src/reliability/guttman.jl new file mode 100644 index 0000000..12569c8 --- /dev/null +++ b/src/reliability/guttman.jl @@ -0,0 +1,221 @@ +""" + lambda1(m::AbstractMatrix) + +Calculate the lower bound estimate of the reliability L₁ described in $GUTTMAN1945 +""" +function lambda1(m::AbstractMatrix) + sum_sj = sum(var, eachcol(m)) + st = var(sum(m, dims = 2)) + λ = 1 - (sum_sj / st) + return λ +end + +struct L1 <: ReliabilityMeasure end +(method::L1)(data) = lambda1(data) + +""" + lambda2(scale::AbstractScale) + +Calculate the lower bound estimate of the reliability lambda₂ described in $GUTTMAN1945 +""" +function lambda2(m::AbstractMatrix) + n = size(m, 2) + C = cov(m) + zerodiag!(C) + st = var(sum(m, dims = 2)) + λ = lambda1(m) + sqrt(n / (n - 1) * sum(abs2, C)) / st + return λ +end + +struct L2 <: ReliabilityMeasure end +(method::L2)(data) = lambda2(data) + +""" + lambda3(m::AbstractMatrix) + +Calculate the lower bound estimate of the reliability lambda₃ described in $GUTTMAN1945 +""" +function lambda3(m::AbstractMatrix) + n = size(m, 2) + λ = n / (n - 1) * lambda1(m) + return λ +end + +struct L3 <: ReliabilityMeasure end +(method::L3)(data) = lambda3(data) + +""" + alpha(m::AbstractMatrix) + +Estimate Cronbach's alpha. `alpha` is an alias for [`lambda3`](@ref). +""" +const alpha = lambda3 + +struct Alpha <: ReliabilityMeasure end +(method::Alpha)(data) = alpha(data) + +""" + lambda4(m::AbstractMatrix; type::Symbol = :firstlast) + +Return the lower bound estimate of the reliability lambda₄ described in $GUTTMAN1945 + +The calculation of lambda₄ is based on splitting the test in half. +It is a lower bound of the reliability no matter how the scale is split. + +The split of the scale can be controlled by the `type` keyword argument. +The following options are available for `type`: +- `:firstlast`: Split the test by first and last half +- `:oddeven`: Split the test by odd and even indices +- `:random`: Split the test by random indices + +To get the maximum lower bound see [`maxlambda4`](@ref). +""" +function lambda4(m::AbstractMatrix; type::Symbol = :firstlast) + splits = splithalf(m; type) + st = var(sum(m, dims = 2)) + + s1 = var(sum(splits[1], dims = 2)) + s2 = var(sum(splits[2], dims = 2)) + + λ = 2 * (1 - (s1 + s2) / st) + return λ +end + +function lambda4(m::AbstractMatrix, is) + splits = split(m, is) + st = var(sum(m, dims = 2)) + + s1 = var(sum(splits[1], dims = 2)) + s2 = var(sum(splits[2], dims = 2)) + + λ = 2 * (1 - (s1 + s2) / st) + return λ +end + +""" + maxlambda4(m::AbstractMatrix; method = :auto, n_samples = 10_000) + +Calculate the maximum lower bound estimate of the reliability lambda₄ described in $GUTTMAN1945 + +The `method` keyword argument determines the way the bound is estimated. Available options +are: +- `:bruteforce`: Calculate lambda₄ for each split-half combination. +- `:sample`: Calculate lambda₄ for `n_samples` samples of split-half combinations. +- `:auto` (the default): if the number of items is below 25, `:bruteforce` is applied, + `:sample` otherwise. + +See also [`lambda4`](@ref). +""" +struct Lambda4{F,E,S} + statistic::F + estimate::E + samples::S +end + +Base.show(io::IO, lambda4::Lambda4) = print(io, lambda4.estimate) + +function lambda4( + statistic::F, + m::AbstractMatrix; + method = :auto, + n_samples = 10_000, +) where {F} + method = method == :auto && size(m, 2) <= 25 ? :bruteforce : :sample + samples = lambda4_samples(m; method, n_samples) + + λ = statistic(samples) + return Lambda4(statistic, λ, samples) +end + +function lambda4_samples(m::AbstractMatrix; method = :bruteforce, n_samples = 10_000) + if method == :bruteforce + λ = _lambda4_brute_force(m) + elseif method == :sample + λ = _lambda4_random(m, n_samples) + else + error("Unknown method") + end + return λ +end + +function _lambda4_brute_force(m::AbstractMatrix) + n = size(m, 2) + n_include = ceil(Int, n / 2) + is = axes(m, 2) + + combs = combinations(is, n_include) + ncombs = length(combs) + + if ncombs > 1e6 + @info "Brute forcing $(ncombs) combinatinos. Adjust your expectations accordingly..." + end + + λ = [lambda4(m, c) for c in combs] + + return λ +end + +function _lambda4_random(m::AbstractMatrix, n_samples::Int) + n = size(m, 2) + n_include = ceil(Int, n / 2) + is = axes(m, 2) + λ = [lambda4(m, sample(is, n_include, replace = false)) for _ in 1:n_samples] + return λ +end + +@kwdef struct L4{F} <: ReliabilityMeasure + statistic::F = maximum + method::Symbol = :auto + n_samples::Int = 10_000 +end + +function (method::L4)(data) + λ = lambda4( + method.statistic, + data, + method = method.method, + n_samples = method.n_samples, + ) + return λ.estimate +end + +name(r::L4) = "L4($(r.statistic), :$(r.method), $(r.n_samples))" + +""" + lambda5(m::AbstractMatrix) + +Return the lower bound estimate of the reliability lambda₅ described in $GUTTMAN1945 +""" +function lambda5(m::AbstractMatrix) + C = LowerTriangular(cov(m)) + zerodiag!(C) + sj = sum(abs2, C, dims = 1) + Cmax = maximum(sj) + st = var(sum(m, dims = 2)) + return lambda1(m) + 2 * sqrt(Cmax) / st +end + +struct L5 <: ReliabilityMeasure end +(method::L5)(data) = lambda5(data) + +""" + lambda6(m::AbstractMatrix) + +Return the lower bound estimate of the reliability lambda₆ described in $GUTTMAN1945 +""" +function lambda6(m::AbstractMatrix) + C = cov(m) + Cinv = inv(C) + smc = 1 .- 1 ./ diag(Cinv) + return 1 - sum(1 .- smc) / sum(C) +end + +struct L6 <: ReliabilityMeasure end +(method::L6)(data) = lambda6(data) + +""" + GUTTMAN_METHODS + +A collection of reliability measures described in $GUTTMAN1945 +""" +const GUTTMAN_METHODS = [L1(), L2(), L3(), L4(), L5(), L6()] diff --git a/src/reliability/kuder_richardson.jl b/src/reliability/kuder_richardson.jl new file mode 100644 index 0000000..586332f --- /dev/null +++ b/src/reliability/kuder_richardson.jl @@ -0,0 +1,28 @@ +""" + kr20(m::AbstractMatrix) +""" +function kr20(m::AbstractMatrix) + n = size(m, 2) + item_facilities = mean(m, dims = 1) + item_difficulties = 1 .- item_facilities + st = var(sum(m, dims = 2)) + return (n / (n - 1)) * ((st - sum(item_facilities .* item_difficulties)) / st) +end + +struct KR20 <: ReliabilityMeasure end +(method::KR20)(data) = kr20(data) + +""" + kr21(m::AbstractMatrix) +""" +function kr21(m::AbstractMatrix) + n = size(m, 2) + item_facilities = mean(m, dims = 1) + avg_facility = mean(item_facilities) + avg_difficulty = 1 - avg_facility + st = var(sum(m, dims = 2)) + return (n / (n - 1)) * ((st - n * avg_difficulty * avg_facility) / st) +end + +struct KR21 <: ReliabilityMeasure end +(method::KR21)(data) = kr21(data) diff --git a/src/reliability/reliability.jl b/src/reliability/reliability.jl new file mode 100644 index 0000000..13da634 --- /dev/null +++ b/src/reliability/reliability.jl @@ -0,0 +1,232 @@ +const DEFAULT_BOOSTRAP_CI = BCaConfInt(0.95) +const DEFAULT_BOOSTRAP_SAMPLING = BasicSampling(1000) + +""" + ReliabilityMeasure + +A reliability measure is the reliability interface for end users. +All low-level reliability estimates should define a callable struct `T <: ReliabilityMeasure` +that takes a single argument, the data, and return the reliability estimate. + +## Methods +- `(method::T)(data)`: The reliability algorithm +- `name(method::T)`: The name of the reliability algorithm for pretty printing +""" +abstract type ReliabilityMeasure <: Function end + +name(r::ReliabilityMeasure) = string(nameof(r)) + +include("guttman.jl") +include("glb.jl") +include("kuder_richardson.jl") +include("ten_berge.jl") + +""" + PSYCH_METHODS + +A collection of reliability measures used by the `psych` R package. +""" +const PSYCH_METHODS = [L4(), L6(), L3(), L2()] + +""" + ReliabilityResult + +A data structure that holds results from reliability analysis. + +## Methods +- `bias` +- `ci_method` +- `confint` +- `data` +- `estimate` +- `samples` +- `sampling_method` +- `stderror` +""" +struct ReliabilityResult{D,B,S,C} + data::D + bootstrap_samples::B + sampling_method::S + ci_method::C +end + +""" + data(result::ReliabilityResult) + +Get the data used to calculate `result`. +""" +data(result::ReliabilityResult) = result.data + +""" + sampling_method(result::ReliabilityResult) + +Get the sampling method used to calculate the bootstrap samples in `result`. +""" +sampling_method(result::ReliabilityResult) = result.sampling_method + +""" + ci_method(result::ReliabilityResult) + +Get the method used to calculate the bootstrap confidence interval in `result`. +""" +ci_method(result::ReliabilityResult) = result.ci_method + +""" + estimate(result::ReliabilityResult)::OrderedDict{String, Float64} + estimate(result::ReliabilityResult, method::String)::Float64 + +Get the point estimate of the reliability. +""" +function estimate(result::ReliabilityResult, method::String) + samples = result.bootstrap_samples[method] + return first(original(samples)) +end + +function estimate(result::ReliabilityResult) + samples = result.bootstrap_samples + return OrderedDict(key => estimate(result, key) for key in keys(samples)) +end + +""" + confint(result::ReliabilityResult)::OrderedDict{String, Tuple{Float64, Float64}} + confint(result::ReliabilityResult, method::String)::Float64 + +Get the bootstrap confidence intervals for the reliability estimates of `result`. +""" +function StatsAPI.confint(result::ReliabilityResult, method::String) + samples = result.bootstrap_samples + ci = confint(samples[method], result.ci_method) + _, lwr, upr = first(ci) + return lwr, upr +end + +function StatsAPI.confint(result::ReliabilityResult) + samples = result.bootstrap_samples + return OrderedDict(key => confint(result, key) for key in keys(samples)) +end + +""" + bias +""" +function Bootstrap.bias(r::ReliabilityResult, method::String) + b = Bootstrap.bias(r.bootstrap_samples[method]) + return first(b) +end + +function Bootstrap.bias(r::ReliabilityResult) + return OrderedDict(key => bias(r, key) for key in keys(r.bootstrap_samples)) +end + +""" + stderror +""" +function Bootstrap.stderror(r::ReliabilityResult, method::String) + b = Bootstrap.stderror(r.bootstrap_samples[method]) + return first(b) +end + +function Bootstrap.stderror(r::ReliabilityResult) + return OrderedDict(key => stderror(r, key) for key in keys(r.bootstrap_samples)) +end + +""" + samples +""" +function samples(r::ReliabilityResult, method::String) + b = straps(r.bootstrap_samples[method]) + return first(b) +end + +function samples(r::ReliabilityResult) + return OrderedDict(key => samples(r, key) for key in keys(r.bootstrap_samples)) +end + +""" + reliability(m::AbstractMatrix, method::ReliabilityMeasure; kwargs...) + reliability(m::AbstractMatrix, methods::Vector{<:ReliabilityMeasure}; kwargs...) + +Estimate the reliability of `m` for a given `method` or multiple `methods`. + +## Arguments +- `m`: The input data +- `method`: A `ReliabilityMeasure` to estimate + +## Keyword arguments +- `ci_method`: The method used to calculate the bootstrap confidence intervals. Defaults to `$(DEFAULT_BOOSTRAP_CI)` +- `sampling_method`: The method used to draw boostrap samples from `m`. Defaults to `$(DEFAULT_BOOSTRAP_SAMPLING)` +""" +function reliability( + m::AbstractMatrix, + methods::Vector{<:ReliabilityMeasure}; + ci_method = DEFAULT_BOOSTRAP_CI, + sampling_method = DEFAULT_BOOSTRAP_SAMPLING, +) + bootstrap_samples = OrderedDict( + name(method) => bootstrap(method, m, sampling_method) for method in methods + ) + + return ReliabilityResult(m, bootstrap_samples, sampling_method, ci_method) +end + +function reliability(m::AbstractMatrix, method::ReliabilityMeasure; kwargs...) + return reliability(m, [method]; kwargs...) +end + +function Base.show(io::IO, mime::MIME"text/plain", result::ReliabilityResult) + ci = confint(result) + + fmt = x -> @sprintf "%.2f" x + + ci_method_name = methodname(ci_method(result)) + ci_level = level(ci_method(result)) + quant_lwr, quant_upr = quantilesfromlevel(ci_level) + + sampling_method_name = methodname(sampling_method(result)) + n_samples = nrun(sampling_method(result)) + + partable = OrderedDict( + "method" => collect(keys(result.bootstrap_samples)), + "estimate" => fmt.(values(estimate(result))), + "stderror" => fmt.(values(stderror(result))), + prettyquantile(quant_lwr) => fmt.(first.(values(ci))), + prettyquantile(quant_upr) => fmt.(last.(values(ci))), + ) + + header = OrderedDict( + "1" => [ + "confidence interval method:", + "confidence level:", + "bootstrap sampling method:", + "bootstrap iterations", + ], + "2" => [ + "{cyan}$(ci_method_name){/cyan}", + "{magenta}$(ci_level){/magenta}", + "{cyan}$(sampling_method_name){/cyan}", + "{magenta}$(n_samples){/magenta}", + ], + ) + + print( + io, + CTTPanel( + "", + Term.Table( + header, + box = :NONE, + compact = true, + show_header = false, + columns_justify = :left, + ), + Term.Table( + partable, + header_style = "green bold", + columns_style = ["bold red", "", "", "", ""], + style = "dim", + box = :SIMPLE, + ), + title = "Reliability Analysis", + ), + ) + return nothing +end diff --git a/src/reliability/ten_berge.jl b/src/reliability/ten_berge.jl new file mode 100644 index 0000000..eca0a80 --- /dev/null +++ b/src/reliability/ten_berge.jl @@ -0,0 +1,72 @@ +""" + mu(m::AbstractMatrix, r::Int) + +Calculate the lower bound of the reliability mu derived in $TENBERGE1978 + +## Notes +- If `r = 0` then mu is equivalent to Cronbach's alpha. +- If `r = 1` then mu is equivalent to Guttman's lambda₂. +""" +function mu(m::AbstractMatrix, r::Int) + n = size(m, 2) + C = cov(m) + zerodiag!(C) + + st = var(sum(m, dims = 2)) + μ = _mu(C, st, n, r) + return μ +end + +function mu(::Type{T}, m::AbstractMatrix, r::Int) where {T} + n = size(m, 2) + C = T.(cov(m)) + zerodiag!(C) + + st = var(sum(m, dims = 2)) + μ = _mu(C, st, n, r) + return μ +end + +function _mu(C, st, n, r::Int) + r >= 0 || throw(ArgumentError("r must be non-negative.")) + + p_sum = zero(eltype(C)) + + for h in Iterators.reverse(0:r) + p_h = sum(c -> c^(2.0^h), C) + + if h == r + p_h *= n / (n - 1) + end + + if h == 0 + p_sum += p_h + else + p_sum = sqrt(p_sum + p_h) + end + end + + return p_sum / st +end + +@kwdef struct Mu <: ReliabilityMeasure + r::Int +end + +(method::Mu)(data) = mu(data, method.r) +name(r::Mu) = "Mu($(r.r))" + +""" + mu_up_to(r::Int) + +Generate a vector of reliability measures `Mu` from 0 to `r`. + +```jldoctest +julia> mu_up_to(2) +3-element Vector{Mu}: + (::Mu) (generic function with 1 method) + (::Mu) (generic function with 1 method) + (::Mu) (generic function with 1 method) +``` +""" +mu_up_to(r::Int) = [Mu(i) for i in 0:r] diff --git a/src/split.jl b/src/split.jl index b84eb9d..72e6fbc 100644 --- a/src/split.jl +++ b/src/split.jl @@ -6,22 +6,12 @@ Split a matrix by arbitrary indices `is`. Returns a `Tuple` of matrices `m1`, `m2` with `size(m1, dims=1) == length(is)` and `size(m2, dims=1) == size(m, dims=1) - length(is)`. """ function Base.split(m::AbstractMatrix, is) + not_is = setdiff(axes(m, 2), is) m1 = view(m, :, is) - m2 = view(m, :, Not(is)) + m2 = view(m, :, not_is) return m1, m2 end -""" - split(t::Test, is) - -Split a test by arbitrary indices `is`. -""" -function Base.split(t::AbstractTest, is) - t1 = SubTest(t, is) - t2 = SubTest(t, Not(is)) - return t1, t2 -end - """ splithalf(m::AbstractMatrix; type::Symbol) @@ -33,13 +23,13 @@ The type of split is determined by `type` - `:firstlast`: Split the matrix by first and last half - `:random`: Split the matrix by random indices """ -function splithalf(x; kwargs...) - n = nitems(x) +function splithalf(m::AbstractMatrix; kwargs...) + n = size(m, 2) is = getsplitindices(1:n; kwargs...) - return split(x, is) + return split(m, is) end -function getsplitindices(x; type::Symbol=:firstlast) +function getsplitindices(x; type::Symbol) if type == :oddeven is = _oddeven_is(x) elseif type == :firstlast @@ -52,10 +42,10 @@ function getsplitindices(x; type::Symbol=:firstlast) return is end -_oddeven_is(is) = iseven.(is) -_firstlast_is(is) = is .<= ceil(length(is) / 2) +_oddeven_is(is) = filter(iseven, is) +_firstlast_is(is) = filter(i -> i <= ceil(length(is) / 2), is) function _random_is(is) - s = sample(is, ceil(Int, length(is) / 2), replace=false) - return [i in s for i in is] + s = sample(is, ceil(Int, length(is) / 2), replace = false, ordered = true) + return is[s] end diff --git a/src/types.jl b/src/types.jl deleted file mode 100644 index 0b2e9a3..0000000 --- a/src/types.jl +++ /dev/null @@ -1,49 +0,0 @@ -abstract type AbstractTest end - -struct Test{T<:Real} <: AbstractTest - data::Matrix{T} - itemcov::Matrix{Float64} - scores::Vector{T} -end - -struct SubTest <: AbstractTest - is - data - itemcov - scores -end - -Test(m::AbstractMatrix) = Test{eltype(m)}(m, cov(m), scores(m)) -Test(st::SubTest) = Test{eltype(st.data)}(st.data, st.itemcov, st.scores) - -function SubTest(t::Test, is) - dview = view(t.data, :, is) - return SubTest( - is, - dview, - view(t.itemcov, is, is), - scores(dview) - ) -end - -eachitem(m::AbstractMatrix) = eachcol(m) -eachitem(t::AbstractTest) = eachcol(t.data) - -eachperson(m::AbstractMatrix) = eachrow(m) -eachperson(t::AbstractTest) = eachrow(t.data) - -scores(v::AbstractVector) = v -scores(m::AbstractMatrix) = vec(sum(m, dims=2)) -scores(t::AbstractTest) = t.scores - -responses(m::AbstractMatrix) = m -responses(t::AbstractTest) = t.data -responses(x, i::Int) = responses(x)[:, i] - -nitems(m::AbstractMatrix) = size(m, 2) -nitems(t::AbstractTest) = nitems(t.data) - -npersons(m::AbstractMatrix) = size(m, 1) -npersons(t::AbstractTest) = npersons(t.data) - -Statistics.cov(t::AbstractTest) = t.itemcov diff --git a/src/utils.jl b/src/utils.jl index b4420b6..7a6e218 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -1,7 +1,36 @@ function zerodiag!(m) dims = size(m) foreach(i -> m[i, i] = zero(eltype(m)), 1:dims[2]) - return nothing + return m end zerodiag(m) = m - diagm(diag(m)) + +function CTTPanel(args...; title = nothing) + return Term.Panel( + args...; + title = isnothing(title) ? nothing : "{dim}" * title * "{/dim}", + style = "dim", + subtitle = "{dim}ClassicalTestTheory.jl{/dim}", + subtitle_justify = :right, + fit = true, + ) +end + +const pretty_names = Dict( + :lambda1 => "Guttman L₁", + :lambda2 => "Guttman L₂", + :lambda3 => "Guttman L₃ / Cronbachs α", + :lambda4 => "Guttman L₄", + :lambda5 => "Guttman L₅", + :lambda6 => "Guttman L₆", + :glb => "GLB", +) + +prettify(s::Symbol) = pretty_names[s] + + +methodname(x) = typeof(x).name.name + +quantilesfromlevel(l::Real) = ((1 - l) / 2, (1 + l) / 2) +prettyquantile(q::Real) = @sprintf("%.1f", q * 100) * "%-quantile" diff --git a/test/reliability.jl b/test/reliability.jl index 279e0af..1ca5305 100644 --- a/test/reliability.jl +++ b/test/reliability.jl @@ -1,7 +1,5 @@ @testset "Reliability" begin # set up some irt style test data with correlated responses - Random.seed!(859345) - difficulties = randn(10) abilities = randn(100) @@ -15,32 +13,33 @@ end end - t = ClassicalTestTheory.Test(m) - - @testset "equality of Matrix and Test methods" begin - @test λ1(m) ≈ λ1(t) - @test λ2(m) ≈ λ2(t) - @test λ3(m) ≈ λ3(t) - @test λ4(m) ≈ λ4(t) - @test maxλ4(m, method=:bruteforce) ≈ maxλ4(t, method=:bruteforce) - @test λ5(m) ≈ λ5(t) - @test λ6(m) ≈ λ6(t) - - @test kr20(m) ≈ kr20(t) - @test kr21(m) ≈ kr21(t) - - @test glb(m) ≈ glb(t) - + @testset "lambda" begin + # theoretical guarantees + @test lambda1(m) > 0 + @test lambda1(m) < + lambda3(m) <= + lambda2(m) <= + lambda4(maximum, m, method = :bruteforce).estimate + @test alpha(m) == lambda3(m) + @test lambda4(maximum, m, method = :sample, n_samples = 100).estimate <= + lambda4(maximum, m, method = :bruteforce).estimate end - @testset "theoretical guarantees of λ" begin - @test λ1(t) > 0 - @test λ1(t) < λ3(t) <= λ2(t) <= maxλ4(t, method=:bruteforce) - @test α(t) == λ3(t) + @testset "glb" begin + # theoretical guarantees + @test lambda4(maximum, m, method = :bruteforce).estimate <= glb(m) end - # theoretical guarantees of glb - @testset "theoretical guarantees of glb" begin - @test maxλ4(t, method=:bruteforce) <= glb(t) + @testset "mu" begin + @test_throws ArgumentError mu(m, -1) + @test mu(m, 1) ≈ mu(BigFloat, m, 1) + + # theoretical guarantees + for r in 1:10 + @test mu(BigFloat, m, r - 1) <= mu(BigFloat, m, r) + end + + @test mu(m, 0) ≈ alpha(m) + @test mu(m, 1) ≈ lambda2(m) end end diff --git a/test/runtests.jl b/test/runtests.jl index 6d4ee33..ad90437 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,12 +1,8 @@ using ClassicalTestTheory using Distributions -using Random -using StatsBase -using Statistics using Test @testset "ClassicalTestTheory.jl" begin - include("types.jl") include("reliability.jl") include("split.jl") end diff --git a/test/split.jl b/test/split.jl index 3cc25c1..366220f 100644 --- a/test/split.jl +++ b/test/split.jl @@ -1,36 +1,22 @@ @testset "Test splitting" begin m = zeros(4, 4) - t = ClassicalTestTheory.Test(m) @testset "by UnitRange" begin - msplit = split(m, 1:2) - @test length(msplit) == 2 - @test size(first(msplit)) == (4, 2) - @test size(last(msplit)) == (4, 2) - - tsplit = split(t, 1:2) - @test length(tsplit) == 2 - @test size(first(tsplit).data) == (4, 2) - @test size(last(tsplit).data) == (4, 2) + s = split(m, 1:2) + @test length(s) == 2 + @test size(first(s)) == (4, 2) + @test size(last(s)) == (4, 2) end @testset "by Int" begin - msplit = split(m, 3) - @test size(first(msplit)) == (4,) - @test size(last(msplit)) == (4, 3) - - tsplit = split(t, 3) - @test size(first(tsplit).data) == (4,) - @test size(last(tsplit).data) == (4, 3) + s = split(m, 3) + @test size(first(s)) == (4,) + @test size(last(s)) == (4, 3) end @testset "by Array" begin - msplit = split(m, [1, 3]) - @test size(first(msplit)) == (4, 2) - @test size(last(msplit)) == (4, 2) - - tsplit = split(t, [1, 3]) - @test size(first(tsplit).data) == (4, 2) - @test size(last(tsplit).data) == (4, 2) + s = split(m, [1, 3]) + @test size(first(s)) == (4, 2) + @test size(last(s)) == (4, 2) end end diff --git a/test/types.jl b/test/types.jl deleted file mode 100644 index f352ee1..0000000 --- a/test/types.jl +++ /dev/null @@ -1,56 +0,0 @@ -@testset "Types" begin - @testset "Matrix methods" begin - m = [1 0; 0 1; 1 1] - - @test scores(m) == [1, 1, 2] - - @test responses(m) == m - @test responses(m, 1) == [1, 0, 1] - @test responses(m, 2) == [0, 1, 1] - @test_throws BoundsError responses(m, 3) - - @test nitems(m) == 2 - @test npersons(m) == 3 - end - - @testset "Test" begin - m = [1 0; 0 1; 1 1] - t = ClassicalTestTheory.Test(m) - - @test scores(t) == [1, 1, 2] - @test responses(t) == m - @test responses(t, 1) == [1, 0, 1] - @test_throws BoundsError responses(t, 5) - - @test cov(t) == t.itemcov == cov(m) - end - - @testset "SubTest" begin - m = [1 0; 0 1; 1 1] - t = ClassicalTestTheory.Test(m) - - @testset "is::Int" begin - st = SubTest(t, 1) - @test scores(st) == [1, 0, 1] - @test responses(st) == [1, 0, 1] - @test responses(st, 1) == [1, 0, 1] - @test_throws BoundsError responses(st, 2) - end - - @testset "is::UnitRange" begin - st = SubTest(t, 1:2) - @test scores(st) == [1, 1, 2] - @test responses(st) == m - @test responses(st, 1) == [1, 0, 1] - @test_throws BoundsError responses(st, 3) - end - - @testset "is::Vector" begin - st = SubTest(t, [1, 2]) - @test scores(st) == [1, 1, 2] - @test responses(st) == m - @test responses(st, 1) == [1, 0, 1] - @test_throws BoundsError responses(st, 3) - end - end -end