From 75625b3830d056b77c01931bb5c667ace1305717 Mon Sep 17 00:00:00 2001 From: droodman Date: Sun, 11 Jun 2023 19:16:55 -0400 Subject: [PATCH] Created modern package structure; dropped use of RealVector and RealMatrix --- .vscode/settings.json | 1 + Manifest.toml | 545 +++++++++++++++++++++++++++++++++++++++++ Project.toml | 11 + README.md | 8 +- src/KernelEstimator.jl | 1 - src/bandwidth.jl | 44 ++-- src/confidenceband.jl | 4 +- src/density.jl | 6 +- src/kernel.jl | 24 +- src/regression.jl | 18 +- 10 files changed, 609 insertions(+), 53 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 Manifest.toml create mode 100644 Project.toml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Manifest.toml b/Manifest.toml new file mode 100644 index 0000000..9a6f1b0 --- /dev/null +++ b/Manifest.toml @@ -0,0 +1,545 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.9.0" +manifest_format = "2.0" +project_hash = "e429c63f1fc52306dfb0815f84611a876b8f089a" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "d3f758863a47ceef2248d136657cb9c033603641" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.8" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["UUIDs"] +git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.6.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.0.2+0" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.2" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.DataAPI]] +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.15.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.13" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "c72970914c8a21b36bbc244e9df0ed1834a0360b" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.95" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] +git-tree-sha1 = "589d3d3bff204bdd80ecc53293896b4f39175723" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.1.1" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.21.1" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.HCubature]] +deps = ["Combinatorics", "DataStructures", "LinearAlgebra", "QuadGK", "StaticArrays"] +git-tree-sha1 = "e95b36755023def6ebc3d269e6483efa8b2f7f65" +uuid = "19dc6840-f33b-545b-b366-655c7e3ffd49" +version = "1.5.1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "0ec02c648befc2f94156eaef13b0f38106212f3f" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.17" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.3" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "7.84.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.10.2+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] +git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.2.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.24" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.10" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+0" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.1.0" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.10.11" + +[[deps.NLSolversBase]] +deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] +git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "7.8.3" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.21+4" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optim]] +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "e3a6546c1577bfd701771b477b794a52949e7594" +uuid = "429524aa-4258-5aef-a3af-852621145aeb" +version = "1.7.6" + +[[deps.OrderedCollections]] +git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.0" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.17" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.9.0" + +[[deps.PositiveFactorizations]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" +uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" +version = "0.2.4" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.8.2" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.0+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.1.0" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.2.0" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +git-tree-sha1 = "832afbae2a45b4ae7e831f86965469a24d1d8a83" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.5.26" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.6.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.0" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.0" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.7.0+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.48.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" diff --git a/Project.toml b/Project.toml new file mode 100644 index 0000000..df76b38 --- /dev/null +++ b/Project.toml @@ -0,0 +1,11 @@ +name = "KernelEstimator" +uuid = "e8459dcc-5408-418a-be5a-5bde8017c691" +authors = ["Lanfeng Pan", "Tony Kelman", "Patrick Kofod Mogensen", "droodman "] +version = "0.1.1" + +[deps] +Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +HCubature = "19dc6840-f33b-545b-b366-655c7e3ffd49" +Optim = "429524aa-4258-5aef-a3af-852621145aeb" +SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" +StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" diff --git a/README.md b/README.md index 2da6174..e225074 100644 --- a/README.md +++ b/README.md @@ -52,17 +52,17 @@ There is also a function computing the bootstrap confidence interval for regress The following functions are also provided: - - `localconstant(xdata::RealVector, ydata::RealVector; xeval::RealVector=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel))`, local constant regression (or Nadaraya-Watson) + - `localconstant(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel))`, local constant regression (or Nadaraya-Watson) - - `locallinear(xdata::RealVector, ydata::RealVector; xeval::RealVector=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel))`, local linear regression + - `locallinear(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel))`, local linear regression and bandwidth selection functions: - `bwnormal(xdata::Vector)`, bandwidth selection for density estimate by referencing to normal distribution - - `bwlscv(xdata::RealVector, kernel::Function)`, bandwidth selection for density estimate by least square cross validation + - `bwlscv(xdata::AbstractVector{<:Real}, kernel::Function)`, bandwidth selection for density estimate by least square cross validation - - `bwlcv(xdata::RealVector, kernel::Function)`, bandwidth selection for density estimate by likelihood cross validation + - `bwlcv(xdata::AbstractVector{<:Real}, kernel::Function)`, bandwidth selection for density estimate by likelihood cross validation - `bwlocalconstant(xdata, ydata::Vector, kernel)`, bandwidth selection for local constant regression using LSCV diff --git a/src/KernelEstimator.jl b/src/KernelEstimator.jl index 09e1e08..2dc7699 100644 --- a/src/KernelEstimator.jl +++ b/src/KernelEstimator.jl @@ -5,7 +5,6 @@ using Distributions using Optim using StatsBase using HCubature -import StatsBase: RealVector, RealMatrix using Distributions: invsqrt2π, log2π, sqrt2, invsqrt2 using SpecialFunctions diff --git a/src/bandwidth.jl b/src/bandwidth.jl index 0ca113d..2ab8ce0 100644 --- a/src/bandwidth.jl +++ b/src/bandwidth.jl @@ -1,10 +1,10 @@ ####bandwidth selector for kernel density #rule of thumb -function bwnormal(xdata::RealVector) +function bwnormal(xdata::AbstractVector{<:Real}) 0.9 * min((quantile(xdata, .75) - quantile(xdata, .25)) / 1.34, std(xdata)) * length(xdata) ^ (-0.2) end -function midrange(x::RealVector) +function midrange(x::AbstractVector{<:Real}) lq, uq = quantile(x, [.25, .75]) uq - lq end @@ -14,7 +14,7 @@ end #J(h) = invsqrt2π/(n²h) ∑ᵢⱼ (exp(-0.25u*u)/sqrt(2) - 2exp(-0.5u*u)) + 2 * invsqrt2π/nh #J(h) = 2*invsqrt2π/(n²h) ∑{ibegin kernel(x, xdata,h,w,n); mean(w)^2; end, xlb, xub, maxevals=200)[1] - leaveoneout(xdata, kernel, h, w, n) end -function leaveoneout(xdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function leaveoneout(xdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) ll = 0.0 @inbounds for ind in 1:n @@ -57,10 +57,10 @@ function leaveoneout(xdata::RealVector, kernel::Function, h::Real, w::Vector, n: ll * 2 / (n-1) end #For betakernel -function Jh(xdata::RealVector, logxdata::RealVector,log1_xdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int, xlb::Real, xub::Real) +function Jh(xdata::AbstractVector{<:Real}, logxdata::AbstractVector{<:Real},log1_xdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int, xlb::Real, xub::Real) hquadrature(x->begin kernel(x, logxdata, log1_xdata, h,w,n); mean(w)^2; end, xlb, xub, maxevals=200)[1] - leaveoneout(xdata, logxdata, log1_xdata, kernel, h, w, n) end -function leaveoneout(xdata::RealVector, logxdata::RealVector, log1_xdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function leaveoneout(xdata::AbstractVector{<:Real}, logxdata::AbstractVector{<:Real}, log1_xdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) ll = 0.0 @inbounds for ind in 1:n @@ -71,10 +71,10 @@ function leaveoneout(xdata::RealVector, logxdata::RealVector, log1_xdata::RealVe ll * 2 / (n-1) end #For gammakernel -function Jh(xdata::RealVector, logxdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int, xlb::Real, xub::Real) +function Jh(xdata::AbstractVector{<:Real}, logxdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int, xlb::Real, xub::Real) hquadrature(x->begin kernel(x, xdata, logxdata, h,w,n); mean(w)^2; end, xlb, xub, maxevals=200)[1] - leaveoneout(xdata, logxdata, kernel, h, w, n) end -function leaveoneout(xdata::RealVector, logxdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function leaveoneout(xdata::AbstractVector{<:Real}, logxdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) ll = 0.0 @inbounds for ind in 1:n @@ -87,7 +87,7 @@ end #Least Squares cross validation for Gaussian Kernel #May fail to work if there are multiple equial x_i # Silverman suggest search interval be (0.25, 1.5)n^(-0.2)σ -function bwlscv(xdata::RealVector, kernel::Function) +function bwlscv(xdata::AbstractVector{<:Real}, kernel::Function) n=length(xdata) w = zeros(n) h0=bwnormal(xdata) @@ -119,7 +119,7 @@ end #there seems no other easy way; least square cross validation can be formidable because their convolution have no close form #may also work for other kernels, but likelihood cv has some known disadvantages. #Not recommended, but easy to implement for arbitrary kernel -function lcv(xdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function lcv(xdata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) # -mean(kerneldensity(xdata,xdata,kernel,h)) + mean(map(kernel, xdata, xdata, h)) ind = 1 ind_end = 1+n @@ -132,7 +132,7 @@ function lcv(xdata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) end -ll end -function bwlcv(xdata::RealVector, kernel::Function) +function bwlcv(xdata::AbstractVector{<:Real}, kernel::Function) n = length(xdata) w = zeros(n) h0=midrange(xdata) @@ -144,7 +144,7 @@ function bwlcv(xdata::RealVector, kernel::Function) return Optim.minimizer(Optim.optimize(h->lcv(xdata,kernel,h,w,n), hlb, hub, iterations=200,abs_tol=h0/n^2)) end -function lcv(xdata::RealMatrix, kernel::Vector, h::RealVector, w::Vector, n::Int) +function lcv(xdata::AbstractMatrix{<:Real}, kernel::Vector, h::AbstractVector{<:Real}, w::Vector, n::Int) # -mean(kerneldensity(xdata,xdata,kernel,h)) + mean(map(kernel, xdata, xdata, h)) if any(h .<= 0.0) return Inf @@ -170,7 +170,7 @@ function lcv(xdata::RealMatrix, kernel::Vector, h::RealVector, w::Vector, n::Int end -ll end -function bwlcv(xdata::RealMatrix, kernel::Vector) +function bwlcv(xdata::AbstractMatrix{<:Real}, kernel::Vector) n, p = size(xdata) w = ones(n) h0 = zeros(p) @@ -201,7 +201,7 @@ end #leave-one-out LSCV. 1/n \sum((yi - yihat)/(1-wi)) -function lscvlocalconstant(xdata::RealVector, ydata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function lscvlocalconstant(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) tmp = 0.0 ind = 1 ind_end = 1 + n @@ -215,7 +215,7 @@ function lscvlocalconstant(xdata::RealVector, ydata::RealVector, kernel::Functio tmp/n end -function bwlocalconstant(xdata::RealVector, ydata::RealVector, kernel::Function=gaussiankernel) +function bwlocalconstant(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, kernel::Function=gaussiankernel) n=length(xdata) length(ydata)==n || error("length(ydata) != length(xdata)") w = ones(n) @@ -239,7 +239,7 @@ end # Clifford M. Hurvich, Jeffrey S. Simonoff and Chih-Ling Tsai # Journal of the Royal Statistical Society. Series B (Statistical Methodology), Vol. 60, No. 2 (1998), pp. 271-293 #http://www.jstor.org/stable/2985940 -function AIClocallinear(xdata::RealVector, ydata::RealVector, kernel::Function, h::Real, w::Vector, n::Int) +function AIClocallinear(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, kernel::Function, h::Real, w::Vector, n::Int) tmp = 0.0 traceH = 0.0 ind = 1 @@ -259,7 +259,7 @@ function AIClocallinear(xdata::RealVector, ydata::RealVector, kernel::Function, tmp/n + 2*(traceH+1)/(n-traceH-2) end -function bwlocallinear(xdata::RealVector, ydata::RealVector, kernel::Function=gaussiankernel) +function bwlocallinear(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, kernel::Function=gaussiankernel) n=length(xdata) length(ydata)==n || error("length(ydata) != length(xdata)") w = ones(n) @@ -279,7 +279,7 @@ function bwlocallinear(xdata::RealVector, ydata::RealVector, kernel::Function=ga Optim.minimizer(Optim.optimize(h->AIClocallinear(xdata, ydata, kernel,h, w, n), hlb, hub)) end -function bwreg(xdata::RealVector, ydata::RealVector, reg::Function, kernel::Function=gaussiankernel) +function bwreg(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, reg::Function, kernel::Function=gaussiankernel) if (reg == locallinear) || (reg == lp1) return bwlocallinear(xdata, ydata, kernel) @@ -293,7 +293,7 @@ end # #leave-one-out LSCV for multivariate NW -function lscvlocalconstant(xdata::RealMatrix, ydata::RealVector, kernel::Array{Function, 1}, h::RealVector, w::Vector, n::Int) +function lscvlocalconstant(xdata::AbstractMatrix{<:Real}, ydata::AbstractVector{<:Real}, kernel::Array{Function, 1}, h::AbstractVector{<:Real}, w::Vector, n::Int) if any(h .<= 0.0) return Inf end @@ -317,7 +317,7 @@ function lscvlocalconstant(xdata::RealMatrix, ydata::RealVector, kernel::Array{F tmp/n end -function bwlocalconstant(xdata::RealMatrix, ydata::RealVector, kernel::Array{Function, 1} = Function[gaussiankernel for i in 1:size(xdata)[2]]) +function bwlocalconstant(xdata::AbstractMatrix{<:Real}, ydata::AbstractVector{<:Real}, kernel::Array{Function, 1} = Function[gaussiankernel for i in 1:size(xdata)[2]]) n, p = size(xdata) w = ones(n) h0 = zeros(p) diff --git a/src/confidenceband.jl b/src/confidenceband.jl index 681bead..1fd5963 100644 --- a/src/confidenceband.jl +++ b/src/confidenceband.jl @@ -1,6 +1,6 @@ #Bootstrap confidence band for univariate nonparametric regression -function bootstrapCB(xdata::RealVector, ydata::RealVector; - xeval::RealVector=xdata, B::Int64=500, reg::Function=locallinear, lb::Real=-Inf, ub::Real=Inf, kernel::Function=gaussiankernel, h::Real=-Inf, alpha::Real=0.05) +function bootstrapCB(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; + xeval::AbstractVector{<:Real}=xdata, B::Int64=500, reg::Function=locallinear, lb::Real=-Inf, ub::Real=Inf, kernel::Function=gaussiankernel, h::Real=-Inf, alpha::Real=0.05) n=length(xdata) y_matrix=zeros(B, length(xeval)) diff --git a/src/density.jl b/src/density.jl index 59a907a..f098aec 100644 --- a/src/density.jl +++ b/src/density.jl @@ -1,5 +1,5 @@ -function kerneldensity(xdata::RealVector; xeval::RealVector=xdata, lb::Real=-Inf, ub::Real=Inf, kernel::Function=gaussiankernel, h::Real=-Inf) +function kerneldensity(xdata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, lb::Real=-Inf, ub::Real=Inf, kernel::Function=gaussiankernel, h::Real=-Inf) xdata, xeval, kernel = boundit(xdata, xeval, kernel, lb, ub) if h <= 0 @@ -15,8 +15,8 @@ function kerneldensity(xdata::RealVector; xeval::RealVector=xdata, lb::Real=-Inf return den end -function kerneldensity(xdata::RealMatrix; xeval::RealMatrix=xdata, - kernel::Vector=[gaussiankernel for i in 1:size(xdata)[2]], h::RealVector=-Inf .* ones(size(xdata, 2))) +function kerneldensity(xdata::AbstractMatrix{<:Real}; xeval::AbstractMatrix{<:Real}=xdata, + kernel::Vector=[gaussiankernel for i in 1:size(xdata)[2]], h::AbstractVector{<:Real}=-Inf .* ones(size(xdata, 2))) if any(h .<= 0) h = bwlcv(xdata, kernel) diff --git a/src/kernel.jl b/src/kernel.jl index 70ad618..a11b95f 100644 --- a/src/kernel.jl +++ b/src/kernel.jl @@ -1,18 +1,18 @@ rhoxb(x::Real, b::Real) = 2*b*b + 2.5 - sqrt(4*b^4 + 6*b*b+2.25 - x*x - x/b) -function multiply!(des::RealVector, x::RealVector, y::Real, n::Int=length(x)) +function multiply!(des::AbstractVector{<:Real}, x::AbstractVector{<:Real}, y::Real, n::Int=length(x)) for i in 1:n @inbounds des[i] = x[i]*y end end -multiply!(x::RealVector, y::Real) = multiply!(x, x, y) -function divide!(des::RealVector, x::RealVector, y::Real, n::Int=length(x)) +multiply!(x::AbstractVector{<:Real}, y::Real) = multiply!(x, x, y) +function divide!(des::AbstractVector{<:Real}, x::AbstractVector{<:Real}, y::Real, n::Int=length(x)) for i in 1:n @inbounds des[i] = x[i]/y end end -divide!(x::RealVector, y::Real) = divide!(x, x, y) -function minus!(des::RealVector, y::Float64, x::RealVector, n::Int64=length(x)) +divide!(x::AbstractVector{<:Real}, y::Real) = divide!(x, x, y) +function minus!(des::AbstractVector{<:Real}, y::Float64, x::AbstractVector{<:Real}, n::Int64=length(x)) for i in 1:n @inbounds des[i] = y - x[i] end @@ -24,13 +24,13 @@ function add!(x::Vector{Float64}, y::Float64, n::Int64=length(x)) end nothing end -function abs2!(des::RealVector, x::RealVector, n::Int64=length(x)) +function abs2!(des::AbstractVector{<:Real}, x::AbstractVector{<:Real}, n::Int64=length(x)) for i in 1:n @inbounds des[i] = abs2(x[i]) end nothing end -function betakernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) +function betakernel(x::Real, xdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) a = x / h - 1 b = (1 - x) / h - 1 if (x < 0) || (x > 1) @@ -57,7 +57,7 @@ function betakernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) w .= exp.(w) nothing end -function betakernel(x::Real, logxdata::RealVector, log1_xdata::RealVector, h::Real, w::Vector, n::Int) +function betakernel(x::Real, logxdata::AbstractVector{<:Real}, log1_xdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) a = x / h - 1 b = (1 - x) / h - 1 if (x < 0) || (x > 1) @@ -78,7 +78,7 @@ function betakernel(x::Real, logxdata::RealVector, log1_xdata::RealVector, h::Re end #f̂(x) = 1/n ∑ᵢ K(xᵢ;x /b+1, b ) #xdata should be positive, or domain error will be raised. -function gammakernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) +function gammakernel(x::Real, xdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) rhob = x/h if x <= 0 fill!(w, 0.0) @@ -98,7 +98,7 @@ function gammakernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) w .= exp.(w) nothing end -function gammakernel(x::Real, xdata::RealVector, logxdata::RealVector, h::Real, w::Vector, n::Int) +function gammakernel(x::Real, xdata::AbstractVector{<:Real}, logxdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) rhob = x/h if x <= 0 fill!(w, 0.0) @@ -119,7 +119,7 @@ function gammakernel(x::Real, xdata::RealVector, logxdata::RealVector, h::Real, nothing end -function gaussiankernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) +function gaussiankernel(x::Real, xdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) # for ind in 1:n # @inbounds w[ind] = normlogpdf(xdata[ind], h, x) @@ -138,7 +138,7 @@ function gaussiankernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) nothing end -function ekernel(x::Real, xdata::RealVector, h::Real, w::Vector, n::Int) +function ekernel(x::Real, xdata::AbstractVector{<:Real}, h::Real, w::Vector, n::Int) ind = 1 ind_end = 1+n @inbounds while ind < ind_end diff --git a/src/regression.jl b/src/regression.jl index f2262e3..6559fd2 100644 --- a/src/regression.jl +++ b/src/regression.jl @@ -1,6 +1,6 @@ #univariate nadaraya-watson estimate -function localconstant(xdata::RealVector, ydata::RealVector; xeval::RealVector=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel)) +function localconstant(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, kernel::Function=gaussiankernel, h::Real=bwlocalconstant(xdata,ydata,kernel)) n=length(xdata) length(ydata) == n || error("length(ydata) != length(xdata)") @@ -12,16 +12,16 @@ function localconstant(xdata::RealVector, ydata::RealVector; xeval::RealVector=x end pre end -localconstant(xdata::RealVector, ydata::RealVector, xeval::Real; kernel::Function = gaussiankernel, h::Real = bwlocalconstant(xdata,ydata,kernel)) = localconstant(xdata, ydata, xeval = [xeval;], kernel=kernel, h = h) +localconstant(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, xeval::Real; kernel::Function = gaussiankernel, h::Real = bwlocalconstant(xdata,ydata,kernel)) = localconstant(xdata, ydata, xeval = [xeval;], kernel=kernel, h = h) -function wsumsqdiff(w::RealVector, xdata::RealVector, xeval::Real, n::Int) +function wsumsqdiff(w::AbstractVector{<:Real}, xdata::AbstractVector{<:Real}, xeval::Real, n::Int) res = 0.0 for i in 1:n @inbounds res += w[i]*(xdata[i]-xeval).^2 end res end -function wsumyxdiff(w::RealVector, xdata::RealVector, xeval::Real, ydata::RealVector, n::Int) +function wsumyxdiff(w::AbstractVector{<:Real}, xdata::AbstractVector{<:Real}, xeval::Real, ydata::AbstractVector{<:Real}, n::Int) res = 0.0 for i in 1:n @inbounds res += w[i]*ydata[i]*(xeval-xdata[i]) @@ -30,7 +30,7 @@ function wsumyxdiff(w::RealVector, xdata::RealVector, xeval::Real, ydata::RealVe end ##univariate local linear -function locallinear(xdata::RealVector, ydata::RealVector; xeval::RealVector=xdata, kernel::Function=gaussiankernel, h::Real=bwlocallinear(xdata, ydata, kernel)) +function locallinear(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, kernel::Function=gaussiankernel, h::Real=bwlocallinear(xdata, ydata, kernel)) n=length(xdata) length(ydata) == n || error("length of ydata not the same with xdata") w = ones(n) @@ -46,11 +46,11 @@ function locallinear(xdata::RealVector, ydata::RealVector; xeval::RealVector=xda end pre end -locallinear(xdata::RealVector, ydata::RealVector, xeval::Real; kernel::Function = gaussiankernel, h::Real = bwlocallinear(xdata,ydata,kernel)) = locallinear(xdata, ydata, xeval=[xeval;], kernel=kernel, h=h) +locallinear(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}, xeval::Real; kernel::Function = gaussiankernel, h::Real = bwlocallinear(xdata,ydata,kernel)) = locallinear(xdata, ydata, xeval=[xeval;], kernel=kernel, h=h) -function boundit(xdata::RealVector, xeval::RealVector, kernel::Function, lb::Real, ub::Real) +function boundit(xdata::AbstractVector{<:Real}, xeval::AbstractVector{<:Real}, kernel::Function, lb::Real, ub::Real) if (lb == -Inf) && (ub == Inf) return (xdata, xeval, kernel) elseif (lb > -Inf) && (ub < Inf) @@ -81,7 +81,7 @@ function boundit(xdata::RealVector, xeval::RealVector, kernel::Function, lb::Rea (xdata, xeval, kernel) end -function npr(xdata::RealVector, ydata::RealVector; xeval::RealVector=xdata, +function npr(xdata::AbstractVector{<:Real}, ydata::AbstractVector{<:Real}; xeval::AbstractVector{<:Real}=xdata, reg::Function=locallinear, lb::Real=-Inf, ub::Real=Inf, kernel::Function=gaussiankernel, h::Real=-Inf) xdata, xeval, kernel = boundit(xdata, xeval, kernel, lb, ub) @@ -93,7 +93,7 @@ end # #multi-variate nadaraya-watson regression or local linear -function localconstant(xdata::RealMatrix, ydata::RealVector; kernel::Array{Function, 1}=Function[gaussiankernel for i in 1:size(xdata)[2]], xeval::RealMatrix=xdata, h::RealVector=bwlocalconstant(xdata, ydata, kernel)) +function localconstant(xdata::AbstractMatrix{<:Real}, ydata::AbstractVector{<:Real}; kernel::Array{Function, 1}=Function[gaussiankernel for i in 1:size(xdata)[2]], xeval::AbstractMatrix{<:Real}=xdata, h::AbstractVector{<:Real}=bwlocalconstant(xdata, ydata, kernel)) m, p = size(xeval) n, p1 = size(xdata)