├── .gitignore ├── Manifest.toml ├── Project.toml ├── README.md ├── data ├── section10a.csv ├── section10b.csv ├── section11.csv ├── section3.csv ├── section6a.csv ├── section6b.csv ├── section6c.csv ├── section7.csv └── section9.csv ├── markdown ├── section10.md ├── section11.md ├── section2.md ├── section3.md ├── section5.md ├── section6.md ├── section7.md └── section9.md ├── notebook ├── Manifest.toml ├── Project.toml ├── section10.ipynb ├── section11.ipynb ├── section2.ipynb ├── section3.ipynb ├── section5.ipynb ├── section6.ipynb ├── section7.ipynb └── section9.ipynb └── src ├── build.jl ├── section10.jl ├── section11.jl ├── section2.jl ├── section3.jl ├── section5.jl ├── section6.jl ├── section7.jl └── section9.jl /.gitignore: -------------------------------------------------------------------------------- 1 | *.jl.cov 2 | *.jl.*.cov 3 | *.jl.mem 4 | deps/deps.jl 5 | 6 | .ipynb_checkpoints -------------------------------------------------------------------------------- /Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AbstractFFTs]] 4 | deps = ["LinearAlgebra"] 5 | git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" 6 | uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" 7 | version = "0.5.0" 8 | 9 | [[ArnoldiMethod]] 10 | deps = ["DelimitedFiles", "LinearAlgebra", "Random", "SparseArrays", "StaticArrays", "Test"] 11 | git-tree-sha1 = "2b6845cea546604fb4dca4e31414a6a59d39ddcd" 12 | uuid = "ec485272-7323-5ecc-a04f-4719b315124d" 13 | version = "0.0.4" 14 | 15 | [[Arpack]] 16 | deps = ["Arpack_jll", "Libdl", "LinearAlgebra"] 17 | git-tree-sha1 = "2ff92b71ba1747c5fdd541f8fc87736d82f40ec9" 18 | uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" 19 | version = "0.4.0" 20 | 21 | [[Arpack_jll]] 22 | deps = ["Libdl", "OpenBLAS_jll", "Pkg"] 23 | git-tree-sha1 = "e214a9b9bd1b4e1b4f15b22c0994862b66af7ff7" 24 | uuid = "68821587-b530-5797-8361-c406ea357684" 25 | version = "3.5.0+3" 26 | 27 | [[ArrayInterface]] 28 | deps = ["LinearAlgebra", "Requires", "SparseArrays"] 29 | git-tree-sha1 = "649c08a5a3a513f4662673d3777fe6ccb4df9f5d" 30 | uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" 31 | version = "2.8.7" 32 | 33 | [[AxisAlgorithms]] 34 | deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] 35 | git-tree-sha1 = "a4d07a1c313392a77042855df46c5f534076fab9" 36 | uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" 37 | version = "1.0.0" 38 | 39 | [[Base64]] 40 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 41 | 42 | [[BinDeps]] 43 | deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] 44 | git-tree-sha1 = "46cf2c1668ad07aba5a9d331bdeea994a1f13856" 45 | uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" 46 | version = "1.0.1" 47 | 48 | [[BinaryProvider]] 49 | deps = ["Libdl", "Logging", "SHA"] 50 | git-tree-sha1 = "428e9106b1ff27593cbd979afac9b45b82372b8c" 51 | uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232" 52 | version = "0.5.9" 53 | 54 | [[BlockArrays]] 55 | deps = ["LinearAlgebra"] 56 | git-tree-sha1 = "b9e7e450038d9f1277723ff34a6731d559972576" 57 | uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" 58 | version = "0.11.2" 59 | 60 | [[BlockDiagonals]] 61 | deps = ["FillArrays", "LinearAlgebra"] 62 | git-tree-sha1 = "014018143ebbec43ac12d26f164eb3f049aa822f" 63 | uuid = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" 64 | version = "0.1.6" 65 | 66 | [[Bzip2_jll]] 67 | deps = ["Libdl", "Pkg"] 68 | git-tree-sha1 = "3663bfffede2ef41358b6fc2e1d8a6d50b3c3904" 69 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 70 | version = "1.0.6+2" 71 | 72 | [[CMake]] 73 | deps = ["BinDeps"] 74 | git-tree-sha1 = "50a8b41d2c562fccd9ab841085fc7d1e2706da82" 75 | uuid = "631607c0-34d2-5d66-819e-eb0f9aa2061a" 76 | version = "1.2.0" 77 | 78 | [[CMakeWrapper]] 79 | deps = ["BinDeps", "CMake", "Libdl", "Parameters", "Test"] 80 | git-tree-sha1 = "16d4acb3d37dc05b714977ffefa8890843dc8985" 81 | uuid = "d5fb7624-851a-54ee-a528-d3f3bac0b4a0" 82 | version = "0.2.3" 83 | 84 | [[CSV]] 85 | deps = ["CategoricalArrays", "DataFrames", "Dates", "FilePathsBase", "Mmap", "Parsers", "PooledArrays", "Tables", "Unicode", "WeakRefStrings"] 86 | git-tree-sha1 = "52a8e60c7822f53d57e4403b7f2811e7e1bdd32b" 87 | uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" 88 | version = "0.6.2" 89 | 90 | [[Cairo]] 91 | deps = ["Cairo_jll", "Colors", "Fontconfig_jll", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] 92 | git-tree-sha1 = "f9db9e9814f71799e1b9c849055f0adae8bdc158" 93 | uuid = "159f3aea-2a34-519c-b102-8c37f9878175" 94 | version = "1.0.3" 95 | 96 | [[Cairo_jll]] 97 | deps = ["Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] 98 | git-tree-sha1 = "d296f5e975306844de3e57118c3cf4a7cf2a8762" 99 | uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" 100 | version = "1.16.0+4" 101 | 102 | [[Calculus]] 103 | deps = ["LinearAlgebra"] 104 | git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" 105 | uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" 106 | version = "0.5.1" 107 | 108 | [[CategoricalArrays]] 109 | deps = ["DataAPI", "Future", "JSON", "Missings", "Printf", "Statistics", "Unicode"] 110 | git-tree-sha1 = "df774d7e905ca391178f0abc67f4fa5d3ff4ef12" 111 | uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" 112 | version = "0.8.0" 113 | 114 | [[Clustering]] 115 | deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "SparseArrays", "Statistics", "StatsBase"] 116 | git-tree-sha1 = "7846d785d9e4bcc904b70689bde8413f85b0ca20" 117 | uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" 118 | version = "0.14.0" 119 | 120 | [[ColorSchemes]] 121 | deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] 122 | git-tree-sha1 = "7a15e3690529fd1042f0ab954dff7445b1efc8a5" 123 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" 124 | version = "3.9.0" 125 | 126 | [[ColorTypes]] 127 | deps = ["FixedPointNumbers", "Random"] 128 | git-tree-sha1 = "c73d9cfc2a9d8433dc77f5bff4bddf46b1d78c20" 129 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 130 | version = "0.10.3" 131 | 132 | [[Colors]] 133 | deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] 134 | git-tree-sha1 = "2fdeb981ebcf52cd800ddb6a0aa5eac34153552d" 135 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 136 | version = "0.12.0" 137 | 138 | [[Combinatorics]] 139 | deps = ["Polynomials"] 140 | git-tree-sha1 = "8153f2c7cc4446958920242c4caa3dc0e061918f" 141 | uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" 142 | version = "1.0.1" 143 | 144 | [[CommonSubexpressions]] 145 | deps = ["Test"] 146 | git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0" 147 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 148 | version = "0.2.0" 149 | 150 | [[Compat]] 151 | deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] 152 | git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" 153 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 154 | version = "2.2.0" 155 | 156 | [[CompilerSupportLibraries_jll]] 157 | deps = ["Libdl", "Pkg"] 158 | git-tree-sha1 = "7c4f882c41faa72118841185afc58a2eb00ef612" 159 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 160 | version = "0.3.3+0" 161 | 162 | [[Compose]] 163 | deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "UUIDs"] 164 | git-tree-sha1 = "034174e607d254b8ca0853a1a9029b265114bf6c" 165 | uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" 166 | version = "0.8.2" 167 | 168 | [[Contour]] 169 | deps = ["StaticArrays"] 170 | git-tree-sha1 = "0b17db36e7e03f8437e0d1f55aea3e4a60c74353" 171 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" 172 | version = "0.5.3" 173 | 174 | [[CoupledFields]] 175 | deps = ["LinearAlgebra", "Statistics", "StatsBase"] 176 | git-tree-sha1 = "6c9671364c68c1158ac2524ac881536195b7e7bc" 177 | uuid = "7ad07ef1-bdf2-5661-9d2b-286fd4296dac" 178 | version = "0.2.0" 179 | 180 | [[DataAPI]] 181 | git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32" 182 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 183 | version = "1.3.0" 184 | 185 | [[DataFrames]] 186 | deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] 187 | git-tree-sha1 = "1b4d832288e2d919eeaccdf1d9af7a8a57d773d6" 188 | uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" 189 | version = "0.21.0" 190 | 191 | [[DataFramesMeta]] 192 | deps = ["DataFrames", "Tables"] 193 | git-tree-sha1 = "4e2ba678c7a624c963ac09f68f9b6086607377a4" 194 | uuid = "1313f7d8-7da2-5740-9ea0-a2ca25f37964" 195 | version = "0.5.1" 196 | 197 | [[DataStructures]] 198 | deps = ["InteractiveUtils", "OrderedCollections"] 199 | git-tree-sha1 = "6166ecfaf2b8bbf2b68d791bc1d54501f345d314" 200 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 201 | version = "0.17.15" 202 | 203 | [[DataValueInterfaces]] 204 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 205 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 206 | version = "1.0.0" 207 | 208 | [[DataValues]] 209 | deps = ["DataValueInterfaces", "Dates"] 210 | git-tree-sha1 = "d88a19299eba280a6d062e135a43f00323ae70bf" 211 | uuid = "e7dc6d0d-1eca-5fa6-8ad6-5aecde8b7ea5" 212 | version = "0.4.13" 213 | 214 | [[Dates]] 215 | deps = ["Printf"] 216 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 217 | 218 | [[DelimitedFiles]] 219 | deps = ["Mmap"] 220 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 221 | 222 | [[Dictionaries]] 223 | deps = ["Indexing", "Random"] 224 | git-tree-sha1 = "a09aff60a525650db2575907411734c4cceabd93" 225 | uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" 226 | version = "0.2.1" 227 | 228 | [[DiffResults]] 229 | deps = ["StaticArrays"] 230 | git-tree-sha1 = "da24935df8e0c6cf28de340b958f6aac88eaa0cc" 231 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 232 | version = "1.0.2" 233 | 234 | [[DiffRules]] 235 | deps = ["NaNMath", "Random", "SpecialFunctions"] 236 | git-tree-sha1 = "eb0c34204c8410888844ada5359ac8b96292cfd1" 237 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 238 | version = "1.0.1" 239 | 240 | [[Distances]] 241 | deps = ["LinearAlgebra", "Statistics"] 242 | git-tree-sha1 = "23717536c81b63e250f682b0e0933769eecd1411" 243 | uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" 244 | version = "0.8.2" 245 | 246 | [[Distributed]] 247 | deps = ["Random", "Serialization", "Sockets"] 248 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 249 | 250 | [[Distributions]] 251 | deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] 252 | git-tree-sha1 = "c4ed10355637fcb0725dc6a27060f74df24f13cd" 253 | uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" 254 | version = "0.23.2" 255 | 256 | [[DocStringExtensions]] 257 | deps = ["LibGit2", "Markdown", "Pkg", "Test"] 258 | git-tree-sha1 = "88bb0edb352b16608036faadcc071adda068582a" 259 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 260 | version = "0.8.1" 261 | 262 | [[Expat_jll]] 263 | deps = ["Libdl", "Pkg"] 264 | git-tree-sha1 = "9cdd4b1523086c9d93604599e3a389e8941e52b0" 265 | uuid = "2e619515-83b5-522b-bb60-26c02a35a201" 266 | version = "2.2.7+1" 267 | 268 | [[ExprTools]] 269 | git-tree-sha1 = "6f0517056812fd6aa3af23d4b70d5325a2ae4e95" 270 | uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" 271 | version = "0.1.1" 272 | 273 | [[EzXML]] 274 | deps = ["Printf", "XML2_jll"] 275 | git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268" 276 | uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615" 277 | version = "1.1.0" 278 | 279 | [[FFMPEG]] 280 | deps = ["FFMPEG_jll"] 281 | git-tree-sha1 = "c82bef6fc01e30d500f588cd01d29bdd44f1924e" 282 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 283 | version = "0.3.0" 284 | 285 | [[FFMPEG_jll]] 286 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 287 | git-tree-sha1 = "0fa07f43e5609ea54848b82b4bb330b250e9645b" 288 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 289 | version = "4.1.0+3" 290 | 291 | [[FFTW]] 292 | deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] 293 | git-tree-sha1 = "b6a74f6dfd9e9d16b765397dc90df03e5a00532e" 294 | uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" 295 | version = "1.2.1" 296 | 297 | [[FFTW_jll]] 298 | deps = ["Libdl", "Pkg"] 299 | git-tree-sha1 = "6c975cd606128d45d1df432fb812d6eb10fee00b" 300 | uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" 301 | version = "3.3.9+5" 302 | 303 | [[FilePathsBase]] 304 | deps = ["Dates", "LinearAlgebra", "Printf", "Test", "UUIDs"] 305 | git-tree-sha1 = "923fd3b942a11712435682eaa95cc8518c428b2c" 306 | uuid = "48062228-2e41-5def-b9a4-89aafe57970f" 307 | version = "0.8.0" 308 | 309 | [[FillArrays]] 310 | deps = ["LinearAlgebra", "Random", "SparseArrays"] 311 | git-tree-sha1 = "5322d34d7600d3429665b37bcf7628dc602a28cc" 312 | uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" 313 | version = "0.8.8" 314 | 315 | [[FiniteDiff]] 316 | deps = ["ArrayInterface", "LinearAlgebra", "Requires", "SparseArrays", "StaticArrays"] 317 | git-tree-sha1 = "e65805de69d457029940acff64dd92e57b93c8a5" 318 | uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" 319 | version = "2.3.1" 320 | 321 | [[FixedPointNumbers]] 322 | git-tree-sha1 = "3ba9ea634d4c8b289d590403b4a06f8e227a6238" 323 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 324 | version = "0.8.0" 325 | 326 | [[Fontconfig_jll]] 327 | deps = ["Bzip2_jll", "Expat_jll", "FreeType2_jll", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] 328 | git-tree-sha1 = "141fe5f6d4013304d2ca5af0ac20ef4855bcc4e5" 329 | uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" 330 | version = "2.13.1+11" 331 | 332 | [[ForneyLab]] 333 | deps = ["Base64", "InteractiveUtils", "LinearAlgebra", "Printf", "SparseArrays", "SpecialFunctions", "Statistics", "Test"] 334 | git-tree-sha1 = "d5217b068f72fdc943243636acbacb2e05b464b3" 335 | uuid = "9fc3f58a-c2cc-5bff-9419-6a294fefdca9" 336 | version = "0.10.0" 337 | 338 | [[ForwardDiff]] 339 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] 340 | git-tree-sha1 = "869540e4367122fbffaace383a5bdc34d6e5e5ac" 341 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 342 | version = "0.10.10" 343 | 344 | [[FreeType2_jll]] 345 | deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"] 346 | git-tree-sha1 = "7d900f32a3788d4eacac2bfa3bf5c770179c8afd" 347 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 348 | version = "2.10.1+2" 349 | 350 | [[FriBidi_jll]] 351 | deps = ["Libdl", "Pkg"] 352 | git-tree-sha1 = "2f56bee16bd0151de7b6a1eeea2ced190a2ad8d4" 353 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 354 | version = "1.0.5+3" 355 | 356 | [[Future]] 357 | deps = ["Random"] 358 | uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" 359 | 360 | [[GLM]] 361 | deps = ["Distributions", "LinearAlgebra", "Printf", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "StatsModels"] 362 | git-tree-sha1 = "db0ace36f9dbe7b6a7a08434c5921377e9df2c72" 363 | uuid = "38e38edf-8417-5370-95a0-9cbb8c7f171a" 364 | version = "1.3.9" 365 | 366 | [[GR]] 367 | deps = ["Base64", "DelimitedFiles", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] 368 | git-tree-sha1 = "1185d50c5c90ec7c0784af7f8d0d1a600750dc4d" 369 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" 370 | version = "0.49.1" 371 | 372 | [[Gadfly]] 373 | deps = ["Base64", "CategoricalArrays", "Colors", "Compat", "Compose", "Contour", "CoupledFields", "DataStructures", "Dates", "Distributions", "DocStringExtensions", "Hexagons", "IndirectArrays", "IterTools", "JSON", "Juno", "KernelDensity", "LibGit2", "LinearAlgebra", "Loess", "Measures", "Printf", "Random", "Requires", "Showoff", "Statistics", "StatsBase", "Test"] 374 | git-tree-sha1 = "ee709588c71eb62ce53cecf5a594bdefd6f2a9be" 375 | uuid = "c91e804a-d5a3-530f-b6f0-dfbca275c004" 376 | version = "1.0.1" 377 | 378 | [[GeometryTypes]] 379 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] 380 | git-tree-sha1 = "34bfa994967e893ab2f17b864eec221b3521ba4d" 381 | uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" 382 | version = "0.8.3" 383 | 384 | [[Gettext_jll]] 385 | deps = ["Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] 386 | git-tree-sha1 = "e43d686df1f45cab7a2570ff63642a3ea618ca5f" 387 | uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" 388 | version = "0.20.1+2" 389 | 390 | [[Glib_jll]] 391 | deps = ["Gettext_jll", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] 392 | git-tree-sha1 = "09ea3797c586eedbb383eb8f1c950a12923f1541" 393 | uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" 394 | version = "2.59.0+2" 395 | 396 | [[Graphics]] 397 | deps = ["Colors", "LinearAlgebra", "NaNMath"] 398 | git-tree-sha1 = "45d684ead5b65c043ad46bd5be750d61c39d7ef8" 399 | uuid = "a2bd30eb-e257-5431-a919-1863eab51364" 400 | version = "1.0.2" 401 | 402 | [[Graphite2_jll]] 403 | deps = ["Libdl", "Pkg"] 404 | git-tree-sha1 = "6fad1258f2c9eacb86e8726d38c2ad6549f9d91e" 405 | uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" 406 | version = "1.3.13+1" 407 | 408 | [[HarfBuzz_jll]] 409 | deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Gettext_jll", "Glib_jll", "Graphite2_jll", "Libdl", "Libffi_jll", "Pkg"] 410 | git-tree-sha1 = "7a206ed46082e986179586a4ed60cbc740313ea6" 411 | uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" 412 | version = "2.6.1+5" 413 | 414 | [[Hexagons]] 415 | deps = ["Test"] 416 | git-tree-sha1 = "de4a6f9e7c4710ced6838ca906f81905f7385fd6" 417 | uuid = "a1b4810d-1bce-5fbd-ac56-80944d57a21f" 418 | version = "0.2.0" 419 | 420 | [[Indexing]] 421 | deps = ["Test"] 422 | git-tree-sha1 = "0cf3ac621cd74b1d03af0cc4275f680b2070a5cc" 423 | uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" 424 | version = "1.1.0" 425 | 426 | [[IndirectArrays]] 427 | git-tree-sha1 = "c2a145a145dc03a7620af1444e0264ef907bd44f" 428 | uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" 429 | version = "0.5.1" 430 | 431 | [[Inflate]] 432 | git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" 433 | uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" 434 | version = "0.1.2" 435 | 436 | [[IntelOpenMP_jll]] 437 | deps = ["Libdl", "Pkg"] 438 | git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" 439 | uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" 440 | version = "2018.0.3+0" 441 | 442 | [[InteractiveUtils]] 443 | deps = ["Markdown"] 444 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 445 | 446 | [[Interpolations]] 447 | deps = ["AxisAlgorithms", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] 448 | git-tree-sha1 = "3af735234d9b1ff9ff1af89875735cd9549c0c5f" 449 | uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" 450 | version = "0.12.9" 451 | 452 | [[Intervals]] 453 | deps = ["Dates", "Printf", "RecipesBase", "TimeZones"] 454 | git-tree-sha1 = "5e9938f4dff72e5ed4c0f7fbe34b204cbabcf43a" 455 | uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5" 456 | version = "1.1.0" 457 | 458 | [[InvertedIndices]] 459 | deps = ["Test"] 460 | git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc" 461 | uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" 462 | version = "1.0.0" 463 | 464 | [[IterTools]] 465 | git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" 466 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 467 | version = "1.3.0" 468 | 469 | [[IteratorInterfaceExtensions]] 470 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 471 | uuid = "82899510-4779-5014-852e-03e436cf321d" 472 | version = "1.0.0" 473 | 474 | [[JSON]] 475 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 476 | git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" 477 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 478 | version = "0.21.0" 479 | 480 | [[Juno]] 481 | deps = ["Base64", "Logging", "Media", "Profile"] 482 | git-tree-sha1 = "e1ba2a612645b3e07c773c3a208f215745081fe6" 483 | uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" 484 | version = "0.8.1" 485 | 486 | [[KernelDensity]] 487 | deps = ["Distributions", "FFTW", "Interpolations", "Optim", "StatsBase", "Test"] 488 | git-tree-sha1 = "c1048817fe5711f699abc8fabd47b1ac6ba4db04" 489 | uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" 490 | version = "0.5.1" 491 | 492 | [[LAME_jll]] 493 | deps = ["Libdl", "Pkg"] 494 | git-tree-sha1 = "221cc8998b9060677448cbb6375f00032554c4fd" 495 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 496 | version = "3.100.0+1" 497 | 498 | [[LZO_jll]] 499 | deps = ["Libdl", "Pkg"] 500 | git-tree-sha1 = "71119990371c93f027bee80547ee908ddfe7c5ca" 501 | uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" 502 | version = "2.10.0+1" 503 | 504 | [[LaTeXStrings]] 505 | git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8" 506 | uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 507 | version = "1.1.0" 508 | 509 | [[LibGit2]] 510 | deps = ["Printf"] 511 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 512 | 513 | [[LibVPX_jll]] 514 | deps = ["Libdl", "Pkg"] 515 | git-tree-sha1 = "e3549ca9bf35feb9d9d954f4c6a9032e92f46e7c" 516 | uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" 517 | version = "1.8.1+1" 518 | 519 | [[Libdl]] 520 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 521 | 522 | [[Libffi_jll]] 523 | deps = ["Libdl", "Pkg"] 524 | git-tree-sha1 = "68b165c609961207baa3174e03d6d56e7a37124c" 525 | uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" 526 | version = "3.2.1+1" 527 | 528 | [[Libgcrypt_jll]] 529 | deps = ["Libdl", "Libgpg_error_jll", "Pkg"] 530 | git-tree-sha1 = "7efb7f5e75a0f7323cce366d3e44a2d225c5617a" 531 | uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" 532 | version = "1.8.5+1" 533 | 534 | [[Libgpg_error_jll]] 535 | deps = ["Libdl", "Pkg"] 536 | git-tree-sha1 = "334284a62d6b8592099d28b78c76aefc266c03a2" 537 | uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" 538 | version = "1.36.0+1" 539 | 540 | [[Libiconv_jll]] 541 | deps = ["Libdl", "Pkg"] 542 | git-tree-sha1 = "e5256a3b0ebc710dbd6da0c0b212164a3681037f" 543 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 544 | version = "1.16.0+2" 545 | 546 | [[Libmount_jll]] 547 | deps = ["Libdl", "Pkg"] 548 | git-tree-sha1 = "621a6d7d527fd8e4812ca1154567bfdb81a3c517" 549 | uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" 550 | version = "2.34.0+1" 551 | 552 | [[Libuuid_jll]] 553 | deps = ["Libdl", "Pkg"] 554 | git-tree-sha1 = "7ae7eee3a9fe811b656347700c17fc9620ef4ecf" 555 | uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" 556 | version = "2.34.0+4" 557 | 558 | [[LightGraphs]] 559 | deps = ["ArnoldiMethod", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] 560 | git-tree-sha1 = "6f85a35d2377cb2db1bc448ed0d6340d2bb1ea64" 561 | uuid = "093fc24a-ae57-5d10-9952-331d41423f4d" 562 | version = "1.3.3" 563 | 564 | [[LineSearches]] 565 | deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf", "Test"] 566 | git-tree-sha1 = "54eb90e8dbe745d617c78dee1d6ae95c7f6f5779" 567 | uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" 568 | version = "7.0.1" 569 | 570 | [[LinearAlgebra]] 571 | deps = ["Libdl"] 572 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 573 | 574 | [[Literate]] 575 | deps = ["Base64", "JSON", "REPL"] 576 | git-tree-sha1 = "7345603884151a5ef894fb85949a8a4faeae8e10" 577 | uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306" 578 | version = "2.4.0" 579 | 580 | [[Loess]] 581 | deps = ["Distances", "Statistics"] 582 | git-tree-sha1 = "67b1bc5f42144fb83b065b8a8e117e56ec10e601" 583 | uuid = "4345ca2d-374a-55d4-8d30-97f9976e7612" 584 | version = "0.5.1" 585 | 586 | [[Logging]] 587 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 588 | 589 | [[MKL_jll]] 590 | deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] 591 | git-tree-sha1 = "720629cc8cbd12c146ca01b661fd1a6cf66e2ff4" 592 | uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" 593 | version = "2019.0.117+2" 594 | 595 | [[MacroTools]] 596 | deps = ["Markdown", "Random"] 597 | git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a" 598 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 599 | version = "0.5.5" 600 | 601 | [[Mamba]] 602 | deps = ["Cairo", "Calculus", "Compose", "DelimitedFiles", "Distributed", "Distributions", "Gadfly", "LightGraphs", "LinearAlgebra", "PDMats", "Printf", "Reexport", "Serialization", "Showoff", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase"] 603 | git-tree-sha1 = "830c27638d3f2dd021a57c643b034633149dfca1" 604 | uuid = "5424a776-8be3-5c5b-a13f-3551f69ba0e6" 605 | version = "0.12.4" 606 | 607 | [[Markdown]] 608 | deps = ["Base64"] 609 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 610 | 611 | [[MathProgBase]] 612 | deps = ["LinearAlgebra", "SparseArrays"] 613 | git-tree-sha1 = "9abbe463a1e9fc507f12a69e7f29346c2cdc472c" 614 | uuid = "fdba3010-5040-5b88-9595-932c9decdf73" 615 | version = "0.7.8" 616 | 617 | [[Measures]] 618 | git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" 619 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" 620 | version = "0.3.1" 621 | 622 | [[Media]] 623 | deps = ["MacroTools", "Test"] 624 | git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" 625 | uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" 626 | version = "0.5.0" 627 | 628 | [[Missings]] 629 | deps = ["DataAPI"] 630 | git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" 631 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 632 | version = "0.4.3" 633 | 634 | [[MixedModels]] 635 | deps = ["BlockArrays", "BlockDiagonals", "Distributions", "GLM", "LinearAlgebra", "NLopt", "NamedArrays", "Printf", "ProgressMeter", "Random", "Showoff", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "StatsFuns", "StatsModels", "Tables", "TypedTables"] 636 | git-tree-sha1 = "8801ce3472bc1b953350349519cd2397aee75a7d" 637 | uuid = "ff71e718-51f3-5ec2-a782-8ffcbfa3c316" 638 | version = "2.3.0" 639 | 640 | [[Mmap]] 641 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 642 | 643 | [[Mocking]] 644 | deps = ["ExprTools"] 645 | git-tree-sha1 = "916b850daad0d46b8c71f65f719c49957e9513ed" 646 | uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" 647 | version = "0.7.1" 648 | 649 | [[MultivariateStats]] 650 | deps = ["Arpack", "LinearAlgebra", "SparseArrays", "Statistics", "StatsBase"] 651 | git-tree-sha1 = "352fae519b447bf52e6de627b89f448bcd469e4e" 652 | uuid = "6f286f6a-111f-5878-ab1e-185364afe411" 653 | version = "0.7.0" 654 | 655 | [[NLSolversBase]] 656 | deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] 657 | git-tree-sha1 = "7c4e66c47848562003250f28b579c584e55becc0" 658 | uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" 659 | version = "7.6.1" 660 | 661 | [[NLopt]] 662 | deps = ["BinaryProvider", "CMakeWrapper", "Libdl", "MathProgBase", "Test"] 663 | git-tree-sha1 = "b46237debcacd4fed7bbeb31200667a75b90384f" 664 | uuid = "76087f3c-5699-56af-9a33-bf431cd00edd" 665 | version = "0.5.1" 666 | 667 | [[NaNMath]] 668 | git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" 669 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 670 | version = "0.3.3" 671 | 672 | [[NamedArrays]] 673 | deps = ["Combinatorics", "DataStructures", "DelimitedFiles", "InvertedIndices", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics"] 674 | git-tree-sha1 = "7d96d4c09526458d66ff84d7648be7eb7c38a547" 675 | uuid = "86f7a689-2022-50b4-a561-43c23ac3c673" 676 | version = "0.9.4" 677 | 678 | [[NearestNeighbors]] 679 | deps = ["Distances", "StaticArrays"] 680 | git-tree-sha1 = "8bc6180f328f3c0ea2663935db880d34c57d6eae" 681 | uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" 682 | version = "0.4.4" 683 | 684 | [[Observables]] 685 | git-tree-sha1 = "11832878355305984235a2e90d0e3737383c634c" 686 | uuid = "510215fc-4207-5dde-b226-833fc4488ee2" 687 | version = "0.3.1" 688 | 689 | [[OffsetArrays]] 690 | git-tree-sha1 = "930db8ef90483570107f2396b1ffc6680f08e8b7" 691 | uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" 692 | version = "1.0.4" 693 | 694 | [[Ogg_jll]] 695 | deps = ["Libdl", "Pkg"] 696 | git-tree-sha1 = "59cf7a95bf5ac39feac80b796e0f39f9d69dc887" 697 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 698 | version = "1.3.4+0" 699 | 700 | [[OpenBLAS_jll]] 701 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 702 | git-tree-sha1 = "1887096f6897306a4662f7c5af936da7d5d1a062" 703 | uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" 704 | version = "0.3.9+4" 705 | 706 | [[OpenSSL_jll]] 707 | deps = ["Libdl", "Pkg"] 708 | git-tree-sha1 = "d2a6f25262d568b5a7e454cf7ff5066a79d16c7d" 709 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 710 | version = "1.1.1+2" 711 | 712 | [[OpenSpecFun_jll]] 713 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 714 | git-tree-sha1 = "d51c416559217d974a1113522d5919235ae67a87" 715 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 716 | version = "0.5.3+3" 717 | 718 | [[Optim]] 719 | deps = ["FillArrays", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] 720 | git-tree-sha1 = "08f170ff0dcf07f4edb567020fcab47f415da207" 721 | uuid = "429524aa-4258-5aef-a3af-852621145aeb" 722 | version = "0.20.1" 723 | 724 | [[Opus_jll]] 725 | deps = ["Libdl", "Pkg"] 726 | git-tree-sha1 = "002c18f222a542907e16c83c64a1338992da7e2c" 727 | uuid = "91d4177d-7536-5919-b921-800302f37372" 728 | version = "1.3.1+1" 729 | 730 | [[OrderedCollections]] 731 | git-tree-sha1 = "12ce190210d278e12644bcadf5b21cbdcf225cd3" 732 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 733 | version = "1.2.0" 734 | 735 | [[PCRE_jll]] 736 | deps = ["Libdl", "Pkg"] 737 | git-tree-sha1 = "2c860a32ae9c421b52b654448bd31a31f437449a" 738 | uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" 739 | version = "8.42.0+2" 740 | 741 | [[PDMats]] 742 | deps = ["Arpack", "LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] 743 | git-tree-sha1 = "2fc6f50ddd959e462f0a2dbc802ddf2a539c6e35" 744 | uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" 745 | version = "0.9.12" 746 | 747 | [[Pango_jll]] 748 | deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "Libdl", "Pkg"] 749 | git-tree-sha1 = "cd19789f20bde5d45e96a7e937db9a6a024412e6" 750 | uuid = "36c8627f-9965-5494-a995-c6b170f724f3" 751 | version = "1.42.4+8" 752 | 753 | [[Parameters]] 754 | deps = ["OrderedCollections", "UnPack"] 755 | git-tree-sha1 = "38b2e970043613c187bd56a995fe2e551821eb4a" 756 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 757 | version = "0.12.1" 758 | 759 | [[Parsers]] 760 | deps = ["Dates", "Test"] 761 | git-tree-sha1 = "72c3451932513427caffbd8bab15643ad693804b" 762 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 763 | version = "1.0.3" 764 | 765 | [[Pixman_jll]] 766 | deps = ["Libdl", "Pkg"] 767 | git-tree-sha1 = "ae66367153a89ecb2a5c7acc2df4ba082b729b6a" 768 | uuid = "30392449-352a-5448-841d-b1acce4e97dc" 769 | version = "0.38.4+2" 770 | 771 | [[Pkg]] 772 | deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] 773 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 774 | 775 | [[PlotThemes]] 776 | deps = ["PlotUtils", "Requires", "Statistics"] 777 | git-tree-sha1 = "c6f5ea535551b3b16835134697f0c65d06c94b91" 778 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" 779 | version = "2.0.0" 780 | 781 | [[PlotUtils]] 782 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport"] 783 | git-tree-sha1 = "44de63b180da00d30dcfbe467dd62bd3cbc87af0" 784 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 785 | version = "1.0.2" 786 | 787 | [[Plots]] 788 | deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] 789 | git-tree-sha1 = "0bb4adb1540f60eb163cee608680da6939506886" 790 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 791 | version = "1.2.3" 792 | 793 | [[Polynomials]] 794 | deps = ["Intervals", "LinearAlgebra", "RecipesBase"] 795 | git-tree-sha1 = "19f1b9e3f27702309880b9ccb051287729af7db4" 796 | uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" 797 | version = "0.8.0" 798 | 799 | [[PooledArrays]] 800 | deps = ["DataAPI"] 801 | git-tree-sha1 = "b1333d4eced1826e15adbdf01a4ecaccca9d353c" 802 | uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" 803 | version = "0.5.3" 804 | 805 | [[PositiveFactorizations]] 806 | deps = ["LinearAlgebra", "Test"] 807 | git-tree-sha1 = "127c47b91990c101ee3752291c4f45640eeb03d1" 808 | uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" 809 | version = "0.2.3" 810 | 811 | [[Printf]] 812 | deps = ["Unicode"] 813 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 814 | 815 | [[Profile]] 816 | deps = ["Printf"] 817 | uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" 818 | 819 | [[ProgressMeter]] 820 | deps = ["Distributed", "Printf"] 821 | git-tree-sha1 = "ea1f4fa0ff5e8b771bf130d87af5b7ef400760bd" 822 | uuid = "92933f4c-e287-5a05-a399-4b506db050ca" 823 | version = "1.2.0" 824 | 825 | [[QuadGK]] 826 | deps = ["DataStructures", "LinearAlgebra"] 827 | git-tree-sha1 = "dc84e810393cfc6294248c9032a9cdacc14a3db4" 828 | uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" 829 | version = "2.3.1" 830 | 831 | [[REPL]] 832 | deps = ["InteractiveUtils", "Markdown", "Sockets"] 833 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 834 | 835 | [[Random]] 836 | deps = ["Serialization"] 837 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 838 | 839 | [[Ratios]] 840 | git-tree-sha1 = "37d210f612d70f3f7d57d488cb3b6eff56ad4e41" 841 | uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" 842 | version = "0.4.0" 843 | 844 | [[RecipesBase]] 845 | git-tree-sha1 = "54f8ceb165a0f6d083f0d12cb4996f5367c6edbc" 846 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 847 | version = "1.0.1" 848 | 849 | [[RecipesPipeline]] 850 | deps = ["Dates", "PlotUtils", "RecipesBase"] 851 | git-tree-sha1 = "9215637e28503ca85bef843a1fc02b2f76f1ba09" 852 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" 853 | version = "0.1.9" 854 | 855 | [[Reexport]] 856 | deps = ["Pkg"] 857 | git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" 858 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 859 | version = "0.2.0" 860 | 861 | [[Requires]] 862 | deps = ["Test"] 863 | git-tree-sha1 = "f6fbf4ba64d295e146e49e021207993b6b48c7d1" 864 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 865 | version = "0.5.2" 866 | 867 | [[Rmath]] 868 | deps = ["Random", "Rmath_jll"] 869 | git-tree-sha1 = "86c5647b565873641538d8f812c04e4c9dbeb370" 870 | uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" 871 | version = "0.6.1" 872 | 873 | [[Rmath_jll]] 874 | deps = ["Libdl", "Pkg"] 875 | git-tree-sha1 = "1660f8fefbf5ab9c67560513131d4e933012fc4b" 876 | uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" 877 | version = "0.2.2+0" 878 | 879 | [[SHA]] 880 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 881 | 882 | [[Serialization]] 883 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 884 | 885 | [[SharedArrays]] 886 | deps = ["Distributed", "Mmap", "Random", "Serialization"] 887 | uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" 888 | 889 | [[ShiftedArrays]] 890 | git-tree-sha1 = "22395afdcf37d6709a5a0766cc4a5ca52cb85ea0" 891 | uuid = "1277b4bf-5013-50f5-be3d-901d8477a67a" 892 | version = "1.0.0" 893 | 894 | [[Showoff]] 895 | deps = ["Dates"] 896 | git-tree-sha1 = "e032c9df551fb23c9f98ae1064de074111b7bc39" 897 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" 898 | version = "0.3.1" 899 | 900 | [[SimpleTraits]] 901 | deps = ["InteractiveUtils", "MacroTools"] 902 | git-tree-sha1 = "2ee666b24ab8be6a922f9d6c11a86e1a703a7dda" 903 | uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" 904 | version = "0.9.2" 905 | 906 | [[Sockets]] 907 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 908 | 909 | [[SortingAlgorithms]] 910 | deps = ["DataStructures", "Random", "Test"] 911 | git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" 912 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 913 | version = "0.3.1" 914 | 915 | [[SparseArrays]] 916 | deps = ["LinearAlgebra", "Random"] 917 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 918 | 919 | [[SpecialFunctions]] 920 | deps = ["OpenSpecFun_jll"] 921 | git-tree-sha1 = "e19b98acb182567bcb7b75bb5d9eedf3a3b5ec6c" 922 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 923 | version = "0.10.0" 924 | 925 | [[SplitApplyCombine]] 926 | deps = ["Dictionaries", "Indexing"] 927 | git-tree-sha1 = "02845fc448cf504681508057ce697b46d4385e21" 928 | uuid = "03a91e81-4c3e-53e1-a0a4-9c0c8f19dd66" 929 | version = "1.0.0" 930 | 931 | [[StaticArrays]] 932 | deps = ["LinearAlgebra", "Random", "Statistics"] 933 | git-tree-sha1 = "5c06c0aeb81bef54aed4b3f446847905eb6cbda0" 934 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 935 | version = "0.12.3" 936 | 937 | [[Statistics]] 938 | deps = ["LinearAlgebra", "SparseArrays"] 939 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 940 | 941 | [[StatsBase]] 942 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] 943 | git-tree-sha1 = "19bfcb46245f69ff4013b3df3b977a289852c3a1" 944 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 945 | version = "0.32.2" 946 | 947 | [[StatsFuns]] 948 | deps = ["Rmath", "SpecialFunctions"] 949 | git-tree-sha1 = "f290ddd5fdedeadd10e961eb3f4d3340f09d030a" 950 | uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" 951 | version = "0.9.4" 952 | 953 | [[StatsModels]] 954 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "ShiftedArrays", "SparseArrays", "StatsBase", "Tables"] 955 | git-tree-sha1 = "5a140e0bf5d92b2c5c0daa0dcefdadbb57c8a7fb" 956 | uuid = "3eaba693-59b7-5ba5-a881-562e759f1c8d" 957 | version = "0.6.11" 958 | 959 | [[StatsPlots]] 960 | deps = ["Clustering", "DataStructures", "DataValues", "Distributions", "Interpolations", "KernelDensity", "MultivariateStats", "Observables", "Plots", "RecipesBase", "RecipesPipeline", "Reexport", "StatsBase", "TableOperations", "Tables", "Widgets"] 961 | git-tree-sha1 = "b9b7fff81f573465fcac4685df1497d968537a9e" 962 | uuid = "f3b207a7-027a-5e70-b257-86293d7955fd" 963 | version = "0.14.6" 964 | 965 | [[SuiteSparse]] 966 | deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] 967 | uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" 968 | 969 | [[TableOperations]] 970 | deps = ["Tables", "Test"] 971 | git-tree-sha1 = "208630a14884abd110a8f8008b0882f0d0f5632c" 972 | uuid = "ab02a1b2-a7df-11e8-156e-fb1833f50b87" 973 | version = "0.2.1" 974 | 975 | [[TableTraits]] 976 | deps = ["IteratorInterfaceExtensions"] 977 | git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" 978 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 979 | version = "1.0.0" 980 | 981 | [[Tables]] 982 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] 983 | git-tree-sha1 = "c45dcc27331febabc20d86cb3974ef095257dcf3" 984 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 985 | version = "1.0.4" 986 | 987 | [[Test]] 988 | deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] 989 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 990 | 991 | [[TimeZones]] 992 | deps = ["Dates", "EzXML", "Mocking", "Printf", "RecipesBase", "Serialization", "Unicode"] 993 | git-tree-sha1 = "07af1bd3226d644ca1a3235c93e7d0207ce4536a" 994 | uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" 995 | version = "1.1.1" 996 | 997 | [[TypedTables]] 998 | deps = ["SplitApplyCombine", "Tables", "Unicode"] 999 | git-tree-sha1 = "519533acaccc7d84e214426f69820489e1f46617" 1000 | uuid = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" 1001 | version = "1.2.0" 1002 | 1003 | [[URIParser]] 1004 | deps = ["Unicode"] 1005 | git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" 1006 | uuid = "30578b45-9adc-5946-b283-645ec420af67" 1007 | version = "0.4.1" 1008 | 1009 | [[UUIDs]] 1010 | deps = ["Random", "SHA"] 1011 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 1012 | 1013 | [[UnPack]] 1014 | git-tree-sha1 = "bc9ef72a4a826740895bf2772b48c21f9a1c13a7" 1015 | uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" 1016 | version = "1.0.0" 1017 | 1018 | [[Unicode]] 1019 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 1020 | 1021 | [[WeakRefStrings]] 1022 | deps = ["DataAPI", "Random", "Test"] 1023 | git-tree-sha1 = "28807f85197eaad3cbd2330386fac1dcb9e7e11d" 1024 | uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" 1025 | version = "0.6.2" 1026 | 1027 | [[Widgets]] 1028 | deps = ["Colors", "Dates", "Observables", "OrderedCollections"] 1029 | git-tree-sha1 = "fc0feda91b3fef7fe6948ee09bb628f882b49ca4" 1030 | uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" 1031 | version = "0.6.2" 1032 | 1033 | [[WoodburyMatrices]] 1034 | deps = ["LinearAlgebra", "SparseArrays"] 1035 | git-tree-sha1 = "28ffe06d28b1ba8fdb2f36ec7bb079fac81bac0d" 1036 | uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" 1037 | version = "0.5.2" 1038 | 1039 | [[XML2_jll]] 1040 | deps = ["Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 1041 | git-tree-sha1 = "987c02a43fa10a491a5f0f7c46a6d3559ed6a8e2" 1042 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 1043 | version = "2.9.9+4" 1044 | 1045 | [[XSLT_jll]] 1046 | deps = ["Libdl", "Libgcrypt_jll", "Pkg", "XML2_jll"] 1047 | git-tree-sha1 = "c287bbc08773474ab1d12849eb46b961a325e149" 1048 | uuid = "aed1982a-8fda-507f-9586-7b0439959a61" 1049 | version = "1.1.33+2" 1050 | 1051 | [[Xorg_libX11_jll]] 1052 | deps = ["Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] 1053 | git-tree-sha1 = "bbfb646a5a86dc636041c8ee945799b69d37fdba" 1054 | uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" 1055 | version = "1.6.9+2" 1056 | 1057 | [[Xorg_libXau_jll]] 1058 | deps = ["Libdl", "Pkg"] 1059 | git-tree-sha1 = "711f2bbdbb0e90b90a71c5ccf835137e2def539a" 1060 | uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" 1061 | version = "1.0.9+2" 1062 | 1063 | [[Xorg_libXdmcp_jll]] 1064 | deps = ["Libdl", "Pkg"] 1065 | git-tree-sha1 = "1ffd7bc9c9d8bba6652516f3402ee1ef5f4cac70" 1066 | uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" 1067 | version = "1.1.3+2" 1068 | 1069 | [[Xorg_libXext_jll]] 1070 | deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] 1071 | git-tree-sha1 = "079acccb5437761d93c483f2edb5fc3ed21ea7db" 1072 | uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" 1073 | version = "1.3.4+2" 1074 | 1075 | [[Xorg_libXrender_jll]] 1076 | deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] 1077 | git-tree-sha1 = "d5492a36d33359cf93ad573ea5e235cd71728649" 1078 | uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" 1079 | version = "0.9.10+2" 1080 | 1081 | [[Xorg_libpthread_stubs_jll]] 1082 | deps = ["Libdl", "Pkg"] 1083 | git-tree-sha1 = "ec1e2973e4e624069be95f806dbd7e225fee26c6" 1084 | uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" 1085 | version = "0.1.0+1" 1086 | 1087 | [[Xorg_libxcb_jll]] 1088 | deps = ["Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] 1089 | git-tree-sha1 = "c1efb50fb6a8c40c45451611fbf93feabe5f9611" 1090 | uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" 1091 | version = "1.13.0+2" 1092 | 1093 | [[Xorg_xtrans_jll]] 1094 | deps = ["Libdl", "Pkg"] 1095 | git-tree-sha1 = "b6e7d70f5fc9e3fde505539194c8caaab3c40ebf" 1096 | uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" 1097 | version = "1.4.0+1" 1098 | 1099 | [[Zlib_jll]] 1100 | deps = ["Libdl", "Pkg"] 1101 | git-tree-sha1 = "2f6c3e15e20e036ee0a0965879b31442b7ec50fa" 1102 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 1103 | version = "1.2.11+9" 1104 | 1105 | [[libass_jll]] 1106 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"] 1107 | git-tree-sha1 = "027a304b2a90de84f690949a21f94e5ae0f92c73" 1108 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 1109 | version = "0.14.0+2" 1110 | 1111 | [[libfdk_aac_jll]] 1112 | deps = ["Libdl", "Pkg"] 1113 | git-tree-sha1 = "480c7ed04f68ea3edd4c757f5db5b6a0a4e0bd99" 1114 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 1115 | version = "0.1.6+2" 1116 | 1117 | [[libpng_jll]] 1118 | deps = ["Libdl", "Pkg", "Zlib_jll"] 1119 | git-tree-sha1 = "594cb058723c13941cf463fd09e5859499594f50" 1120 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 1121 | version = "1.6.37+3" 1122 | 1123 | [[libvorbis_jll]] 1124 | deps = ["Libdl", "Ogg_jll", "Pkg"] 1125 | git-tree-sha1 = "6a66f65b5275dfa799036c8a3a26616a0a271c4a" 1126 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 1127 | version = "1.3.6+4" 1128 | 1129 | [[x264_jll]] 1130 | deps = ["Libdl", "Pkg"] 1131 | git-tree-sha1 = "d89346fe63a6465a9f44e958ac0e3d366af90b74" 1132 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 1133 | version = "2019.5.25+2" 1134 | 1135 | [[x265_jll]] 1136 | deps = ["Libdl", "Pkg"] 1137 | git-tree-sha1 = "61324ad346b00a6e541896b94201c9426591e43a" 1138 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 1139 | version = "3.0.0+1" 1140 | -------------------------------------------------------------------------------- /Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" 3 | DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" 4 | DataFramesMeta = "1313f7d8-7da2-5740-9ea0-a2ca25f37964" 5 | DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 6 | Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" 7 | Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" 8 | ForneyLab = "9fc3f58a-c2cc-5bff-9419-6a294fefdca9" 9 | GLM = "38e38edf-8417-5370-95a0-9cbb8c7f171a" 10 | LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 11 | Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306" 12 | Mamba = "5424a776-8be3-5c5b-a13f-3551f69ba0e6" 13 | MixedModels = "ff71e718-51f3-5ec2-a782-8ffcbfa3c316" 14 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 15 | QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" 16 | SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 17 | Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 18 | StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 19 | StatsFuns = "4c63d2b9-4356-54db-8cca-17b64c39e42c" 20 | StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd" 21 | 22 | [compat] 23 | julia = "1.4" 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 「データ解析のための統計モデリング入門」のJulia版Jupyter Notebook 2 | 3 | 4 | 久保拓弥「データ解析のための統計モデリング入門」をJuliaでモデリングしました。 5 | 6 | - 3章、5章、6章、9章の一般化線形モデルは[GLM.jl](https://github.com/JuliaStats/GLM.jl)を使いました。 7 | - 7章の一般化線形モデルは[MixedModels.jl](https://github.com/dmbates/MixedModels.jl)を使いました。 8 | - 9章、10章、11章のベイズ統計モデルは[Mamba.jl](https://github.com/brian-j-smith/Mamba.jl)を使いました。 9 | 10 | Julia: v1.4.1 11 | 12 | [第2章 確率分布と統計モデルの最尤推定](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section2.ipynb) 13 | [第3章 一般化線形モデル(GLM) -ポアソン回帰-](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section3.ipynb) 14 | [第5章 GLMの尤度比検定と検定の非対称性](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section5.ipynb) 15 | [第6章 GLMの応用範囲をひろげる -ロジスティック回帰など-](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section6.ipynb) 16 | [第7章 一般化線形混合モデル(GLMM) -個体差のモデリング-](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section7.ipynb) 17 | [第9章 GLMのベイズモデル化と事後分布の推定](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section9.ipynb) 18 | [第10章 階層ベイズモデル -GLMMのベイズモデル化-](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section10.ipynb) 19 | [第11章 空間構造のある階層ベイズモデル](https://nbviewer.jupyter.org/github/matsueushi/kubo_analysis_julia/blob/master/notebook/section11.ipynb) 20 | -------------------------------------------------------------------------------- /data/section10a.csv: -------------------------------------------------------------------------------- 1 | id,y 2 | 1,0 3 | 2,2 4 | 3,7 5 | 4,8 6 | 5,1 7 | 6,7 8 | 7,8 9 | 8,8 10 | 9,1 11 | 10,1 12 | 11,4 13 | 12,0 14 | 13,1 15 | 14,4 16 | 15,7 17 | 16,8 18 | 17,7 19 | 18,0 20 | 19,2 21 | 20,2 22 | 21,1 23 | 22,1 24 | 23,5 25 | 24,7 26 | 25,8 27 | 26,3 28 | 27,8 29 | 28,4 30 | 29,6 31 | 30,0 32 | 31,8 33 | 32,7 34 | 33,8 35 | 34,0 36 | 35,2 37 | 36,6 38 | 37,7 39 | 38,8 40 | 39,2 41 | 40,1 42 | 41,1 43 | 42,0 44 | 43,0 45 | 44,7 46 | 45,8 47 | 46,5 48 | 47,7 49 | 48,2 50 | 49,8 51 | 50,1 52 | 51,5 53 | 52,7 54 | 53,3 55 | 54,8 56 | 55,0 57 | 56,8 58 | 57,6 59 | 58,3 60 | 59,2 61 | 60,0 62 | 61,0 63 | 62,1 64 | 63,2 65 | 64,8 66 | 65,7 67 | 66,7 68 | 67,7 69 | 68,8 70 | 69,0 71 | 70,0 72 | 71,0 73 | 72,5 74 | 73,1 75 | 74,0 76 | 75,0 77 | 76,0 78 | 77,8 79 | 78,1 80 | 79,8 81 | 80,4 82 | 81,7 83 | 82,2 84 | 83,1 85 | 84,4 86 | 85,7 87 | 86,0 88 | 87,8 89 | 88,1 90 | 89,8 91 | 90,7 92 | 91,6 93 | 92,2 94 | 93,8 95 | 94,6 96 | 95,6 97 | 96,1 98 | 97,0 99 | 98,4 100 | 99,7 101 | 100,0 102 | -------------------------------------------------------------------------------- /data/section10b.csv: -------------------------------------------------------------------------------- 1 | id,pot,f,y 2 | 1,A,C,6 3 | 2,A,C,3 4 | 3,A,C,19 5 | 4,A,C,5 6 | 5,A,C,0 7 | 6,A,C,19 8 | 7,A,C,4 9 | 8,A,C,8 10 | 9,A,C,12 11 | 10,A,C,8 12 | 11,B,C,0 13 | 12,B,C,1 14 | 13,B,C,1 15 | 14,B,C,5 16 | 15,B,C,7 17 | 16,B,C,4 18 | 17,B,C,0 19 | 18,B,C,4 20 | 19,B,C,2 21 | 20,B,C,23 22 | 21,C,C,2 23 | 22,C,C,1 24 | 23,C,C,4 25 | 24,C,C,3 26 | 25,C,C,4 27 | 26,C,C,0 28 | 27,C,C,1 29 | 28,C,C,1 30 | 29,C,C,3 31 | 30,C,C,6 32 | 31,D,C,27 33 | 32,D,C,3 34 | 33,D,C,29 35 | 34,D,C,17 36 | 35,D,C,1 37 | 36,D,C,16 38 | 37,D,C,16 39 | 38,D,C,6 40 | 39,D,C,4 41 | 40,D,C,8 42 | 41,E,C,6 43 | 42,E,C,16 44 | 43,E,C,8 45 | 44,E,C,3 46 | 45,E,C,2 47 | 46,E,C,8 48 | 47,E,C,4 49 | 48,E,C,0 50 | 49,E,C,0 51 | 50,E,C,2 52 | 51,F,T,2 53 | 52,F,T,2 54 | 53,F,T,0 55 | 54,F,T,0 56 | 55,F,T,1 57 | 56,F,T,0 58 | 57,F,T,0 59 | 58,F,T,1 60 | 59,F,T,0 61 | 60,F,T,1 62 | 61,G,T,11 63 | 62,G,T,2 64 | 63,G,T,2 65 | 64,G,T,18 66 | 65,G,T,3 67 | 66,G,T,8 68 | 67,G,T,7 69 | 68,G,T,3 70 | 69,G,T,1 71 | 70,G,T,0 72 | 71,H,T,7 73 | 72,H,T,0 74 | 73,H,T,0 75 | 74,H,T,0 76 | 75,H,T,1 77 | 76,H,T,1 78 | 77,H,T,0 79 | 78,H,T,0 80 | 79,H,T,1 81 | 80,H,T,1 82 | 81,I,T,10 83 | 82,I,T,2 84 | 83,I,T,11 85 | 84,I,T,4 86 | 85,I,T,3 87 | 86,I,T,16 88 | 87,I,T,4 89 | 88,I,T,37 90 | 89,I,T,5 91 | 90,I,T,19 92 | 91,J,T,27 93 | 92,J,T,1 94 | 93,J,T,1 95 | 94,J,T,2 96 | 95,J,T,0 97 | 96,J,T,1 98 | 97,J,T,1 99 | 98,J,T,2 100 | 99,J,T,1 101 | 100,J,T,0 102 | -------------------------------------------------------------------------------- /data/section11.csv: -------------------------------------------------------------------------------- 1 | "y","m" 2 | 0,2.15498044153638 3 | 3,3.25416535589951 4 | 2,4.62866565632436 5 | 5,6.23412436159998 6 | 6,7.99073036086997 7 | 16,9.79447417675673 8 | 8,11.5333651660428 9 | 14,13.1042515934405 10 | 11,14.4263021021484 11 | 10,15.4487790444502 12 | 17,16.1526477363851 13 | 19,16.5471097289263 14 | 14,16.6629634850053 15 | 19,16.5447868884517 16 | 19,16.2435325019608 17 | 18,15.8105161536801 18 | 15,15.293191675395 19 | 13,14.7326662080011 20 | 13,14.1626551417847 21 | 9,13.6094779435146 22 | 11,13.0927058380853 23 | 15,12.6261393801305 24 | 18,12.2188800236391 25 | 12,11.8763411609691 26 | 11,11.6011094526087 27 | 17,11.3936137852468 28 | 14,11.2525888440419 29 | 16,11.1753371280337 30 | 15,11.1578018307945 31 | 9,11.1944676407129 32 | 6,11.2781109732529 33 | 15,11.3994287051024 34 | 10,11.5465878689572 35 | 11,11.704759925561 36 | 14,11.8557326658416 37 | 7,11.9777284848917 38 | 14,12.0455936423292 39 | 14,12.0315475343488 40 | 13,11.9066760204156 41 | 17,11.6432957799957 42 | 8,11.2181855646005 43 | 7,10.6164645740373 44 | 10,9.83561427054393 45 | 4,8.88884584581532 46 | 5,7.80681647556675 47 | 5,6.63672822549181 48 | 7,5.438218920147 49 | 4,4.27619411927064 50 | 3,3.21170801408065 51 | 1,2.29285623419004 52 | -------------------------------------------------------------------------------- /data/section3.csv: -------------------------------------------------------------------------------- 1 | y,x,f 2 | 6,8.31,C 3 | 6,9.44,C 4 | 6,9.5,C 5 | 12,9.07,C 6 | 10,10.16,C 7 | 4,8.32,C 8 | 9,10.61,C 9 | 9,10.06,C 10 | 9,9.93,C 11 | 11,10.43,C 12 | 6,10.36,C 13 | 10,10.15,C 14 | 6,10.92,C 15 | 10,8.85,C 16 | 11,9.42,C 17 | 8,11.11,C 18 | 3,8.02,C 19 | 8,11.93,C 20 | 5,8.55,C 21 | 5,7.19,C 22 | 4,9.83,C 23 | 11,10.79,C 24 | 5,8.89,C 25 | 10,10.09,C 26 | 6,11.63,C 27 | 6,10.21,C 28 | 7,9.45,C 29 | 9,10.44,C 30 | 3,9.44,C 31 | 10,10.48,C 32 | 2,9.43,C 33 | 9,10.32,C 34 | 10,10.33,C 35 | 5,8.5,C 36 | 11,9.41,C 37 | 10,8.96,C 38 | 4,9.67,C 39 | 8,10.26,C 40 | 9,10.36,C 41 | 12,11.8,C 42 | 8,10.94,C 43 | 9,10.25,C 44 | 8,8.74,C 45 | 6,10.46,C 46 | 6,9.37,C 47 | 10,9.74,C 48 | 10,8.95,C 49 | 9,8.74,C 50 | 12,11.32,C 51 | 6,9.25,C 52 | 14,10.14,T 53 | 6,9.05,T 54 | 7,9.89,T 55 | 9,8.76,T 56 | 6,12.04,T 57 | 7,9.91,T 58 | 9,9.84,T 59 | 13,11.87,T 60 | 9,10.16,T 61 | 13,9.34,T 62 | 7,10.17,T 63 | 8,10.99,T 64 | 10,9.19,T 65 | 7,10.67,T 66 | 12,10.96,T 67 | 6,10.55,T 68 | 15,9.69,T 69 | 3,10.91,T 70 | 4,9.6,T 71 | 6,12.37,T 72 | 10,10.54,T 73 | 8,11.3,T 74 | 8,12.4,T 75 | 7,10.18,T 76 | 5,9.53,T 77 | 6,10.24,T 78 | 8,11.76,T 79 | 9,9.52,T 80 | 9,10.4,T 81 | 6,9.96,T 82 | 7,10.3,T 83 | 10,11.54,T 84 | 6,9.42,T 85 | 11,11.28,T 86 | 11,9.73,T 87 | 11,10.78,T 88 | 5,10.21,T 89 | 6,10.51,T 90 | 4,10.73,T 91 | 5,8.85,T 92 | 6,11.2,T 93 | 5,9.86,T 94 | 8,11.54,T 95 | 5,10.03,T 96 | 9,11.88,T 97 | 8,9.15,T 98 | 6,8.52,T 99 | 8,10.24,T 100 | 7,10.86,T 101 | 9,9.97,T 102 | -------------------------------------------------------------------------------- /data/section6a.csv: -------------------------------------------------------------------------------- 1 | N,y,x,f 2 | 8,1,9.76,C 3 | 8,6,10.48,C 4 | 8,5,10.83,C 5 | 8,6,10.94,C 6 | 8,1,9.37,C 7 | 8,1,8.81,C 8 | 8,3,9.49,C 9 | 8,6,11.02,C 10 | 8,0,7.97,C 11 | 8,8,11.55,C 12 | 8,0,9.46,C 13 | 8,2,9.47,C 14 | 8,0,8.71,C 15 | 8,5,10.42,C 16 | 8,3,10.06,C 17 | 8,6,11,C 18 | 8,3,9.95,C 19 | 8,4,9.52,C 20 | 8,5,10.26,C 21 | 8,8,11.33,C 22 | 8,5,9.77,C 23 | 8,8,10.59,C 24 | 8,1,9.35,C 25 | 8,4,10,C 26 | 8,1,9.53,C 27 | 8,8,12.06,C 28 | 8,4,9.68,C 29 | 8,7,11.32,C 30 | 8,5,10.48,C 31 | 8,5,10.37,C 32 | 8,8,11.33,C 33 | 8,1,9.42,C 34 | 8,7,10.68,C 35 | 8,1,7.91,C 36 | 8,3,9.39,C 37 | 8,8,11.65,C 38 | 8,6,10.66,C 39 | 8,7,11.23,C 40 | 8,7,10.57,C 41 | 8,4,10.42,C 42 | 8,7,11.73,C 43 | 8,8,12.02,C 44 | 8,8,11.55,C 45 | 8,0,8.58,C 46 | 8,6,11.08,C 47 | 8,5,10.49,C 48 | 8,8,11.12,C 49 | 8,3,8.99,C 50 | 8,8,10.08,C 51 | 8,8,10.8,C 52 | 8,0,7.83,T 53 | 8,5,8.88,T 54 | 8,5,9.74,T 55 | 8,8,9.98,T 56 | 8,3,8.46,T 57 | 8,2,7.96,T 58 | 8,7,9.78,T 59 | 8,8,11.93,T 60 | 8,3,9.04,T 61 | 8,5,10.14,T 62 | 8,8,11.01,T 63 | 8,3,8.88,T 64 | 8,6,9.68,T 65 | 8,7,9.8,T 66 | 8,8,10.76,T 67 | 8,6,9.81,T 68 | 8,5,8.37,T 69 | 8,5,9.38,T 70 | 8,0,7.68,T 71 | 8,8,10.23,T 72 | 8,8,9.83,T 73 | 8,0,7.66,T 74 | 8,6,9.33,T 75 | 8,1,8.2,T 76 | 8,8,9.54,T 77 | 8,8,10.55,T 78 | 8,6,9.88,T 79 | 8,6,9.34,T 80 | 8,6,10.38,T 81 | 8,6,9.63,T 82 | 8,8,12.44,T 83 | 8,8,10.17,T 84 | 8,7,9.29,T 85 | 8,8,11.17,T 86 | 8,6,9.13,T 87 | 8,2,8.79,T 88 | 8,0,8.19,T 89 | 8,7,10.25,T 90 | 8,8,11.3,T 91 | 8,8,10.84,T 92 | 8,8,10.97,T 93 | 8,3,8.6,T 94 | 8,7,9.91,T 95 | 8,8,11.38,T 96 | 8,8,10.39,T 97 | 8,7,10.45,T 98 | 8,0,8.94,T 99 | 8,5,8.94,T 100 | 8,8,10.14,T 101 | 8,1,8.5,T 102 | -------------------------------------------------------------------------------- /data/section6b.csv: -------------------------------------------------------------------------------- 1 | y,x,A 2 | 57,0.68,10.3 3 | 64,0.27,15.6 4 | 49,0.46,10 5 | 64,0.45,14.9 6 | 82,0.74,14 7 | 29,0.15,9.6 8 | 37,0.5,11.8 9 | 33,0.57,6.8 10 | 61,0.79,11.8 11 | 46,0.57,9.5 12 | 61,0.8,10.5 13 | 30,0.62,6.8 14 | 45,0.84,6.4 15 | 21,0.36,6 16 | 39,0.49,11.9 17 | 43,0.57,10.1 18 | 54,0.55,12 19 | 24,0.13,9 20 | 33,0.65,7.1 21 | 39,0.62,7.4 22 | 53,0.52,12.4 23 | 44,0.64,8.3 24 | 50,0.42,12.1 25 | 52,0.67,8.4 26 | 59,0.52,11.4 27 | 33,0.19,11.5 28 | 38,0.58,9 29 | 46,0.48,10.5 30 | 30,0.22,9.6 31 | 35,0.24,11.9 32 | 68,0.55,16.2 33 | 70,0.69,10 34 | 47,0.86,8.9 35 | 57,0.74,10.3 36 | 33,0.49,5.8 37 | 57,0.56,11.7 38 | 90,0.78,15.3 39 | 41,0.66,10 40 | 44,0.4,9.6 41 | 63,0.73,9.8 42 | 61,0.75,10.7 43 | 43,0.47,11.7 44 | 64,0.56,12.9 45 | 29,0.27,10.2 46 | 13,0.48,4.5 47 | 43,0.54,12.7 48 | 37,0.51,7.9 49 | 36,0.27,12.1 50 | 47,0.57,8.8 51 | 45,0.69,8.4 52 | 88,0.8,15.8 53 | 28,0.45,6.3 54 | 40,0.38,8.8 55 | 46,0.35,11.4 56 | 54,0.51,13 57 | 38,0.61,8.8 58 | 45,0.52,9.5 59 | 52,0.47,11.9 60 | 53,0.38,15.6 61 | 47,0.69,7.4 62 | 33,0.41,5.8 63 | 70,0.78,10.1 64 | 24,0.28,8.6 65 | 22,0.35,5.5 66 | 14,0.35,3.5 67 | 31,0.31,7.7 68 | 29,0.54,5 69 | 91,0.65,14.3 70 | 39,0.4,9.5 71 | 44,0.37,11.2 72 | 54,0.5,10.3 73 | 76,0.59,14.8 74 | 70,0.52,14.2 75 | 36,0.33,9.8 76 | 38,0.23,10.1 77 | 48,0.41,12.3 78 | 36,0.38,10.6 79 | 43,0.49,11.2 80 | 69,0.72,13.3 81 | 55,0.44,13.6 82 | 51,0.41,13.4 83 | 26,0.15,9.4 84 | 62,0.62,12 85 | 42,0.99,5.7 86 | 46,0.5,9.9 87 | 67,0.75,12.9 88 | 67,0.65,13.4 89 | 68,0.55,12.8 90 | 19,0.46,4.9 91 | 47,0.44,10 92 | 41,0.62,9 93 | 69,0.22,16.8 94 | 33,0.05,11.4 95 | 46,0.43,11.2 96 | 74,0.58,17.4 97 | 57,0.76,9.8 98 | 49,0.17,12.5 99 | 95,0.98,11.4 100 | 27,0.54,5.4 101 | 71,0.47,13.5 102 | -------------------------------------------------------------------------------- /data/section6c.csv: -------------------------------------------------------------------------------- 1 | "x","y" 2 | 0.001,0.000887358442137976 3 | 0.0173061224489796,0.0234652086721715 4 | 0.0336122448979592,0.0698755632789248 5 | 0.0499183673469388,0.0343402527896553 6 | 0.0662244897959184,0.0265204047109361 7 | 0.082530612244898,0.159214802658924 8 | 0.0988367346938775,0.165078389269379 9 | 0.115142857142857,0.124002873768554 10 | 0.131448979591837,0.0596455047232945 11 | 0.147755102040816,0.0552452656480156 12 | 0.164061224489796,0.192214749938877 13 | 0.180367346938776,0.0305346234751807 14 | 0.196673469387755,0.105061425176501 15 | 0.212979591836735,0.0762759220048154 16 | 0.229285714285714,0.152499802706374 17 | 0.245591836734694,0.0564525638776068 18 | 0.261897959183673,0.0959048838140158 19 | 0.278204081632653,0.119482687996191 20 | 0.294510204081633,0.0379757879324448 21 | 0.310816326530612,0.19230547355675 22 | 0.327122448979592,0.183303214981583 23 | 0.343428571428571,0.094980184005096 24 | 0.359734693877551,0.0912946482491566 25 | 0.376040816326531,0.145241281472793 26 | 0.39234693877551,0.109021734727567 27 | 0.40865306122449,0.239444551541822 28 | 0.424959183673469,0.193305024056695 29 | 0.441265306122449,0.202679323046384 30 | 0.457571428571429,0.209086744194155 31 | 0.473877551020408,0.28046438185791 32 | 0.490183673469388,0.367986738500303 33 | 0.506489795918367,0.153935256000638 34 | 0.522795918367347,0.165335840727813 35 | 0.539102040816327,0.297039612752895 36 | 0.555408163265306,0.350891055211957 37 | 0.571714285714286,0.182443600703659 38 | 0.588020408163265,0.134455864298262 39 | 0.604326530612245,0.418621660529189 40 | 0.620632653061225,0.326117904410065 41 | 0.636938775510204,0.0558967726773546 42 | 0.653244897959184,0.248852626442655 43 | 0.669551020408163,0.483436485007983 44 | 0.685857142857143,0.148662357302398 45 | 0.702163265306122,0.0416329785937674 46 | 0.718469387755102,0.614535639953507 47 | 0.734775510204082,0.197833585247503 48 | 0.751081632653061,0.191529215186967 49 | 0.767387755102041,0.322009885882287 50 | 0.78369387755102,0.453920294031214 51 | 0.8,0.178895893330633 52 | -------------------------------------------------------------------------------- /data/section7.csv: -------------------------------------------------------------------------------- 1 | "N","y","x","id" 2 | 8,0,2,1 3 | 8,1,2,2 4 | 8,2,2,3 5 | 8,4,2,4 6 | 8,1,2,5 7 | 8,0,2,6 8 | 8,0,2,7 9 | 8,7,2,8 10 | 8,1,2,9 11 | 8,6,2,10 12 | 8,0,2,11 13 | 8,0,2,12 14 | 8,0,2,13 15 | 8,0,2,14 16 | 8,0,2,15 17 | 8,1,2,16 18 | 8,3,2,17 19 | 8,5,2,18 20 | 8,3,2,19 21 | 8,7,2,20 22 | 8,2,3,21 23 | 8,1,3,22 24 | 8,0,3,23 25 | 8,6,3,24 26 | 8,1,3,25 27 | 8,2,3,26 28 | 8,0,3,27 29 | 8,0,3,28 30 | 8,0,3,29 31 | 8,3,3,30 32 | 8,5,3,31 33 | 8,5,3,32 34 | 8,0,3,33 35 | 8,0,3,34 36 | 8,0,3,35 37 | 8,8,3,36 38 | 8,4,3,37 39 | 8,2,3,38 40 | 8,0,3,39 41 | 8,8,3,40 42 | 8,6,4,41 43 | 8,2,4,42 44 | 8,0,4,43 45 | 8,5,4,44 46 | 8,6,4,45 47 | 8,2,4,46 48 | 8,8,4,47 49 | 8,2,4,48 50 | 8,7,4,49 51 | 8,7,4,50 52 | 8,8,4,51 53 | 8,0,4,52 54 | 8,4,4,53 55 | 8,7,4,54 56 | 8,3,4,55 57 | 8,1,4,56 58 | 8,3,4,57 59 | 8,2,4,58 60 | 8,8,4,59 61 | 8,0,4,60 62 | 8,7,5,61 63 | 8,4,5,62 64 | 8,2,5,63 65 | 8,3,5,64 66 | 8,3,5,65 67 | 8,7,5,66 68 | 8,8,5,67 69 | 8,7,5,68 70 | 8,0,5,69 71 | 8,7,5,70 72 | 8,8,5,71 73 | 8,8,5,72 74 | 8,8,5,73 75 | 8,6,5,74 76 | 8,7,5,75 77 | 8,4,5,76 78 | 8,5,5,77 79 | 8,1,5,78 80 | 8,8,5,79 81 | 8,2,5,80 82 | 8,1,6,81 83 | 8,1,6,82 84 | 8,0,6,83 85 | 8,8,6,84 86 | 8,8,6,85 87 | 8,8,6,86 88 | 8,8,6,87 89 | 8,8,6,88 90 | 8,8,6,89 91 | 8,8,6,90 92 | 8,8,6,91 93 | 8,0,6,92 94 | 8,6,6,93 95 | 8,3,6,94 96 | 8,3,6,95 97 | 8,7,6,96 98 | 8,5,6,97 99 | 8,7,6,98 100 | 8,2,6,99 101 | 8,8,6,100 102 | -------------------------------------------------------------------------------- /data/section9.csv: -------------------------------------------------------------------------------- 1 | "x","y" 2 | 3,5 3 | 3.21052631578947,3 4 | 3.42105263157895,6 5 | 3.63157894736842,7 6 | 3.84210526315789,7 7 | 4.05263157894737,5 8 | 4.26315789473684,9 9 | 4.47368421052632,9 10 | 4.68421052631579,7 11 | 4.89473684210526,10 12 | 5.10526315789474,12 13 | 5.31578947368421,8 14 | 5.52631578947368,7 15 | 5.73684210526316,4 16 | 5.94736842105263,4 17 | 6.15789473684211,11 18 | 6.36842105263158,9 19 | 6.57894736842105,9 20 | 6.78947368421053,8 21 | 7,6 22 | -------------------------------------------------------------------------------- /markdown/section10.md: -------------------------------------------------------------------------------- 1 | # 10 階層ベイズモデル -GLMMのベイズモデル化- 2 | 3 | ```julia 4 | using Distributed 5 | addprocs(3) 6 | @everywhere begin 7 | using Pkg 8 | Pkg.activate(".") 9 | Pkg.instantiate() 10 | end 11 | ``` 12 | 13 | ```julia 14 | using CSV 15 | using DataFrames 16 | using DataFramesMeta 17 | using Distributions 18 | using ForneyLab 19 | using LaTeXStrings 20 | @everywhere using Mamba 21 | using Plots 22 | using QuadGK 23 | @everywhere using Random 24 | using StatsBase 25 | using StatsFuns 26 | using StatsPlots 27 | @everywhere Random.seed!(0) 28 | ``` 29 | 30 | ## 10.1 例題 : 個体差と生存種子数 (個体差あり) 31 | 32 | ```julia 33 | df = CSV.read(joinpath("..", "data/section10a.csv")) 34 | disallowmissing!(df) 35 | ``` 36 | 37 | 青丸は観測データ, 白丸は生存確率0.504の二項分布. 二項分布では観測データのばらつきが説明できていない 38 | 39 | ```julia 40 | scatter(sort(unique(df.y)), counts(df.y), label="") 41 | ys = pdf.(Binomial(8, 0.504), 0:8) .* 100 42 | plot!(0:8, ys, linecolor=:red, linewidth=2, 43 | marker=4, label="", 44 | xlabel="Survived", ylabel="Observed") 45 | ``` 46 | 47 | ## 10.3 階層ベイズモデルの推定・予測 48 | ### 10.3.1 階層ベイズモデルのMCMCサンプリング 49 | ### モデルの作成 50 | $$\begin{align} y_i \sim \text{Binomial}(q_i, 8) \\ 51 | \text{logit}(q_i) = \beta + r_i \\ 52 | \beta \sim \text{Normal}(0, 100^2) \\ 53 | r_i \sim \text{Normal}(0, \tau^2) \\ 54 | \tau \sim \text{Uniform}(0, 10000) \end{align}$$ 55 | 56 | ```julia 57 | model = Model( 58 | y = Stochastic(1, 59 | (beta, r, N) -> 60 | UnivariateDistribution[ 61 | (q = invlogit(beta + r[i]); 62 | Binomial(8, q)) for i in 1:N 63 | ], 64 | false 65 | ), 66 | 67 | beta = Stochastic(() -> Normal(0, 100)), 68 | 69 | r = Stochastic(1, s -> Normal(0, s), false), 70 | 71 | s = Stochastic(() -> Uniform(0, 10000)), 72 | ) 73 | ``` 74 | 75 | ### モデルの図示 76 | 77 | ```julia 78 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model))) 79 | ``` 80 | 81 | ### データの設定 82 | 83 | ```julia 84 | data = let y=df.y[:] 85 | Dict{Symbol, Any}( 86 | :y => y, 87 | :N => length(y), 88 | ) 89 | end 90 | ``` 91 | 92 | ### 初期値の設定 93 | 94 | ```julia 95 | inits = let y=df.y[:] 96 | [ 97 | Dict{Symbol, Any}( 98 | :y => y, 99 | :beta => 0.0, 100 | :r => rand(Normal(0, 0.1), length(y)), 101 | :s => 1.0, 102 | ) for i in 1:3 103 | ] 104 | end 105 | ``` 106 | 107 | ### MCMCサンプル方法の設定 108 | NUTSを使うと遅くなってしまったので、AMWGを使用 109 | 110 | ```julia 111 | scheme = [ 112 | AMWG(:r, 1), 113 | Slice(:s, 1.0, Mamba.Univariate), 114 | Slice(:beta, 1.0, Mamba.Univariate), 115 | ] 116 | ``` 117 | 118 | ### MCMCサンプリング 119 | サンプリングは21000回実施し, burn-inの数は1000, 10飛ばしの結果の記録を3チェイン行うので、 120 | サンプルの数は(21000-1000)/10*3=6000個 121 | 122 | ```julia 123 | setsamplers!(model, scheme) 124 | sim = mcmc(model, data, inits, 21000, burnin=1000, thin=10, chains=3) 125 | ``` 126 | 127 | ### サンプリング結果を表示 128 | 129 | ```julia 130 | describe(sim) 131 | ``` 132 | 133 | ```julia 134 | p = Mamba.plot(sim, legend=true) 135 | Mamba.draw(p, nrow=2, ncol=2) 136 | ``` 137 | 138 | ```julia 139 | p = Mamba.plot(sim, [:autocor, :mean], legend=true) 140 | Mamba.draw(p, nrow=2, ncol=2) 141 | ``` 142 | 143 | ```julia 144 | p = Mamba.plot(sim, :contour) 145 | Mamba.draw(p, nrow=1, ncol=1) 146 | ``` 147 | 148 | ### 10.3.2 階層ベイズモデルの事後分布推定と予測 149 | $p(y \mid \beta, r)p(r \mid s)$を求める関数 150 | 151 | ```julia 152 | function f_gaussian_binorm(alpha, x, size, fixed, sd) 153 | pdf(Binomial(size, logistic(fixed + alpha)), x) * pdf(Normal(0, sd), alpha) 154 | end 155 | ``` 156 | 157 | $p(y \mid \beta, s) = \int_{-\infty}^\infty p(y \mid \beta, r)p(r \mid s)dr$を求める関数. 158 | 実際は$\int_{-10s}^{10s} p(y \mid \beta, r)p(r \mid s)dr$を求めている 159 | 160 | ```julia 161 | function d_gaussian_binorm(x, fixed, sd) 162 | quadgk(y -> f_gaussian_binorm(y, x, 8, fixed, sd), -sd * 10, sd * 10)[1] 163 | end 164 | ``` 165 | 166 | 各パスに対し, $y = 0, \ldots, 8$ に対して $p(y \mid \beta, s)$ を評価する. 167 | 168 | ```julia 169 | posterior = map((x, y) -> d_gaussian_binorm.(0:8, x, y), sim[:, [:beta], :].value[:], sim[:, [:s], :].value[:]) 170 | ``` 171 | 172 | 各パスに対して、$P(X=y)=p(y \mid \beta, s)\ \text{for}\ y = 0, \ldots, 8$というCategorical distributionから100個体のサンプリングを行い, 173 | $y$ごとに出現回数を数える. 横方向は各サンプリング, 縦方向は$y = 0, \ldots, 8$の出現回数に該当 174 | 175 | ```julia 176 | population_samples = hcat(map(x -> fit(Histogram, rand(Distributions.Categorical(x), 100) .- 1, 0:9).weights, posterior)...) 177 | ``` 178 | 179 | $y$毎に出現回数の2.5%, 50%, 97.5%点を計算 180 | 181 | ```julia 182 | function quantile_sample(r) 183 | map(x -> quantile(population_samples[x, :], r), 1:9) 184 | end 185 | quantile_sample_0025 = quantile_sample(0.025) 186 | quantile_sample_0975 = quantile_sample(0.975) 187 | quantile_sample_median = quantile_sample(0.5) 188 | ``` 189 | 190 | 生存種子数の予測分布 191 | 各 $y$ における中央値, 及び95%区間の領域を表示する 192 | 193 | ```julia 194 | scatter(sort(unique(df.y)), counts(df.y), label="") 195 | Plots.plot!(0:8, quantile_sample_0025, lw = 0, 196 | fillrange=quantile_sample_0975, 197 | fillalpha=0.3, fillcolor=:orange, 198 | label="95% Confidence interval") 199 | Plots.plot!(0:8, quantile_sample_median, linewidth=2, marker=4, label="", 200 | xlabel="Survived", ylabel="Observed") 201 | ``` 202 | 203 | ## 10.5 個体差 + 場所差の階層ベイズモデル 204 | 205 | ```julia 206 | df2 = CSV.read(joinpath("..", "data/section10b.csv")) 207 | disallowmissing!(df2) 208 | ``` 209 | 210 | ```julia 211 | marker_dict = Dict( 212 | "A" => :circle, 213 | "B" => :ltriangle, 214 | "C" => :star5, 215 | "D" => :diamond, 216 | "E" => :dtriangle, 217 | "F" => :xcross, 218 | "G" => :star4, 219 | "H" => :utriangle, 220 | "I" => :rect, 221 | "J" => :rtriangle 222 | ) 223 | ``` 224 | 225 | ### 個体ごとの表示 226 | 赤線は無処理、青線は堆肥処理した個体の平均 227 | 228 | ```julia 229 | plt = Plots.plot() 230 | for k in marker_dict |> keys |> collect |> sort 231 | @linq df_k = df2 |> where(:pot .== k) 232 | scatter!(df_k.id, df_k.y, label=k, markershape=marker_dict[k], 233 | legend=:topleft, legendfontsize=6, xlabel=L"i", ylabel=L"y_i") 234 | end 235 | plot!(1:50, fill(mean(df2[1:50, :].y), 50), 236 | linestyle=:dash, linewidth=2, linecolor=:red, label="") 237 | plot!(51:100, fill(mean(df2[51:100, :].y), 50), 238 | linestyle=:dash, linewidth=2, linecolor=:blue, label="") 239 | plt 240 | ``` 241 | 242 | ### 植木鉢毎に箱ひげ図として図示 243 | 244 | ```julia 245 | boxplot(df2[1:50, :].pot, df2[1:50, :].y, label="") 246 | boxplot!(df2[51:100, :].pot, df2[51:100, :].y, label="", xlabel="pot", ylabel=L"y_i") 247 | ``` 248 | 249 | ### GLMM化したポアソン回帰 250 | 個体$i$の種子数$y_i$を平均$\lambda_i$のポアソン回帰 251 | 252 | $$\begin{align} p(y_i \mid \lambda_i) = \frac{\lambda_i^{y_i}\exp(-\lambda_i)}{y_i!} \end{align}$$ 253 | 254 | で表現し, 平均種子数は切片$\beta_1$, 堆肥処理の有無を表す因子型の説明変数$f_i$の係数$\beta_2$, 個体$i$の効果$r_i$と植木鉢$j$の効果$t_{j(i)}$で 255 | 256 | $$\begin{align} \log \lambda_i = \beta_1 + \beta_2 f_i + r_i + t_{j(i)} \end{align}$$ 257 | 258 | で表現. 259 | $$\begin{align} y_i \sim \text{Poisson}(\lambda_i), \ i = 1, \ldots, 100 \\ 260 | \log \lambda_i = \beta_1 + \beta_2 f_i + r_i + t_{j(i)} \\ 261 | \beta_1, \beta_2 \sim \text{Normal}(0, 100) \\ 262 | r_i \sim \text{Normal}(0, s_r^2) \\ 263 | t_j \sim \text{Normal}(0, s_t^2), j = 1, \ldots, 10 \\ 264 | s_r, s_t \sim \text{Uniform}(0, 10000) \end{align}$$ 265 | 266 | ```julia 267 | model2 = Model( 268 | 269 | y = Stochastic(1, 270 | (beta1, beta2, f, r, t, pot, N_r) -> 271 | UnivariateDistribution[ 272 | (lambda=exp(beta1 + beta2 * f[i] + r[i] + t[pot[i]]); 273 | Mamba.Poisson(lambda)) for i in 1:N_r 274 | ], 275 | false 276 | ), 277 | 278 | r = Stochastic(1, s_r -> Normal(0, s_r), false), 279 | 280 | t = Stochastic(1, s_t -> Normal(0, s_t), false), 281 | 282 | beta1 = Stochastic(() -> Normal(0, 100)), 283 | beta2 = Stochastic(() -> Normal(0, 100)), 284 | 285 | s_r = Stochastic(() -> Uniform(0, 10000)), 286 | s_t = Stochastic(() -> Uniform(0, 10000)), 287 | ) 288 | ``` 289 | 290 | ### モデルの図示 291 | 292 | ```julia 293 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model2))) 294 | ``` 295 | 296 | ### 入力データの設定 297 | 298 | ```julia 299 | pot_dict = Dict(string(y) => x for (x, y) in enumerate("ABCDEFGHIJ")) 300 | f_dict = Dict("C" => 0, "T" => 1) 301 | data2 = let y=df2.y[:], pot=df2.pot[:], f=df2.f[:] 302 | Dict{Symbol, Any}( 303 | :y => y, 304 | :N_r => length(y), 305 | :N_t => length(unique(pot)), 306 | :pot => [pot_dict[x] for x in pot], 307 | :f => [f_dict[x] for x in f], 308 | ) 309 | end 310 | ``` 311 | 312 | ### 初期値の設定 313 | 314 | ```julia 315 | inits2 = [ 316 | Dict{Symbol, Any}( 317 | :y => data2[:y], 318 | :beta1 => 0.0, 319 | :beta2 => 0.0, 320 | :r => rand(Normal(0, 0.1), data2[:N_r]), 321 | :t => rand(Normal(0, 0.1), data2[:N_t]), 322 | :s_r => 1.0, 323 | :s_t => 1.0, 324 | ) for i in 1:3 325 | ] 326 | ``` 327 | 328 | ```julia 329 | scheme2 = [ 330 | AMWG([:r], 0.1), 331 | AMWG([:t], 0.1), 332 | Slice([:s_r, :s_t], 0.1, Mamba.Univariate), 333 | Slice([:beta1, :beta2], 1.0, Mamba.Univariate) 334 | ] 335 | ``` 336 | 337 | ```julia 338 | setsamplers!(model2, scheme2) 339 | sim2 = mcmc(model2, data2, inits2, 22000, burnin=2000, thin=10, chains=3) 340 | ``` 341 | 342 | ### 事後分布を確認する 343 | β2の95%区間を見ると、堆肥処理の効果はなさそう 344 | 345 | ```julia 346 | describe(sim2) 347 | ``` 348 | 349 | ```julia 350 | p = Mamba.plot(sim2, legend=true) 351 | Mamba.draw(p[:, 1:2], nrow=2, ncol=2) 352 | ``` 353 | 354 | ```julia 355 | Mamba.draw(p[:, 3:4], nrow=2, ncol=2) 356 | ``` 357 | 358 | ```julia 359 | p = Mamba.plot(sim2, [:autocor, :mean], legend=true) 360 | Mamba.draw(p[:, 1:2], nrow=2, ncol=2) 361 | ``` 362 | 363 | ```julia 364 | Mamba.draw(p[:, 3:4], nrow=2, ncol=2) 365 | ``` 366 | 367 | --- 368 | 369 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 370 | 371 | -------------------------------------------------------------------------------- /markdown/section11.md: -------------------------------------------------------------------------------- 1 | # 11 空間構造のある階層ベイズモデル 2 | 3 | ```julia 4 | using Distributed 5 | addprocs(3) 6 | @everywhere begin 7 | using Pkg 8 | Pkg.activate(".") 9 | Pkg.instantiate() 10 | end 11 | ``` 12 | 13 | ```julia 14 | using CSV 15 | using DataFrames 16 | using Distributions 17 | using ForneyLab 18 | using LinearAlgebra 19 | @everywhere using Mamba 20 | using Plots 21 | @everywhere using Random 22 | using SparseArrays 23 | using Statistics 24 | using StatsBase 25 | @everywhere Random.seed!(0) 26 | ``` 27 | 28 | ## 11.1 例題 : 一次元空間上の個体数分布 29 | ### 例題の一次元空間上の架空データ 30 | 31 | ```julia 32 | df = CSV.read(joinpath("..", "data/section11.csv")) 33 | disallowmissing!(df) 34 | ``` 35 | 36 | 横軸は調査区間の位置, 縦軸は観測された個体数, 破線はデータをポアソン乱数で生成するときに使った平均値 37 | 38 | ```julia 39 | scatter(1:50, df.y, xlabel="Position", ylabel="Population", markercolor=:white, label="y") 40 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 41 | ``` 42 | 43 | ## 11.2 階層ベイズモデルに空間構造を組み込む 44 | まず, 個体数$y_i$は, すべでの区画で共通する平均$\lambda$のポアソン分布に従うとしてみる. 45 | $$\begin{align} y_i \sim \text{Poisson}(\lambda),\ p(y_j \mid \lambda) = \frac{\lambda^{y_i}\exp(-\lambda)}{y_j!} \end{align}$$ 46 | このように仮定してすると, 平均$\lambda$と標本平均と等しいとしてみる. 47 | ### 標本平均 48 | 49 | ```julia 50 | mean(df.y) 51 | ``` 52 | 53 | ところが標本分散を求めてみると, 54 | 55 | ```julia 56 | var(df.y) 57 | ``` 58 | 59 | となり, 標本平均の3倍近くなっている. そのため個体数が全ての区画で共通する平均$\lambda$のPoisson分布に従うと言う仮定は成立していなさそう. 60 | 61 | そのため, 区間$j$ごとに平均$\lambda_i$が異なっているとし, 平均個体数を切片$\beta$と場所差$r_j$を用いて 62 | $$\begin{align} \log \lambda_i = \beta + r_j \end{align}$$ 63 | と表す. 64 | 65 | ### 11.2.1. 空間構造のない階層事前分布 66 | 場所差$r_j$の事前分布を第10章で使ったような階層事前分布 67 | $$\begin{align} r_j \sim \text{Normal}(0, s^2),\ p(r_j \mid s) = \frac{1}{\sqrt{2\pi s^2}}\exp \left( -\frac{r_j^2}{2s^2} \right) \end{align}$$ 68 | であるとしてモデリングしてみる. 69 | 70 | ```julia 71 | model1 = Model( 72 | 73 | y = Stochastic(1, 74 | (lambda, N) -> 75 | UnivariateDistribution[ 76 | (Mamba.Poisson(lambda[i])) for i in 1:N 77 | ], 78 | false 79 | ), 80 | 81 | lambda = Logical(1, 82 | (beta, r) -> exp.(beta .+ r)), 83 | 84 | beta = Stochastic(() -> Normal(0, 100)), 85 | 86 | r = Stochastic(1, s -> Normal(0, s), false), 87 | 88 | s = Stochastic(() -> Uniform(0, 10000)) 89 | ) 90 | ``` 91 | 92 | ```julia 93 | data1 = let y=df.y[:] 94 | Dict{Symbol, Any}( 95 | :y => y, 96 | :N => length(y), 97 | ) 98 | end 99 | ``` 100 | 101 | ```julia 102 | inits1 = [ 103 | Dict{Symbol, Any}( 104 | :y => data1[:y], 105 | :beta => 0.0, 106 | :r => rand(Normal(0, 0.1), length(data1[:y])), 107 | :s => 1.0, 108 | ) for i in 1:3 109 | ] 110 | ``` 111 | 112 | ```julia 113 | scheme1 = [ 114 | AMWG(:r, 1), 115 | Slice(:s, 1.0), 116 | Slice(:beta, 1.0), 117 | ] 118 | ``` 119 | 120 | ```julia 121 | setsamplers!(model1, scheme1) 122 | sim1 = mcmc(model1, data1, inits1, 60000, burnin=10000, thin=10, chains=3) 123 | ``` 124 | 125 | ```julia 126 | describe(sim1) 127 | ``` 128 | 129 | ```julia 130 | p1 = Mamba.plot(sim1, legend=true) 131 | Mamba.draw(p1[:, 1:2], nrow=2, ncol=2) 132 | ``` 133 | 134 | ```julia 135 | p2 = Mamba.plot(sim1, [:autocor, :mean], legend=true) 136 | Mamba.draw(p2[:, 1:2], nrow=2, ncol=2) 137 | ``` 138 | 139 | $\lambda$の中央値、95%信頼区間をプロットしてみる 140 | 141 | ```julia 142 | mre = quantile(sim1).value[3:end, :] 143 | ``` 144 | 145 | ```julia 146 | Plots.plot(1:50, mre[:, 1], lw=0, 147 | fillrange=mre[:, 5], 148 | fillcolor=:skyblue, 149 | fillalpha=0.6, 150 | label="95% Confidence interval") 151 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", markercolor=:white, label="y") 152 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 153 | plot!(1:50, mre[:, 3], linewidth=2, linecolor=:red, label="Median") 154 | ``` 155 | 156 | 11.2.2 空間構造のある階層事前分布 157 | ある区間はそれと隣接する区間とだけ相互作用すると仮定する. 158 | 近傍数は$n_j = 2 \ (j \neq 1, 50), 1 \ (j = 1, 50)$となる. 159 | $$\begin{align} \mu_j = \frac{r_{j-1} + r_{j+1}}{2}\ (j \neq 1, 50), \mu_1 = r_2, \mu_{50} = r_{49},\\ 160 | r_j \mid \mu_j, s \sim \text{Normal}\left(\mu_j, \frac{s}{\sqrt{n_j}}\right) \end{align}$$ 161 | と言うモデルを考える. 162 | ### 11.3 空間統計モデルをデータに当てはめる 163 | CARモデルを実装する。 参考 : https://github.com/matsueushi/lip_stick_mamba 164 | 165 | ```julia 166 | model2 = Model( 167 | 168 | y = Stochastic(1, 169 | (lambda, N) -> 170 | UnivariateDistribution[ 171 | (Mamba.Poisson(lambda[i])) for i in 1:N 172 | ], 173 | false 174 | ), 175 | 176 | lambda = Logical(1, 177 | (beta, r) -> exp.(beta .+ r)), 178 | 179 | beta = Stochastic(() -> Normal(0, 100)), 180 | 181 | r = Stochastic(1, 182 | (s, alpha, N, D, adj) -> 183 | MvNormalCanon(zeros(N), 1 / (s * s) * (D - alpha * adj)), 184 | false 185 | ), 186 | 187 | alpha = Stochastic(() -> Uniform()), 188 | 189 | s = Stochastic(() -> Uniform(0, 10000)) 190 | ) 191 | ``` 192 | 193 | ```julia 194 | adj = zeros(50, 50) 195 | for i in 1:50-1 196 | adj[i, i+1] = 1 197 | adj[i+1, i] = 1 198 | end 199 | adj 200 | ``` 201 | 202 | ```julia 203 | D = Diagonal(vec(sum(adj, dims=2))) 204 | ``` 205 | 206 | ```julia 207 | data2 = let y=df.y[:] 208 | Dict{Symbol, Any}( 209 | :y => y, 210 | :N => length(y), 211 | :adj => adj, 212 | :D => D, 213 | ) 214 | end 215 | ``` 216 | 217 | ```julia 218 | inits2 = [ 219 | Dict{Symbol, Any}( 220 | :y => data2[:y], 221 | :alpha => 0.9, 222 | :beta => 0.0, 223 | :r => rand(Normal(0, 0.1), data2[:N]), 224 | :s => 1.0, 225 | ) for i in 1:3 226 | ] 227 | ``` 228 | 229 | ```julia 230 | scheme2 = [ 231 | AMWG(:r, 1), 232 | Slice(:s, 1.0), 233 | Slice([:alpha, :beta], 1.0), 234 | ] 235 | ``` 236 | 237 | ```julia 238 | setsamplers!(model2, scheme2) 239 | ``` 240 | 241 | ```julia 242 | sim2 = mcmc(model2, data2, inits2, 60000, burnin=10000, thin=10, chains=3) 243 | ``` 244 | 245 | ```julia 246 | describe(sim2) 247 | ``` 248 | 249 | ```julia 250 | p3 = Mamba.plot(sim2, legend=true) 251 | Mamba.draw(p3[:, 1:3], nrow=3, ncol=2) 252 | ``` 253 | 254 | ```julia 255 | p4 = Mamba.plot(sim2, [:autocor, :mean], legend=true) 256 | Mamba.draw(p4[:, 1:3], nrow=3, ncol=2) 257 | ``` 258 | 259 | ```julia 260 | mre2 = quantile(sim2).value[4:end, :] 261 | ``` 262 | 263 | ### Plot 264 | 265 | ```julia 266 | Plots.plot(1:50, mre2[:, 1], lw=0, 267 | fillrange=mre2[:, 5], 268 | fillcolor=:skyblue, 269 | fillalpha=0.6, 270 | label="95% Confidence interval") 271 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 272 | markercolor=:white, label="y") 273 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 274 | plot!(1:50, mre2[:, 3], linewidth=2, linecolor=:red, label= "Median") 275 | ``` 276 | 277 | ## 11.5 空間相関モデルと欠測のある観測データ 278 | Missing Values Sampler 279 | 280 | https://mambajl.readthedocs.io/en/latest/samplers/miss.html 281 | 282 | を使って、欠測のある観測データを使った予測を行う。 283 | ### まずは、空間相関のないモデル 284 | 285 | ```julia 286 | y_missing = convert(Vector{Union{Missing, Float64}}, df.y) 287 | missing_place = [6, 9, 12, 13, 26, 27, 28, 29, 30] 288 | y_missing[missing_place] .= NaN 289 | y_missing 290 | ``` 291 | 292 | ```julia 293 | data1_missing = Dict{Symbol, Any}( 294 | :y => y_missing, 295 | :N => length(df.y[:]), 296 | ) 297 | ``` 298 | 299 | ```julia 300 | inits1_missing = [ 301 | Dict{Symbol, Any}( 302 | :y => y_missing, 303 | :beta => 0.0, 304 | :r => rand(Normal(0, 0.1), data1_missing[:N]), 305 | :s => 1.0, 306 | ) for i in 1:3 307 | ] 308 | ``` 309 | 310 | ```julia 311 | scheme1_missing = [ 312 | MISS(:y), 313 | AMWG(:r, 1), 314 | Slice(:s, 1.0), 315 | Slice(:beta, 1.0), 316 | ] 317 | ``` 318 | 319 | ```julia 320 | setsamplers!(model1, scheme1_missing) 321 | sim1_missing = mcmc(model1, data1_missing, inits1_missing, 60000, 322 | burnin=10000, thin=10, chains=3) 323 | ``` 324 | 325 | ```julia 326 | describe(sim1_missing) 327 | ``` 328 | 329 | ```julia 330 | p5 = Mamba.plot(sim1_missing, legend=true) 331 | Mamba.draw(p5[:, 1:2], nrow=2, ncol=2) 332 | ``` 333 | 334 | ```julia 335 | p6 = Mamba.plot(sim1_missing, [:autocor, :mean], legend=true) 336 | Mamba.draw(p6[:, 1:2], nrow=2, ncol=2) 337 | ``` 338 | 339 | ### 次に、空間相関のあるモデル 340 | 341 | ```julia 342 | data2_missing = Dict{Symbol, Any}( 343 | :y => y_missing, 344 | :N => length(df.y[:]), 345 | :adj => adj, 346 | :D => D, 347 | ) 348 | ``` 349 | 350 | ```julia 351 | inits2_missing = [ 352 | Dict{Symbol, Any}( 353 | :y => y_missing, 354 | :alpha => 0.9, 355 | :beta => 0.0, 356 | :r => rand(Normal(0, 0.1), data2_missing[:N]), 357 | :s => 1.0, 358 | ) for i in 1:3 359 | ] 360 | ``` 361 | 362 | ```julia 363 | scheme2_missing = [ 364 | MISS(:y), 365 | AMWG(:r, 1), 366 | Slice(:s, 1.0), 367 | Slice([:alpha, :beta], 1.0), 368 | ] 369 | ``` 370 | 371 | ```julia 372 | setsamplers!(model2, scheme2_missing) 373 | sim2_missing = mcmc(model2, data2_missing, inits2_missing, 60000, 374 | burnin=10000, thin=10, chains=3) 375 | ``` 376 | 377 | ```julia 378 | describe(sim2_missing) 379 | ``` 380 | 381 | ```julia 382 | p7 = Mamba.plot(sim2_missing, legend=true) 383 | Mamba.draw(p7[:, 1:3], nrow=3, ncol=2) 384 | ``` 385 | 386 | ```julia 387 | p8 = Mamba.plot(sim2_missing, [:autocor, :mean], legend=true) 388 | Mamba.draw(p8[:, 1:3], nrow=3, ncol=2) 389 | ``` 390 | 391 | ### モデルの比較 392 | 空間相関のあるモデル・ないモデルを比較する。 393 | 394 | ```julia 395 | scatter_color = fill(:white, 50) 396 | scatter_color[missing_place] .= :black 397 | ``` 398 | 399 | ```julia 400 | vsspan_x = collect(Iterators.flatten(zip(missing_place .- 0.5, missing_place .+ 0.5))) 401 | ``` 402 | 403 | 空間相関を考慮していないモデル 404 | 405 | ```julia 406 | mre3 = quantile(sim1_missing).value[3:end, :] 407 | vspan(vsspan_x, fillcolor=:black, linecolor=:transparent, fillalpha=0.15, label="") 408 | plot!(1:50, mre3[:, 1], lw=0, 409 | fillrange=mre3[:, 5], 410 | fillcolor=:skyblue, 411 | fillalpha=0.6, 412 | label="95% Confidence interval") 413 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 414 | markercolor=scatter_color, label="y") 415 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 416 | plot!(1:50, mre3[:, 3], linewidth=2, linecolor=:red, label="Median") 417 | ``` 418 | 419 | 空間相関を考慮しているモデル 420 | 421 | ```julia 422 | mre4 = quantile(sim2_missing).value[4:end, :] 423 | vspan(vsspan_x, fillcolor=:black, linecolor=:transparent, fillalpha=0.15, label="") 424 | plot!(1:50, mre4[:, 1], lw=0, 425 | fillrange=mre4[:, 5], 426 | fillcolor=:skyblue, 427 | fillalpha=0.6, 428 | label="95% Confidence interval") 429 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 430 | markercolor=scatter_color, label="y") 431 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 432 | plot!(1:50, mre4[:, 3], linewidth=2, linecolor=:red, label="Median") 433 | ``` 434 | 435 | 空間相関を考慮すると、欠測データに対し隣同士の相互作用を用いた予測ができるため、相関を考慮しないものに比べて予測区間の幅が小さくなる 436 | 437 | --- 438 | 439 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 440 | 441 | -------------------------------------------------------------------------------- /markdown/section2.md: -------------------------------------------------------------------------------- 1 | # 2 確率分布と統計モデルの最尤推定 2 | 3 | ```julia 4 | using DataStructures 5 | using Distributions 6 | using Plots 7 | using StatsBase 8 | using Statistics 9 | ``` 10 | 11 | ## 2.1 例題 : 種子数の統計モデリング 12 | ### 種子数データ 13 | 14 | ```julia 15 | data = [2, 2, 4, 6, 4, 5, 2, 3, 1, 2, 0, 4, 3, 3, 3, 3,4, 2, 7, 2, 4, 3, 3, 3, 4, 16 | 3, 7, 5, 3, 1, 7, 6, 4, 6, 5, 2, 4, 7, 2, 2, 6, 2, 4, 5, 4, 5, 1, 3, 2, 3] 17 | ``` 18 | 19 | ### データ数 20 | 21 | ```julia 22 | length(data) 23 | ``` 24 | 25 | ### データの要約 26 | 27 | ```julia 28 | describe(data) 29 | ``` 30 | 31 | ### 度数分布 32 | 33 | ```julia 34 | SortedDict(countmap(data)) 35 | ``` 36 | 37 | ### ヒストグラム 38 | 39 | ```julia 40 | histogram(data, bins=10, label="Data") 41 | ``` 42 | 43 | ### 標本分散 44 | 45 | ```julia 46 | var(data) 47 | ``` 48 | 49 | ### 標本標準偏差 50 | 51 | ```julia 52 | std(data) 53 | ``` 54 | 55 | ## 2.2 データと確率分布の対応関係をながめる 56 | ### ポアソン分布 57 | https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Poisson 58 | 59 | ```julia 60 | y = 0:9 61 | prob = pdf.(Poisson(3.56), y) 62 | ``` 63 | 64 | ```julia 65 | plot(prob, linewidth=2, linestyle=:dash, marker=4) 66 | ``` 67 | 68 | ### 観測データと確率分布の対応 69 | 70 | ```julia 71 | histogram(data, bins=10, label="Data") 72 | plot!(prob * 50, linewidth=2, linestyle=:dash, marker=4, label="") 73 | ``` 74 | 75 | ## 2.4 ポアソン分布のパラメーターの最尤推定 76 | ### 対数尤度 $\log L(\lambda)$と$\lambda$の関係 77 | 78 | ```julia 79 | logL(m) = sum(log.(pdf.(Poisson(m), data))) 80 | ``` 81 | 82 | ```julia 83 | lambda = 2:0.1:5 84 | plot(lambda, logL.(lambda), linewidth=2, title="log likelihood", label="") 85 | ``` 86 | 87 | --- 88 | 89 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 90 | 91 | -------------------------------------------------------------------------------- /markdown/section3.md: -------------------------------------------------------------------------------- 1 | # 3 一般化線形モデル(GLM) -ポアソン回帰- 2 | 3 | ```julia 4 | using CSV 5 | using DataFrames 6 | using GLM 7 | using LaTeXStrings 8 | using Plots 9 | using StatsBase 10 | using StatsPlots 11 | ``` 12 | 13 | ## 3.2 観測されたデータの概要を調べる 14 | 15 | ```julia 16 | df = CSV.read(joinpath("..", "data/section3.csv")) 17 | ``` 18 | 19 | ### 列ごとにデータを表示 20 | 21 | ```julia 22 | df.x 23 | ``` 24 | 25 | ```julia 26 | df.y 27 | ``` 28 | 29 | ```julia 30 | df.f 31 | ``` 32 | 33 | ### データオブジェクトの型を調べる 34 | 35 | ```julia 36 | typeof(df) 37 | ``` 38 | 39 | ```julia 40 | typeof(df.y) 41 | ``` 42 | 43 | ```julia 44 | typeof(df.x) 45 | ``` 46 | 47 | ```julia 48 | typeof(df.f) 49 | 50 | ### データの要約 51 | ``` 52 | 53 | ```julia 54 | describe(df) 55 | ``` 56 | 57 | ## 3.3 統計モデリングの前にデータを図示する 58 | ### データの図示 59 | 散布図 60 | 61 | ```julia 62 | scatter(df.x, df.y, group=df.f) 63 | ``` 64 | 65 | 箱ひげ図 66 | 67 | ```julia 68 | boxplot(df.f, df.y, label="") 69 | ``` 70 | 71 | ## 3.4 ポアソン回帰の統計モデル 72 | ### 3.4.2 当てはめと当てはまりの良さ 73 | ### GLMのフィッティング 74 | http://juliastats.github.io/GLM.jl/latest/examples/ 75 | 76 | ```julia 77 | names(df) 78 | ``` 79 | 80 | ```julia 81 | result = glm(@formula(y ~ x), df, GLM.Poisson()) 82 | ``` 83 | 84 | ```julia 85 | loglikelihood(result) 86 | ``` 87 | 88 | ### 3.4.3 ポアソン回帰モデルによる予測 89 | 90 | ```julia 91 | plot(df.x, df.y, group=df.f, seriestype=:scatter) 92 | xx = range(minimum(df.x), maximum(df.x), length=100) 93 | plot!(xx, exp.(1.29 .+ 0.0757 .* xx), linewidth=2, label=L"\lambda") 94 | ``` 95 | 96 | ```julia 97 | plot(df.x, df.y, group = df.f, seriestype=:scatter) 98 | xx = DataFrame(x=range(minimum(df.x), maximum(df.x), length=100)) 99 | yy = predict(result, xx) 100 | plot!(xx.x, yy, linewidth=2, label=L"\lambda") 101 | ``` 102 | 103 | ## 3.5 説明変数が因子型の統計モデル 104 | 105 | ```julia 106 | result_f = glm(@formula(y ~ f), df, GLM.Poisson()) 107 | ``` 108 | 109 | ```julia 110 | loglikelihood(result_f) 111 | ``` 112 | 113 | ## 3.6 説明変数が数量型 + 因子型の統計モデル 114 | 115 | ```julia 116 | result_all = glm(@formula(y ~ x + f), df, GLM.Poisson()) 117 | ``` 118 | 119 | ```julia 120 | loglikelihood(result_all) 121 | ``` 122 | 123 | ### 対数リンク関数のわかりやすさ : 掛け算される効果 124 | 恒等リンク関数 125 | 126 | ```julia 127 | result_identity = glm(@formula(y ~ x + f), df, GLM.Poisson(), IdentityLink()) 128 | ``` 129 | 130 | ```julia 131 | loglikelihood(result_identity) 132 | ``` 133 | 134 | --- 135 | 136 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 137 | 138 | -------------------------------------------------------------------------------- /markdown/section5.md: -------------------------------------------------------------------------------- 1 | # 5 GLMの尤度比検定と検定の非対称性 2 | 3 | ```julia 4 | using CSV 5 | using Distributions 6 | using GLM 7 | using Plots 8 | using StatsBase 9 | using Statistics 10 | ``` 11 | 12 | ```julia 13 | df = CSV.read(joinpath("..", "data/section3.csv")) 14 | ``` 15 | 16 | ### 5.4.1 方法(1) 汎用性のあるパラメトリックブートストラップ法 17 | 一定モデル 18 | 19 | ```julia 20 | fit1 = glm(@formula(y ~ 1), df, GLM.Poisson()) 21 | ``` 22 | 23 | xモデル 24 | 25 | ```julia 26 | fit2 = glm(@formula(y ~ x), df, GLM.Poisson()) 27 | ``` 28 | 29 | ### 残差逸脱度の差 30 | 31 | ```julia 32 | deviance(fit1) - deviance(fit2) 33 | ``` 34 | 35 | ### 真のモデルから100個体分のデータを新しく生成 36 | 37 | ```julia 38 | df.y_rnd = rand(Poisson(mean(df.y)), 100) 39 | ``` 40 | 41 | ### 一定モデルとxモデルをこの真データに当てはめる 42 | 43 | ```julia 44 | fit1 = glm(@formula(y_rnd ~ 1), df, GLM.Poisson()) 45 | fit2 = glm(@formula(y_rnd ~ x), df, GLM.Poisson()) 46 | deviance(fit1) - deviance(fit2) 47 | ``` 48 | 49 | ### PB法を実行する関数 50 | データの生成と逸脱度差の評価 51 | 52 | ```julia 53 | function get_dd(df) 54 | n_samples = size(df, 1) 55 | y_mean = mean(df.y) 56 | df.y_rnd = rand(Poisson(y_mean), n_samples) 57 | fit1 = glm(@formula(y_rnd ~ 1), df, GLM.Poisson()) 58 | fit2 = glm(@formula(y_rnd ~ x), df, GLM.Poisson()) 59 | deviance(fit1) - deviance(fit2) 60 | end 61 | ``` 62 | 63 | ```julia 64 | function pb(df, n_bootstrap) 65 | [get_dd(df) for _ in 1:n_bootstrap] 66 | end 67 | ``` 68 | 69 | ### 逸脱度の差のサンプルを1000個を作成 70 | 71 | ```julia 72 | dd12 = pb(df, 1000) 73 | ``` 74 | 75 | ```julia 76 | describe(dd12) 77 | ``` 78 | 79 | ```julia 80 | histogram(dd12, bins=100, label="") 81 | plot!([4.5], seriestype=:vline, linestyle=:dash, label="") 82 | ``` 83 | 84 | 合計1000個の$\Delta D_{1,2}$のうちいくつが4.5より右にあるか 85 | 86 | ```julia 87 | sum(dd12 .>= 4.5) 88 | ``` 89 | 90 | $P=0.05$となる逸脱度の差 91 | 92 | ```julia 93 | quantile(dd12, 0.95) 94 | ``` 95 | 96 | ### 方法(2) $\chi^2$分布を使った近似計算法 97 | 98 | ```julia 99 | ccdf(Chisq(1), 4.513) 100 | ``` 101 | 102 | --- 103 | 104 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 105 | 106 | -------------------------------------------------------------------------------- /markdown/section6.md: -------------------------------------------------------------------------------- 1 | # 6 GLMの応用範囲をひろげる -ロジスティック回帰など- 2 | 3 | ```julia 4 | using CSV 5 | using DataFrames 6 | using Distributions 7 | using GLM 8 | using LaTeXStrings 9 | using LinearAlgebra 10 | using Plots 11 | using StatsBase 12 | ``` 13 | 14 | ## 6.2 例題 : 上限のあるカウントデータ 15 | 16 | ```julia 17 | df = CSV.read(joinpath("..", "data/section6a.csv")) 18 | ``` 19 | 20 | ```julia 21 | disallowmissing!(df) 22 | ``` 23 | 24 | ```julia 25 | scatter(df.x, df.y, group=df.f, 26 | xlabel="Plant size", 27 | ylabel="Number of survival seeds") 28 | ``` 29 | 30 | ```julia 31 | describe(df) 32 | ``` 33 | 34 | ## 6.3 二項分布で表現する「あり・なし」カウントデータ 35 | https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Binomial 36 | 37 | ```julia 38 | xx = 0:8 39 | plt = plot(ylabel="Probability") 40 | for x = [0.1, 0.3, 0.8] 41 | yy = pdf.(Binomial(8, x), xx) 42 | plot!(xx, yy, lw=2, label=x, markershape=:auto, 43 | legendtitle="q", legend=:bottomright) 44 | end 45 | display(plt) 46 | ``` 47 | 48 | ## 6.4 ロジスティック回帰とロジットリンク関数 49 | 50 | ```julia 51 | logistic(z) = 1 / (1 + exp(-z)) 52 | ``` 53 | 54 | ```julia 55 | z = -6:0.1:6 56 | plot(z, logistic.(z), lw=2, title="Logistic function", 57 | xlabel="Linear predictor", ylabel="Probability", label="") 58 | ``` 59 | 60 | ### 6.4.2 パラメータ推定¶ 61 | Juliaでは、Binomial分布の場合、応答変数はfractionにしなければならない 62 | https://github.com/JuliaStats/GLM.jl/issues/228#issuecomment-387340111 63 | 64 | ```julia 65 | df.yy = df.y ./ df.N 66 | df.N = convert(Array{Float64}, df.N) 67 | result = glm(@formula(yy ~ x + f), df, Binomial(), wts=df.N) 68 | ``` 69 | 70 | ```julia 71 | dfc = df[df.f .== "C", :]; 72 | scatter(dfc.x, dfc.y, label="C") 73 | xx = DataFrame(x=range(minimum(dfc.x), maximum(dfc.x), length=100), f="C") 74 | yy = predict(result, xx) * 8.0 75 | plot!(xx.x, yy, lw=2,label="", 76 | xlabel="Plant size", ylabel="Number of survival seeds") 77 | ``` 78 | 79 | ```julia 80 | dft = df[df.f .== "T", :]; 81 | scatter(dft.x, dft.y, label="T", color=:red) 82 | xx = DataFrame(x = range(minimum(dft.x), maximum(dft.x), length=100), f="T") 83 | yy = predict(result, xx) * 8.0 84 | plot!(xx.x, yy, lw=2, label="", 85 | xlabel="Plant size", ylabel="Number of survival seeds") 86 | ``` 87 | 88 | ```julia 89 | typeof(result) 90 | ``` 91 | 92 | ## 6.4.4 ロジスティック回帰のモデル選択 93 | $k, \log L^*, $deriance$ - 2\log L^*$, residual deviance, AIC 94 | 95 | ```julia 96 | function model_selection_table(result) 97 | dof(result), loglikelihood(result), -2loglikelihood(result), deviance(result), aic(result) 98 | end 99 | ``` 100 | 101 | ```julia 102 | const_model = glm(@formula(yy ~ 1), df, Binomial(), wts=df.N) 103 | model_selection_table(const_model) 104 | ``` 105 | 106 | ```julia 107 | f_model = glm(@formula(yy ~ 1 + f), df, Binomial(), wts=df.N) 108 | model_selection_table(f_model) 109 | ``` 110 | 111 | ```julia 112 | x_model = glm(@formula(yy ~ 1 + x), df, Binomial(), wts=df.N) 113 | model_selection_table(x_model) 114 | ``` 115 | 116 | ```julia 117 | xf_model = glm(@formula(yy ~ 1 + x + f), df, Binomial(), wts=df.N) 118 | model_selection_table(xf_model) 119 | ``` 120 | 121 | ## 6.5 交互作用項の入った線形予測子 122 | 123 | ```julia 124 | interaction_model = glm(@formula(yy ~ x + f + x * f), df, Binomial(), wts=df.N) 125 | ``` 126 | 127 | ```julia 128 | model_selection_table(interaction_model) 129 | ``` 130 | 131 | ## 6.6 割算値の統計モデリングはやめよう 132 | ### 6.6.1 割算値いらずのオフセット項わざ 133 | 134 | ```julia 135 | df_population = CSV.read(joinpath("..", "data/section6b.csv")) 136 | ``` 137 | 138 | ```julia 139 | scatter(df_population.A, df_population.y, 140 | markeralpha=df_population.x, label="", 141 | xlabel="Area", ylabel="Plant population") 142 | ``` 143 | 144 | ```julia 145 | population_reseult = glm(@formula(y ~ x), df_population, GLM.Poisson(), offset=log.(df_population.A)) 146 | ``` 147 | 148 | ### 明るさごとの平均個体数の予測 149 | 150 | ```julia 151 | plt = scatter(df_population.A, df_population.y, 152 | markeralpha=df_population.x, label="", 153 | title="Prediction", 154 | xlabel="Area", ylabel="Plant population", 155 | legendtitle="Brightness", legend=:topleft) 156 | 157 | for j = 0.1:0.2:0.9 158 | xx = DataFrame(A=range(minimum(df_population.A), maximum(df_population.A), length=100), x=j) 159 | yy = predict(population_reseult, xx, offset=log.(xx.A)) 160 | plot!(xx.A, yy, lw=2, color=:red, linealpha=j, label=j) 161 | end 162 | 163 | display(plt) 164 | ``` 165 | 166 | ## 6.7 正規分布とその尤度¶ 167 | https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Normal 168 | ### 確率密度関数のプロット 169 | オレンジの領域の面積は$1.2 \le y \le 1.8$となる確率を表す 170 | 171 | ```julia 172 | y = -5:0.1:5 173 | fill_y = 1.2:0.1:1.8 174 | 175 | plot(y, pdf.(Normal(), y), lw=2, label="", ylims=(0, 0.4), 176 | title=L"\mu=0, \sigma=1", 177 | ylabel="Probability density") 178 | 179 | plot!(fill_y, pdf.(Normal(), fill_y), 180 | label="", fillrange=0, fillalpha=0.5, 181 | linecolor=:transparent, fillcolor=:orange) 182 | ``` 183 | 184 | ```julia 185 | plot(y, pdf.(Normal(0, 3), y), lw=2, label="", ylims=(0, 0.4), 186 | title=L"\mu=0, \sigma=3", 187 | ylabel="Probability density") 188 | 189 | plot!(fill_y, pdf.(Normal(0, 3), fill_y), label="", fillrange=0, fillalpha=0.5, 190 | linecolor=:transparent, fillcolor=:orange) 191 | ``` 192 | 193 | ```julia 194 | plot(y, pdf.(Normal(2, 1), y), lw=2, label="", ylims = (0, 0.4), 195 | title = L"\mu=2, \sigma=1", 196 | ylabel = "Probability density") 197 | 198 | plot!(fill_y, pdf.(Normal(2, 1), fill_y), label="", fillrange=0, fillalpha=0.5, 199 | linecolor=:transparent, fillcolor=:orange) 200 | ``` 201 | 202 | $p(1.2 \le y \le 1.8 | \mu, \sigma)$を評価する 203 | 204 | ```julia 205 | cdf(Normal(), 1.8) - cdf(Normal(), 1.2) 206 | ``` 207 | 208 | 近似 209 | 210 | ```julia 211 | pdf.(Normal(), 1.5) * 0.6 212 | ``` 213 | 214 | ## 6.8 ガンマ分布のGLM 215 | https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Gamma 216 | 217 | Distribution.jlのパラメトライズ $$ f(x; \alpha, \theta) = \frac{x^{\alpha-1} e^{-x/\theta}}{\Gamma(\alpha) \theta^\alpha}, \quad x > 0 $$ 218 | 219 | ```julia 220 | d = CSV.read(joinpath("..", "data/section6c.csv")) 221 | ``` 222 | 223 | ```julia 224 | d.logx = log.(d.x) 225 | d 226 | ``` 227 | 228 | ```julia 229 | scatter(d.x, d.y, label="", 230 | xlabel="Weight of leaf", ylabel="Weight of flower") 231 | ``` 232 | 233 | ## 確率密度関数のプロット 234 | オレンジの領域の面積は$1.2 \le y \le 1.8$となる確率を表す 235 | 236 | ```julia 237 | y = 0:0.01:5 238 | fill_y = 1.2:0.05:1.8 239 | 240 | plot(y, pdf.(Gamma(1, 1), y), lw=2, label="", ylims=(0, 1.0), 241 | title=L"r=s=1", 242 | ylabel="Probability density") 243 | 244 | plot!(fill_y, pdf.(Gamma(1, 1), fill_y), 245 | label="", fillrange=0, fillalpha=0.5, 246 | linecolor=:transparent, fillcolor=:orange) 247 | ``` 248 | 249 | ```julia 250 | plot(y, pdf.(Gamma(5, 1 / 5), y), lw=2, label="", ylims=(0, 1.0), 251 | title=L"r=s=5", 252 | ylabel="Probability density") 253 | 254 | plot!(fill_y, pdf.(Gamma(5, 1 / 5), fill_y), 255 | label="", fillrange=0, fillalpha=0.5, 256 | linecolor=:transparent, fillcolor=:orange) 257 | ``` 258 | 259 | ```julia 260 | plot(y, pdf.(Gamma(0.1, 1 / 0.1), y), lw=2, label="", ylims=(0, 1.0), 261 | title=L"r=s=0.1", 262 | ylabel="Probability density") 263 | 264 | plot!(fill_y, pdf.(Gamma(0.1, 1 / 0.1), fill_y), 265 | label="", fillrange=0, fillalpha=0.5, 266 | linecolor=:transparent, fillcolor=:orange) 267 | ``` 268 | 269 | ### GLM 270 | 271 | ```julia 272 | gamma_result = glm(@formula(y ~ logx), d, Gamma(), LogLink()) 273 | ``` 274 | 275 | ```julia 276 | mm = gamma_result.model 277 | ``` 278 | 279 | 推定された結果、ガンマ分布を使って評価された50%と90%区間の予測を示す 280 | 281 | ```julia 282 | xx = DataFrame(x=0.01:0.01:0.8) 283 | xx.logx = log.(xx.x) 284 | mm_mean = predict(gamma_result, xx) 285 | ``` 286 | 287 | Dispersion parameter 288 | https://juliastats.github.io/GLM.jl/stable/api/#GLM.dispersion 289 | 290 | ```julia 291 | mm_phi = GLM.dispersion(mm, true) 292 | ``` 293 | 294 | ```julia 295 | mm_alpha = 1 / mm_phi 296 | mm_theta = mm_mean .* mm_phi 297 | ``` 298 | 299 | ```julia 300 | xs_gamma = Gamma.(mm_alpha, mm_theta) 301 | ``` 302 | 303 | ```julia 304 | scatter(d.x, d.y, label="", legend=:topleft, 305 | xlabel="Weight of leaf", ylabel="Weight of flower") 306 | 307 | g_quantile(r) = quantile.(xs_gamma, r) 308 | 309 | plot!(xx.x, g_quantile(0.95), lw=0, 310 | fillrange=g_quantile(0.05), fillalpha=0.3, fillcolor=:orange, 311 | label="90% Confidence interval") 312 | plot!(xx.x, g_quantile(0.75), lw=0, fillcolor=:red, 313 | fillrange=g_quantile(0.25), fillalpha=0.3, 314 | label="50% Confidence interval") 315 | plot!(xx.x, mm_mean, lw=2, label="Prediction", linecolor=:red) 316 | plot!(xx.x, mean.(Gamma.(1 / 0.3, exp.([ones(80) xx.logx] * [-1, 0.7]) .* 0.3)), 317 | lw=2, label="True mean", linestyle=:dash, linecolor=:blue) 318 | plot!(xx.x, g_quantile(0.5), lw=2, label="50% Percentile", linecolor=:green) 319 | ``` 320 | 321 | --- 322 | 323 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 324 | 325 | -------------------------------------------------------------------------------- /markdown/section7.md: -------------------------------------------------------------------------------- 1 | # 7 一般化線形混合モデル (GLMM) -個体差のモデリング- 2 | 3 | ```julia 4 | using CSV 5 | using DataFrames 6 | using DataStructures 7 | using Distributions 8 | using GLM 9 | using LaTeXStrings 10 | using LinearAlgebra 11 | using Plots 12 | using QuadGK 13 | using StatsBase 14 | using Statistics 15 | using MixedModels 16 | ``` 17 | 18 | ## 7.1 例題 : GLMでは説明できないカウントデータ 19 | 20 | ```julia 21 | df = CSV.read(joinpath("..", "data/section7.csv")) 22 | ``` 23 | 24 | ```julia 25 | df.N = convert(Array{Float64}, df.N) 26 | df.yy = df.y ./ df.N 27 | disallowmissing!(df) 28 | categorical!(df, :id) 29 | ``` 30 | 31 | ### データの図示 32 | 個体数をマーカーの大きさに反映させている 33 | 34 | 破線は「真の」生存確率の一例 35 | 36 | ```julia 37 | logistic(z) = 1 / (1 + exp(-z)) 38 | 39 | xs = 2:0.1:6 40 | cols = [:x, :y] 41 | df_plot = combine(groupby(df, cols), names(df, Not(cols)) .=> length) 42 | 43 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="") 44 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), label="", 45 | xlabel=L"x_i", ylabel=L"y_i", 46 | linestyle=:dash, linewidth=2, linecolor=:black) 47 | ``` 48 | 49 | ### GLMを使ってデータから種子の生存確率を推定 50 | 51 | ```julia 52 | glm_model = glm(@formula(yy ~ x), df, Binomial(), wts=df.N) 53 | ``` 54 | 55 | ```julia 56 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="", 57 | xlabel=L"x_i", ylabel=L"y_i") 58 | 59 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), label="", 60 | linestyle=:dash, linewidth=2, linecolor=:red) 61 | 62 | xx = DataFrame(x = xs) 63 | 64 | plot!(xs, predict(glm_model, xx) .* 8, 65 | label="Prediction", linewidth=2, linecolor=:black) 66 | ``` 67 | 68 | ### 葉数が4となるデータのサブセットを作る 69 | 70 | ```julia 71 | d4 = df[df.x .== 4, :] 72 | ``` 73 | 74 | ```julia 75 | cols = [:x, :y] 76 | d4_plot = combine(groupby(d4, cols), names(d4, Not(cols)) .=> length) 77 | ``` 78 | 79 | ```julia 80 | xs4 = 0:8 81 | ys4 = pdf.(Binomial(8, 0.47), xs4) * 20 82 | scatter(d4_plot.y, d4_plot.id_length, label="", 83 | xlabel=L"y_i", ylabel="count") 84 | plot!(xs4, ys4, linewidth=2, label="", marker=4) 85 | ``` 86 | 87 | ## 7.2 過分散と個体差¶ 88 | ### 7.2.1 過分散 : ばらつきが大きすぎる 89 | 生存数ごとにカウントする 90 | 91 | ```julia 92 | SortedDict(countmap(d4.y)) 93 | ``` 94 | 95 | データの平均と分散を調べる 96 | 97 | ```julia 98 | mean(d4.y), var(d4.y) 99 | ``` 100 | 101 | ### 7.4.1 Juliaを使ってGLMMのパラメーターを推定 102 | MixedModels.jlを使う 103 | https://juliastats.org/MixedModels.jl/latest/index.html 104 | 105 | フィッティング結果は本文のものとは少し異なる。 106 | 107 | $\hat{\beta}_1 = -4.19, \hat{\beta}_2 = 1.00, \hat{s}=2.41,$ residual deviance 108 | 109 | ```julia 110 | glmm_model = fit(MixedModel, @formula(yy ~ x + (1 | id)), df, Binomial(); wts=df.N) 111 | ``` 112 | 113 | ```julia 114 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="", 115 | xlabel=L"x_i", ylabel=L"y_i", legend=:topleft) 116 | 117 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), 118 | label="Actual", 119 | linestyle=:dash, linewidth=2, linecolor=:red) 120 | 121 | plot!(xs, mean.(Binomial.(8, logistic.([fill(1, length(xs)) xs] * coef(glmm_model)))), 122 | label="Prediction", linewidth=2, linecolor=:blue) 123 | ``` 124 | 125 | ```julia 126 | Binomial(8, logistic(dot([1 4], coef(glmm_model)))) 127 | ``` 128 | 129 | ### 分布を混ぜる 130 | 131 | ```julia 132 | function f_gaussian_binorm(alpha, x, size, fixed, sd) 133 | pdf(Binomial(size, logistic(fixed + alpha)), x) * pdf(Normal(0, sd), alpha) 134 | end 135 | 136 | function d_gaussian_binorm(x, fixed, sd) 137 | quadgk(y -> f_gaussian_binorm(y, x, 8, fixed, sd), -sd * 10, sd * 10)[1] 138 | end 139 | ``` 140 | 141 | ### GLMMから予測された混合二項分布をプロットする 142 | 143 | ```julia 144 | coef(glmm_model) 145 | ``` 146 | 147 | ```julia 148 | glmm_model.σs 149 | ``` 150 | 151 | ```julia 152 | pdf_gaussian_binorm = d_gaussian_binorm.(0:8, dot([1 4], coef(glmm_model)), glmm_model.σs[1][1]) 153 | scatter(d4_plot.y, d4_plot.id_length, label="", 154 | xlabel=L"y_i", ylabel="count") 155 | plot!(0:8, pdf_gaussian_binorm * 20, linewidth=2, marker=4, label="") 156 | ``` 157 | 158 | --- 159 | 160 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 161 | 162 | -------------------------------------------------------------------------------- /markdown/section9.md: -------------------------------------------------------------------------------- 1 | ## 9 GLMのベイズモデル化と事後分布の推定 2 | GraphViz はJulia 1.0をサポートしていないため、ForneyLabを使う 3 | 4 | ```julia 5 | using CSV 6 | using DataFrames 7 | using ForneyLab 8 | using GLM 9 | using LaTeXStrings 10 | using LinearAlgebra 11 | using Mamba 12 | using Plots 13 | using Random 14 | Random.seed!(0) 15 | ``` 16 | 17 | ```julia 18 | df = CSV.read(joinpath("..", "data/section9.csv")) 19 | disallowmissing!(df) 20 | ``` 21 | 22 | ## 9.1 例題 : 種子数のポアソン回帰 (個体差なし) 23 | 24 | ```julia 25 | glm_model = glm(@formula(y ~ x), df, GLM.Poisson()) 26 | ``` 27 | 28 | ```julia 29 | scatter(df.x, df.y, label="", xlabel="Size", ylabel="Number of seeds") 30 | xs = 3:0.1:7 31 | xx = DataFrame(x=xs) 32 | plot!(xs, exp.(1.5 .+ 0.1 .* xs), label="Actual", linewidth=2, 33 | linestyle=:dash, linecolor=:red) 34 | plot!(xs, predict(glm_model, xx), label="Prediction", linewidth=2, 35 | linecolor=:black) 36 | ``` 37 | 38 | ## 9.4 ベイズ統計モデルの事後分布の推定 39 | ### 9.4.1 ベイズ統計モデルのコーディング 40 | $$\begin{align} y_i \sim \text{Poisson}(\lambda_i)\\ 41 | \log(\lambda_i) = \beta_1 + \beta_2 \cdot x_i\\ 42 | \beta_1 \sim \text{Normal}(0, 100^2)\\ 43 | \beta_2 \sim \text{Normal}(0, 100^2) \end{align}$$ 44 | 45 | Mamba.jl ( https://mambajl.readthedocs.io/ )を使う 46 | ### モデルの作成 47 | 48 | ```julia 49 | model = Model( 50 | y = Stochastic(1, 51 | (N, lambda) -> 52 | (UnivariateDistribution[Mamba.Poisson(lambda[i]) for i in 1:N]), 53 | false 54 | ), 55 | 56 | lambda = Logical(1, 57 | (x, beta) -> exp.(x * beta) 58 | ), 59 | 60 | beta = Stochastic(1, 61 | () -> MvNormal(2, 100) 62 | ), 63 | ) 64 | ``` 65 | 66 | ### モデルをプロットする 67 | 68 | ```julia 69 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model))) 70 | ``` 71 | 72 | ### データの設定 73 | 74 | ```julia 75 | data = Dict{Symbol, Any}( 76 | :x => [ones(length(df.x)) df.x], 77 | :y => df.y[:], 78 | :N => length(df.x) 79 | ) 80 | ``` 81 | 82 | ### 初期値の設定 83 | 84 | ```julia 85 | inits = [ 86 | Dict{Symbol, Any}( 87 | :y => df.y[:], 88 | :beta => zeros(2), 89 | ) for _ in 1:3 90 | ] 91 | ``` 92 | 93 | ### サンプラーの設定 94 | 95 | ```julia 96 | scheme = [NUTS([:beta])] 97 | ``` 98 | 99 | ### MCMCシミュレーション 100 | 101 | ```julia 102 | setsamplers!(model, scheme) 103 | sim = mcmc(model, data, inits, 1600, burnin=100, thin=3, chains=3) 104 | ``` 105 | 106 | ### 9.4.3 どれだけ長くMCMCサンプリングすればいいのか? 107 | 108 | ```julia 109 | p = Mamba.plot(sim[:, :beta, :], [:autocor, :mean], legend=true) 110 | Mamba.draw(p, nrow=2, ncol=2) 111 | ``` 112 | 113 | ### Gelman-Rubin diagnostic ($\hat{R}$)の推定値 114 | 115 | ```julia 116 | gelmandiag(sim[:, :beta, :], mpsrf=true, transform=true) 117 | ``` 118 | 119 | ## 9.5 MCMCサンプルから事後分布を推定¶ 120 | ### シミュレーション結果の表示と図示 121 | 122 | ```julia 123 | p = Mamba.plot(sim[:, :beta, :], legend=true) 124 | Mamba.draw(p, nrow=2, ncol=2) 125 | ``` 126 | 127 | ### 9.5.1 事後分布の統計量 128 | 129 | ```julia 130 | describe(sim[:, :beta, :]) 131 | ``` 132 | 133 | ```julia 134 | xs = collect(3:0.1:7) 135 | xs_mat = [ones(length(xs)) xs] 136 | 137 | sim_beta = sim[:, [:beta], :].value 138 | sim_beta = reshape(permutedims(sim_beta, (2, 1, 3)), size(sim_beta, 2), :) 139 | ``` 140 | 141 | ```julia 142 | beta_median = vec(mapslices(median, sim[:, [:beta], :].value, dims=(1,3))) 143 | ``` 144 | 145 | ```julia 146 | Plots.plot(xs, exp.(xs_mat * sim_beta), label="", linecolor=:red, linealpha=0.1) 147 | Plots.plot!(xs, exp.(xs_mat * beta_median), label="", 148 | linewidth=2, linecolor=:black) 149 | scatter!(df.x, df.y, 150 | label="", 151 | markercolor=:orange, 152 | xlabel="Size", ylabel="Number of seeds", 153 | title="Estimation of lambda") 154 | ``` 155 | 156 | ```julia 157 | p = Mamba.plot(sim[:, :beta, :], :contour) 158 | Mamba.draw(p, nrow=1, ncol=1) 159 | ``` 160 | 161 | --- 162 | 163 | *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 164 | 165 | -------------------------------------------------------------------------------- /notebook/Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AbstractFFTs]] 4 | deps = ["LinearAlgebra"] 5 | git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" 6 | uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" 7 | version = "0.5.0" 8 | 9 | [[ArnoldiMethod]] 10 | deps = ["DelimitedFiles", "LinearAlgebra", "Random", "SparseArrays", "StaticArrays", "Test"] 11 | git-tree-sha1 = "2b6845cea546604fb4dca4e31414a6a59d39ddcd" 12 | uuid = "ec485272-7323-5ecc-a04f-4719b315124d" 13 | version = "0.0.4" 14 | 15 | [[Arpack]] 16 | deps = ["Arpack_jll", "Libdl", "LinearAlgebra"] 17 | git-tree-sha1 = "2ff92b71ba1747c5fdd541f8fc87736d82f40ec9" 18 | uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" 19 | version = "0.4.0" 20 | 21 | [[Arpack_jll]] 22 | deps = ["Libdl", "OpenBLAS_jll", "Pkg"] 23 | git-tree-sha1 = "e214a9b9bd1b4e1b4f15b22c0994862b66af7ff7" 24 | uuid = "68821587-b530-5797-8361-c406ea357684" 25 | version = "3.5.0+3" 26 | 27 | [[ArrayInterface]] 28 | deps = ["LinearAlgebra", "Requires", "SparseArrays"] 29 | git-tree-sha1 = "649c08a5a3a513f4662673d3777fe6ccb4df9f5d" 30 | uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" 31 | version = "2.8.7" 32 | 33 | [[AxisAlgorithms]] 34 | deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] 35 | git-tree-sha1 = "a4d07a1c313392a77042855df46c5f534076fab9" 36 | uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" 37 | version = "1.0.0" 38 | 39 | [[Base64]] 40 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 41 | 42 | [[BinDeps]] 43 | deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] 44 | git-tree-sha1 = "46cf2c1668ad07aba5a9d331bdeea994a1f13856" 45 | uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" 46 | version = "1.0.1" 47 | 48 | [[BinaryProvider]] 49 | deps = ["Libdl", "Logging", "SHA"] 50 | git-tree-sha1 = "428e9106b1ff27593cbd979afac9b45b82372b8c" 51 | uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232" 52 | version = "0.5.9" 53 | 54 | [[BlockArrays]] 55 | deps = ["LinearAlgebra"] 56 | git-tree-sha1 = "b9e7e450038d9f1277723ff34a6731d559972576" 57 | uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" 58 | version = "0.11.2" 59 | 60 | [[BlockDiagonals]] 61 | deps = ["FillArrays", "LinearAlgebra"] 62 | git-tree-sha1 = "014018143ebbec43ac12d26f164eb3f049aa822f" 63 | uuid = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" 64 | version = "0.1.6" 65 | 66 | [[Bzip2_jll]] 67 | deps = ["Libdl", "Pkg"] 68 | git-tree-sha1 = "3663bfffede2ef41358b6fc2e1d8a6d50b3c3904" 69 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" 70 | version = "1.0.6+2" 71 | 72 | [[CMake]] 73 | deps = ["BinDeps"] 74 | git-tree-sha1 = "50a8b41d2c562fccd9ab841085fc7d1e2706da82" 75 | uuid = "631607c0-34d2-5d66-819e-eb0f9aa2061a" 76 | version = "1.2.0" 77 | 78 | [[CMakeWrapper]] 79 | deps = ["BinDeps", "CMake", "Libdl", "Parameters", "Test"] 80 | git-tree-sha1 = "16d4acb3d37dc05b714977ffefa8890843dc8985" 81 | uuid = "d5fb7624-851a-54ee-a528-d3f3bac0b4a0" 82 | version = "0.2.3" 83 | 84 | [[CSV]] 85 | deps = ["CategoricalArrays", "DataFrames", "Dates", "FilePathsBase", "Mmap", "Parsers", "PooledArrays", "Tables", "Unicode", "WeakRefStrings"] 86 | git-tree-sha1 = "52a8e60c7822f53d57e4403b7f2811e7e1bdd32b" 87 | uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" 88 | version = "0.6.2" 89 | 90 | [[Cairo]] 91 | deps = ["Cairo_jll", "Colors", "Fontconfig_jll", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] 92 | git-tree-sha1 = "f9db9e9814f71799e1b9c849055f0adae8bdc158" 93 | uuid = "159f3aea-2a34-519c-b102-8c37f9878175" 94 | version = "1.0.3" 95 | 96 | [[Cairo_jll]] 97 | deps = ["Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] 98 | git-tree-sha1 = "d296f5e975306844de3e57118c3cf4a7cf2a8762" 99 | uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" 100 | version = "1.16.0+4" 101 | 102 | [[Calculus]] 103 | deps = ["LinearAlgebra"] 104 | git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" 105 | uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" 106 | version = "0.5.1" 107 | 108 | [[CategoricalArrays]] 109 | deps = ["DataAPI", "Future", "JSON", "Missings", "Printf", "Statistics", "Unicode"] 110 | git-tree-sha1 = "df774d7e905ca391178f0abc67f4fa5d3ff4ef12" 111 | uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" 112 | version = "0.8.0" 113 | 114 | [[Clustering]] 115 | deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "SparseArrays", "Statistics", "StatsBase"] 116 | git-tree-sha1 = "7846d785d9e4bcc904b70689bde8413f85b0ca20" 117 | uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" 118 | version = "0.14.0" 119 | 120 | [[ColorSchemes]] 121 | deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] 122 | git-tree-sha1 = "7a15e3690529fd1042f0ab954dff7445b1efc8a5" 123 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" 124 | version = "3.9.0" 125 | 126 | [[ColorTypes]] 127 | deps = ["FixedPointNumbers", "Random"] 128 | git-tree-sha1 = "c73d9cfc2a9d8433dc77f5bff4bddf46b1d78c20" 129 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 130 | version = "0.10.3" 131 | 132 | [[Colors]] 133 | deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] 134 | git-tree-sha1 = "2fdeb981ebcf52cd800ddb6a0aa5eac34153552d" 135 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 136 | version = "0.12.0" 137 | 138 | [[Combinatorics]] 139 | deps = ["Polynomials"] 140 | git-tree-sha1 = "8153f2c7cc4446958920242c4caa3dc0e061918f" 141 | uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" 142 | version = "1.0.1" 143 | 144 | [[CommonSubexpressions]] 145 | deps = ["Test"] 146 | git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0" 147 | uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" 148 | version = "0.2.0" 149 | 150 | [[Compat]] 151 | deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] 152 | git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" 153 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 154 | version = "2.2.0" 155 | 156 | [[CompilerSupportLibraries_jll]] 157 | deps = ["Libdl", "Pkg"] 158 | git-tree-sha1 = "7c4f882c41faa72118841185afc58a2eb00ef612" 159 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 160 | version = "0.3.3+0" 161 | 162 | [[Compose]] 163 | deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "UUIDs"] 164 | git-tree-sha1 = "034174e607d254b8ca0853a1a9029b265114bf6c" 165 | uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" 166 | version = "0.8.2" 167 | 168 | [[Contour]] 169 | deps = ["StaticArrays"] 170 | git-tree-sha1 = "0b17db36e7e03f8437e0d1f55aea3e4a60c74353" 171 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" 172 | version = "0.5.3" 173 | 174 | [[CoupledFields]] 175 | deps = ["LinearAlgebra", "Statistics", "StatsBase"] 176 | git-tree-sha1 = "6c9671364c68c1158ac2524ac881536195b7e7bc" 177 | uuid = "7ad07ef1-bdf2-5661-9d2b-286fd4296dac" 178 | version = "0.2.0" 179 | 180 | [[DataAPI]] 181 | git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32" 182 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 183 | version = "1.3.0" 184 | 185 | [[DataFrames]] 186 | deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] 187 | git-tree-sha1 = "1b4d832288e2d919eeaccdf1d9af7a8a57d773d6" 188 | uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" 189 | version = "0.21.0" 190 | 191 | [[DataFramesMeta]] 192 | deps = ["DataFrames", "Tables"] 193 | git-tree-sha1 = "4e2ba678c7a624c963ac09f68f9b6086607377a4" 194 | uuid = "1313f7d8-7da2-5740-9ea0-a2ca25f37964" 195 | version = "0.5.1" 196 | 197 | [[DataStructures]] 198 | deps = ["InteractiveUtils", "OrderedCollections"] 199 | git-tree-sha1 = "6166ecfaf2b8bbf2b68d791bc1d54501f345d314" 200 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 201 | version = "0.17.15" 202 | 203 | [[DataValueInterfaces]] 204 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 205 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 206 | version = "1.0.0" 207 | 208 | [[DataValues]] 209 | deps = ["DataValueInterfaces", "Dates"] 210 | git-tree-sha1 = "d88a19299eba280a6d062e135a43f00323ae70bf" 211 | uuid = "e7dc6d0d-1eca-5fa6-8ad6-5aecde8b7ea5" 212 | version = "0.4.13" 213 | 214 | [[Dates]] 215 | deps = ["Printf"] 216 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 217 | 218 | [[DelimitedFiles]] 219 | deps = ["Mmap"] 220 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 221 | 222 | [[Dictionaries]] 223 | deps = ["Indexing", "Random"] 224 | git-tree-sha1 = "a09aff60a525650db2575907411734c4cceabd93" 225 | uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" 226 | version = "0.2.1" 227 | 228 | [[DiffResults]] 229 | deps = ["StaticArrays"] 230 | git-tree-sha1 = "da24935df8e0c6cf28de340b958f6aac88eaa0cc" 231 | uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" 232 | version = "1.0.2" 233 | 234 | [[DiffRules]] 235 | deps = ["NaNMath", "Random", "SpecialFunctions"] 236 | git-tree-sha1 = "eb0c34204c8410888844ada5359ac8b96292cfd1" 237 | uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" 238 | version = "1.0.1" 239 | 240 | [[Distances]] 241 | deps = ["LinearAlgebra", "Statistics"] 242 | git-tree-sha1 = "23717536c81b63e250f682b0e0933769eecd1411" 243 | uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" 244 | version = "0.8.2" 245 | 246 | [[Distributed]] 247 | deps = ["Random", "Serialization", "Sockets"] 248 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 249 | 250 | [[Distributions]] 251 | deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] 252 | git-tree-sha1 = "c4ed10355637fcb0725dc6a27060f74df24f13cd" 253 | uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" 254 | version = "0.23.2" 255 | 256 | [[DocStringExtensions]] 257 | deps = ["LibGit2", "Markdown", "Pkg", "Test"] 258 | git-tree-sha1 = "88bb0edb352b16608036faadcc071adda068582a" 259 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 260 | version = "0.8.1" 261 | 262 | [[Expat_jll]] 263 | deps = ["Libdl", "Pkg"] 264 | git-tree-sha1 = "9cdd4b1523086c9d93604599e3a389e8941e52b0" 265 | uuid = "2e619515-83b5-522b-bb60-26c02a35a201" 266 | version = "2.2.7+1" 267 | 268 | [[ExprTools]] 269 | git-tree-sha1 = "6f0517056812fd6aa3af23d4b70d5325a2ae4e95" 270 | uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" 271 | version = "0.1.1" 272 | 273 | [[EzXML]] 274 | deps = ["Printf", "XML2_jll"] 275 | git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268" 276 | uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615" 277 | version = "1.1.0" 278 | 279 | [[FFMPEG]] 280 | deps = ["FFMPEG_jll"] 281 | git-tree-sha1 = "c82bef6fc01e30d500f588cd01d29bdd44f1924e" 282 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" 283 | version = "0.3.0" 284 | 285 | [[FFMPEG_jll]] 286 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] 287 | git-tree-sha1 = "0fa07f43e5609ea54848b82b4bb330b250e9645b" 288 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" 289 | version = "4.1.0+3" 290 | 291 | [[FFTW]] 292 | deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] 293 | git-tree-sha1 = "b6a74f6dfd9e9d16b765397dc90df03e5a00532e" 294 | uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" 295 | version = "1.2.1" 296 | 297 | [[FFTW_jll]] 298 | deps = ["Libdl", "Pkg"] 299 | git-tree-sha1 = "6c975cd606128d45d1df432fb812d6eb10fee00b" 300 | uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" 301 | version = "3.3.9+5" 302 | 303 | [[FilePathsBase]] 304 | deps = ["Dates", "LinearAlgebra", "Printf", "Test", "UUIDs"] 305 | git-tree-sha1 = "923fd3b942a11712435682eaa95cc8518c428b2c" 306 | uuid = "48062228-2e41-5def-b9a4-89aafe57970f" 307 | version = "0.8.0" 308 | 309 | [[FillArrays]] 310 | deps = ["LinearAlgebra", "Random", "SparseArrays"] 311 | git-tree-sha1 = "5322d34d7600d3429665b37bcf7628dc602a28cc" 312 | uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" 313 | version = "0.8.8" 314 | 315 | [[FiniteDiff]] 316 | deps = ["ArrayInterface", "LinearAlgebra", "Requires", "SparseArrays", "StaticArrays"] 317 | git-tree-sha1 = "e65805de69d457029940acff64dd92e57b93c8a5" 318 | uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" 319 | version = "2.3.1" 320 | 321 | [[FixedPointNumbers]] 322 | git-tree-sha1 = "3ba9ea634d4c8b289d590403b4a06f8e227a6238" 323 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 324 | version = "0.8.0" 325 | 326 | [[Fontconfig_jll]] 327 | deps = ["Bzip2_jll", "Expat_jll", "FreeType2_jll", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] 328 | git-tree-sha1 = "141fe5f6d4013304d2ca5af0ac20ef4855bcc4e5" 329 | uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" 330 | version = "2.13.1+11" 331 | 332 | [[ForneyLab]] 333 | deps = ["Base64", "InteractiveUtils", "LinearAlgebra", "Printf", "SparseArrays", "SpecialFunctions", "Statistics", "Test"] 334 | git-tree-sha1 = "d5217b068f72fdc943243636acbacb2e05b464b3" 335 | uuid = "9fc3f58a-c2cc-5bff-9419-6a294fefdca9" 336 | version = "0.10.0" 337 | 338 | [[ForwardDiff]] 339 | deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] 340 | git-tree-sha1 = "869540e4367122fbffaace383a5bdc34d6e5e5ac" 341 | uuid = "f6369f11-7733-5829-9624-2563aa707210" 342 | version = "0.10.10" 343 | 344 | [[FreeType2_jll]] 345 | deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"] 346 | git-tree-sha1 = "7d900f32a3788d4eacac2bfa3bf5c770179c8afd" 347 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" 348 | version = "2.10.1+2" 349 | 350 | [[FriBidi_jll]] 351 | deps = ["Libdl", "Pkg"] 352 | git-tree-sha1 = "2f56bee16bd0151de7b6a1eeea2ced190a2ad8d4" 353 | uuid = "559328eb-81f9-559d-9380-de523a88c83c" 354 | version = "1.0.5+3" 355 | 356 | [[Future]] 357 | deps = ["Random"] 358 | uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" 359 | 360 | [[GLM]] 361 | deps = ["Distributions", "LinearAlgebra", "Printf", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "StatsModels"] 362 | git-tree-sha1 = "db0ace36f9dbe7b6a7a08434c5921377e9df2c72" 363 | uuid = "38e38edf-8417-5370-95a0-9cbb8c7f171a" 364 | version = "1.3.9" 365 | 366 | [[GR]] 367 | deps = ["Base64", "DelimitedFiles", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] 368 | git-tree-sha1 = "1185d50c5c90ec7c0784af7f8d0d1a600750dc4d" 369 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" 370 | version = "0.49.1" 371 | 372 | [[Gadfly]] 373 | deps = ["Base64", "CategoricalArrays", "Colors", "Compat", "Compose", "Contour", "CoupledFields", "DataStructures", "Dates", "Distributions", "DocStringExtensions", "Hexagons", "IndirectArrays", "IterTools", "JSON", "Juno", "KernelDensity", "LibGit2", "LinearAlgebra", "Loess", "Measures", "Printf", "Random", "Requires", "Showoff", "Statistics", "StatsBase", "Test"] 374 | git-tree-sha1 = "ee709588c71eb62ce53cecf5a594bdefd6f2a9be" 375 | uuid = "c91e804a-d5a3-530f-b6f0-dfbca275c004" 376 | version = "1.0.1" 377 | 378 | [[GeometryTypes]] 379 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] 380 | git-tree-sha1 = "34bfa994967e893ab2f17b864eec221b3521ba4d" 381 | uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" 382 | version = "0.8.3" 383 | 384 | [[Gettext_jll]] 385 | deps = ["Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] 386 | git-tree-sha1 = "e43d686df1f45cab7a2570ff63642a3ea618ca5f" 387 | uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" 388 | version = "0.20.1+2" 389 | 390 | [[Glib_jll]] 391 | deps = ["Gettext_jll", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] 392 | git-tree-sha1 = "09ea3797c586eedbb383eb8f1c950a12923f1541" 393 | uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" 394 | version = "2.59.0+2" 395 | 396 | [[Graphics]] 397 | deps = ["Colors", "LinearAlgebra", "NaNMath"] 398 | git-tree-sha1 = "45d684ead5b65c043ad46bd5be750d61c39d7ef8" 399 | uuid = "a2bd30eb-e257-5431-a919-1863eab51364" 400 | version = "1.0.2" 401 | 402 | [[Graphite2_jll]] 403 | deps = ["Libdl", "Pkg"] 404 | git-tree-sha1 = "6fad1258f2c9eacb86e8726d38c2ad6549f9d91e" 405 | uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" 406 | version = "1.3.13+1" 407 | 408 | [[HarfBuzz_jll]] 409 | deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Gettext_jll", "Glib_jll", "Graphite2_jll", "Libdl", "Libffi_jll", "Pkg"] 410 | git-tree-sha1 = "7a206ed46082e986179586a4ed60cbc740313ea6" 411 | uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" 412 | version = "2.6.1+5" 413 | 414 | [[Hexagons]] 415 | deps = ["Test"] 416 | git-tree-sha1 = "de4a6f9e7c4710ced6838ca906f81905f7385fd6" 417 | uuid = "a1b4810d-1bce-5fbd-ac56-80944d57a21f" 418 | version = "0.2.0" 419 | 420 | [[Indexing]] 421 | deps = ["Test"] 422 | git-tree-sha1 = "0cf3ac621cd74b1d03af0cc4275f680b2070a5cc" 423 | uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" 424 | version = "1.1.0" 425 | 426 | [[IndirectArrays]] 427 | git-tree-sha1 = "c2a145a145dc03a7620af1444e0264ef907bd44f" 428 | uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" 429 | version = "0.5.1" 430 | 431 | [[Inflate]] 432 | git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" 433 | uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" 434 | version = "0.1.2" 435 | 436 | [[IntelOpenMP_jll]] 437 | deps = ["Libdl", "Pkg"] 438 | git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" 439 | uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" 440 | version = "2018.0.3+0" 441 | 442 | [[InteractiveUtils]] 443 | deps = ["Markdown"] 444 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 445 | 446 | [[Interpolations]] 447 | deps = ["AxisAlgorithms", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] 448 | git-tree-sha1 = "3af735234d9b1ff9ff1af89875735cd9549c0c5f" 449 | uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" 450 | version = "0.12.9" 451 | 452 | [[Intervals]] 453 | deps = ["Dates", "Printf", "RecipesBase", "TimeZones"] 454 | git-tree-sha1 = "5e9938f4dff72e5ed4c0f7fbe34b204cbabcf43a" 455 | uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5" 456 | version = "1.1.0" 457 | 458 | [[InvertedIndices]] 459 | deps = ["Test"] 460 | git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc" 461 | uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" 462 | version = "1.0.0" 463 | 464 | [[IterTools]] 465 | git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" 466 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 467 | version = "1.3.0" 468 | 469 | [[IteratorInterfaceExtensions]] 470 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 471 | uuid = "82899510-4779-5014-852e-03e436cf321d" 472 | version = "1.0.0" 473 | 474 | [[JSON]] 475 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 476 | git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" 477 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 478 | version = "0.21.0" 479 | 480 | [[Juno]] 481 | deps = ["Base64", "Logging", "Media", "Profile"] 482 | git-tree-sha1 = "e1ba2a612645b3e07c773c3a208f215745081fe6" 483 | uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" 484 | version = "0.8.1" 485 | 486 | [[KernelDensity]] 487 | deps = ["Distributions", "FFTW", "Interpolations", "Optim", "StatsBase", "Test"] 488 | git-tree-sha1 = "c1048817fe5711f699abc8fabd47b1ac6ba4db04" 489 | uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" 490 | version = "0.5.1" 491 | 492 | [[LAME_jll]] 493 | deps = ["Libdl", "Pkg"] 494 | git-tree-sha1 = "221cc8998b9060677448cbb6375f00032554c4fd" 495 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" 496 | version = "3.100.0+1" 497 | 498 | [[LZO_jll]] 499 | deps = ["Libdl", "Pkg"] 500 | git-tree-sha1 = "71119990371c93f027bee80547ee908ddfe7c5ca" 501 | uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" 502 | version = "2.10.0+1" 503 | 504 | [[LaTeXStrings]] 505 | git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8" 506 | uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 507 | version = "1.1.0" 508 | 509 | [[LibGit2]] 510 | deps = ["Printf"] 511 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 512 | 513 | [[LibVPX_jll]] 514 | deps = ["Libdl", "Pkg"] 515 | git-tree-sha1 = "e3549ca9bf35feb9d9d954f4c6a9032e92f46e7c" 516 | uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" 517 | version = "1.8.1+1" 518 | 519 | [[Libdl]] 520 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 521 | 522 | [[Libffi_jll]] 523 | deps = ["Libdl", "Pkg"] 524 | git-tree-sha1 = "68b165c609961207baa3174e03d6d56e7a37124c" 525 | uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" 526 | version = "3.2.1+1" 527 | 528 | [[Libgcrypt_jll]] 529 | deps = ["Libdl", "Libgpg_error_jll", "Pkg"] 530 | git-tree-sha1 = "7efb7f5e75a0f7323cce366d3e44a2d225c5617a" 531 | uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" 532 | version = "1.8.5+1" 533 | 534 | [[Libgpg_error_jll]] 535 | deps = ["Libdl", "Pkg"] 536 | git-tree-sha1 = "334284a62d6b8592099d28b78c76aefc266c03a2" 537 | uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" 538 | version = "1.36.0+1" 539 | 540 | [[Libiconv_jll]] 541 | deps = ["Libdl", "Pkg"] 542 | git-tree-sha1 = "e5256a3b0ebc710dbd6da0c0b212164a3681037f" 543 | uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" 544 | version = "1.16.0+2" 545 | 546 | [[Libmount_jll]] 547 | deps = ["Libdl", "Pkg"] 548 | git-tree-sha1 = "621a6d7d527fd8e4812ca1154567bfdb81a3c517" 549 | uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" 550 | version = "2.34.0+1" 551 | 552 | [[Libuuid_jll]] 553 | deps = ["Libdl", "Pkg"] 554 | git-tree-sha1 = "7ae7eee3a9fe811b656347700c17fc9620ef4ecf" 555 | uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" 556 | version = "2.34.0+4" 557 | 558 | [[LightGraphs]] 559 | deps = ["ArnoldiMethod", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] 560 | git-tree-sha1 = "6f85a35d2377cb2db1bc448ed0d6340d2bb1ea64" 561 | uuid = "093fc24a-ae57-5d10-9952-331d41423f4d" 562 | version = "1.3.3" 563 | 564 | [[LineSearches]] 565 | deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf", "Test"] 566 | git-tree-sha1 = "54eb90e8dbe745d617c78dee1d6ae95c7f6f5779" 567 | uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" 568 | version = "7.0.1" 569 | 570 | [[LinearAlgebra]] 571 | deps = ["Libdl"] 572 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 573 | 574 | [[Literate]] 575 | deps = ["Base64", "JSON", "REPL"] 576 | git-tree-sha1 = "7345603884151a5ef894fb85949a8a4faeae8e10" 577 | uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306" 578 | version = "2.4.0" 579 | 580 | [[Loess]] 581 | deps = ["Distances", "Statistics"] 582 | git-tree-sha1 = "67b1bc5f42144fb83b065b8a8e117e56ec10e601" 583 | uuid = "4345ca2d-374a-55d4-8d30-97f9976e7612" 584 | version = "0.5.1" 585 | 586 | [[Logging]] 587 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 588 | 589 | [[MKL_jll]] 590 | deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] 591 | git-tree-sha1 = "720629cc8cbd12c146ca01b661fd1a6cf66e2ff4" 592 | uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" 593 | version = "2019.0.117+2" 594 | 595 | [[MacroTools]] 596 | deps = ["Markdown", "Random"] 597 | git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a" 598 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 599 | version = "0.5.5" 600 | 601 | [[Mamba]] 602 | deps = ["Cairo", "Calculus", "Compose", "DelimitedFiles", "Distributed", "Distributions", "Gadfly", "LightGraphs", "LinearAlgebra", "PDMats", "Printf", "Reexport", "Serialization", "Showoff", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase"] 603 | git-tree-sha1 = "830c27638d3f2dd021a57c643b034633149dfca1" 604 | uuid = "5424a776-8be3-5c5b-a13f-3551f69ba0e6" 605 | version = "0.12.4" 606 | 607 | [[Markdown]] 608 | deps = ["Base64"] 609 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 610 | 611 | [[MathProgBase]] 612 | deps = ["LinearAlgebra", "SparseArrays"] 613 | git-tree-sha1 = "9abbe463a1e9fc507f12a69e7f29346c2cdc472c" 614 | uuid = "fdba3010-5040-5b88-9595-932c9decdf73" 615 | version = "0.7.8" 616 | 617 | [[Measures]] 618 | git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" 619 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" 620 | version = "0.3.1" 621 | 622 | [[Media]] 623 | deps = ["MacroTools", "Test"] 624 | git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" 625 | uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" 626 | version = "0.5.0" 627 | 628 | [[Missings]] 629 | deps = ["DataAPI"] 630 | git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" 631 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 632 | version = "0.4.3" 633 | 634 | [[MixedModels]] 635 | deps = ["BlockArrays", "BlockDiagonals", "Distributions", "GLM", "LinearAlgebra", "NLopt", "NamedArrays", "Printf", "ProgressMeter", "Random", "Showoff", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "StatsFuns", "StatsModels", "Tables", "TypedTables"] 636 | git-tree-sha1 = "8801ce3472bc1b953350349519cd2397aee75a7d" 637 | uuid = "ff71e718-51f3-5ec2-a782-8ffcbfa3c316" 638 | version = "2.3.0" 639 | 640 | [[Mmap]] 641 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 642 | 643 | [[Mocking]] 644 | deps = ["ExprTools"] 645 | git-tree-sha1 = "916b850daad0d46b8c71f65f719c49957e9513ed" 646 | uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" 647 | version = "0.7.1" 648 | 649 | [[MultivariateStats]] 650 | deps = ["Arpack", "LinearAlgebra", "SparseArrays", "Statistics", "StatsBase"] 651 | git-tree-sha1 = "352fae519b447bf52e6de627b89f448bcd469e4e" 652 | uuid = "6f286f6a-111f-5878-ab1e-185364afe411" 653 | version = "0.7.0" 654 | 655 | [[NLSolversBase]] 656 | deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] 657 | git-tree-sha1 = "7c4e66c47848562003250f28b579c584e55becc0" 658 | uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" 659 | version = "7.6.1" 660 | 661 | [[NLopt]] 662 | deps = ["BinaryProvider", "CMakeWrapper", "Libdl", "MathProgBase", "Test"] 663 | git-tree-sha1 = "b46237debcacd4fed7bbeb31200667a75b90384f" 664 | uuid = "76087f3c-5699-56af-9a33-bf431cd00edd" 665 | version = "0.5.1" 666 | 667 | [[NaNMath]] 668 | git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" 669 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 670 | version = "0.3.3" 671 | 672 | [[NamedArrays]] 673 | deps = ["Combinatorics", "DataStructures", "DelimitedFiles", "InvertedIndices", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics"] 674 | git-tree-sha1 = "7d96d4c09526458d66ff84d7648be7eb7c38a547" 675 | uuid = "86f7a689-2022-50b4-a561-43c23ac3c673" 676 | version = "0.9.4" 677 | 678 | [[NearestNeighbors]] 679 | deps = ["Distances", "StaticArrays"] 680 | git-tree-sha1 = "8bc6180f328f3c0ea2663935db880d34c57d6eae" 681 | uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" 682 | version = "0.4.4" 683 | 684 | [[Observables]] 685 | git-tree-sha1 = "11832878355305984235a2e90d0e3737383c634c" 686 | uuid = "510215fc-4207-5dde-b226-833fc4488ee2" 687 | version = "0.3.1" 688 | 689 | [[OffsetArrays]] 690 | git-tree-sha1 = "930db8ef90483570107f2396b1ffc6680f08e8b7" 691 | uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" 692 | version = "1.0.4" 693 | 694 | [[Ogg_jll]] 695 | deps = ["Libdl", "Pkg"] 696 | git-tree-sha1 = "59cf7a95bf5ac39feac80b796e0f39f9d69dc887" 697 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" 698 | version = "1.3.4+0" 699 | 700 | [[OpenBLAS_jll]] 701 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 702 | git-tree-sha1 = "1887096f6897306a4662f7c5af936da7d5d1a062" 703 | uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" 704 | version = "0.3.9+4" 705 | 706 | [[OpenSSL_jll]] 707 | deps = ["Libdl", "Pkg"] 708 | git-tree-sha1 = "d2a6f25262d568b5a7e454cf7ff5066a79d16c7d" 709 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" 710 | version = "1.1.1+2" 711 | 712 | [[OpenSpecFun_jll]] 713 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 714 | git-tree-sha1 = "d51c416559217d974a1113522d5919235ae67a87" 715 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 716 | version = "0.5.3+3" 717 | 718 | [[Optim]] 719 | deps = ["FillArrays", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] 720 | git-tree-sha1 = "08f170ff0dcf07f4edb567020fcab47f415da207" 721 | uuid = "429524aa-4258-5aef-a3af-852621145aeb" 722 | version = "0.20.1" 723 | 724 | [[Opus_jll]] 725 | deps = ["Libdl", "Pkg"] 726 | git-tree-sha1 = "002c18f222a542907e16c83c64a1338992da7e2c" 727 | uuid = "91d4177d-7536-5919-b921-800302f37372" 728 | version = "1.3.1+1" 729 | 730 | [[OrderedCollections]] 731 | git-tree-sha1 = "12ce190210d278e12644bcadf5b21cbdcf225cd3" 732 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 733 | version = "1.2.0" 734 | 735 | [[PCRE_jll]] 736 | deps = ["Libdl", "Pkg"] 737 | git-tree-sha1 = "2c860a32ae9c421b52b654448bd31a31f437449a" 738 | uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" 739 | version = "8.42.0+2" 740 | 741 | [[PDMats]] 742 | deps = ["Arpack", "LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] 743 | git-tree-sha1 = "2fc6f50ddd959e462f0a2dbc802ddf2a539c6e35" 744 | uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" 745 | version = "0.9.12" 746 | 747 | [[Pango_jll]] 748 | deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "Libdl", "Pkg"] 749 | git-tree-sha1 = "cd19789f20bde5d45e96a7e937db9a6a024412e6" 750 | uuid = "36c8627f-9965-5494-a995-c6b170f724f3" 751 | version = "1.42.4+8" 752 | 753 | [[Parameters]] 754 | deps = ["OrderedCollections", "UnPack"] 755 | git-tree-sha1 = "38b2e970043613c187bd56a995fe2e551821eb4a" 756 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 757 | version = "0.12.1" 758 | 759 | [[Parsers]] 760 | deps = ["Dates", "Test"] 761 | git-tree-sha1 = "72c3451932513427caffbd8bab15643ad693804b" 762 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 763 | version = "1.0.3" 764 | 765 | [[Pixman_jll]] 766 | deps = ["Libdl", "Pkg"] 767 | git-tree-sha1 = "ae66367153a89ecb2a5c7acc2df4ba082b729b6a" 768 | uuid = "30392449-352a-5448-841d-b1acce4e97dc" 769 | version = "0.38.4+2" 770 | 771 | [[Pkg]] 772 | deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] 773 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 774 | 775 | [[PlotThemes]] 776 | deps = ["PlotUtils", "Requires", "Statistics"] 777 | git-tree-sha1 = "c6f5ea535551b3b16835134697f0c65d06c94b91" 778 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" 779 | version = "2.0.0" 780 | 781 | [[PlotUtils]] 782 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport"] 783 | git-tree-sha1 = "44de63b180da00d30dcfbe467dd62bd3cbc87af0" 784 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" 785 | version = "1.0.2" 786 | 787 | [[Plots]] 788 | deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] 789 | git-tree-sha1 = "0bb4adb1540f60eb163cee608680da6939506886" 790 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 791 | version = "1.2.3" 792 | 793 | [[Polynomials]] 794 | deps = ["Intervals", "LinearAlgebra", "RecipesBase"] 795 | git-tree-sha1 = "19f1b9e3f27702309880b9ccb051287729af7db4" 796 | uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" 797 | version = "0.8.0" 798 | 799 | [[PooledArrays]] 800 | deps = ["DataAPI"] 801 | git-tree-sha1 = "b1333d4eced1826e15adbdf01a4ecaccca9d353c" 802 | uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" 803 | version = "0.5.3" 804 | 805 | [[PositiveFactorizations]] 806 | deps = ["LinearAlgebra", "Test"] 807 | git-tree-sha1 = "127c47b91990c101ee3752291c4f45640eeb03d1" 808 | uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" 809 | version = "0.2.3" 810 | 811 | [[Printf]] 812 | deps = ["Unicode"] 813 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 814 | 815 | [[Profile]] 816 | deps = ["Printf"] 817 | uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" 818 | 819 | [[ProgressMeter]] 820 | deps = ["Distributed", "Printf"] 821 | git-tree-sha1 = "ea1f4fa0ff5e8b771bf130d87af5b7ef400760bd" 822 | uuid = "92933f4c-e287-5a05-a399-4b506db050ca" 823 | version = "1.2.0" 824 | 825 | [[QuadGK]] 826 | deps = ["DataStructures", "LinearAlgebra"] 827 | git-tree-sha1 = "dc84e810393cfc6294248c9032a9cdacc14a3db4" 828 | uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" 829 | version = "2.3.1" 830 | 831 | [[REPL]] 832 | deps = ["InteractiveUtils", "Markdown", "Sockets"] 833 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 834 | 835 | [[Random]] 836 | deps = ["Serialization"] 837 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 838 | 839 | [[Ratios]] 840 | git-tree-sha1 = "37d210f612d70f3f7d57d488cb3b6eff56ad4e41" 841 | uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" 842 | version = "0.4.0" 843 | 844 | [[RecipesBase]] 845 | git-tree-sha1 = "54f8ceb165a0f6d083f0d12cb4996f5367c6edbc" 846 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" 847 | version = "1.0.1" 848 | 849 | [[RecipesPipeline]] 850 | deps = ["Dates", "PlotUtils", "RecipesBase"] 851 | git-tree-sha1 = "9215637e28503ca85bef843a1fc02b2f76f1ba09" 852 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" 853 | version = "0.1.9" 854 | 855 | [[Reexport]] 856 | deps = ["Pkg"] 857 | git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" 858 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 859 | version = "0.2.0" 860 | 861 | [[Requires]] 862 | deps = ["Test"] 863 | git-tree-sha1 = "f6fbf4ba64d295e146e49e021207993b6b48c7d1" 864 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 865 | version = "0.5.2" 866 | 867 | [[Rmath]] 868 | deps = ["Random", "Rmath_jll"] 869 | git-tree-sha1 = "86c5647b565873641538d8f812c04e4c9dbeb370" 870 | uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" 871 | version = "0.6.1" 872 | 873 | [[Rmath_jll]] 874 | deps = ["Libdl", "Pkg"] 875 | git-tree-sha1 = "1660f8fefbf5ab9c67560513131d4e933012fc4b" 876 | uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" 877 | version = "0.2.2+0" 878 | 879 | [[SHA]] 880 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 881 | 882 | [[Serialization]] 883 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 884 | 885 | [[SharedArrays]] 886 | deps = ["Distributed", "Mmap", "Random", "Serialization"] 887 | uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" 888 | 889 | [[ShiftedArrays]] 890 | git-tree-sha1 = "22395afdcf37d6709a5a0766cc4a5ca52cb85ea0" 891 | uuid = "1277b4bf-5013-50f5-be3d-901d8477a67a" 892 | version = "1.0.0" 893 | 894 | [[Showoff]] 895 | deps = ["Dates"] 896 | git-tree-sha1 = "e032c9df551fb23c9f98ae1064de074111b7bc39" 897 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" 898 | version = "0.3.1" 899 | 900 | [[SimpleTraits]] 901 | deps = ["InteractiveUtils", "MacroTools"] 902 | git-tree-sha1 = "2ee666b24ab8be6a922f9d6c11a86e1a703a7dda" 903 | uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" 904 | version = "0.9.2" 905 | 906 | [[Sockets]] 907 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 908 | 909 | [[SortingAlgorithms]] 910 | deps = ["DataStructures", "Random", "Test"] 911 | git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" 912 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 913 | version = "0.3.1" 914 | 915 | [[SparseArrays]] 916 | deps = ["LinearAlgebra", "Random"] 917 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 918 | 919 | [[SpecialFunctions]] 920 | deps = ["OpenSpecFun_jll"] 921 | git-tree-sha1 = "e19b98acb182567bcb7b75bb5d9eedf3a3b5ec6c" 922 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 923 | version = "0.10.0" 924 | 925 | [[SplitApplyCombine]] 926 | deps = ["Dictionaries", "Indexing"] 927 | git-tree-sha1 = "02845fc448cf504681508057ce697b46d4385e21" 928 | uuid = "03a91e81-4c3e-53e1-a0a4-9c0c8f19dd66" 929 | version = "1.0.0" 930 | 931 | [[StaticArrays]] 932 | deps = ["LinearAlgebra", "Random", "Statistics"] 933 | git-tree-sha1 = "5c06c0aeb81bef54aed4b3f446847905eb6cbda0" 934 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 935 | version = "0.12.3" 936 | 937 | [[Statistics]] 938 | deps = ["LinearAlgebra", "SparseArrays"] 939 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 940 | 941 | [[StatsBase]] 942 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] 943 | git-tree-sha1 = "19bfcb46245f69ff4013b3df3b977a289852c3a1" 944 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 945 | version = "0.32.2" 946 | 947 | [[StatsFuns]] 948 | deps = ["Rmath", "SpecialFunctions"] 949 | git-tree-sha1 = "f290ddd5fdedeadd10e961eb3f4d3340f09d030a" 950 | uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" 951 | version = "0.9.4" 952 | 953 | [[StatsModels]] 954 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "ShiftedArrays", "SparseArrays", "StatsBase", "Tables"] 955 | git-tree-sha1 = "5a140e0bf5d92b2c5c0daa0dcefdadbb57c8a7fb" 956 | uuid = "3eaba693-59b7-5ba5-a881-562e759f1c8d" 957 | version = "0.6.11" 958 | 959 | [[StatsPlots]] 960 | deps = ["Clustering", "DataStructures", "DataValues", "Distributions", "Interpolations", "KernelDensity", "MultivariateStats", "Observables", "Plots", "RecipesBase", "RecipesPipeline", "Reexport", "StatsBase", "TableOperations", "Tables", "Widgets"] 961 | git-tree-sha1 = "b9b7fff81f573465fcac4685df1497d968537a9e" 962 | uuid = "f3b207a7-027a-5e70-b257-86293d7955fd" 963 | version = "0.14.6" 964 | 965 | [[SuiteSparse]] 966 | deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] 967 | uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" 968 | 969 | [[TableOperations]] 970 | deps = ["Tables", "Test"] 971 | git-tree-sha1 = "208630a14884abd110a8f8008b0882f0d0f5632c" 972 | uuid = "ab02a1b2-a7df-11e8-156e-fb1833f50b87" 973 | version = "0.2.1" 974 | 975 | [[TableTraits]] 976 | deps = ["IteratorInterfaceExtensions"] 977 | git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" 978 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 979 | version = "1.0.0" 980 | 981 | [[Tables]] 982 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] 983 | git-tree-sha1 = "c45dcc27331febabc20d86cb3974ef095257dcf3" 984 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 985 | version = "1.0.4" 986 | 987 | [[Test]] 988 | deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] 989 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 990 | 991 | [[TimeZones]] 992 | deps = ["Dates", "EzXML", "Mocking", "Printf", "RecipesBase", "Serialization", "Unicode"] 993 | git-tree-sha1 = "07af1bd3226d644ca1a3235c93e7d0207ce4536a" 994 | uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" 995 | version = "1.1.1" 996 | 997 | [[TypedTables]] 998 | deps = ["SplitApplyCombine", "Tables", "Unicode"] 999 | git-tree-sha1 = "519533acaccc7d84e214426f69820489e1f46617" 1000 | uuid = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" 1001 | version = "1.2.0" 1002 | 1003 | [[URIParser]] 1004 | deps = ["Unicode"] 1005 | git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" 1006 | uuid = "30578b45-9adc-5946-b283-645ec420af67" 1007 | version = "0.4.1" 1008 | 1009 | [[UUIDs]] 1010 | deps = ["Random", "SHA"] 1011 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 1012 | 1013 | [[UnPack]] 1014 | git-tree-sha1 = "bc9ef72a4a826740895bf2772b48c21f9a1c13a7" 1015 | uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" 1016 | version = "1.0.0" 1017 | 1018 | [[Unicode]] 1019 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 1020 | 1021 | [[WeakRefStrings]] 1022 | deps = ["DataAPI", "Random", "Test"] 1023 | git-tree-sha1 = "28807f85197eaad3cbd2330386fac1dcb9e7e11d" 1024 | uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" 1025 | version = "0.6.2" 1026 | 1027 | [[Widgets]] 1028 | deps = ["Colors", "Dates", "Observables", "OrderedCollections"] 1029 | git-tree-sha1 = "fc0feda91b3fef7fe6948ee09bb628f882b49ca4" 1030 | uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" 1031 | version = "0.6.2" 1032 | 1033 | [[WoodburyMatrices]] 1034 | deps = ["LinearAlgebra", "SparseArrays"] 1035 | git-tree-sha1 = "28ffe06d28b1ba8fdb2f36ec7bb079fac81bac0d" 1036 | uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" 1037 | version = "0.5.2" 1038 | 1039 | [[XML2_jll]] 1040 | deps = ["Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] 1041 | git-tree-sha1 = "987c02a43fa10a491a5f0f7c46a6d3559ed6a8e2" 1042 | uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" 1043 | version = "2.9.9+4" 1044 | 1045 | [[XSLT_jll]] 1046 | deps = ["Libdl", "Libgcrypt_jll", "Pkg", "XML2_jll"] 1047 | git-tree-sha1 = "c287bbc08773474ab1d12849eb46b961a325e149" 1048 | uuid = "aed1982a-8fda-507f-9586-7b0439959a61" 1049 | version = "1.1.33+2" 1050 | 1051 | [[Xorg_libX11_jll]] 1052 | deps = ["Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] 1053 | git-tree-sha1 = "bbfb646a5a86dc636041c8ee945799b69d37fdba" 1054 | uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" 1055 | version = "1.6.9+2" 1056 | 1057 | [[Xorg_libXau_jll]] 1058 | deps = ["Libdl", "Pkg"] 1059 | git-tree-sha1 = "711f2bbdbb0e90b90a71c5ccf835137e2def539a" 1060 | uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" 1061 | version = "1.0.9+2" 1062 | 1063 | [[Xorg_libXdmcp_jll]] 1064 | deps = ["Libdl", "Pkg"] 1065 | git-tree-sha1 = "1ffd7bc9c9d8bba6652516f3402ee1ef5f4cac70" 1066 | uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" 1067 | version = "1.1.3+2" 1068 | 1069 | [[Xorg_libXext_jll]] 1070 | deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] 1071 | git-tree-sha1 = "079acccb5437761d93c483f2edb5fc3ed21ea7db" 1072 | uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" 1073 | version = "1.3.4+2" 1074 | 1075 | [[Xorg_libXrender_jll]] 1076 | deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] 1077 | git-tree-sha1 = "d5492a36d33359cf93ad573ea5e235cd71728649" 1078 | uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" 1079 | version = "0.9.10+2" 1080 | 1081 | [[Xorg_libpthread_stubs_jll]] 1082 | deps = ["Libdl", "Pkg"] 1083 | git-tree-sha1 = "ec1e2973e4e624069be95f806dbd7e225fee26c6" 1084 | uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" 1085 | version = "0.1.0+1" 1086 | 1087 | [[Xorg_libxcb_jll]] 1088 | deps = ["Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] 1089 | git-tree-sha1 = "c1efb50fb6a8c40c45451611fbf93feabe5f9611" 1090 | uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" 1091 | version = "1.13.0+2" 1092 | 1093 | [[Xorg_xtrans_jll]] 1094 | deps = ["Libdl", "Pkg"] 1095 | git-tree-sha1 = "b6e7d70f5fc9e3fde505539194c8caaab3c40ebf" 1096 | uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" 1097 | version = "1.4.0+1" 1098 | 1099 | [[Zlib_jll]] 1100 | deps = ["Libdl", "Pkg"] 1101 | git-tree-sha1 = "2f6c3e15e20e036ee0a0965879b31442b7ec50fa" 1102 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 1103 | version = "1.2.11+9" 1104 | 1105 | [[libass_jll]] 1106 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"] 1107 | git-tree-sha1 = "027a304b2a90de84f690949a21f94e5ae0f92c73" 1108 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" 1109 | version = "0.14.0+2" 1110 | 1111 | [[libfdk_aac_jll]] 1112 | deps = ["Libdl", "Pkg"] 1113 | git-tree-sha1 = "480c7ed04f68ea3edd4c757f5db5b6a0a4e0bd99" 1114 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" 1115 | version = "0.1.6+2" 1116 | 1117 | [[libpng_jll]] 1118 | deps = ["Libdl", "Pkg", "Zlib_jll"] 1119 | git-tree-sha1 = "594cb058723c13941cf463fd09e5859499594f50" 1120 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 1121 | version = "1.6.37+3" 1122 | 1123 | [[libvorbis_jll]] 1124 | deps = ["Libdl", "Ogg_jll", "Pkg"] 1125 | git-tree-sha1 = "6a66f65b5275dfa799036c8a3a26616a0a271c4a" 1126 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" 1127 | version = "1.3.6+4" 1128 | 1129 | [[x264_jll]] 1130 | deps = ["Libdl", "Pkg"] 1131 | git-tree-sha1 = "d89346fe63a6465a9f44e958ac0e3d366af90b74" 1132 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" 1133 | version = "2019.5.25+2" 1134 | 1135 | [[x265_jll]] 1136 | deps = ["Libdl", "Pkg"] 1137 | git-tree-sha1 = "61324ad346b00a6e541896b94201c9426591e43a" 1138 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" 1139 | version = "3.0.0+1" 1140 | -------------------------------------------------------------------------------- /notebook/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" 3 | DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" 4 | DataFramesMeta = "1313f7d8-7da2-5740-9ea0-a2ca25f37964" 5 | DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 6 | Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" 7 | Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" 8 | ForneyLab = "9fc3f58a-c2cc-5bff-9419-6a294fefdca9" 9 | GLM = "38e38edf-8417-5370-95a0-9cbb8c7f171a" 10 | LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" 11 | Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306" 12 | Mamba = "5424a776-8be3-5c5b-a13f-3551f69ba0e6" 13 | MixedModels = "ff71e718-51f3-5ec2-a782-8ffcbfa3c316" 14 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" 15 | QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" 16 | SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 17 | Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 18 | StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 19 | StatsFuns = "4c63d2b9-4356-54db-8cca-17b64c39e42c" 20 | StatsPlots = "f3b207a7-027a-5e70-b257-86293d7955fd" 21 | 22 | [compat] 23 | julia = "1.4" 24 | -------------------------------------------------------------------------------- /src/build.jl: -------------------------------------------------------------------------------- 1 | root = joinpath(@__DIR__, "..") 2 | using Pkg; Pkg.activate(root) 3 | using Literate 4 | # using Plots 5 | 6 | src = joinpath(root, "src") 7 | out_markdown = joinpath(root, "markdown") 8 | out = joinpath(root, "notebook") 9 | 10 | function preprocess(s) 11 | s = "using Pkg; Pkg.activate(\".\"); Pkg.instantiate()\n#-\n" * s 12 | end 13 | 14 | for f in ["Project.toml", "Manifest.toml"] 15 | cp(joinpath(root, f), joinpath(out, f), force=true) 16 | end 17 | 18 | for x in filter(x -> x != "build.jl", readdir("src")) 19 | Literate.markdown(joinpath(src, x), out_markdown; documenter=false) 20 | if x in ["section10.jl", "section11.jl"] 21 | Literate.notebook(joinpath(src, x), out; execute=false, documenter=true) 22 | else 23 | Literate.notebook(joinpath(src, x), out; preprocess=preprocess, execute=false, documenter=true) 24 | end 25 | end -------------------------------------------------------------------------------- /src/section10.jl: -------------------------------------------------------------------------------- 1 | # # 10 階層ベイズモデル -GLMMのベイズモデル化- 2 | 3 | ## #src 4 | #- 5 | using Distributed 6 | addprocs(3) 7 | @everywhere begin 8 | using Pkg 9 | Pkg.activate(".") 10 | Pkg.instantiate() 11 | end 12 | 13 | ## #src 14 | #- 15 | using CSV 16 | using DataFrames 17 | using DataFramesMeta 18 | using Distributions 19 | using ForneyLab 20 | using LaTeXStrings 21 | @everywhere using Mamba 22 | using Plots 23 | using QuadGK 24 | @everywhere using Random 25 | using StatsBase 26 | using StatsFuns 27 | using StatsPlots 28 | @everywhere Random.seed!(0) 29 | 30 | ## #src 31 | # ## 10.1 例題 : 個体差と生存種子数 (個体差あり) 32 | #- 33 | df = CSV.read(joinpath("..", "data/section10a.csv")) 34 | disallowmissing!(df) 35 | 36 | ## #src 37 | # 青丸は観測データ, 白丸は生存確率0.504の二項分布. 二項分布では観測データのばらつきが説明できていない 38 | #- 39 | scatter(sort(unique(df.y)), counts(df.y), label="") 40 | ys = pdf.(Binomial(8, 0.504), 0:8) .* 100 41 | plot!(0:8, ys, linecolor=:red, linewidth=2, 42 | marker=4, label="", 43 | xlabel="Survived", ylabel="Observed") 44 | 45 | ## #src 46 | # ## 10.3 階層ベイズモデルの推定・予測 47 | # ### 10.3.1 階層ベイズモデルのMCMCサンプリング 48 | # ### モデルの作成 49 | # $$\begin{align} y_i \sim \text{Binomial}(q_i, 8) \\ 50 | # \text{logit}(q_i) = \beta + r_i \\ 51 | # \beta \sim \text{Normal}(0, 100^2) \\ 52 | # r_i \sim \text{Normal}(0, \tau^2) \\ 53 | # \tau \sim \text{Uniform}(0, 10000) \end{align}$$ 54 | #- 55 | model = Model( 56 | y = Stochastic(1, 57 | (beta, r, N) -> 58 | UnivariateDistribution[ 59 | (q = invlogit(beta + r[i]); 60 | Binomial(8, q)) for i in 1:N 61 | ], 62 | false 63 | ), 64 | 65 | beta = Stochastic(() -> Normal(0, 100)), 66 | 67 | r = Stochastic(1, s -> Normal(0, s), false), 68 | 69 | s = Stochastic(() -> Uniform(0, 10000)), 70 | ) 71 | 72 | ## #src 73 | # ### モデルの図示 74 | #- 75 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model))) 76 | 77 | ## #src 78 | # ### データの設定 79 | #- 80 | data = let y=df.y[:] 81 | Dict{Symbol, Any}( 82 | :y => y, 83 | :N => length(y), 84 | ) 85 | end 86 | 87 | ## #src 88 | # ### 初期値の設定 89 | #- 90 | inits = let y=df.y[:] 91 | [ 92 | Dict{Symbol, Any}( 93 | :y => y, 94 | :beta => 0.0, 95 | :r => rand(Normal(0, 0.1), length(y)), 96 | :s => 1.0, 97 | ) for i in 1:3 98 | ] 99 | end 100 | 101 | ## #src 102 | # ### MCMCサンプル方法の設定 103 | # NUTSを使うと遅くなってしまったので、AMWGを使用 104 | #- 105 | scheme = [ 106 | AMWG(:r, 1), 107 | Slice(:s, 1.0, Mamba.Univariate), 108 | Slice(:beta, 1.0, Mamba.Univariate), 109 | ] 110 | 111 | ## #src 112 | # ### MCMCサンプリング 113 | # サンプリングは21000回実施し, burn-inの数は1000, 10飛ばしの結果の記録を3チェイン行うので、 114 | # サンプルの数は(21000-1000)/10*3=6000個 115 | #- 116 | setsamplers!(model, scheme) 117 | sim = mcmc(model, data, inits, 21000, burnin=1000, thin=10, chains=3) 118 | 119 | ## #src 120 | # ### サンプリング結果を表示 121 | #- 122 | describe(sim) 123 | 124 | ## #src 125 | #- 126 | p = Mamba.plot(sim, legend=true) 127 | Mamba.draw(p, nrow=2, ncol=2) 128 | 129 | ## #src 130 | #- 131 | p = Mamba.plot(sim, [:autocor, :mean], legend=true) 132 | Mamba.draw(p, nrow=2, ncol=2) 133 | 134 | ## #src 135 | #- 136 | p = Mamba.plot(sim, :contour) 137 | Mamba.draw(p, nrow=1, ncol=1) 138 | 139 | ## #src 140 | # ### 10.3.2 階層ベイズモデルの事後分布推定と予測 141 | # $p(y \mid \beta, r)p(r \mid s)$を求める関数 142 | #- 143 | function f_gaussian_binorm(alpha, x, size, fixed, sd) 144 | pdf(Binomial(size, logistic(fixed + alpha)), x) * pdf(Normal(0, sd), alpha) 145 | end 146 | 147 | ## #src 148 | # $p(y \mid \beta, s) = \int_{-\infty}^\infty p(y \mid \beta, r)p(r \mid s)dr$を求める関数. 149 | # 実際は$\int_{-10s}^{10s} p(y \mid \beta, r)p(r \mid s)dr$を求めている 150 | #- 151 | function d_gaussian_binorm(x, fixed, sd) 152 | quadgk(y -> f_gaussian_binorm(y, x, 8, fixed, sd), -sd * 10, sd * 10)[1] 153 | end 154 | 155 | ## #src 156 | # 各パスに対し, $y = 0, \ldots, 8$ に対して $p(y \mid \beta, s)$ を評価する. 157 | #- 158 | posterior = map((x, y) -> d_gaussian_binorm.(0:8, x, y), sim[:, [:beta], :].value[:], sim[:, [:s], :].value[:]) 159 | 160 | ## #src 161 | # 各パスに対して、$P(X=y)=p(y \mid \beta, s)\ \text{for}\ y = 0, \ldots, 8$というCategorical distributionから100個体のサンプリングを行い, 162 | # $y$ごとに出現回数を数える. 横方向は各サンプリング, 縦方向は$y = 0, \ldots, 8$の出現回数に該当 163 | #- 164 | population_samples = hcat(map(x -> fit(Histogram, rand(Distributions.Categorical(x), 100) .- 1, 0:9).weights, posterior)...) 165 | 166 | ## #src 167 | # $y$毎に出現回数の2.5%, 50%, 97.5%点を計算 168 | #- 169 | function quantile_sample(r) 170 | map(x -> quantile(population_samples[x, :], r), 1:9) 171 | end 172 | quantile_sample_0025 = quantile_sample(0.025) 173 | quantile_sample_0975 = quantile_sample(0.975) 174 | quantile_sample_median = quantile_sample(0.5) 175 | 176 | ## #src 177 | # 生存種子数の予測分布 178 | # 各 $y$ における中央値, 及び95%区間の領域を表示する 179 | #- 180 | scatter(sort(unique(df.y)), counts(df.y), label="") 181 | Plots.plot!(0:8, quantile_sample_0025, lw = 0, 182 | fillrange=quantile_sample_0975, 183 | fillalpha=0.3, fillcolor=:orange, 184 | label="95% Confidence interval") 185 | Plots.plot!(0:8, quantile_sample_median, linewidth=2, marker=4, label="", 186 | xlabel="Survived", ylabel="Observed") 187 | 188 | ## #src 189 | # ## 10.5 個体差 + 場所差の階層ベイズモデル 190 | #- 191 | df2 = CSV.read(joinpath("..", "data/section10b.csv")) 192 | disallowmissing!(df2) 193 | 194 | ## #src 195 | #- 196 | marker_dict = Dict( 197 | "A" => :circle, 198 | "B" => :ltriangle, 199 | "C" => :star5, 200 | "D" => :diamond, 201 | "E" => :dtriangle, 202 | "F" => :xcross, 203 | "G" => :star4, 204 | "H" => :utriangle, 205 | "I" => :rect, 206 | "J" => :rtriangle 207 | ) 208 | 209 | ## #src 210 | # ### 個体ごとの表示 211 | # 赤線は無処理、青線は堆肥処理した個体の平均 212 | #- 213 | plt = Plots.plot() 214 | for k in marker_dict |> keys |> collect |> sort 215 | @linq df_k = df2 |> where(:pot .== k) 216 | scatter!(df_k.id, df_k.y, label=k, markershape=marker_dict[k], 217 | legend=:topleft, legendfontsize=6, xlabel=L"i", ylabel=L"y_i") 218 | end 219 | plot!(1:50, fill(mean(df2[1:50, :].y), 50), 220 | linestyle=:dash, linewidth=2, linecolor=:red, label="") 221 | plot!(51:100, fill(mean(df2[51:100, :].y), 50), 222 | linestyle=:dash, linewidth=2, linecolor=:blue, label="") 223 | plt 224 | 225 | ## #src 226 | # ### 植木鉢毎に箱ひげ図として図示 227 | #- 228 | boxplot(df2[1:50, :].pot, df2[1:50, :].y, label="") 229 | boxplot!(df2[51:100, :].pot, df2[51:100, :].y, label="", xlabel="pot", ylabel=L"y_i") 230 | 231 | ## #src 232 | # ### GLMM化したポアソン回帰 233 | # 個体$i$の種子数$y_i$を平均$\lambda_i$のポアソン回帰 234 | # 235 | # $$\begin{align} p(y_i \mid \lambda_i) = \frac{\lambda_i^{y_i}\exp(-\lambda_i)}{y_i!} \end{align}$$ 236 | # 237 | # で表現し, 平均種子数は切片$\beta_1$, 堆肥処理の有無を表す因子型の説明変数$f_i$の係数$\beta_2$, 個体$i$の効果$r_i$と植木鉢$j$の効果$t_{j(i)}$で 238 | # 239 | # $$\begin{align} \log \lambda_i = \beta_1 + \beta_2 f_i + r_i + t_{j(i)} \end{align}$$ 240 | # 241 | # で表現. 242 | # $$\begin{align} y_i \sim \text{Poisson}(\lambda_i), \ i = 1, \ldots, 100 \\ 243 | # \log \lambda_i = \beta_1 + \beta_2 f_i + r_i + t_{j(i)} \\ 244 | # \beta_1, \beta_2 \sim \text{Normal}(0, 100) \\ 245 | # r_i \sim \text{Normal}(0, s_r^2) \\ 246 | # t_j \sim \text{Normal}(0, s_t^2), j = 1, \ldots, 10 \\ 247 | # s_r, s_t \sim \text{Uniform}(0, 10000) \end{align}$$ 248 | #- 249 | model2 = Model( 250 | 251 | y = Stochastic(1, 252 | (beta1, beta2, f, r, t, pot, N_r) -> 253 | UnivariateDistribution[ 254 | (lambda=exp(beta1 + beta2 * f[i] + r[i] + t[pot[i]]); 255 | Mamba.Poisson(lambda)) for i in 1:N_r 256 | ], 257 | false 258 | ), 259 | 260 | r = Stochastic(1, s_r -> Normal(0, s_r), false), 261 | 262 | t = Stochastic(1, s_t -> Normal(0, s_t), false), 263 | 264 | beta1 = Stochastic(() -> Normal(0, 100)), 265 | beta2 = Stochastic(() -> Normal(0, 100)), 266 | 267 | s_r = Stochastic(() -> Uniform(0, 10000)), 268 | s_t = Stochastic(() -> Uniform(0, 10000)), 269 | ) 270 | 271 | ## #src 272 | # ### モデルの図示 273 | #- 274 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model2))) 275 | 276 | ## #src 277 | # ### 入力データの設定 278 | #- 279 | pot_dict = Dict(string(y) => x for (x, y) in enumerate("ABCDEFGHIJ")) 280 | f_dict = Dict("C" => 0, "T" => 1) 281 | data2 = let y=df2.y[:], pot=df2.pot[:], f=df2.f[:] 282 | Dict{Symbol, Any}( 283 | :y => y, 284 | :N_r => length(y), 285 | :N_t => length(unique(pot)), 286 | :pot => [pot_dict[x] for x in pot], 287 | :f => [f_dict[x] for x in f], 288 | ) 289 | end 290 | 291 | ## #src 292 | # ### 初期値の設定 293 | #- 294 | inits2 = [ 295 | Dict{Symbol, Any}( 296 | :y => data2[:y], 297 | :beta1 => 0.0, 298 | :beta2 => 0.0, 299 | :r => rand(Normal(0, 0.1), data2[:N_r]), 300 | :t => rand(Normal(0, 0.1), data2[:N_t]), 301 | :s_r => 1.0, 302 | :s_t => 1.0, 303 | ) for i in 1:3 304 | ] 305 | 306 | ## #src 307 | #- 308 | scheme2 = [ 309 | AMWG([:r], 0.1), 310 | AMWG([:t], 0.1), 311 | Slice([:s_r, :s_t], 0.1, Mamba.Univariate), 312 | Slice([:beta1, :beta2], 1.0, Mamba.Univariate) 313 | ] 314 | 315 | ## #src 316 | #- 317 | setsamplers!(model2, scheme2) 318 | sim2 = mcmc(model2, data2, inits2, 22000, burnin=2000, thin=10, chains=3) 319 | 320 | ## #src 321 | # ### 事後分布を確認する 322 | # β2の95%区間を見ると、堆肥処理の効果はなさそう 323 | #- 324 | describe(sim2) 325 | 326 | ## #src 327 | #- 328 | p = Mamba.plot(sim2, legend=true) 329 | Mamba.draw(p[:, 1:2], nrow=2, ncol=2) 330 | 331 | ## #src 332 | #- 333 | Mamba.draw(p[:, 3:4], nrow=2, ncol=2) 334 | 335 | ## #src 336 | #- 337 | p = Mamba.plot(sim2, [:autocor, :mean], legend=true) 338 | Mamba.draw(p[:, 1:2], nrow=2, ncol=2) 339 | 340 | ## #src 341 | #- 342 | Mamba.draw(p[:, 3:4], nrow=2, ncol=2) 343 | -------------------------------------------------------------------------------- /src/section11.jl: -------------------------------------------------------------------------------- 1 | # # 11 空間構造のある階層ベイズモデル 2 | 3 | ## #src 4 | #- 5 | using Distributed 6 | addprocs(3) 7 | @everywhere begin 8 | using Pkg 9 | Pkg.activate(".") 10 | Pkg.instantiate() 11 | end 12 | 13 | ## #src 14 | #- 15 | using CSV 16 | using DataFrames 17 | using Distributions 18 | using ForneyLab 19 | using LinearAlgebra 20 | @everywhere using Mamba 21 | using Plots 22 | @everywhere using Random 23 | using SparseArrays 24 | using Statistics 25 | using StatsBase 26 | @everywhere Random.seed!(0) 27 | 28 | ## #src 29 | # ## 11.1 例題 : 一次元空間上の個体数分布 30 | # ### 例題の一次元空間上の架空データ 31 | #- 32 | df = CSV.read(joinpath("..", "data/section11.csv")) 33 | disallowmissing!(df) 34 | 35 | ## #src 36 | # 横軸は調査区間の位置, 縦軸は観測された個体数, 破線はデータをポアソン乱数で生成するときに使った平均値 37 | #- 38 | scatter(1:50, df.y, xlabel="Position", ylabel="Population", markercolor=:white, label="y") 39 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 40 | 41 | ## #src 42 | # ## 11.2 階層ベイズモデルに空間構造を組み込む 43 | # まず, 個体数$y_i$は, すべでの区画で共通する平均$\lambda$のポアソン分布に従うとしてみる. 44 | # $$\begin{align} y_i \sim \text{Poisson}(\lambda),\ p(y_j \mid \lambda) = \frac{\lambda^{y_i}\exp(-\lambda)}{y_j!} \end{align}$$ 45 | # このように仮定してすると, 平均$\lambda$と標本平均と等しいとしてみる. 46 | # ### 標本平均 47 | #- 48 | mean(df.y) 49 | 50 | ## #src 51 | # ところが標本分散を求めてみると, 52 | #- 53 | var(df.y) 54 | 55 | ## #src 56 | # となり, 標本平均の3倍近くなっている. そのため個体数が全ての区画で共通する平均$\lambda$のPoisson分布に従うと言う仮定は成立していなさそう. 57 | # 58 | # そのため, 区間$j$ごとに平均$\lambda_i$が異なっているとし, 平均個体数を切片$\beta$と場所差$r_j$を用いて 59 | # $$\begin{align} \log \lambda_i = \beta + r_j \end{align}$$ 60 | # と表す. 61 | # 62 | # ### 11.2.1. 空間構造のない階層事前分布 63 | # 場所差$r_j$の事前分布を第10章で使ったような階層事前分布 64 | # $$\begin{align} r_j \sim \text{Normal}(0, s^2),\ p(r_j \mid s) = \frac{1}{\sqrt{2\pi s^2}}\exp \left( -\frac{r_j^2}{2s^2} \right) \end{align}$$ 65 | # であるとしてモデリングしてみる. 66 | #- 67 | model1 = Model( 68 | 69 | y = Stochastic(1, 70 | (lambda, N) -> 71 | UnivariateDistribution[ 72 | (Mamba.Poisson(lambda[i])) for i in 1:N 73 | ], 74 | false 75 | ), 76 | 77 | lambda = Logical(1, 78 | (beta, r) -> exp.(beta .+ r)), 79 | 80 | beta = Stochastic(() -> Normal(0, 100)), 81 | 82 | r = Stochastic(1, s -> Normal(0, s), false), 83 | 84 | s = Stochastic(() -> Uniform(0, 10000)) 85 | ) 86 | 87 | ## #src 88 | #- 89 | data1 = let y=df.y[:] 90 | Dict{Symbol, Any}( 91 | :y => y, 92 | :N => length(y), 93 | ) 94 | end 95 | 96 | ## #src 97 | #- 98 | inits1 = [ 99 | Dict{Symbol, Any}( 100 | :y => data1[:y], 101 | :beta => 0.0, 102 | :r => rand(Normal(0, 0.1), length(data1[:y])), 103 | :s => 1.0, 104 | ) for i in 1:3 105 | ] 106 | 107 | ## #src 108 | #- 109 | scheme1 = [ 110 | AMWG(:r, 1), 111 | Slice(:s, 1.0), 112 | Slice(:beta, 1.0), 113 | ] 114 | 115 | ## #src 116 | #- 117 | setsamplers!(model1, scheme1) 118 | sim1 = mcmc(model1, data1, inits1, 60000, burnin=10000, thin=10, chains=3) 119 | 120 | ## #src 121 | #- 122 | describe(sim1) 123 | 124 | ## #src 125 | #- 126 | p1 = Mamba.plot(sim1, legend=true) 127 | Mamba.draw(p1[:, 1:2], nrow=2, ncol=2) 128 | 129 | ## #src 130 | #- 131 | p2 = Mamba.plot(sim1, [:autocor, :mean], legend=true) 132 | Mamba.draw(p2[:, 1:2], nrow=2, ncol=2) 133 | 134 | ## #src 135 | # $\lambda$の中央値、95%信頼区間をプロットしてみる 136 | #- 137 | mre = quantile(sim1).value[3:end, :] 138 | 139 | ## #src 140 | #- 141 | Plots.plot(1:50, mre[:, 1], lw=0, 142 | fillrange=mre[:, 5], 143 | fillcolor=:skyblue, 144 | fillalpha=0.6, 145 | label="95% Confidence interval") 146 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", markercolor=:white, label="y") 147 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 148 | plot!(1:50, mre[:, 3], linewidth=2, linecolor=:red, label="Median") 149 | 150 | ## #src 151 | # 11.2.2 空間構造のある階層事前分布 152 | # ある区間はそれと隣接する区間とだけ相互作用すると仮定する. 153 | # 近傍数は$n_j = 2 \ (j \neq 1, 50), 1 \ (j = 1, 50)$となる. 154 | # $$\begin{align} \mu_j = \frac{r_{j-1} + r_{j+1}}{2}\ (j \neq 1, 50), \mu_1 = r_2, \mu_{50} = r_{49},\\ 155 | # r_j \mid \mu_j, s \sim \text{Normal}\left(\mu_j, \frac{s}{\sqrt{n_j}}\right) \end{align}$$ 156 | # と言うモデルを考える. 157 | # ### 11.3 空間統計モデルをデータに当てはめる 158 | # CARモデルを実装する。 参考 : https://github.com/matsueushi/lip_stick_mamba 159 | #- 160 | model2 = Model( 161 | 162 | y = Stochastic(1, 163 | (lambda, N) -> 164 | UnivariateDistribution[ 165 | (Mamba.Poisson(lambda[i])) for i in 1:N 166 | ], 167 | false 168 | ), 169 | 170 | lambda = Logical(1, 171 | (beta, r) -> exp.(beta .+ r)), 172 | 173 | beta = Stochastic(() -> Normal(0, 100)), 174 | 175 | r = Stochastic(1, 176 | (s, alpha, N, D, adj) -> 177 | MvNormalCanon(zeros(N), 1 / (s * s) * (D - alpha * adj)), 178 | false 179 | ), 180 | 181 | alpha = Stochastic(() -> Uniform()), 182 | 183 | s = Stochastic(() -> Uniform(0, 10000)) 184 | ) 185 | 186 | ## #src 187 | #- 188 | adj = zeros(50, 50) 189 | for i in 1:50-1 190 | adj[i, i+1] = 1 191 | adj[i+1, i] = 1 192 | end 193 | adj 194 | 195 | ## #src 196 | #- 197 | D = Diagonal(vec(sum(adj, dims=2))) 198 | 199 | ## #src 200 | #- 201 | data2 = let y=df.y[:] 202 | Dict{Symbol, Any}( 203 | :y => y, 204 | :N => length(y), 205 | :adj => adj, 206 | :D => D, 207 | ) 208 | end 209 | 210 | ## #src 211 | #- 212 | inits2 = [ 213 | Dict{Symbol, Any}( 214 | :y => data2[:y], 215 | :alpha => 0.9, 216 | :beta => 0.0, 217 | :r => rand(Normal(0, 0.1), data2[:N]), 218 | :s => 1.0, 219 | ) for i in 1:3 220 | ] 221 | 222 | ## #src 223 | #- 224 | scheme2 = [ 225 | AMWG(:r, 1), 226 | Slice(:s, 1.0), 227 | Slice([:alpha, :beta], 1.0), 228 | ] 229 | 230 | ## #src 231 | #- 232 | setsamplers!(model2, scheme2) 233 | 234 | ## #src 235 | #- 236 | sim2 = mcmc(model2, data2, inits2, 60000, burnin=10000, thin=10, chains=3) 237 | 238 | ## #src 239 | #- 240 | describe(sim2) 241 | 242 | ## #src 243 | #- 244 | p3 = Mamba.plot(sim2, legend=true) 245 | Mamba.draw(p3[:, 1:3], nrow=3, ncol=2) 246 | 247 | ## #src 248 | #- 249 | p4 = Mamba.plot(sim2, [:autocor, :mean], legend=true) 250 | Mamba.draw(p4[:, 1:3], nrow=3, ncol=2) 251 | 252 | ## #src 253 | #- 254 | mre2 = quantile(sim2).value[4:end, :] 255 | 256 | ## #src 257 | # ### Plot 258 | #- 259 | Plots.plot(1:50, mre2[:, 1], lw=0, 260 | fillrange=mre2[:, 5], 261 | fillcolor=:skyblue, 262 | fillalpha=0.6, 263 | label="95% Confidence interval") 264 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 265 | markercolor=:white, label="y") 266 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 267 | plot!(1:50, mre2[:, 3], linewidth=2, linecolor=:red, label= "Median") 268 | 269 | ## #src 270 | # ## 11.5 空間相関モデルと欠測のある観測データ 271 | # Missing Values Sampler 272 | # 273 | # https://mambajl.readthedocs.io/en/latest/samplers/miss.html 274 | # 275 | # を使って、欠測のある観測データを使った予測を行う。 276 | # ### まずは、空間相関のないモデル 277 | #- 278 | y_missing = convert(Vector{Union{Missing, Float64}}, df.y) 279 | missing_place = [6, 9, 12, 13, 26, 27, 28, 29, 30] 280 | y_missing[missing_place] .= NaN 281 | y_missing 282 | 283 | ## #src 284 | #- 285 | data1_missing = Dict{Symbol, Any}( 286 | :y => y_missing, 287 | :N => length(df.y[:]), 288 | ) 289 | 290 | ## #src 291 | #- 292 | inits1_missing = [ 293 | Dict{Symbol, Any}( 294 | :y => y_missing, 295 | :beta => 0.0, 296 | :r => rand(Normal(0, 0.1), data1_missing[:N]), 297 | :s => 1.0, 298 | ) for i in 1:3 299 | ] 300 | 301 | ## #src 302 | #- 303 | scheme1_missing = [ 304 | MISS(:y), 305 | AMWG(:r, 1), 306 | Slice(:s, 1.0), 307 | Slice(:beta, 1.0), 308 | ] 309 | 310 | ## #src 311 | #- 312 | setsamplers!(model1, scheme1_missing) 313 | sim1_missing = mcmc(model1, data1_missing, inits1_missing, 60000, 314 | burnin=10000, thin=10, chains=3) 315 | 316 | ## #src 317 | #- 318 | describe(sim1_missing) 319 | 320 | ## #src 321 | #- 322 | p5 = Mamba.plot(sim1_missing, legend=true) 323 | Mamba.draw(p5[:, 1:2], nrow=2, ncol=2) 324 | 325 | ## #src 326 | #- 327 | p6 = Mamba.plot(sim1_missing, [:autocor, :mean], legend=true) 328 | Mamba.draw(p6[:, 1:2], nrow=2, ncol=2) 329 | 330 | ## #src 331 | # ### 次に、空間相関のあるモデル 332 | #- 333 | data2_missing = Dict{Symbol, Any}( 334 | :y => y_missing, 335 | :N => length(df.y[:]), 336 | :adj => adj, 337 | :D => D, 338 | ) 339 | 340 | ## #src 341 | #- 342 | inits2_missing = [ 343 | Dict{Symbol, Any}( 344 | :y => y_missing, 345 | :alpha => 0.9, 346 | :beta => 0.0, 347 | :r => rand(Normal(0, 0.1), data2_missing[:N]), 348 | :s => 1.0, 349 | ) for i in 1:3 350 | ] 351 | 352 | ## #src 353 | #- 354 | scheme2_missing = [ 355 | MISS(:y), 356 | AMWG(:r, 1), 357 | Slice(:s, 1.0), 358 | Slice([:alpha, :beta], 1.0), 359 | ] 360 | 361 | ## #src 362 | #- 363 | setsamplers!(model2, scheme2_missing) 364 | sim2_missing = mcmc(model2, data2_missing, inits2_missing, 60000, 365 | burnin=10000, thin=10, chains=3) 366 | 367 | ## #src 368 | #- 369 | describe(sim2_missing) 370 | 371 | ## #src 372 | #- 373 | p7 = Mamba.plot(sim2_missing, legend=true) 374 | Mamba.draw(p7[:, 1:3], nrow=3, ncol=2) 375 | 376 | ## #src 377 | #- 378 | p8 = Mamba.plot(sim2_missing, [:autocor, :mean], legend=true) 379 | Mamba.draw(p8[:, 1:3], nrow=3, ncol=2) 380 | 381 | ## #src 382 | # ### モデルの比較 383 | # 空間相関のあるモデル・ないモデルを比較する。 384 | #- 385 | scatter_color = fill(:white, 50) 386 | scatter_color[missing_place] .= :black 387 | 388 | ## #src 389 | #- 390 | vsspan_x = collect(Iterators.flatten(zip(missing_place .- 0.5, missing_place .+ 0.5))) 391 | 392 | ## #src 393 | # 空間相関を考慮していないモデル 394 | #- 395 | mre3 = quantile(sim1_missing).value[3:end, :] 396 | vspan(vsspan_x, fillcolor=:black, linecolor=:transparent, fillalpha=0.15, label="") 397 | plot!(1:50, mre3[:, 1], lw=0, 398 | fillrange=mre3[:, 5], 399 | fillcolor=:skyblue, 400 | fillalpha=0.6, 401 | label="95% Confidence interval") 402 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 403 | markercolor=scatter_color, label="y") 404 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 405 | plot!(1:50, mre3[:, 3], linewidth=2, linecolor=:red, label="Median") 406 | 407 | ## #src 408 | # 空間相関を考慮しているモデル 409 | #- 410 | mre4 = quantile(sim2_missing).value[4:end, :] 411 | vspan(vsspan_x, fillcolor=:black, linecolor=:transparent, fillalpha=0.15, label="") 412 | plot!(1:50, mre4[:, 1], lw=0, 413 | fillrange=mre4[:, 5], 414 | fillcolor=:skyblue, 415 | fillalpha=0.6, 416 | label="95% Confidence interval") 417 | scatter!(1:50, df.y, xlabel="Position", ylabel="Population", 418 | markercolor=scatter_color, label="y") 419 | plot!(1:50, df.m, linewidth=2, linecolor=:black, linestyle=:dash, label="") 420 | plot!(1:50, mre4[:, 3], linewidth=2, linecolor=:red, label="Median") 421 | 422 | ## #src 423 | # 空間相関を考慮すると、欠測データに対し隣同士の相互作用を用いた予測ができるため、相関を考慮しないものに比べて予測区間の幅が小さくなる 424 | -------------------------------------------------------------------------------- /src/section2.jl: -------------------------------------------------------------------------------- 1 | # # 2 確率分布と統計モデルの最尤推定 2 | 3 | ## #src 4 | #- 5 | using DataStructures 6 | using Distributions 7 | using Plots 8 | using StatsBase 9 | using Statistics 10 | 11 | ## #src 12 | # ## 2.1 例題 : 種子数の統計モデリング 13 | # ### 種子数データ 14 | #- 15 | data = [2, 2, 4, 6, 4, 5, 2, 3, 1, 2, 0, 4, 3, 3, 3, 3,4, 2, 7, 2, 4, 3, 3, 3, 4, 16 | 3, 7, 5, 3, 1, 7, 6, 4, 6, 5, 2, 4, 7, 2, 2, 6, 2, 4, 5, 4, 5, 1, 3, 2, 3] 17 | 18 | ## #src 19 | # ### データ数 20 | #- 21 | length(data) 22 | 23 | ## #src 24 | # ### データの要約 25 | #- 26 | describe(data) 27 | 28 | ## #src 29 | # ### 度数分布 30 | #- 31 | SortedDict(countmap(data)) 32 | 33 | ## #src 34 | # ### ヒストグラム 35 | #- 36 | histogram(data, bins=10, label="Data") 37 | 38 | ## #src 39 | # ### 標本分散 40 | #- 41 | var(data) 42 | 43 | ## #src 44 | # ### 標本標準偏差 45 | #- 46 | std(data) 47 | 48 | ## #src 49 | # ## 2.2 データと確率分布の対応関係をながめる 50 | # ### ポアソン分布 51 | # https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Poisson 52 | #- 53 | y = 0:9 54 | prob = pdf.(Poisson(3.56), y) 55 | 56 | ## #src 57 | #- 58 | plot(prob, linewidth=2, linestyle=:dash, marker=4) 59 | 60 | ## #src 61 | # ### 観測データと確率分布の対応 62 | #- 63 | histogram(data, bins=10, label="Data") 64 | plot!(prob * 50, linewidth=2, linestyle=:dash, marker=4, label="") 65 | 66 | ## #src 67 | # ## 2.4 ポアソン分布のパラメーターの最尤推定 68 | # ### 対数尤度 $\log L(\lambda)$と$\lambda$の関係 69 | #- 70 | logL(m) = sum(log.(pdf.(Poisson(m), data))) 71 | 72 | #- 73 | lambda = 2:0.1:5 74 | plot(lambda, logL.(lambda), linewidth=2, title="log likelihood", label="") 75 | -------------------------------------------------------------------------------- /src/section3.jl: -------------------------------------------------------------------------------- 1 | # # 3 一般化線形モデル(GLM) -ポアソン回帰- 2 | 3 | ## #src 4 | #- 5 | using CSV 6 | using DataFrames 7 | using GLM 8 | using LaTeXStrings 9 | using Plots 10 | using StatsBase 11 | using StatsPlots 12 | 13 | ## #src 14 | # ## 3.2 観測されたデータの概要を調べる 15 | #- 16 | df = CSV.read(joinpath("..", "data/section3.csv")) 17 | 18 | ## #src 19 | # ### 列ごとにデータを表示 20 | #- 21 | df.x 22 | 23 | ## #src 24 | #- 25 | df.y 26 | 27 | ## #src 28 | #- 29 | df.f 30 | 31 | ## #src 32 | # ### データオブジェクトの型を調べる 33 | #- 34 | typeof(df) 35 | 36 | ## #src 37 | #- 38 | typeof(df.y) 39 | 40 | ## #src 41 | #- 42 | typeof(df.x) 43 | 44 | ## #src 45 | #- 46 | typeof(df.f) 47 | 48 | ## #src 49 | ### データの要約 50 | #- 51 | describe(df) 52 | 53 | ## #src 54 | # ## 3.3 統計モデリングの前にデータを図示する 55 | # ### データの図示 56 | # 散布図 57 | #- 58 | scatter(df.x, df.y, group=df.f) 59 | 60 | ## #src 61 | # 箱ひげ図 62 | #- 63 | boxplot(df.f, df.y, label="") 64 | 65 | ## #src 66 | # ## 3.4 ポアソン回帰の統計モデル 67 | # ### 3.4.2 当てはめと当てはまりの良さ 68 | # ### GLMのフィッティング 69 | # http://juliastats.github.io/GLM.jl/latest/examples/ 70 | #- 71 | names(df) 72 | 73 | ## #src 74 | #- 75 | result = glm(@formula(y ~ x), df, GLM.Poisson()) 76 | 77 | ## #src 78 | #- 79 | loglikelihood(result) 80 | 81 | ## #src 82 | # ### 3.4.3 ポアソン回帰モデルによる予測 83 | #- 84 | plot(df.x, df.y, group=df.f, seriestype=:scatter) 85 | xx = range(minimum(df.x), maximum(df.x), length=100) 86 | plot!(xx, exp.(1.29 .+ 0.0757 .* xx), linewidth=2, label=L"\lambda") 87 | 88 | ## #src 89 | #- 90 | plot(df.x, df.y, group = df.f, seriestype=:scatter) 91 | xx = DataFrame(x=range(minimum(df.x), maximum(df.x), length=100)) 92 | yy = predict(result, xx) 93 | plot!(xx.x, yy, linewidth=2, label=L"\lambda") 94 | 95 | ## #src 96 | # ## 3.5 説明変数が因子型の統計モデル 97 | #- 98 | result_f = glm(@formula(y ~ f), df, GLM.Poisson()) 99 | 100 | ## #src 101 | #- 102 | loglikelihood(result_f) 103 | 104 | ## #src 105 | # ## 3.6 説明変数が数量型 + 因子型の統計モデル 106 | #- 107 | result_all = glm(@formula(y ~ x + f), df, GLM.Poisson()) 108 | 109 | ## #src 110 | #- 111 | loglikelihood(result_all) 112 | 113 | ## #src 114 | # ### 対数リンク関数のわかりやすさ : 掛け算される効果 115 | # 恒等リンク関数 116 | #- 117 | result_identity = glm(@formula(y ~ x + f), df, GLM.Poisson(), IdentityLink()) 118 | 119 | ## #src 120 | #- 121 | loglikelihood(result_identity) 122 | -------------------------------------------------------------------------------- /src/section5.jl: -------------------------------------------------------------------------------- 1 | # # 5 GLMの尤度比検定と検定の非対称性 2 | 3 | ## #src 4 | #- 5 | using CSV 6 | using Distributions 7 | using GLM 8 | using Plots 9 | using StatsBase 10 | using Statistics 11 | 12 | ## #src 13 | #- 14 | df = CSV.read(joinpath("..", "data/section3.csv")) 15 | 16 | ## #src 17 | # ### 5.4.1 方法(1) 汎用性のあるパラメトリックブートストラップ法 18 | # 一定モデル 19 | #- 20 | fit1 = glm(@formula(y ~ 1), df, GLM.Poisson()) 21 | 22 | ## #src 23 | # xモデル 24 | #- 25 | fit2 = glm(@formula(y ~ x), df, GLM.Poisson()) 26 | 27 | ## #src 28 | # ### 残差逸脱度の差 29 | #- 30 | deviance(fit1) - deviance(fit2) 31 | 32 | ## #src 33 | # ### 真のモデルから100個体分のデータを新しく生成 34 | #- 35 | df.y_rnd = rand(Poisson(mean(df.y)), 100) 36 | 37 | ## #src 38 | # ### 一定モデルとxモデルをこの真データに当てはめる 39 | #- 40 | fit1 = glm(@formula(y_rnd ~ 1), df, GLM.Poisson()) 41 | fit2 = glm(@formula(y_rnd ~ x), df, GLM.Poisson()) 42 | deviance(fit1) - deviance(fit2) 43 | 44 | ## #src 45 | # ### PB法を実行する関数 46 | # データの生成と逸脱度差の評価 47 | function get_dd(df) 48 | n_samples = size(df, 1) 49 | y_mean = mean(df.y) 50 | df.y_rnd = rand(Poisson(y_mean), n_samples) 51 | fit1 = glm(@formula(y_rnd ~ 1), df, GLM.Poisson()) 52 | fit2 = glm(@formula(y_rnd ~ x), df, GLM.Poisson()) 53 | deviance(fit1) - deviance(fit2) 54 | end 55 | 56 | ## #src 57 | #- 58 | function pb(df, n_bootstrap) 59 | [get_dd(df) for _ in 1:n_bootstrap] 60 | end 61 | 62 | ## #src 63 | # ### 逸脱度の差のサンプルを1000個を作成 64 | #- 65 | dd12 = pb(df, 1000) 66 | 67 | ## #src 68 | #- 69 | describe(dd12) 70 | 71 | ## #src 72 | #- 73 | histogram(dd12, bins=100, label="") 74 | plot!([4.5], seriestype=:vline, linestyle=:dash, label="") 75 | 76 | ## #src 77 | # 合計1000個の$\Delta D_{1,2}$のうちいくつが4.5より右にあるか 78 | #- 79 | sum(dd12 .>= 4.5) 80 | 81 | ## #src 82 | # $P=0.05$となる逸脱度の差 83 | #- 84 | quantile(dd12, 0.95) 85 | 86 | ## #src 87 | # ### 方法(2) $\chi^2$分布を使った近似計算法 88 | #- 89 | ccdf(Chisq(1), 4.513) 90 | -------------------------------------------------------------------------------- /src/section6.jl: -------------------------------------------------------------------------------- 1 | # # 6 GLMの応用範囲をひろげる -ロジスティック回帰など- 2 | 3 | ## #src 4 | #- 5 | using CSV 6 | using DataFrames 7 | using Distributions 8 | using GLM 9 | using LaTeXStrings 10 | using LinearAlgebra 11 | using Plots 12 | using StatsBase 13 | 14 | ## #src 15 | # ## 6.2 例題 : 上限のあるカウントデータ 16 | #- 17 | df = CSV.read(joinpath("..", "data/section6a.csv")) 18 | 19 | ## #src 20 | #- 21 | disallowmissing!(df) 22 | 23 | ## #src 24 | #- 25 | scatter(df.x, df.y, group=df.f, 26 | xlabel="Plant size", 27 | ylabel="Number of survival seeds") 28 | 29 | ## #src 30 | #- 31 | describe(df) 32 | 33 | ## #src 34 | # ## 6.3 二項分布で表現する「あり・なし」カウントデータ 35 | # https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Binomial 36 | #- 37 | xx = 0:8 38 | plt = plot(ylabel="Probability") 39 | for x = [0.1, 0.3, 0.8] 40 | yy = pdf.(Binomial(8, x), xx) 41 | plot!(xx, yy, lw=2, label=x, markershape=:auto, 42 | legendtitle="q", legend=:bottomright) 43 | end 44 | display(plt) 45 | 46 | ## #src 47 | # ## 6.4 ロジスティック回帰とロジットリンク関数 48 | #- 49 | logistic(z) = 1 / (1 + exp(-z)) 50 | 51 | ## #src 52 | #- 53 | z = -6:0.1:6 54 | plot(z, logistic.(z), lw=2, title="Logistic function", 55 | xlabel="Linear predictor", ylabel="Probability", label="") 56 | 57 | ## #src 58 | # ### 6.4.2 パラメータ推定¶ 59 | # Juliaでは、Binomial分布の場合、応答変数はfractionにしなければならない 60 | # https://github.com/JuliaStats/GLM.jl/issues/228#issuecomment-387340111 61 | #- 62 | df.yy = df.y ./ df.N 63 | df.N = convert(Array{Float64}, df.N) 64 | result = glm(@formula(yy ~ x + f), df, Binomial(), wts=df.N) 65 | 66 | ## #src 67 | #- 68 | dfc = df[df.f .== "C", :]; 69 | scatter(dfc.x, dfc.y, label="C") 70 | xx = DataFrame(x=range(minimum(dfc.x), maximum(dfc.x), length=100), f="C") 71 | yy = predict(result, xx) * 8.0 72 | plot!(xx.x, yy, lw=2,label="", 73 | xlabel="Plant size", ylabel="Number of survival seeds") 74 | 75 | ## #src 76 | #- 77 | dft = df[df.f .== "T", :]; 78 | scatter(dft.x, dft.y, label="T", color=:red) 79 | xx = DataFrame(x = range(minimum(dft.x), maximum(dft.x), length=100), f="T") 80 | yy = predict(result, xx) * 8.0 81 | plot!(xx.x, yy, lw=2, label="", 82 | xlabel="Plant size", ylabel="Number of survival seeds") 83 | 84 | ## #src 85 | #- 86 | typeof(result) 87 | 88 | ## #src 89 | # ## 6.4.4 ロジスティック回帰のモデル選択 90 | # $k, \log L^*, $deriance$ - 2\log L^*$, residual deviance, AIC 91 | #- 92 | function model_selection_table(result) 93 | dof(result), loglikelihood(result), -2loglikelihood(result), deviance(result), aic(result) 94 | end 95 | 96 | ## #src 97 | #- 98 | const_model = glm(@formula(yy ~ 1), df, Binomial(), wts=df.N) 99 | model_selection_table(const_model) 100 | 101 | ## #src 102 | #- 103 | f_model = glm(@formula(yy ~ 1 + f), df, Binomial(), wts=df.N) 104 | model_selection_table(f_model) 105 | 106 | ## #src 107 | #- 108 | x_model = glm(@formula(yy ~ 1 + x), df, Binomial(), wts=df.N) 109 | model_selection_table(x_model) 110 | 111 | ## #src 112 | #- 113 | xf_model = glm(@formula(yy ~ 1 + x + f), df, Binomial(), wts=df.N) 114 | model_selection_table(xf_model) 115 | 116 | ## #src 117 | # ## 6.5 交互作用項の入った線形予測子 118 | #- 119 | interaction_model = glm(@formula(yy ~ x + f + x * f), df, Binomial(), wts=df.N) 120 | 121 | ## #src 122 | #- 123 | model_selection_table(interaction_model) 124 | 125 | ## #src 126 | # ## 6.6 割算値の統計モデリングはやめよう 127 | # ### 6.6.1 割算値いらずのオフセット項わざ 128 | #- 129 | df_population = CSV.read(joinpath("..", "data/section6b.csv")) 130 | 131 | ## #src 132 | #- 133 | scatter(df_population.A, df_population.y, 134 | markeralpha=df_population.x, label="", 135 | xlabel="Area", ylabel="Plant population") 136 | 137 | ## #src 138 | #- 139 | population_reseult = glm(@formula(y ~ x), df_population, GLM.Poisson(), offset=log.(df_population.A)) 140 | 141 | ## #src 142 | # ### 明るさごとの平均個体数の予測 143 | #- 144 | plt = scatter(df_population.A, df_population.y, 145 | markeralpha=df_population.x, label="", 146 | title="Prediction", 147 | xlabel="Area", ylabel="Plant population", 148 | legendtitle="Brightness", legend=:topleft) 149 | 150 | for j = 0.1:0.2:0.9 151 | xx = DataFrame(A=range(minimum(df_population.A), maximum(df_population.A), length=100), x=j) 152 | yy = predict(population_reseult, xx, offset=log.(xx.A)) 153 | plot!(xx.A, yy, lw=2, color=:red, linealpha=j, label=j) 154 | end 155 | 156 | display(plt) 157 | 158 | ## #src 159 | # ## 6.7 正規分布とその尤度¶ 160 | # https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Normal 161 | # ### 確率密度関数のプロット 162 | # オレンジの領域の面積は$1.2 \le y \le 1.8$となる確率を表す 163 | #- 164 | y = -5:0.1:5 165 | fill_y = 1.2:0.1:1.8 166 | 167 | plot(y, pdf.(Normal(), y), lw=2, label="", ylims=(0, 0.4), 168 | title=L"\mu=0, \sigma=1", 169 | ylabel="Probability density") 170 | 171 | plot!(fill_y, pdf.(Normal(), fill_y), 172 | label="", fillrange=0, fillalpha=0.5, 173 | linecolor=:transparent, fillcolor=:orange) 174 | 175 | ## #src 176 | #- 177 | plot(y, pdf.(Normal(0, 3), y), lw=2, label="", ylims=(0, 0.4), 178 | title=L"\mu=0, \sigma=3", 179 | ylabel="Probability density") 180 | 181 | plot!(fill_y, pdf.(Normal(0, 3), fill_y), label="", fillrange=0, fillalpha=0.5, 182 | linecolor=:transparent, fillcolor=:orange) 183 | 184 | ## #src 185 | #- 186 | plot(y, pdf.(Normal(2, 1), y), lw=2, label="", ylims = (0, 0.4), 187 | title = L"\mu=2, \sigma=1", 188 | ylabel = "Probability density") 189 | 190 | plot!(fill_y, pdf.(Normal(2, 1), fill_y), label="", fillrange=0, fillalpha=0.5, 191 | linecolor=:transparent, fillcolor=:orange) 192 | 193 | ## #src 194 | # $p(1.2 \le y \le 1.8 | \mu, \sigma)$を評価する 195 | #- 196 | cdf(Normal(), 1.8) - cdf(Normal(), 1.2) 197 | 198 | ## #src 199 | # 近似 200 | #- 201 | pdf.(Normal(), 1.5) * 0.6 202 | 203 | ## #src 204 | # ## 6.8 ガンマ分布のGLM 205 | # https://juliastats.github.io/Distributions.jl/latest/univariate.html#Distributions.Gamma 206 | # 207 | # Distribution.jlのパラメトライズ $$ f(x; \alpha, \theta) = \frac{x^{\alpha-1} e^{-x/\theta}}{\Gamma(\alpha) \theta^\alpha}, \quad x > 0 $$ 208 | #- 209 | d = CSV.read(joinpath("..", "data/section6c.csv")) 210 | 211 | ## #src 212 | #- 213 | d.logx = log.(d.x) 214 | d 215 | 216 | ## #src 217 | #- 218 | scatter(d.x, d.y, label="", 219 | xlabel="Weight of leaf", ylabel="Weight of flower") 220 | 221 | ## #src 222 | # ## 確率密度関数のプロット 223 | # オレンジの領域の面積は$1.2 \le y \le 1.8$となる確率を表す 224 | #- 225 | y = 0:0.01:5 226 | fill_y = 1.2:0.05:1.8 227 | 228 | plot(y, pdf.(Gamma(1, 1), y), lw=2, label="", ylims=(0, 1.0), 229 | title=L"r=s=1", 230 | ylabel="Probability density") 231 | 232 | plot!(fill_y, pdf.(Gamma(1, 1), fill_y), 233 | label="", fillrange=0, fillalpha=0.5, 234 | linecolor=:transparent, fillcolor=:orange) 235 | 236 | ## #src 237 | #- 238 | plot(y, pdf.(Gamma(5, 1 / 5), y), lw=2, label="", ylims=(0, 1.0), 239 | title=L"r=s=5", 240 | ylabel="Probability density") 241 | 242 | plot!(fill_y, pdf.(Gamma(5, 1 / 5), fill_y), 243 | label="", fillrange=0, fillalpha=0.5, 244 | linecolor=:transparent, fillcolor=:orange) 245 | 246 | ## #src 247 | #- 248 | plot(y, pdf.(Gamma(0.1, 1 / 0.1), y), lw=2, label="", ylims=(0, 1.0), 249 | title=L"r=s=0.1", 250 | ylabel="Probability density") 251 | 252 | plot!(fill_y, pdf.(Gamma(0.1, 1 / 0.1), fill_y), 253 | label="", fillrange=0, fillalpha=0.5, 254 | linecolor=:transparent, fillcolor=:orange) 255 | 256 | ## #src 257 | # ### GLM 258 | #- 259 | gamma_result = glm(@formula(y ~ logx), d, Gamma(), LogLink()) 260 | 261 | ## #src 262 | #- 263 | mm = gamma_result.model 264 | 265 | ## #src 266 | # 推定された結果、ガンマ分布を使って評価された50%と90%区間の予測を示す 267 | #- 268 | xx = DataFrame(x=0.01:0.01:0.8) 269 | xx.logx = log.(xx.x) 270 | mm_mean = predict(gamma_result, xx) 271 | 272 | ## #src 273 | # Dispersion parameter 274 | # https://juliastats.github.io/GLM.jl/stable/api/#GLM.dispersion 275 | #- 276 | mm_phi = GLM.dispersion(mm, true) 277 | 278 | ## #src 279 | #- 280 | mm_alpha = 1 / mm_phi 281 | mm_theta = mm_mean .* mm_phi 282 | 283 | ## #src 284 | #- 285 | xs_gamma = Gamma.(mm_alpha, mm_theta) 286 | 287 | ## #src 288 | #- 289 | scatter(d.x, d.y, label="", legend=:topleft, 290 | xlabel="Weight of leaf", ylabel="Weight of flower") 291 | 292 | g_quantile(r) = quantile.(xs_gamma, r) 293 | 294 | plot!(xx.x, g_quantile(0.95), lw=0, 295 | fillrange=g_quantile(0.05), fillalpha=0.3, fillcolor=:orange, 296 | label="90% Confidence interval") 297 | plot!(xx.x, g_quantile(0.75), lw=0, fillcolor=:red, 298 | fillrange=g_quantile(0.25), fillalpha=0.3, 299 | label="50% Confidence interval") 300 | plot!(xx.x, mm_mean, lw=2, label="Prediction", linecolor=:red) 301 | plot!(xx.x, mean.(Gamma.(1 / 0.3, exp.([ones(80) xx.logx] * [-1, 0.7]) .* 0.3)), 302 | lw=2, label="True mean", linestyle=:dash, linecolor=:blue) 303 | plot!(xx.x, g_quantile(0.5), lw=2, label="50% Percentile", linecolor=:green) 304 | 305 | -------------------------------------------------------------------------------- /src/section7.jl: -------------------------------------------------------------------------------- 1 | 2 | # # 7 一般化線形混合モデル (GLMM) -個体差のモデリング- 3 | 4 | ## #src 5 | #- 6 | using CSV 7 | using DataFrames 8 | using DataStructures 9 | using Distributions 10 | using GLM 11 | using LaTeXStrings 12 | using LinearAlgebra 13 | using Plots 14 | using QuadGK 15 | using StatsBase 16 | using Statistics 17 | using MixedModels 18 | 19 | ## #src 20 | # ## 7.1 例題 : GLMでは説明できないカウントデータ 21 | #- 22 | df = CSV.read(joinpath("..", "data/section7.csv")) 23 | 24 | ## #src 25 | #- 26 | df.N = convert(Array{Float64}, df.N) 27 | df.yy = df.y ./ df.N 28 | disallowmissing!(df) 29 | categorical!(df, :id) 30 | 31 | ## #src 32 | # ### データの図示 33 | # 個体数をマーカーの大きさに反映させている 34 | # 35 | # 破線は「真の」生存確率の一例 36 | #- 37 | logistic(z) = 1 / (1 + exp(-z)) 38 | 39 | xs = 2:0.1:6 40 | cols = [:x, :y] 41 | df_plot = combine(groupby(df, cols), names(df, Not(cols)) .=> length) 42 | 43 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="") 44 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), label="", 45 | xlabel=L"x_i", ylabel=L"y_i", 46 | linestyle=:dash, linewidth=2, linecolor=:black) 47 | 48 | ## #src 49 | # ### GLMを使ってデータから種子の生存確率を推定 50 | #- 51 | glm_model = glm(@formula(yy ~ x), df, Binomial(), wts=df.N) 52 | 53 | ## #src 54 | #- 55 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="", 56 | xlabel=L"x_i", ylabel=L"y_i") 57 | 58 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), label="", 59 | linestyle=:dash, linewidth=2, linecolor=:red) 60 | 61 | xx = DataFrame(x = xs) 62 | 63 | plot!(xs, predict(glm_model, xx) .* 8, 64 | label="Prediction", linewidth=2, linecolor=:black) 65 | 66 | ## #src 67 | # ### 葉数が4となるデータのサブセットを作る 68 | #- 69 | d4 = df[df.x .== 4, :] 70 | 71 | ## #src 72 | #- 73 | cols = [:x, :y] 74 | d4_plot = combine(groupby(d4, cols), names(d4, Not(cols)) .=> length) 75 | 76 | ## #src 77 | #- 78 | xs4 = 0:8 79 | ys4 = pdf.(Binomial(8, 0.47), xs4) * 20 80 | scatter(d4_plot.y, d4_plot.id_length, label="", 81 | xlabel=L"y_i", ylabel="count") 82 | plot!(xs4, ys4, linewidth=2, label="", marker=4) 83 | 84 | ## #src 85 | # ## 7.2 過分散と個体差¶ 86 | # ### 7.2.1 過分散 : ばらつきが大きすぎる 87 | # 生存数ごとにカウントする 88 | #- 89 | SortedDict(countmap(d4.y)) 90 | 91 | ## #src 92 | # データの平均と分散を調べる 93 | mean(d4.y), var(d4.y) 94 | 95 | ## #src 96 | # ### 7.4.1 Juliaを使ってGLMMのパラメーターを推定 97 | # MixedModels.jlを使う 98 | # https://juliastats.org/MixedModels.jl/latest/index.html 99 | # 100 | # フィッティング結果は本文のものとは少し異なる。 101 | # 102 | # $\hat{\beta}_1 = -4.19, \hat{\beta}_2 = 1.00, \hat{s}=2.41,$ residual deviance 103 | #- 104 | glmm_model = fit(MixedModel, @formula(yy ~ x + (1 | id)), df, Binomial(); wts=df.N) 105 | 106 | ## #src 107 | #- 108 | scatter(df_plot.x, df_plot.y, markersize=df_plot.id_length .* 2, label="", 109 | xlabel=L"x_i", ylabel=L"y_i", legend=:topleft) 110 | 111 | plot!(xs, mean.(Binomial.(8, logistic.(-4 .+ 1 .* xs))), 112 | label="Actual", 113 | linestyle=:dash, linewidth=2, linecolor=:red) 114 | 115 | plot!(xs, mean.(Binomial.(8, logistic.([fill(1, length(xs)) xs] * coef(glmm_model)))), 116 | label="Prediction", linewidth=2, linecolor=:blue) 117 | 118 | ## #src 119 | #- 120 | Binomial(8, logistic(dot([1 4], coef(glmm_model)))) 121 | 122 | ## #src 123 | # ### 分布を混ぜる 124 | #- 125 | function f_gaussian_binorm(alpha, x, size, fixed, sd) 126 | pdf(Binomial(size, logistic(fixed + alpha)), x) * pdf(Normal(0, sd), alpha) 127 | end 128 | 129 | function d_gaussian_binorm(x, fixed, sd) 130 | quadgk(y -> f_gaussian_binorm(y, x, 8, fixed, sd), -sd * 10, sd * 10)[1] 131 | end 132 | 133 | ## #src 134 | # ### GLMMから予測された混合二項分布をプロットする 135 | #- 136 | 137 | ## #src 138 | #- 139 | coef(glmm_model) 140 | 141 | ## #src 142 | #- 143 | glmm_model.σs 144 | 145 | ## #src 146 | #- 147 | pdf_gaussian_binorm = d_gaussian_binorm.(0:8, dot([1 4], coef(glmm_model)), glmm_model.σs[1][1]) 148 | scatter(d4_plot.y, d4_plot.id_length, label="", 149 | xlabel=L"y_i", ylabel="count") 150 | plot!(0:8, pdf_gaussian_binorm * 20, linewidth=2, marker=4, label="") 151 | -------------------------------------------------------------------------------- /src/section9.jl: -------------------------------------------------------------------------------- 1 | # ## 9 GLMのベイズモデル化と事後分布の推定 2 | # GraphViz はJulia 1.0をサポートしていないため、ForneyLabを使う 3 | 4 | ## #src 5 | #- 6 | using CSV 7 | using DataFrames 8 | using ForneyLab 9 | using GLM 10 | using LaTeXStrings 11 | using LinearAlgebra 12 | using Mamba 13 | using Plots 14 | using Random 15 | Random.seed!(0) 16 | 17 | ## #src 18 | #- 19 | df = CSV.read(joinpath("..", "data/section9.csv")) 20 | disallowmissing!(df) 21 | 22 | ## #src 23 | # ## 9.1 例題 : 種子数のポアソン回帰 (個体差なし) 24 | #- 25 | glm_model = glm(@formula(y ~ x), df, GLM.Poisson()) 26 | 27 | ## #src 28 | #- 29 | scatter(df.x, df.y, label="", xlabel="Size", ylabel="Number of seeds") 30 | xs = 3:0.1:7 31 | xx = DataFrame(x=xs) 32 | plot!(xs, exp.(1.5 .+ 0.1 .* xs), label="Actual", linewidth=2, 33 | linestyle=:dash, linecolor=:red) 34 | plot!(xs, predict(glm_model, xx), label="Prediction", linewidth=2, 35 | linecolor=:black) 36 | 37 | ## #src 38 | # ## 9.4 ベイズ統計モデルの事後分布の推定 39 | # ### 9.4.1 ベイズ統計モデルのコーディング 40 | # $$\begin{align} y_i \sim \text{Poisson}(\lambda_i)\\ 41 | # \log(\lambda_i) = \beta_1 + \beta_2 \cdot x_i\\ 42 | # \beta_1 \sim \text{Normal}(0, 100^2)\\ 43 | # \beta_2 \sim \text{Normal}(0, 100^2) \end{align}$$ 44 | # 45 | # Mamba.jl ( https://mambajl.readthedocs.io/ )を使う 46 | # ### モデルの作成 47 | #- 48 | model = Model( 49 | y = Stochastic(1, 50 | (N, lambda) -> 51 | (UnivariateDistribution[Mamba.Poisson(lambda[i]) for i in 1:N]), 52 | false 53 | ), 54 | 55 | lambda = Logical(1, 56 | (x, beta) -> exp.(x * beta) 57 | ), 58 | 59 | beta = Stochastic(1, 60 | () -> MvNormal(2, 100) 61 | ), 62 | ) 63 | 64 | 65 | ## #src 66 | # ### モデルをプロットする 67 | #- 68 | display("image/svg+xml", ForneyLab.dot2svg(graph2dot(model))) 69 | 70 | ## #src 71 | # ### データの設定 72 | #- 73 | data = Dict{Symbol, Any}( 74 | :x => [ones(length(df.x)) df.x], 75 | :y => df.y[:], 76 | :N => length(df.x) 77 | ) 78 | 79 | ## #src 80 | # ### 初期値の設定 81 | #- 82 | inits = [ 83 | Dict{Symbol, Any}( 84 | :y => df.y[:], 85 | :beta => zeros(2), 86 | ) for _ in 1:3 87 | ] 88 | 89 | ## #src 90 | # ### サンプラーの設定 91 | #- 92 | scheme = [NUTS([:beta])] 93 | 94 | ## #src 95 | # ### MCMCシミュレーション 96 | #- 97 | setsamplers!(model, scheme) 98 | sim = mcmc(model, data, inits, 1600, burnin=100, thin=3, chains=3) 99 | 100 | ## #src 101 | # ### 9.4.3 どれだけ長くMCMCサンプリングすればいいのか? 102 | #- 103 | p = Mamba.plot(sim[:, :beta, :], [:autocor, :mean], legend=true) 104 | Mamba.draw(p, nrow=2, ncol=2) 105 | 106 | ## #src 107 | # ### Gelman-Rubin diagnostic ($\hat{R}$)の推定値 108 | #- 109 | gelmandiag(sim[:, :beta, :], mpsrf=true, transform=true) 110 | 111 | ## #src 112 | # ## 9.5 MCMCサンプルから事後分布を推定¶ 113 | # ### シミュレーション結果の表示と図示 114 | #- 115 | p = Mamba.plot(sim[:, :beta, :], legend=true) 116 | Mamba.draw(p, nrow=2, ncol=2) 117 | 118 | ## #src 119 | # ### 9.5.1 事後分布の統計量 120 | #- 121 | describe(sim[:, :beta, :]) 122 | 123 | ## #src 124 | #- 125 | xs = collect(3:0.1:7) 126 | xs_mat = [ones(length(xs)) xs] 127 | 128 | sim_beta = sim[:, [:beta], :].value 129 | sim_beta = reshape(permutedims(sim_beta, (2, 1, 3)), size(sim_beta, 2), :) 130 | 131 | ## #src 132 | #- 133 | beta_median = vec(mapslices(median, sim[:, [:beta], :].value, dims=(1,3))) 134 | 135 | ## #src 136 | #- 137 | Plots.plot(xs, exp.(xs_mat * sim_beta), label="", linecolor=:red, linealpha=0.1) 138 | Plots.plot!(xs, exp.(xs_mat * beta_median), label="", 139 | linewidth=2, linecolor=:black) 140 | scatter!(df.x, df.y, 141 | label="", 142 | markercolor=:orange, 143 | xlabel="Size", ylabel="Number of seeds", 144 | title="Estimation of lambda") 145 | 146 | ## #src 147 | #- 148 | p = Mamba.plot(sim[:, :beta, :], :contour) 149 | Mamba.draw(p, nrow=1, ncol=1) 150 | --------------------------------------------------------------------------------