From e4415e5ee0eb281e4a476bc1568f516d80b7acf6 Mon Sep 17 00:00:00 2001 From: Yaqing Chen Date: Thu, 30 May 2019 14:15:14 -0700 Subject: [PATCH] delete R.check files --- fdapace.Rcheck/00_pkg_src/fdapace/.travis.yml | 28 - fdapace.Rcheck/00_pkg_src/fdapace/DESCRIPTION | 46 - .../00_pkg_src/fdapace/ISSUE_TEMPLATE.md | 15 - fdapace.Rcheck/00_pkg_src/fdapace/LICENSE | 3 - fdapace.Rcheck/00_pkg_src/fdapace/NAMESPACE | 118 - fdapace.Rcheck/00_pkg_src/fdapace/NEWS | 59 - .../00_pkg_src/fdapace/R/BestDes_SR.R | 31 - .../00_pkg_src/fdapace/R/BestDes_TR.R | 37 - fdapace.Rcheck/00_pkg_src/fdapace/R/BinData.R | 53 - .../00_pkg_src/fdapace/R/BinRawCov.R | 46 - fdapace.Rcheck/00_pkg_src/fdapace/R/BwNN.R | 59 - .../00_pkg_src/fdapace/R/CVLwls1D.R | 112 - .../fdapace/R/CheckAndCreateCOPoptions.R | 113 - .../00_pkg_src/fdapace/R/CheckData.R | 46 - .../00_pkg_src/fdapace/R/CheckOptions.R | 181 - .../00_pkg_src/fdapace/R/CheckSVDOptions.R | 18 - .../00_pkg_src/fdapace/R/CompFntCent.R | 29 - .../00_pkg_src/fdapace/R/CondProjection.R | 57 - .../00_pkg_src/fdapace/R/ConvertSupport.R | 42 - .../00_pkg_src/fdapace/R/CreateBWPlot.R | 110 - .../00_pkg_src/fdapace/R/CreateBasis.R | 78 - .../00_pkg_src/fdapace/R/CreateCovPlot.R | 108 - .../00_pkg_src/fdapace/R/CreateDesignPlot.R | 125 - .../fdapace/R/CreateDiagnosticsPlot.R | 12 - .../00_pkg_src/fdapace/R/CreateFolds.R | 60 - .../00_pkg_src/fdapace/R/CreateFuncBoxPlot.R | 247 - .../fdapace/R/CreateModeOfVarPlot.R | 89 - .../00_pkg_src/fdapace/R/CreateOutliersPlot.R | 309 - .../00_pkg_src/fdapace/R/CreatePathPlot.R | 142 - .../00_pkg_src/fdapace/R/CreateScreePlot.R | 46 - .../fdapace/R/CreateStringingPlot.R | 82 - .../00_pkg_src/fdapace/R/CreateTrueMean.R | 8 - .../00_pkg_src/fdapace/R/DesignPlotCount.R | 46 - fdapace.Rcheck/00_pkg_src/fdapace/R/DynCorr.R | 64 - .../00_pkg_src/fdapace/R/Dyn_test.R | 110 - fdapace.Rcheck/00_pkg_src/fdapace/R/FAM.R | 195 - fdapace.Rcheck/00_pkg_src/fdapace/R/FCCor.R | 83 - fdapace.Rcheck/00_pkg_src/fdapace/R/FCReg.R | 365 - fdapace.Rcheck/00_pkg_src/fdapace/R/FClust.R | 78 - fdapace.Rcheck/00_pkg_src/fdapace/R/FOptDes.R | 132 - fdapace.Rcheck/00_pkg_src/fdapace/R/FPCA.R | 246 - fdapace.Rcheck/00_pkg_src/fdapace/R/FPCAder.R | 276 - fdapace.Rcheck/00_pkg_src/fdapace/R/FPCReg.R | 637 - .../00_pkg_src/fdapace/R/FPCquantile.R | 134 - fdapace.Rcheck/00_pkg_src/fdapace/R/FSVD.R | 256 - fdapace.Rcheck/00_pkg_src/fdapace/R/FVPA.R | 73 - .../00_pkg_src/fdapace/R/FitEigenValues.R | 34 - .../00_pkg_src/fdapace/R/GCVLwls1D1.R | 99 - .../00_pkg_src/fdapace/R/GCVLwls2DV2.R | 251 - .../fdapace/R/GenerateFunctionalData.R | 32 - .../00_pkg_src/fdapace/R/GetBinNum.R | 45 - .../00_pkg_src/fdapace/R/GetBinnedCurve.R | 120 - .../00_pkg_src/fdapace/R/GetBinnedDataset.R | 56 - .../00_pkg_src/fdapace/R/GetCEScores.R | 105 - .../00_pkg_src/fdapace/R/GetCount.R | 15 - .../00_pkg_src/fdapace/R/GetCovDense.R | 71 - .../00_pkg_src/fdapace/R/GetCrCorYX.R | 61 - .../00_pkg_src/fdapace/R/GetCrCorYZ.R | 56 - .../00_pkg_src/fdapace/R/GetCrCovYX.R | 247 - .../00_pkg_src/fdapace/R/GetCrCovYX_old.R | 214 - .../00_pkg_src/fdapace/R/GetCrCovYZ.R | 120 - .../fdapace/R/GetEigenAnalysisResults.R | 55 - .../00_pkg_src/fdapace/R/GetINScores.R | 45 - .../00_pkg_src/fdapace/R/GetLogLik.R | 73 - .../00_pkg_src/fdapace/R/GetMeanDense.R | 36 - fdapace.Rcheck/00_pkg_src/fdapace/R/GetMinb.R | 39 - .../fdapace/R/GetNormalisedSample.R | 50 - .../00_pkg_src/fdapace/R/GetRawCov.R | 118 - .../fdapace/R/GetRawCrCovFuncFunc.R | 61 - .../fdapace/R/GetRawCrCovFuncScal.R | 25 - fdapace.Rcheck/00_pkg_src/fdapace/R/GetRho.R | 57 - .../fdapace/R/GetSmoothedCovarSurface.R | 122 - .../fdapace/R/GetSmoothedMeanCurve.R | 68 - .../00_pkg_src/fdapace/R/GetUserCov.R | 35 - .../00_pkg_src/fdapace/R/GetUserMeanCurve.R | 19 - .../fdapace/R/HandleNumericsAndNAN.R | 38 - .../00_pkg_src/fdapace/R/IsRegular.R | 15 - .../00_pkg_src/fdapace/R/List2Mat.R | 18 - fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls1D.R | 44 - fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2D.R | 93 - .../00_pkg_src/fdapace/R/Lwls2DDeriv.R | 90 - .../00_pkg_src/fdapace/R/MCVOptRidge.R | 188 - .../00_pkg_src/fdapace/R/MakeBWtoZscore02y.R | 49 - .../00_pkg_src/fdapace/R/MakeFPCAInputs.R | 52 - .../fdapace/R/MakeGPFunctionalData.R | 56 - .../00_pkg_src/fdapace/R/MakeHCtoZscore02y.R | 41 - .../00_pkg_src/fdapace/R/MakeLNtoZscore02y.R | 45 - .../00_pkg_src/fdapace/R/MakeResultFPCA.R | 85 - .../00_pkg_src/fdapace/R/MakeSparseGP.R | 105 - fdapace.Rcheck/00_pkg_src/fdapace/R/MapX1D.R | 35 - .../00_pkg_src/fdapace/R/MgnJntDensity.R | 143 - fdapace.Rcheck/00_pkg_src/fdapace/R/Minb.R | 30 - .../00_pkg_src/fdapace/R/MultiFAM.R | 249 - .../00_pkg_src/fdapace/R/NWMgnReg.R | 55 - .../00_pkg_src/fdapace/R/NormCurveToArea.R | 23 - .../00_pkg_src/fdapace/R/NormKernel.R | 56 - fdapace.Rcheck/00_pkg_src/fdapace/R/PC_CovE.R | 83 - .../00_pkg_src/fdapace/R/RcppExports.R | 83 - .../00_pkg_src/fdapace/R/RotateLwls2DV2.R | 24 - .../00_pkg_src/fdapace/R/SBFCompUpdate.R | 78 - .../00_pkg_src/fdapace/R/SBFitting.R | 201 - .../00_pkg_src/fdapace/R/ScaleKernel.R | 40 - fdapace.Rcheck/00_pkg_src/fdapace/R/SelectK.R | 87 - .../00_pkg_src/fdapace/R/SetDerOptions.R | 31 - .../00_pkg_src/fdapace/R/SetOptions.R | 262 - .../00_pkg_src/fdapace/R/SetSVDOptions.R | 98 - .../00_pkg_src/fdapace/R/Sparsify.R | 71 - .../00_pkg_src/fdapace/R/Stringing.R | 129 - .../00_pkg_src/fdapace/R/SubsetFPCA.R | 11 - fdapace.Rcheck/00_pkg_src/fdapace/R/TVAM.R | 178 - .../00_pkg_src/fdapace/R/TruncateObs.R | 12 - fdapace.Rcheck/00_pkg_src/fdapace/R/VCAM.R | 346 - fdapace.Rcheck/00_pkg_src/fdapace/R/WFDA.R | 242 - fdapace.Rcheck/00_pkg_src/fdapace/R/Wiener.R | 53 - .../00_pkg_src/fdapace/R/fitted.FPCA.R | 250 - .../00_pkg_src/fdapace/R/fitted.FPCAder.R | 63 - fdapace.Rcheck/00_pkg_src/fdapace/R/kCFC.R | 113 - .../00_pkg_src/fdapace/R/medfly25.R | 20 - fdapace.Rcheck/00_pkg_src/fdapace/R/pkgname.R | 42 - .../00_pkg_src/fdapace/R/plot.FPCA.R | 121 - .../00_pkg_src/fdapace/R/predict.FPCA.R | 96 - .../00_pkg_src/fdapace/R/print.FPCA.R | 31 - .../00_pkg_src/fdapace/R/print.FSVD.R | 32 - .../00_pkg_src/fdapace/R/print.WFDA.R | 18 - .../00_pkg_src/fdapace/R/str.FPCA.R | 10 - fdapace.Rcheck/00_pkg_src/fdapace/README.md | 26 - .../00_pkg_src/fdapace/build/vignette.rds | Bin 215 -> 0 bytes .../00_pkg_src/fdapace/data/medfly25.RData | Bin 23336 -> 0 bytes .../00_pkg_src/fdapace/deleted_files | 15 - .../00_pkg_src/fdapace/file_history | 11961 ---------------- .../00_pkg_src/fdapace/inst/doc/fdapaceVig.R | 110 - .../fdapace/inst/doc/fdapaceVig.Rmd | 206 - .../fdapace/inst/doc/fdapaceVig.html | 414 - .../testdata/200curvesByExampleSeed123.RData | Bin 759158 -> 0 bytes .../InputForRotatedMllwlskInCpp.RData | Bin 1065 -> 0 bytes .../inst/testdata/InputFormMllwlskInCpp.RData | Bin 1007 -> 0 bytes .../YmatFromWFPCAexample_rng123.RData | Bin 6781 -> 0 bytes .../inst/testdata/dataForGcvLwls.RData | Bin 3318 -> 0 bytes .../inst/testdata/dataForGcvLwlsTest.RData | Bin 3032 -> 0 bytes .../inst/testdata/dataForGetRawCov.RData | Bin 3214 -> 0 bytes .../dataGeneratedByExampleSeed123.RData | Bin 461 -> 0 bytes .../datasetToTestRrotatedSmoother.RData | Bin 869081 -> 0 bytes .../00_pkg_src/fdapace/inst/testdata/gene.dat | 4441 ------ .../fdapace/inst/testdata/growth.dat | 2883 ---- .../inst/testdata/xcovForGetEigens1.csv | 51 - fdapace.Rcheck/00_pkg_src/fdapace/man/BwNN.Rd | 24 - .../00_pkg_src/fdapace/man/CheckData.Rd | 16 - .../00_pkg_src/fdapace/man/CheckOptions.Rd | 18 - .../00_pkg_src/fdapace/man/ConvertSupport.Rd | 26 - .../00_pkg_src/fdapace/man/CreateBWPlot.Rd | 32 - .../00_pkg_src/fdapace/man/CreateBasis.Rd | 27 - .../00_pkg_src/fdapace/man/CreateCovPlot.Rd | 36 - .../fdapace/man/CreateDesignPlot.Rd | 41 - .../fdapace/man/CreateFuncBoxPlot.Rd | 44 - .../fdapace/man/CreateModeOfVarPlot.Rd | 38 - .../fdapace/man/CreateOutliersPlot.Rd | 51 - .../00_pkg_src/fdapace/man/CreatePathPlot.Rd | 58 - .../00_pkg_src/fdapace/man/CreateScreePlot.Rd | 26 - .../fdapace/man/CreateStringingPlot.Rd | 37 - .../00_pkg_src/fdapace/man/DynCorr.Rd | 43 - .../00_pkg_src/fdapace/man/Dyn_test.Rd | 54 - fdapace.Rcheck/00_pkg_src/fdapace/man/FAM.Rd | 143 - .../00_pkg_src/fdapace/man/FCCor.Rd | 57 - .../00_pkg_src/fdapace/man/FCReg.Rd | 80 - .../00_pkg_src/fdapace/man/FClust.Rd | 61 - .../00_pkg_src/fdapace/man/FOptDes.Rd | 56 - fdapace.Rcheck/00_pkg_src/fdapace/man/FPCA.Rd | 98 - .../00_pkg_src/fdapace/man/FPCAder.Rd | 67 - .../00_pkg_src/fdapace/man/FPCReg.Rd | 152 - .../00_pkg_src/fdapace/man/FPCquantile.Rd | 59 - fdapace.Rcheck/00_pkg_src/fdapace/man/FSVD.Rd | 64 - fdapace.Rcheck/00_pkg_src/fdapace/man/FVPA.Rd | 38 - .../00_pkg_src/fdapace/man/GetCrCorYX.Rd | 21 - .../00_pkg_src/fdapace/man/GetCrCorYZ.Rd | 21 - .../00_pkg_src/fdapace/man/GetCrCovYX.Rd | 62 - .../00_pkg_src/fdapace/man/GetCrCovYZ.Rd | 49 - .../fdapace/man/GetNormalisedSample.Rd | 41 - .../00_pkg_src/fdapace/man/Lwls1D.Rd | 32 - .../00_pkg_src/fdapace/man/Lwls2D.Rd | 39 - .../00_pkg_src/fdapace/man/Lwls2DDeriv.Rd | 45 - .../fdapace/man/MakeBWtoZscore02y.Rd | 21 - .../00_pkg_src/fdapace/man/MakeFPCAInputs.Rd | 25 - .../fdapace/man/MakeGPFunctionalData.Rd | 30 - .../fdapace/man/MakeHCtoZscore02y.Rd | 21 - .../fdapace/man/MakeLNtoZscore02y.Rd | 21 - .../00_pkg_src/fdapace/man/MakeSparseGP.Rd | 35 - .../00_pkg_src/fdapace/man/MultiFAM.Rd | 172 - .../00_pkg_src/fdapace/man/NormCurvToArea.Rd | 21 - .../00_pkg_src/fdapace/man/SBFitting.Rd | 94 - .../00_pkg_src/fdapace/man/SelectK.Rd | 30 - .../00_pkg_src/fdapace/man/SetOptions.Rd | 20 - .../00_pkg_src/fdapace/man/Sparsify.Rd | 27 - .../00_pkg_src/fdapace/man/Stringing.Rd | 50 - fdapace.Rcheck/00_pkg_src/fdapace/man/TVAM.Rd | 88 - fdapace.Rcheck/00_pkg_src/fdapace/man/VCAM.Rd | 112 - fdapace.Rcheck/00_pkg_src/fdapace/man/WFDA.Rd | 75 - .../00_pkg_src/fdapace/man/Wiener.Rd | 31 - .../00_pkg_src/fdapace/man/cumtrapzRcpp.Rd | 16 - .../00_pkg_src/fdapace/man/fdapace.Rd | 34 - .../00_pkg_src/fdapace/man/fitted.FPCA.Rd | 76 - .../00_pkg_src/fdapace/man/fitted.FPCAder.Rd | 32 - fdapace.Rcheck/00_pkg_src/fdapace/man/kCFC.Rd | 45 - .../00_pkg_src/fdapace/man/medfly25.Rd | 25 - .../00_pkg_src/fdapace/man/plot.FPCA.Rd | 41 - .../00_pkg_src/fdapace/man/predict.FPCA.Rd | 44 - .../00_pkg_src/fdapace/man/print.FPCA.Rd | 26 - .../00_pkg_src/fdapace/man/print.FSVD.Rd | 16 - .../00_pkg_src/fdapace/man/print.WFDA.Rd | 16 - .../00_pkg_src/fdapace/man/str.FPCA.Rd | 16 - .../00_pkg_src/fdapace/man/trapzRcpp.Rd | 16 - .../00_pkg_src/fdapace/src/CPPlwls1d.cpp | 172 - .../fdapace/src/GetIndCEScoresCPP.cpp | 31 - .../fdapace/src/GetIndCEScoresCPPnewInd.cpp | 49 - .../00_pkg_src/fdapace/src/RCPPmean.cpp | 7 - .../00_pkg_src/fdapace/src/RCPPvar.cpp | 7 - .../00_pkg_src/fdapace/src/RcppExports.cpp | 296 - .../fdapace/src/RcppPseudoApprox.cpp | 42 - .../00_pkg_src/fdapace/src/Rcppsort.cpp | 10 - .../00_pkg_src/fdapace/src/Rmullwlsk.cpp | 176 - .../00_pkg_src/fdapace/src/RmullwlskCC.cpp | 172 - .../fdapace/src/RmullwlskCCsort2.cpp | 209 - .../fdapace/src/RmullwlskUniversal.cpp | 210 - .../fdapace/src/RmullwlskUniversalDeriv.cpp | 244 - .../fdapace/src/RrotatedMullwlsk.cpp | 161 - .../00_pkg_src/fdapace/src/cumtrapzRcpp.cpp | 40 - .../fdapace/src/dropZeroElementsXYWin.cpp | 46 - .../00_pkg_src/fdapace/src/interp2lin.cpp | 129 - .../00_pkg_src/fdapace/src/trapzRcpp.cpp | 40 - .../00_pkg_src/fdapace/tests/AAAtestthat.R | 9 - .../fdapace/tests/testthat/test_BinRawCov.R | 27 - .../fdapace/tests/testthat/test_BwNN.R | 30 - .../fdapace/tests/testthat/test_CheckData.R | 23 - .../tests/testthat/test_ConvertSupport.R | 16 - .../fdapace/tests/testthat/test_CreateBasis.R | 14 - .../testthat/test_CreateDiagnosticPlot.R | 26 - .../fdapace/tests/testthat/test_CreateFolds.R | 50 - .../tests/testthat/test_CreatePathPlot.R | 38 - .../tests/testthat/test_CreateStringingPlot.R | 50 - .../tests/testthat/test_CreateTrueMean.R | 30 - .../fdapace/tests/testthat/test_DynCorr.R | 92 - .../fdapace/tests/testthat/test_Dyn_test.R | 91 - .../fdapace/tests/testthat/test_FCCor.R | 38 - .../fdapace/tests/testthat/test_FCReg.R | 251 - .../fdapace/tests/testthat/test_FClust.R | 42 - .../fdapace/tests/testthat/test_FOptDes.R | 94 - .../fdapace/tests/testthat/test_FPCA.R | 332 - .../fdapace/tests/testthat/test_FPCAder.R | 173 - .../fdapace/tests/testthat/test_FPCReg.R | 170 - .../fdapace/tests/testthat/test_FPCquantile.R | 107 - .../fdapace/tests/testthat/test_FSVD.R | 133 - .../fdapace/tests/testthat/test_FVEdataset.R | 21 - .../fdapace/tests/testthat/test_FVPA.R | 162 - .../tests/testthat/test_FitEigenValues.R | 36 - .../tests/testthat/test_GetBinnedCurve.R | 37 - .../tests/testthat/test_GetBinnedDataset.R | 28 - .../fdapace/tests/testthat/test_GetCEScores.R | 155 - .../fdapace/tests/testthat/test_GetCovDense.R | 45 - .../fdapace/tests/testthat/test_GetCrCovYX.R | 228 - .../testthat/test_GetEigenAnalysisResults.R | 35 - .../tests/testthat/test_GetNormalisedSample.R | 24 - .../fdapace/tests/testthat/test_GetRawCov.R | 44 - .../tests/testthat/test_GetRawCrCovFuncFunc.R | 70 - .../tests/testthat/test_GetRawCrCovFuncScal.R | 39 - .../fdapace/tests/testthat/test_GetRho.R | 91 - .../testthat/test_GetSmoothedCovarSurface.R | 52 - .../testthat/test_GetSmoothedMeanCurve.R | 36 - .../fdapace/tests/testthat/test_IsRegular.R | 11 - .../fdapace/tests/testthat/test_Lwls2D.R | 67 - .../fdapace/tests/testthat/test_Lwls2DDeriv.R | 198 - .../tests/testthat/test_MakeFPCAInputs.R | 52 - .../tests/testthat/test_MakeSparseGP.R | 33 - .../tests/testthat/test_RcppPseudoApprox.R | 16 - .../fdapace/tests/testthat/test_Rmullwlsk.R | 130 - .../tests/testthat/test_RmullwlskUniversal.R | 31 - .../tests/testthat/test_Rrotatemullwlsk.R | 124 - .../fdapace/tests/testthat/test_SBFitting.R | 98 - .../fdapace/tests/testthat/test_SetOptions.R | 13 - .../fdapace/tests/testthat/test_Stringing.R | 175 - .../fdapace/tests/testthat/test_TVAM.R | 150 - .../fdapace/tests/testthat/test_WFDA.R | 185 - .../tests/testthat/test_createDesignPlot.R | 21 - .../tests/testthat/test_cumtrapzRcpp.R | 14 - .../fdapace/tests/testthat/test_cvlwls1d.R | 13 - .../fdapace/tests/testthat/test_fitted.R | 42 - .../fdapace/tests/testthat/test_funSim.R | 66 - .../fdapace/tests/testthat/test_gcvlwls1d1.R | 14 - .../fdapace/tests/testthat/test_gcvlwls2dV2.R | 92 - .../fdapace/tests/testthat/test_getCrCorYX.R | 34 - .../fdapace/tests/testthat/test_getCrCovYZ.R | 136 - .../fdapace/tests/testthat/test_getMinb.R | 24 - .../fdapace/tests/testthat/test_interp2lin.R | 128 - .../fdapace/tests/testthat/test_mapX1d.R | 11 - .../fdapace/tests/testthat/test_minb.R | 11 - .../fdapace/tests/testthat/test_pc_covE.R | 68 - .../fdapace/tests/testthat/test_plotFPCA.R | 23 - .../fdapace/tests/testthat/test_predictFPCA.R | 120 - .../tests/testthat/test_rotateLwls2dV2.R | 15 - .../fdapace/tests/testthat/test_selectK.R | 194 - .../fdapace/tests/testthat/test_trapzRcpp.R | 14 - .../fdapace/tests/testthat/test_useBin.R | 18 - .../fdapace/tests/testthat/test_wiener.R | 18 - .../00_pkg_src/fdapace/tests/testthat_slow.R | 9 - .../fdapace/vignettes/fdapaceVig.Rmd | 206 - .../00_pkg_src/fdapace/vignettes/roxygen.bib | 103 - fdapace.Rcheck/00install.out | 1831 --- fdapace.Rcheck/R_check_bin/R | 2 - fdapace.Rcheck/R_check_bin/Rscript | 2 - fdapace.Rcheck/fdapace-Ex.R | 1600 --- fdapace.Rcheck/fdapace-Ex.Rout | 201 - fdapace.Rcheck/fdapace-Ex.pdf | Bin 71021 -> 0 bytes fdapace.Rcheck/fdapace-Ex.timings | 6 - fdapace.Rcheck/fdapace-manual.pdf | Bin 321957 -> 0 bytes fdapace.Rcheck/fdapace/DESCRIPTION | 47 - fdapace.Rcheck/fdapace/INDEX | 106 - fdapace.Rcheck/fdapace/LICENSE | 3 - fdapace.Rcheck/fdapace/Meta/Rd.rds | Bin 2691 -> 0 bytes fdapace.Rcheck/fdapace/Meta/data.rds | Bin 112 -> 0 bytes fdapace.Rcheck/fdapace/Meta/features.rds | Bin 113 -> 0 bytes fdapace.Rcheck/fdapace/Meta/hsearch.rds | Bin 2375 -> 0 bytes fdapace.Rcheck/fdapace/Meta/links.rds | Bin 953 -> 0 bytes fdapace.Rcheck/fdapace/Meta/nsInfo.rds | Bin 1077 -> 0 bytes fdapace.Rcheck/fdapace/Meta/package.rds | Bin 1671 -> 0 bytes fdapace.Rcheck/fdapace/Meta/vignette.rds | Bin 215 -> 0 bytes fdapace.Rcheck/fdapace/NAMESPACE | 118 - fdapace.Rcheck/fdapace/NEWS | 59 - fdapace.Rcheck/fdapace/R/fdapace | 27 - fdapace.Rcheck/fdapace/R/fdapace.rdb | Bin 499180 -> 0 bytes fdapace.Rcheck/fdapace/R/fdapace.rdx | Bin 3022 -> 0 bytes fdapace.Rcheck/fdapace/data/medfly25.RData | Bin 23336 -> 0 bytes fdapace.Rcheck/fdapace/doc/fdapaceVig.R | 110 - fdapace.Rcheck/fdapace/doc/fdapaceVig.Rmd | 206 - fdapace.Rcheck/fdapace/doc/fdapaceVig.html | 414 - fdapace.Rcheck/fdapace/doc/index.html | 28 - fdapace.Rcheck/fdapace/help/AnIndex | 68 - fdapace.Rcheck/fdapace/help/aliases.rds | Bin 597 -> 0 bytes fdapace.Rcheck/fdapace/help/fdapace.rdb | Bin 161129 -> 0 bytes fdapace.Rcheck/fdapace/help/fdapace.rdx | Bin 1547 -> 0 bytes fdapace.Rcheck/fdapace/help/paths.rds | Bin 680 -> 0 bytes fdapace.Rcheck/fdapace/html/00Index.html | 162 - fdapace.Rcheck/fdapace/html/R.css | 97 - .../testdata/200curvesByExampleSeed123.RData | Bin 759158 -> 0 bytes .../InputForRotatedMllwlskInCpp.RData | Bin 1065 -> 0 bytes .../testdata/InputFormMllwlskInCpp.RData | Bin 1007 -> 0 bytes .../YmatFromWFPCAexample_rng123.RData | Bin 6781 -> 0 bytes .../fdapace/testdata/dataForGcvLwls.RData | Bin 3318 -> 0 bytes .../fdapace/testdata/dataForGcvLwlsTest.RData | Bin 3032 -> 0 bytes .../fdapace/testdata/dataForGetRawCov.RData | Bin 3214 -> 0 bytes .../dataGeneratedByExampleSeed123.RData | Bin 461 -> 0 bytes .../datasetToTestRrotatedSmoother.RData | Bin 869081 -> 0 bytes fdapace.Rcheck/fdapace/testdata/gene.dat | 4441 ------ fdapace.Rcheck/fdapace/testdata/growth.dat | 2883 ---- .../fdapace/testdata/xcovForGetEigens1.csv | 51 - fdapace.Rcheck/tests/AAAtestthat.R | 9 - fdapace.Rcheck/tests/AAAtestthat.Rout.fail | 117 - fdapace.Rcheck/tests/startup.Rs | 4 - fdapace.Rcheck/tests/testthat/Rplots.pdf | Bin 864615 -> 0 bytes .../tests/testthat/test_BinRawCov.R | 27 - fdapace.Rcheck/tests/testthat/test_BwNN.R | 30 - .../tests/testthat/test_CheckData.R | 23 - .../tests/testthat/test_ConvertSupport.R | 16 - .../tests/testthat/test_CreateBasis.R | 14 - .../testthat/test_CreateDiagnosticPlot.R | 26 - .../tests/testthat/test_CreateFolds.R | 50 - .../tests/testthat/test_CreatePathPlot.R | 38 - .../tests/testthat/test_CreateStringingPlot.R | 50 - .../tests/testthat/test_CreateTrueMean.R | 30 - fdapace.Rcheck/tests/testthat/test_DynCorr.R | 92 - fdapace.Rcheck/tests/testthat/test_Dyn_test.R | 91 - fdapace.Rcheck/tests/testthat/test_FCCor.R | 38 - fdapace.Rcheck/tests/testthat/test_FCReg.R | 251 - fdapace.Rcheck/tests/testthat/test_FClust.R | 42 - fdapace.Rcheck/tests/testthat/test_FOptDes.R | 94 - fdapace.Rcheck/tests/testthat/test_FPCA.R | 332 - fdapace.Rcheck/tests/testthat/test_FPCAder.R | 173 - fdapace.Rcheck/tests/testthat/test_FPCReg.R | 170 - .../tests/testthat/test_FPCquantile.R | 107 - fdapace.Rcheck/tests/testthat/test_FSVD.R | 133 - .../tests/testthat/test_FVEdataset.R | 21 - fdapace.Rcheck/tests/testthat/test_FVPA.R | 162 - .../tests/testthat/test_FitEigenValues.R | 36 - .../tests/testthat/test_GetBinnedCurve.R | 37 - .../tests/testthat/test_GetBinnedDataset.R | 28 - .../tests/testthat/test_GetCEScores.R | 155 - .../tests/testthat/test_GetCovDense.R | 45 - .../tests/testthat/test_GetCrCovYX.R | 228 - .../testthat/test_GetEigenAnalysisResults.R | 35 - .../tests/testthat/test_GetNormalisedSample.R | 24 - .../tests/testthat/test_GetRawCov.R | 44 - .../tests/testthat/test_GetRawCrCovFuncFunc.R | 70 - .../tests/testthat/test_GetRawCrCovFuncScal.R | 39 - fdapace.Rcheck/tests/testthat/test_GetRho.R | 91 - .../testthat/test_GetSmoothedCovarSurface.R | 52 - .../testthat/test_GetSmoothedMeanCurve.R | 36 - .../tests/testthat/test_IsRegular.R | 11 - fdapace.Rcheck/tests/testthat/test_Lwls2D.R | 67 - .../tests/testthat/test_Lwls2DDeriv.R | 198 - .../tests/testthat/test_MakeFPCAInputs.R | 52 - .../tests/testthat/test_MakeSparseGP.R | 33 - .../tests/testthat/test_RcppPseudoApprox.R | 16 - .../tests/testthat/test_Rmullwlsk.R | 130 - .../tests/testthat/test_RmullwlskUniversal.R | 31 - .../tests/testthat/test_Rrotatemullwlsk.R | 124 - .../tests/testthat/test_SBFitting.R | 98 - .../tests/testthat/test_SetOptions.R | 13 - .../tests/testthat/test_Stringing.R | 175 - fdapace.Rcheck/tests/testthat/test_TVAM.R | 150 - fdapace.Rcheck/tests/testthat/test_WFDA.R | 185 - .../tests/testthat/test_createDesignPlot.R | 21 - .../tests/testthat/test_cumtrapzRcpp.R | 14 - fdapace.Rcheck/tests/testthat/test_cvlwls1d.R | 13 - fdapace.Rcheck/tests/testthat/test_fitted.R | 42 - fdapace.Rcheck/tests/testthat/test_funSim.R | 66 - .../tests/testthat/test_gcvlwls1d1.R | 14 - .../tests/testthat/test_gcvlwls2dV2.R | 92 - .../tests/testthat/test_getCrCorYX.R | 34 - .../tests/testthat/test_getCrCovYZ.R | 136 - fdapace.Rcheck/tests/testthat/test_getMinb.R | 24 - .../tests/testthat/test_interp2lin.R | 128 - fdapace.Rcheck/tests/testthat/test_mapX1d.R | 11 - fdapace.Rcheck/tests/testthat/test_minb.R | 11 - fdapace.Rcheck/tests/testthat/test_pc_covE.R | 68 - fdapace.Rcheck/tests/testthat/test_plotFPCA.R | 23 - .../tests/testthat/test_predictFPCA.R | 120 - .../tests/testthat/test_rotateLwls2dV2.R | 15 - fdapace.Rcheck/tests/testthat/test_selectK.R | 194 - .../tests/testthat/test_trapzRcpp.R | 14 - fdapace.Rcheck/tests/testthat/test_useBin.R | 18 - fdapace.Rcheck/tests/testthat/test_wiener.R | 18 - fdapace.Rcheck/tests/testthat_slow.R | 9 - fdapace.Rcheck/tests/testthat_slow.Rout.fail | 118 - fdapace.Rcheck/vign_test/fdapace/.travis.yml | 28 - fdapace.Rcheck/vign_test/fdapace/DESCRIPTION | 46 - .../vign_test/fdapace/ISSUE_TEMPLATE.md | 15 - fdapace.Rcheck/vign_test/fdapace/LICENSE | 3 - fdapace.Rcheck/vign_test/fdapace/NAMESPACE | 118 - fdapace.Rcheck/vign_test/fdapace/NEWS | 59 - .../vign_test/fdapace/R/BestDes_SR.R | 31 - .../vign_test/fdapace/R/BestDes_TR.R | 37 - fdapace.Rcheck/vign_test/fdapace/R/BinData.R | 53 - .../vign_test/fdapace/R/BinRawCov.R | 46 - fdapace.Rcheck/vign_test/fdapace/R/BwNN.R | 59 - fdapace.Rcheck/vign_test/fdapace/R/CVLwls1D.R | 112 - .../fdapace/R/CheckAndCreateCOPoptions.R | 113 - .../vign_test/fdapace/R/CheckData.R | 46 - .../vign_test/fdapace/R/CheckOptions.R | 181 - .../vign_test/fdapace/R/CheckSVDOptions.R | 18 - .../vign_test/fdapace/R/CompFntCent.R | 29 - .../vign_test/fdapace/R/CondProjection.R | 57 - .../vign_test/fdapace/R/ConvertSupport.R | 42 - .../vign_test/fdapace/R/CreateBWPlot.R | 110 - .../vign_test/fdapace/R/CreateBasis.R | 78 - .../vign_test/fdapace/R/CreateCovPlot.R | 108 - .../vign_test/fdapace/R/CreateDesignPlot.R | 125 - .../fdapace/R/CreateDiagnosticsPlot.R | 12 - .../vign_test/fdapace/R/CreateFolds.R | 60 - .../vign_test/fdapace/R/CreateFuncBoxPlot.R | 247 - .../vign_test/fdapace/R/CreateModeOfVarPlot.R | 89 - .../vign_test/fdapace/R/CreateOutliersPlot.R | 309 - .../vign_test/fdapace/R/CreatePathPlot.R | 142 - .../vign_test/fdapace/R/CreateScreePlot.R | 46 - .../vign_test/fdapace/R/CreateStringingPlot.R | 82 - .../vign_test/fdapace/R/CreateTrueMean.R | 8 - .../vign_test/fdapace/R/DesignPlotCount.R | 46 - fdapace.Rcheck/vign_test/fdapace/R/DynCorr.R | 64 - fdapace.Rcheck/vign_test/fdapace/R/Dyn_test.R | 110 - fdapace.Rcheck/vign_test/fdapace/R/FAM.R | 195 - fdapace.Rcheck/vign_test/fdapace/R/FCCor.R | 83 - fdapace.Rcheck/vign_test/fdapace/R/FCReg.R | 365 - fdapace.Rcheck/vign_test/fdapace/R/FClust.R | 78 - fdapace.Rcheck/vign_test/fdapace/R/FOptDes.R | 132 - fdapace.Rcheck/vign_test/fdapace/R/FPCA.R | 246 - fdapace.Rcheck/vign_test/fdapace/R/FPCAder.R | 276 - fdapace.Rcheck/vign_test/fdapace/R/FPCReg.R | 637 - .../vign_test/fdapace/R/FPCquantile.R | 134 - fdapace.Rcheck/vign_test/fdapace/R/FSVD.R | 256 - fdapace.Rcheck/vign_test/fdapace/R/FVPA.R | 73 - .../vign_test/fdapace/R/FitEigenValues.R | 34 - .../vign_test/fdapace/R/GCVLwls1D1.R | 99 - .../vign_test/fdapace/R/GCVLwls2DV2.R | 251 - .../fdapace/R/GenerateFunctionalData.R | 32 - .../vign_test/fdapace/R/GetBinNum.R | 45 - .../vign_test/fdapace/R/GetBinnedCurve.R | 120 - .../vign_test/fdapace/R/GetBinnedDataset.R | 56 - .../vign_test/fdapace/R/GetCEScores.R | 105 - fdapace.Rcheck/vign_test/fdapace/R/GetCount.R | 15 - .../vign_test/fdapace/R/GetCovDense.R | 71 - .../vign_test/fdapace/R/GetCrCorYX.R | 61 - .../vign_test/fdapace/R/GetCrCorYZ.R | 56 - .../vign_test/fdapace/R/GetCrCovYX.R | 247 - .../vign_test/fdapace/R/GetCrCovYX_old.R | 214 - .../vign_test/fdapace/R/GetCrCovYZ.R | 120 - .../fdapace/R/GetEigenAnalysisResults.R | 55 - .../vign_test/fdapace/R/GetINScores.R | 45 - .../vign_test/fdapace/R/GetLogLik.R | 73 - .../vign_test/fdapace/R/GetMeanDense.R | 36 - fdapace.Rcheck/vign_test/fdapace/R/GetMinb.R | 39 - .../vign_test/fdapace/R/GetNormalisedSample.R | 50 - .../vign_test/fdapace/R/GetRawCov.R | 118 - .../vign_test/fdapace/R/GetRawCrCovFuncFunc.R | 61 - .../vign_test/fdapace/R/GetRawCrCovFuncScal.R | 25 - fdapace.Rcheck/vign_test/fdapace/R/GetRho.R | 57 - .../fdapace/R/GetSmoothedCovarSurface.R | 122 - .../fdapace/R/GetSmoothedMeanCurve.R | 68 - .../vign_test/fdapace/R/GetUserCov.R | 35 - .../vign_test/fdapace/R/GetUserMeanCurve.R | 19 - .../fdapace/R/HandleNumericsAndNAN.R | 38 - .../vign_test/fdapace/R/IsRegular.R | 15 - fdapace.Rcheck/vign_test/fdapace/R/List2Mat.R | 18 - fdapace.Rcheck/vign_test/fdapace/R/Lwls1D.R | 44 - fdapace.Rcheck/vign_test/fdapace/R/Lwls2D.R | 93 - .../vign_test/fdapace/R/Lwls2DDeriv.R | 90 - .../vign_test/fdapace/R/MCVOptRidge.R | 188 - .../vign_test/fdapace/R/MakeBWtoZscore02y.R | 49 - .../vign_test/fdapace/R/MakeFPCAInputs.R | 52 - .../fdapace/R/MakeGPFunctionalData.R | 56 - .../vign_test/fdapace/R/MakeHCtoZscore02y.R | 41 - .../vign_test/fdapace/R/MakeLNtoZscore02y.R | 45 - .../vign_test/fdapace/R/MakeResultFPCA.R | 85 - .../vign_test/fdapace/R/MakeSparseGP.R | 105 - fdapace.Rcheck/vign_test/fdapace/R/MapX1D.R | 35 - .../vign_test/fdapace/R/MgnJntDensity.R | 143 - fdapace.Rcheck/vign_test/fdapace/R/Minb.R | 30 - fdapace.Rcheck/vign_test/fdapace/R/MultiFAM.R | 249 - fdapace.Rcheck/vign_test/fdapace/R/NWMgnReg.R | 55 - .../vign_test/fdapace/R/NormCurveToArea.R | 23 - .../vign_test/fdapace/R/NormKernel.R | 56 - fdapace.Rcheck/vign_test/fdapace/R/PC_CovE.R | 83 - .../vign_test/fdapace/R/RcppExports.R | 83 - .../vign_test/fdapace/R/RotateLwls2DV2.R | 24 - .../vign_test/fdapace/R/SBFCompUpdate.R | 78 - .../vign_test/fdapace/R/SBFitting.R | 201 - .../vign_test/fdapace/R/ScaleKernel.R | 40 - fdapace.Rcheck/vign_test/fdapace/R/SelectK.R | 87 - .../vign_test/fdapace/R/SetDerOptions.R | 31 - .../vign_test/fdapace/R/SetOptions.R | 262 - .../vign_test/fdapace/R/SetSVDOptions.R | 98 - fdapace.Rcheck/vign_test/fdapace/R/Sparsify.R | 71 - .../vign_test/fdapace/R/Stringing.R | 129 - .../vign_test/fdapace/R/SubsetFPCA.R | 11 - fdapace.Rcheck/vign_test/fdapace/R/TVAM.R | 178 - .../vign_test/fdapace/R/TruncateObs.R | 12 - fdapace.Rcheck/vign_test/fdapace/R/VCAM.R | 346 - fdapace.Rcheck/vign_test/fdapace/R/WFDA.R | 242 - fdapace.Rcheck/vign_test/fdapace/R/Wiener.R | 53 - .../vign_test/fdapace/R/fitted.FPCA.R | 250 - .../vign_test/fdapace/R/fitted.FPCAder.R | 63 - fdapace.Rcheck/vign_test/fdapace/R/kCFC.R | 113 - fdapace.Rcheck/vign_test/fdapace/R/medfly25.R | 20 - fdapace.Rcheck/vign_test/fdapace/R/pkgname.R | 42 - .../vign_test/fdapace/R/plot.FPCA.R | 121 - .../vign_test/fdapace/R/predict.FPCA.R | 96 - .../vign_test/fdapace/R/print.FPCA.R | 31 - .../vign_test/fdapace/R/print.FSVD.R | 32 - .../vign_test/fdapace/R/print.WFDA.R | 18 - fdapace.Rcheck/vign_test/fdapace/R/str.FPCA.R | 10 - fdapace.Rcheck/vign_test/fdapace/README.md | 26 - .../vign_test/fdapace/build/vignette.rds | Bin 215 -> 0 bytes .../vign_test/fdapace/data/medfly25.RData | Bin 23336 -> 0 bytes .../vign_test/fdapace/deleted_files | 15 - fdapace.Rcheck/vign_test/fdapace/file_history | 11961 ---------------- .../vign_test/fdapace/inst/doc/fdapaceVig.R | 110 - .../vign_test/fdapace/inst/doc/fdapaceVig.Rmd | 206 - .../fdapace/inst/doc/fdapaceVig.html | 414 - .../testdata/200curvesByExampleSeed123.RData | Bin 759158 -> 0 bytes .../InputForRotatedMllwlskInCpp.RData | Bin 1065 -> 0 bytes .../inst/testdata/InputFormMllwlskInCpp.RData | Bin 1007 -> 0 bytes .../YmatFromWFPCAexample_rng123.RData | Bin 6781 -> 0 bytes .../inst/testdata/dataForGcvLwls.RData | Bin 3318 -> 0 bytes .../inst/testdata/dataForGcvLwlsTest.RData | Bin 3032 -> 0 bytes .../inst/testdata/dataForGetRawCov.RData | Bin 3214 -> 0 bytes .../dataGeneratedByExampleSeed123.RData | Bin 461 -> 0 bytes .../datasetToTestRrotatedSmoother.RData | Bin 869081 -> 0 bytes .../vign_test/fdapace/inst/testdata/gene.dat | 4441 ------ .../fdapace/inst/testdata/growth.dat | 2883 ---- .../inst/testdata/xcovForGetEigens1.csv | 51 - fdapace.Rcheck/vign_test/fdapace/man/BwNN.Rd | 24 - .../vign_test/fdapace/man/CheckData.Rd | 16 - .../vign_test/fdapace/man/CheckOptions.Rd | 18 - .../vign_test/fdapace/man/ConvertSupport.Rd | 26 - .../vign_test/fdapace/man/CreateBWPlot.Rd | 32 - .../vign_test/fdapace/man/CreateBasis.Rd | 27 - .../vign_test/fdapace/man/CreateCovPlot.Rd | 36 - .../vign_test/fdapace/man/CreateDesignPlot.Rd | 41 - .../fdapace/man/CreateFuncBoxPlot.Rd | 44 - .../fdapace/man/CreateModeOfVarPlot.Rd | 38 - .../fdapace/man/CreateOutliersPlot.Rd | 51 - .../vign_test/fdapace/man/CreatePathPlot.Rd | 58 - .../vign_test/fdapace/man/CreateScreePlot.Rd | 26 - .../fdapace/man/CreateStringingPlot.Rd | 37 - .../vign_test/fdapace/man/DynCorr.Rd | 43 - .../vign_test/fdapace/man/Dyn_test.Rd | 54 - fdapace.Rcheck/vign_test/fdapace/man/FAM.Rd | 143 - fdapace.Rcheck/vign_test/fdapace/man/FCCor.Rd | 57 - fdapace.Rcheck/vign_test/fdapace/man/FCReg.Rd | 80 - .../vign_test/fdapace/man/FClust.Rd | 61 - .../vign_test/fdapace/man/FOptDes.Rd | 56 - fdapace.Rcheck/vign_test/fdapace/man/FPCA.Rd | 98 - .../vign_test/fdapace/man/FPCAder.Rd | 67 - .../vign_test/fdapace/man/FPCReg.Rd | 152 - .../vign_test/fdapace/man/FPCquantile.Rd | 59 - fdapace.Rcheck/vign_test/fdapace/man/FSVD.Rd | 64 - fdapace.Rcheck/vign_test/fdapace/man/FVPA.Rd | 38 - .../vign_test/fdapace/man/GetCrCorYX.Rd | 21 - .../vign_test/fdapace/man/GetCrCorYZ.Rd | 21 - .../vign_test/fdapace/man/GetCrCovYX.Rd | 62 - .../vign_test/fdapace/man/GetCrCovYZ.Rd | 49 - .../fdapace/man/GetNormalisedSample.Rd | 41 - .../vign_test/fdapace/man/Lwls1D.Rd | 32 - .../vign_test/fdapace/man/Lwls2D.Rd | 39 - .../vign_test/fdapace/man/Lwls2DDeriv.Rd | 45 - .../fdapace/man/MakeBWtoZscore02y.Rd | 21 - .../vign_test/fdapace/man/MakeFPCAInputs.Rd | 25 - .../fdapace/man/MakeGPFunctionalData.Rd | 30 - .../fdapace/man/MakeHCtoZscore02y.Rd | 21 - .../fdapace/man/MakeLNtoZscore02y.Rd | 21 - .../vign_test/fdapace/man/MakeSparseGP.Rd | 35 - .../vign_test/fdapace/man/MultiFAM.Rd | 172 - .../vign_test/fdapace/man/NormCurvToArea.Rd | 21 - .../vign_test/fdapace/man/SBFitting.Rd | 94 - .../vign_test/fdapace/man/SelectK.Rd | 30 - .../vign_test/fdapace/man/SetOptions.Rd | 20 - .../vign_test/fdapace/man/Sparsify.Rd | 27 - .../vign_test/fdapace/man/Stringing.Rd | 50 - fdapace.Rcheck/vign_test/fdapace/man/TVAM.Rd | 88 - fdapace.Rcheck/vign_test/fdapace/man/VCAM.Rd | 112 - fdapace.Rcheck/vign_test/fdapace/man/WFDA.Rd | 75 - .../vign_test/fdapace/man/Wiener.Rd | 31 - .../vign_test/fdapace/man/cumtrapzRcpp.Rd | 16 - .../vign_test/fdapace/man/fdapace.Rd | 34 - .../vign_test/fdapace/man/fitted.FPCA.Rd | 76 - .../vign_test/fdapace/man/fitted.FPCAder.Rd | 32 - fdapace.Rcheck/vign_test/fdapace/man/kCFC.Rd | 45 - .../vign_test/fdapace/man/medfly25.Rd | 25 - .../vign_test/fdapace/man/plot.FPCA.Rd | 41 - .../vign_test/fdapace/man/predict.FPCA.Rd | 44 - .../vign_test/fdapace/man/print.FPCA.Rd | 26 - .../vign_test/fdapace/man/print.FSVD.Rd | 16 - .../vign_test/fdapace/man/print.WFDA.Rd | 16 - .../vign_test/fdapace/man/str.FPCA.Rd | 16 - .../vign_test/fdapace/man/trapzRcpp.Rd | 16 - .../vign_test/fdapace/src/CPPlwls1d.cpp | 172 - .../fdapace/src/GetIndCEScoresCPP.cpp | 31 - .../fdapace/src/GetIndCEScoresCPPnewInd.cpp | 49 - .../vign_test/fdapace/src/RCPPmean.cpp | 7 - .../vign_test/fdapace/src/RCPPvar.cpp | 7 - .../vign_test/fdapace/src/RcppExports.cpp | 296 - .../fdapace/src/RcppPseudoApprox.cpp | 42 - .../vign_test/fdapace/src/Rcppsort.cpp | 10 - .../vign_test/fdapace/src/Rmullwlsk.cpp | 176 - .../vign_test/fdapace/src/RmullwlskCC.cpp | 172 - .../fdapace/src/RmullwlskCCsort2.cpp | 209 - .../fdapace/src/RmullwlskUniversal.cpp | 210 - .../fdapace/src/RmullwlskUniversalDeriv.cpp | 244 - .../fdapace/src/RrotatedMullwlsk.cpp | 161 - .../vign_test/fdapace/src/cumtrapzRcpp.cpp | 40 - .../fdapace/src/dropZeroElementsXYWin.cpp | 46 - .../vign_test/fdapace/src/interp2lin.cpp | 129 - .../vign_test/fdapace/src/trapzRcpp.cpp | 40 - .../vign_test/fdapace/tests/AAAtestthat.R | 9 - .../fdapace/tests/testthat/test_BinRawCov.R | 27 - .../fdapace/tests/testthat/test_BwNN.R | 30 - .../fdapace/tests/testthat/test_CheckData.R | 23 - .../tests/testthat/test_ConvertSupport.R | 16 - .../fdapace/tests/testthat/test_CreateBasis.R | 14 - .../testthat/test_CreateDiagnosticPlot.R | 26 - .../fdapace/tests/testthat/test_CreateFolds.R | 50 - .../tests/testthat/test_CreatePathPlot.R | 38 - .../tests/testthat/test_CreateStringingPlot.R | 50 - .../tests/testthat/test_CreateTrueMean.R | 30 - .../fdapace/tests/testthat/test_DynCorr.R | 92 - .../fdapace/tests/testthat/test_Dyn_test.R | 91 - .../fdapace/tests/testthat/test_FCCor.R | 38 - .../fdapace/tests/testthat/test_FCReg.R | 251 - .../fdapace/tests/testthat/test_FClust.R | 42 - .../fdapace/tests/testthat/test_FOptDes.R | 94 - .../fdapace/tests/testthat/test_FPCA.R | 332 - .../fdapace/tests/testthat/test_FPCAder.R | 173 - .../fdapace/tests/testthat/test_FPCReg.R | 170 - .../fdapace/tests/testthat/test_FPCquantile.R | 107 - .../fdapace/tests/testthat/test_FSVD.R | 133 - .../fdapace/tests/testthat/test_FVEdataset.R | 21 - .../fdapace/tests/testthat/test_FVPA.R | 162 - .../tests/testthat/test_FitEigenValues.R | 36 - .../tests/testthat/test_GetBinnedCurve.R | 37 - .../tests/testthat/test_GetBinnedDataset.R | 28 - .../fdapace/tests/testthat/test_GetCEScores.R | 155 - .../fdapace/tests/testthat/test_GetCovDense.R | 45 - .../fdapace/tests/testthat/test_GetCrCovYX.R | 228 - .../testthat/test_GetEigenAnalysisResults.R | 35 - .../tests/testthat/test_GetNormalisedSample.R | 24 - .../fdapace/tests/testthat/test_GetRawCov.R | 44 - .../tests/testthat/test_GetRawCrCovFuncFunc.R | 70 - .../tests/testthat/test_GetRawCrCovFuncScal.R | 39 - .../fdapace/tests/testthat/test_GetRho.R | 91 - .../testthat/test_GetSmoothedCovarSurface.R | 52 - .../testthat/test_GetSmoothedMeanCurve.R | 36 - .../fdapace/tests/testthat/test_IsRegular.R | 11 - .../fdapace/tests/testthat/test_Lwls2D.R | 67 - .../fdapace/tests/testthat/test_Lwls2DDeriv.R | 198 - .../tests/testthat/test_MakeFPCAInputs.R | 52 - .../tests/testthat/test_MakeSparseGP.R | 33 - .../tests/testthat/test_RcppPseudoApprox.R | 16 - .../fdapace/tests/testthat/test_Rmullwlsk.R | 130 - .../tests/testthat/test_RmullwlskUniversal.R | 31 - .../tests/testthat/test_Rrotatemullwlsk.R | 124 - .../fdapace/tests/testthat/test_SBFitting.R | 98 - .../fdapace/tests/testthat/test_SetOptions.R | 13 - .../fdapace/tests/testthat/test_Stringing.R | 175 - .../fdapace/tests/testthat/test_TVAM.R | 150 - .../fdapace/tests/testthat/test_WFDA.R | 185 - .../tests/testthat/test_createDesignPlot.R | 21 - .../tests/testthat/test_cumtrapzRcpp.R | 14 - .../fdapace/tests/testthat/test_cvlwls1d.R | 13 - .../fdapace/tests/testthat/test_fitted.R | 42 - .../fdapace/tests/testthat/test_funSim.R | 66 - .../fdapace/tests/testthat/test_gcvlwls1d1.R | 14 - .../fdapace/tests/testthat/test_gcvlwls2dV2.R | 92 - .../fdapace/tests/testthat/test_getCrCorYX.R | 34 - .../fdapace/tests/testthat/test_getCrCovYZ.R | 136 - .../fdapace/tests/testthat/test_getMinb.R | 24 - .../fdapace/tests/testthat/test_interp2lin.R | 128 - .../fdapace/tests/testthat/test_mapX1d.R | 11 - .../fdapace/tests/testthat/test_minb.R | 11 - .../fdapace/tests/testthat/test_pc_covE.R | 68 - .../fdapace/tests/testthat/test_plotFPCA.R | 23 - .../fdapace/tests/testthat/test_predictFPCA.R | 120 - .../tests/testthat/test_rotateLwls2dV2.R | 15 - .../fdapace/tests/testthat/test_selectK.R | 194 - .../fdapace/tests/testthat/test_trapzRcpp.R | 14 - .../fdapace/tests/testthat/test_useBin.R | 18 - .../fdapace/tests/testthat/test_wiener.R | 18 - .../vign_test/fdapace/tests/testthat_slow.R | 9 - .../fdapace/vignettes/.build.timestamp | 0 .../vign_test/fdapace/vignettes/fdapaceVig.R | 90 - .../fdapace/vignettes/fdapaceVig.Rmd | 206 - .../figure-html/unnamed-chunk-10-1.png | Bin 167970 -> 0 bytes .../figure-html/unnamed-chunk-11-1.png | Bin 186398 -> 0 bytes .../figure-html/unnamed-chunk-3-1.png | Bin 138954 -> 0 bytes .../figure-html/unnamed-chunk-4-1.png | Bin 187004 -> 0 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 105151 -> 0 bytes .../vign_test/fdapace/vignettes/roxygen.bib | 103 - 741 files changed, 103426 deletions(-) delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/.travis.yml delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/DESCRIPTION delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/ISSUE_TEMPLATE.md delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/LICENSE delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/NAMESPACE delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/NEWS delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_SR.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_TR.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/BinData.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/BinRawCov.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/BwNN.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CVLwls1D.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CheckAndCreateCOPoptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CheckData.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CheckOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CheckSVDOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CompFntCent.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CondProjection.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/ConvertSupport.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBWPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBasis.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateCovPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDesignPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDiagnosticsPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFolds.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFuncBoxPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateModeOfVarPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateOutliersPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreatePathPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateScreePlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateStringingPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/CreateTrueMean.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/DesignPlotCount.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/DynCorr.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Dyn_test.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FAM.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FCCor.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FCReg.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FClust.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FOptDes.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FPCAder.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FPCReg.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FPCquantile.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FSVD.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FVPA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/FitEigenValues.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls1D1.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls2DV2.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GenerateFunctionalData.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinNum.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedCurve.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedDataset.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCEScores.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCount.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCovDense.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYX.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYZ.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX_old.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYZ.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetEigenAnalysisResults.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetINScores.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetLogLik.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetMeanDense.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetMinb.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetNormalisedSample.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCov.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncFunc.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncScal.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetRho.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedCovarSurface.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedMeanCurve.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserCov.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserMeanCurve.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/HandleNumericsAndNAN.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/IsRegular.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/List2Mat.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls1D.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2D.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2DDeriv.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MCVOptRidge.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeBWtoZscore02y.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeFPCAInputs.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeGPFunctionalData.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeHCtoZscore02y.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeLNtoZscore02y.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeResultFPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MakeSparseGP.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MapX1D.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MgnJntDensity.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Minb.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/MultiFAM.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/NWMgnReg.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/NormCurveToArea.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/NormKernel.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/PC_CovE.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/RcppExports.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/RotateLwls2DV2.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SBFCompUpdate.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SBFitting.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/ScaleKernel.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SelectK.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SetDerOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SetOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SetSVDOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Sparsify.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Stringing.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/SubsetFPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/TVAM.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/TruncateObs.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/VCAM.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/WFDA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/Wiener.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCAder.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/kCFC.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/medfly25.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/pkgname.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/plot.FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/predict.FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/print.FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/print.FSVD.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/print.WFDA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/R/str.FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/README.md delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/build/vignette.rds delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/data/medfly25.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/deleted_files delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/file_history delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.Rmd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.html delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/200curvesByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputForRotatedMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputFormMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/YmatFromWFPCAexample_rng123.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataForGcvLwls.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataForGcvLwlsTest.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataForGetRawCov.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataGeneratedByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/datasetToTestRrotatedSmoother.RData delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/gene.dat delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/growth.dat delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/xcovForGetEigens1.csv delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/BwNN.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CheckData.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CheckOptions.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/ConvertSupport.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBWPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBasis.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateCovPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateDesignPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateFuncBoxPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateModeOfVarPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateOutliersPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreatePathPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateScreePlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/CreateStringingPlot.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/DynCorr.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Dyn_test.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FAM.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FCCor.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FCReg.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FClust.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FOptDes.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FPCAder.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FPCReg.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FPCquantile.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FSVD.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/FVPA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYX.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYZ.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYX.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYZ.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/GetNormalisedSample.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls1D.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2D.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2DDeriv.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeBWtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeFPCAInputs.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeGPFunctionalData.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeHCtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeLNtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MakeSparseGP.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/MultiFAM.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/NormCurvToArea.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/SBFitting.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/SelectK.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/SetOptions.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Sparsify.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Stringing.Rd delete mode 100755 fdapace.Rcheck/00_pkg_src/fdapace/man/TVAM.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/VCAM.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/WFDA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/Wiener.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/cumtrapzRcpp.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/fdapace.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCAder.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/kCFC.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/medfly25.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/plot.FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/predict.FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/print.FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/print.FSVD.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/print.WFDA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/str.FPCA.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/man/trapzRcpp.Rd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/CPPlwls1d.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPP.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPPnewInd.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPmean.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPvar.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RcppExports.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RcppPseudoApprox.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/Rcppsort.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/Rmullwlsk.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCC.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCCsort2.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversal.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversalDeriv.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/RrotatedMullwlsk.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/cumtrapzRcpp.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/dropZeroElementsXYWin.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/interp2lin.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/src/trapzRcpp.cpp delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/AAAtestthat.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BinRawCov.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BwNN.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CheckData.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_ConvertSupport.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateBasis.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateDiagnosticPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateFolds.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreatePathPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateStringingPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateTrueMean.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_DynCorr.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Dyn_test.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCCor.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCReg.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FClust.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FOptDes.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCAder.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCReg.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCquantile.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FSVD.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVEdataset.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVPA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FitEigenValues.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedCurve.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedDataset.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCEScores.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCovDense.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCrCovYX.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetEigenAnalysisResults.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetNormalisedSample.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCov.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncFunc.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncScal.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRho.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedCovarSurface.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedMeanCurve.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_IsRegular.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2D.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2DDeriv.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeFPCAInputs.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeSparseGP.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RcppPseudoApprox.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rmullwlsk.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RmullwlskUniversal.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rrotatemullwlsk.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_SBFitting.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_SetOptions.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Stringing.R delete mode 100755 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_TVAM.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_WFDA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_createDesignPlot.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cumtrapzRcpp.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cvlwls1d.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_fitted.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_funSim.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls1d1.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls2dV2.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCorYX.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCovYZ.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getMinb.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_interp2lin.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_mapX1d.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_minb.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_pc_covE.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_plotFPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_predictFPCA.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_rotateLwls2dV2.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_selectK.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_trapzRcpp.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_useBin.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_wiener.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat_slow.R delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/vignettes/fdapaceVig.Rmd delete mode 100644 fdapace.Rcheck/00_pkg_src/fdapace/vignettes/roxygen.bib delete mode 100644 fdapace.Rcheck/00install.out delete mode 100755 fdapace.Rcheck/R_check_bin/R delete mode 100755 fdapace.Rcheck/R_check_bin/Rscript delete mode 100644 fdapace.Rcheck/fdapace-Ex.R delete mode 100644 fdapace.Rcheck/fdapace-Ex.Rout delete mode 100644 fdapace.Rcheck/fdapace-Ex.pdf delete mode 100644 fdapace.Rcheck/fdapace-Ex.timings delete mode 100644 fdapace.Rcheck/fdapace-manual.pdf delete mode 100644 fdapace.Rcheck/fdapace/DESCRIPTION delete mode 100644 fdapace.Rcheck/fdapace/INDEX delete mode 100644 fdapace.Rcheck/fdapace/LICENSE delete mode 100644 fdapace.Rcheck/fdapace/Meta/Rd.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/data.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/features.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/hsearch.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/links.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/nsInfo.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/package.rds delete mode 100644 fdapace.Rcheck/fdapace/Meta/vignette.rds delete mode 100644 fdapace.Rcheck/fdapace/NAMESPACE delete mode 100644 fdapace.Rcheck/fdapace/NEWS delete mode 100644 fdapace.Rcheck/fdapace/R/fdapace delete mode 100644 fdapace.Rcheck/fdapace/R/fdapace.rdb delete mode 100644 fdapace.Rcheck/fdapace/R/fdapace.rdx delete mode 100644 fdapace.Rcheck/fdapace/data/medfly25.RData delete mode 100644 fdapace.Rcheck/fdapace/doc/fdapaceVig.R delete mode 100644 fdapace.Rcheck/fdapace/doc/fdapaceVig.Rmd delete mode 100644 fdapace.Rcheck/fdapace/doc/fdapaceVig.html delete mode 100644 fdapace.Rcheck/fdapace/doc/index.html delete mode 100644 fdapace.Rcheck/fdapace/help/AnIndex delete mode 100644 fdapace.Rcheck/fdapace/help/aliases.rds delete mode 100644 fdapace.Rcheck/fdapace/help/fdapace.rdb delete mode 100644 fdapace.Rcheck/fdapace/help/fdapace.rdx delete mode 100644 fdapace.Rcheck/fdapace/help/paths.rds delete mode 100644 fdapace.Rcheck/fdapace/html/00Index.html delete mode 100644 fdapace.Rcheck/fdapace/html/R.css delete mode 100644 fdapace.Rcheck/fdapace/testdata/200curvesByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/InputForRotatedMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/InputFormMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/YmatFromWFPCAexample_rng123.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/dataForGcvLwls.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/dataForGcvLwlsTest.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/dataForGetRawCov.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/dataGeneratedByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/datasetToTestRrotatedSmoother.RData delete mode 100644 fdapace.Rcheck/fdapace/testdata/gene.dat delete mode 100644 fdapace.Rcheck/fdapace/testdata/growth.dat delete mode 100644 fdapace.Rcheck/fdapace/testdata/xcovForGetEigens1.csv delete mode 100644 fdapace.Rcheck/tests/AAAtestthat.R delete mode 100644 fdapace.Rcheck/tests/AAAtestthat.Rout.fail delete mode 100644 fdapace.Rcheck/tests/startup.Rs delete mode 100644 fdapace.Rcheck/tests/testthat/Rplots.pdf delete mode 100644 fdapace.Rcheck/tests/testthat/test_BinRawCov.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_BwNN.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CheckData.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_ConvertSupport.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreateBasis.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreateDiagnosticPlot.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreateFolds.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreatePathPlot.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreateStringingPlot.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_CreateTrueMean.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_DynCorr.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Dyn_test.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FCCor.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FCReg.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FClust.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FOptDes.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FPCA.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FPCAder.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FPCReg.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FPCquantile.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FSVD.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FVEdataset.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FVPA.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_FitEigenValues.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetBinnedCurve.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetBinnedDataset.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetCEScores.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetCovDense.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetCrCovYX.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetEigenAnalysisResults.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetNormalisedSample.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetRawCov.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetRawCrCovFuncFunc.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetRawCrCovFuncScal.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetRho.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetSmoothedCovarSurface.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_GetSmoothedMeanCurve.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_IsRegular.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Lwls2D.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Lwls2DDeriv.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_MakeFPCAInputs.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_MakeSparseGP.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_RcppPseudoApprox.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Rmullwlsk.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_RmullwlskUniversal.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Rrotatemullwlsk.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_SBFitting.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_SetOptions.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_Stringing.R delete mode 100755 fdapace.Rcheck/tests/testthat/test_TVAM.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_WFDA.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_createDesignPlot.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_cumtrapzRcpp.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_cvlwls1d.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_fitted.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_funSim.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_gcvlwls1d1.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_gcvlwls2dV2.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_getCrCorYX.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_getCrCovYZ.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_getMinb.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_interp2lin.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_mapX1d.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_minb.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_pc_covE.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_plotFPCA.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_predictFPCA.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_rotateLwls2dV2.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_selectK.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_trapzRcpp.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_useBin.R delete mode 100644 fdapace.Rcheck/tests/testthat/test_wiener.R delete mode 100644 fdapace.Rcheck/tests/testthat_slow.R delete mode 100644 fdapace.Rcheck/tests/testthat_slow.Rout.fail delete mode 100644 fdapace.Rcheck/vign_test/fdapace/.travis.yml delete mode 100644 fdapace.Rcheck/vign_test/fdapace/DESCRIPTION delete mode 100644 fdapace.Rcheck/vign_test/fdapace/ISSUE_TEMPLATE.md delete mode 100644 fdapace.Rcheck/vign_test/fdapace/LICENSE delete mode 100644 fdapace.Rcheck/vign_test/fdapace/NAMESPACE delete mode 100644 fdapace.Rcheck/vign_test/fdapace/NEWS delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/BestDes_SR.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/BestDes_TR.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/BinData.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/BinRawCov.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/BwNN.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CVLwls1D.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CheckAndCreateCOPoptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CheckData.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CheckOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CheckSVDOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CompFntCent.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CondProjection.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/ConvertSupport.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateBWPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateBasis.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateCovPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateDesignPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateDiagnosticsPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateFolds.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateFuncBoxPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateModeOfVarPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateOutliersPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreatePathPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateScreePlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateStringingPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/CreateTrueMean.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/DesignPlotCount.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/DynCorr.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Dyn_test.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FAM.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FCCor.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FCReg.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FClust.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FOptDes.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FPCAder.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FPCReg.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FPCquantile.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FSVD.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FVPA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/FitEigenValues.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GCVLwls1D1.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GCVLwls2DV2.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GenerateFunctionalData.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetBinNum.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetBinnedCurve.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetBinnedDataset.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCEScores.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCount.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCovDense.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCrCorYX.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCrCorYZ.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCrCovYX.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCrCovYX_old.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetCrCovYZ.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetEigenAnalysisResults.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetINScores.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetLogLik.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetMeanDense.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetMinb.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetNormalisedSample.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetRawCov.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetRawCrCovFuncFunc.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetRawCrCovFuncScal.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetRho.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetSmoothedCovarSurface.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetSmoothedMeanCurve.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetUserCov.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/GetUserMeanCurve.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/HandleNumericsAndNAN.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/IsRegular.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/List2Mat.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Lwls1D.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Lwls2D.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Lwls2DDeriv.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MCVOptRidge.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeBWtoZscore02y.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeFPCAInputs.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeGPFunctionalData.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeHCtoZscore02y.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeLNtoZscore02y.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeResultFPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MakeSparseGP.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MapX1D.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MgnJntDensity.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Minb.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/MultiFAM.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/NWMgnReg.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/NormCurveToArea.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/NormKernel.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/PC_CovE.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/RcppExports.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/RotateLwls2DV2.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SBFCompUpdate.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SBFitting.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/ScaleKernel.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SelectK.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SetDerOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SetOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SetSVDOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Sparsify.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Stringing.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/SubsetFPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/TVAM.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/TruncateObs.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/VCAM.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/WFDA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/Wiener.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/fitted.FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/fitted.FPCAder.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/kCFC.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/medfly25.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/pkgname.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/plot.FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/predict.FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/print.FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/print.FSVD.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/print.WFDA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/R/str.FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/README.md delete mode 100644 fdapace.Rcheck/vign_test/fdapace/build/vignette.rds delete mode 100644 fdapace.Rcheck/vign_test/fdapace/data/medfly25.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/deleted_files delete mode 100644 fdapace.Rcheck/vign_test/fdapace/file_history delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/doc/fdapaceVig.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/doc/fdapaceVig.Rmd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/doc/fdapaceVig.html delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/200curvesByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/InputForRotatedMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/InputFormMllwlskInCpp.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/YmatFromWFPCAexample_rng123.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/dataForGcvLwls.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/dataForGcvLwlsTest.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/dataForGetRawCov.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/dataGeneratedByExampleSeed123.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/datasetToTestRrotatedSmoother.RData delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/gene.dat delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/growth.dat delete mode 100644 fdapace.Rcheck/vign_test/fdapace/inst/testdata/xcovForGetEigens1.csv delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/BwNN.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CheckData.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CheckOptions.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/ConvertSupport.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateBWPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateBasis.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateCovPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateDesignPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateFuncBoxPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateModeOfVarPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateOutliersPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreatePathPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateScreePlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/CreateStringingPlot.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/DynCorr.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Dyn_test.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FAM.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FCCor.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FCReg.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FClust.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FOptDes.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FPCAder.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FPCReg.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FPCquantile.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FSVD.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/FVPA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/GetCrCorYX.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/GetCrCorYZ.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/GetCrCovYX.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/GetCrCovYZ.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/GetNormalisedSample.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Lwls1D.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Lwls2D.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Lwls2DDeriv.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeBWtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeFPCAInputs.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeGPFunctionalData.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeHCtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeLNtoZscore02y.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MakeSparseGP.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/MultiFAM.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/NormCurvToArea.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/SBFitting.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/SelectK.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/SetOptions.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Sparsify.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Stringing.Rd delete mode 100755 fdapace.Rcheck/vign_test/fdapace/man/TVAM.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/VCAM.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/WFDA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/Wiener.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/cumtrapzRcpp.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/fdapace.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/fitted.FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/fitted.FPCAder.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/kCFC.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/medfly25.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/plot.FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/predict.FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/print.FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/print.FSVD.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/print.WFDA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/str.FPCA.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/man/trapzRcpp.Rd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/CPPlwls1d.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/GetIndCEScoresCPP.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/GetIndCEScoresCPPnewInd.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RCPPmean.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RCPPvar.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RcppExports.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RcppPseudoApprox.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/Rcppsort.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/Rmullwlsk.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RmullwlskCC.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RmullwlskCCsort2.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RmullwlskUniversal.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RmullwlskUniversalDeriv.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/RrotatedMullwlsk.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/cumtrapzRcpp.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/dropZeroElementsXYWin.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/interp2lin.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/src/trapzRcpp.cpp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/AAAtestthat.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_BinRawCov.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_BwNN.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CheckData.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_ConvertSupport.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreateBasis.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreateDiagnosticPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreateFolds.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreatePathPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreateStringingPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_CreateTrueMean.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_DynCorr.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Dyn_test.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FCCor.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FCReg.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FClust.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FOptDes.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FPCAder.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FPCReg.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FPCquantile.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FSVD.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FVEdataset.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FVPA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_FitEigenValues.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetBinnedCurve.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetBinnedDataset.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetCEScores.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetCovDense.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetCrCovYX.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetEigenAnalysisResults.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetNormalisedSample.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetRawCov.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetRawCrCovFuncFunc.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetRawCrCovFuncScal.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetRho.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetSmoothedCovarSurface.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_GetSmoothedMeanCurve.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_IsRegular.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Lwls2D.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Lwls2DDeriv.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_MakeFPCAInputs.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_MakeSparseGP.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_RcppPseudoApprox.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Rmullwlsk.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_RmullwlskUniversal.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Rrotatemullwlsk.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_SBFitting.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_SetOptions.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_Stringing.R delete mode 100755 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_TVAM.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_WFDA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_createDesignPlot.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_cumtrapzRcpp.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_cvlwls1d.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_fitted.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_funSim.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_gcvlwls1d1.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_gcvlwls2dV2.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_getCrCorYX.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_getCrCovYZ.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_getMinb.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_interp2lin.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_mapX1d.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_minb.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_pc_covE.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_plotFPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_predictFPCA.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_rotateLwls2dV2.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_selectK.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_trapzRcpp.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_useBin.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat/test_wiener.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/tests/testthat_slow.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/.build.timestamp delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig.R delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig.Rmd delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig_files/figure-html/unnamed-chunk-10-1.png delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig_files/figure-html/unnamed-chunk-11-1.png delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig_files/figure-html/unnamed-chunk-3-1.png delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig_files/figure-html/unnamed-chunk-4-1.png delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/fdapaceVig_files/figure-html/unnamed-chunk-6-1.png delete mode 100644 fdapace.Rcheck/vign_test/fdapace/vignettes/roxygen.bib diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/.travis.yml b/fdapace.Rcheck/00_pkg_src/fdapace/.travis.yml deleted file mode 100644 index 8538a94d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: r -#os: - #- osx -cache: packages -sudo: false - - -before_install: - - tlmgr update --self --all - - tlmgr install listings - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -r_packages: - - survival - -addons: - apt: - packages: - - tcl-dev # - tcl-dev - - tk-dev # - tk-dev - - texlive-latex-extra - -warnings_are_errors: false - -#before_script: -# - R -e 'install.packages("http://cran.r-project.org/src/contrib/Archive/Rcpp/Rcpp_0.12.7.tar.gz", repos = NULL)' - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/DESCRIPTION b/fdapace.Rcheck/00_pkg_src/fdapace/DESCRIPTION deleted file mode 100644 index f45be4ee..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/DESCRIPTION +++ /dev/null @@ -1,46 +0,0 @@ -Package: fdapace -Type: Package -Title: Functional Data Analysis and Empirical Dynamics -URL: https://github.com/functionaldata/tPACE -BugReports: https://github.com/functionaldata/tPACE/issues -Version: 0.5.0 -Date: 2019-03-20, -Authors@R: c(person("Xiongtao","Dai", role=c("aut")), - person("Pantelis Z.","Hadjipantelis", email="pantelis@ucdavis.edu", role=c("aut","cre")), - person("Kynghee","Han", role="aut"), - person("Hao","Ji", role=c("aut")), - person("Shu-Chin", "Lin", role="ctb"), - person("Hans-Georg", "Mueller", role=c("cph","ths")), - person("Jane-Ling", "Wang", role=c("cph","ths"))) -Maintainer: Pantelis Z. Hadjipantelis -Description: Provides implementation of various methods of Functional Data - Analysis (FDA) and Empirical Dynamics. The core of this package is Functional - Principal Component Analysis (FPCA), a key technique for functional data - analysis, for sparsely or densely sampled random trajectories and time courses, - via the Principal Analysis by Conditional Estimation (PACE) algorithm or - numerical integration. PACE is useful for the analysis of data that have been - generated by a sample of underlying (but usually not fully observed) random - trajectories. It does not rely on pre-smoothing of trajectories, which is - problematic if functional data are sparsely sampled. PACE provides options - for functional regression and correlation, for Longitudinal Data Analysis, - the analysis of stochastic processes from samples of realized trajectories, - and for the analysis of underlying dynamics. The core computational algorithms - are implemented using the 'Eigen' C++ library for numerical linear algebra and - 'RcppEigen' "glue". -License: BSD_3_clause + file LICENSE -LazyData: false -Imports: Rcpp (>= 0.11.5), Hmisc, MASS, Matrix, pracma, numDeriv -LinkingTo: Rcpp, RcppEigen -Suggests: plot3D, rgl, aplpack, mgcv, ks, gtools, knitr, EMCluster, - minqa, testthat -NeedsCompilation: yes -RoxygenNote: 6.1.1 -VignetteBuilder: knitr -Packaged: 2019-04-25 04:51:14 UTC; ychen -Author: Xiongtao Dai [aut], - Pantelis Z. Hadjipantelis [aut, cre], - Kynghee Han [aut], - Hao Ji [aut], - Shu-Chin Lin [ctb], - Hans-Georg Mueller [cph, ths], - Jane-Ling Wang [cph, ths] diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/ISSUE_TEMPLATE.md b/fdapace.Rcheck/00_pkg_src/fdapace/ISSUE_TEMPLATE.md deleted file mode 100644 index a87d89a3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,15 +0,0 @@ -If you are filing an enhancement/feature request, make sure you: - -- Provide at least one reference about it, or -- Provide at least one particular user case. - -If you are filing a bug, make sure these steps are followed before submitting your issue - it will help us help you more efficiently! - -- Start a new R session -- Make sure you are using the latest version of `fdapace` (eg. `update.packages(oldPkgs="fdapace", ask=FALSE)`) -- [Write a minimal reproducible example](http://stackoverflow.com/a/5963610) -- Run `sessionInfo()` - -If you are having a general question about using `fdapace` or its design: - -- Email us at first instance; this is not a Q&A forum. :D diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/LICENSE b/fdapace.Rcheck/00_pkg_src/fdapace/LICENSE deleted file mode 100644 index ddf8d7b9..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -YEAR: 2018 -COPYRIGHT HOLDER: Hans-Georg Mueller and Jane-Ling Wang -ORGANIZATION: University of California, Davis diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/NAMESPACE b/fdapace.Rcheck/00_pkg_src/fdapace/NAMESPACE deleted file mode 100644 index c5951a68..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/NAMESPACE +++ /dev/null @@ -1,118 +0,0 @@ -# Generated by roxygen2: do not edit by hand - -S3method(fitted,FPCA) -S3method(fitted,FPCAder) -S3method(plot,FPCA) -S3method(predict,FPCA) -S3method(print,FPCA) -S3method(print,FSVD) -S3method(print,WFDA) -S3method(str,FPCA) -export(BwNN) -export(CheckData) -export(CheckOptions) -export(ConvertSupport) -export(CreateBWPlot) -export(CreateBasis) -export(CreateCovPlot) -export(CreateDesignPlot) -export(CreateDiagnosticsPlot) -export(CreateFuncBoxPlot) -export(CreateModeOfVarPlot) -export(CreateOutliersPlot) -export(CreatePathPlot) -export(CreateScreePlot) -export(CreateStringingPlot) -export(DynCorr) -export(Dyn_test) -export(FAM) -export(FCCor) -export(FCReg) -export(FClust) -export(FOptDes) -export(FPCA) -export(FPCAder) -export(FPCReg) -export(FPCquantile) -export(FSVD) -export(FVPA) -export(GetCrCorYX) -export(GetCrCorYZ) -export(GetCrCovYX) -export(GetCrCovYZ) -export(GetNormalisedSample) -export(GetNormalizedSample) -export(Lwls1D) -export(Lwls2D) -export(Lwls2DDeriv) -export(MakeBWtoZscore02y) -export(MakeFPCAInputs) -export(MakeGPFunctionalData) -export(MakeHCtoZscore02y) -export(MakeLNtoZscore02y) -export(MakeSparseGP) -export(MultiFAM) -export(NormCurvToArea) -export(SBFitting) -export(SelectK) -export(SetOptions) -export(Sparsify) -export(Stringing) -export(TVAM) -export(VCAM) -export(WFDA) -export(Wiener) -export(cumtrapzRcpp) -export(kCFC) -export(trapzRcpp) -import(Rcpp) -importFrom(Hmisc,approxExtrap) -importFrom(MASS,isoMDS) -importFrom(MASS,mvrnorm) -importFrom(Matrix,Matrix) -importFrom(grDevices,colorRampPalette) -importFrom(grDevices,dev.new) -importFrom(grDevices,palette) -importFrom(graphics,abline) -importFrom(graphics,barplot) -importFrom(graphics,boxplot) -importFrom(graphics,grid) -importFrom(graphics,legend) -importFrom(graphics,lines) -importFrom(graphics,matlines) -importFrom(graphics,matplot) -importFrom(graphics,par) -importFrom(graphics,plot) -importFrom(graphics,points) -importFrom(graphics,polygon) -importFrom(numDeriv,grad) -importFrom(numDeriv,hessian) -importFrom(pracma,meshgrid) -importFrom(pracma,midpoint) -importFrom(pracma,mod) -importFrom(pracma,ones) -importFrom(pracma,uniq) -importFrom(stats,aggregate) -importFrom(stats,approx) -importFrom(stats,approxfun) -importFrom(stats,cor) -importFrom(stats,cov) -importFrom(stats,dist) -importFrom(stats,dunif) -importFrom(stats,fitted) -importFrom(stats,kmeans) -importFrom(stats,lm) -importFrom(stats,median) -importFrom(stats,na.omit) -importFrom(stats,optim) -importFrom(stats,poly) -importFrom(stats,predict) -importFrom(stats,quantile) -importFrom(stats,rnorm) -importFrom(stats,runif) -importFrom(stats,sd) -importFrom(stats,spline) -importFrom(stats,var) -importFrom(stats,weighted.mean) -importFrom(utils,installed.packages) -useDynLib(fdapace) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/NEWS b/fdapace.Rcheck/00_pkg_src/fdapace/NEWS deleted file mode 100644 index 1192a5d5..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/NEWS +++ /dev/null @@ -1,59 +0,0 @@ -Current version -============= -New functionality: -* Added functional additive models (MultiFAM, TVAMSBFitting, SBFitting). -* Added stringing (Stringing). -* Added functonal linear regression with functional response (FPCReg). - -Changes: -* Dropped argument `k` from SelectK. -* Vignette in HTML. -* FClust functionality uses `EMCluster` instead `Rmixmod`. -* Multiple minor bug fixes. - -fdapace v0.3.0 (Release date: 25-Jan-2017) -============= -New functionality: -* Added obsOnly option to CreatePathPlot. -* Added derivative estimators (FPCAder, fitted.FPCAder) -* Added functional concurrent correlation (FCCor). -* Added pairwise curve synchronization for functional data (WFDA). -* Added optimal designs for longitudinal or functional data (FOptDes). -* Miscellaneous update to utility functions (CreateBasis, MakeSparseGP) - -Changes: -* Covariance GCV bandwidth is modified to prevent oversmoothing. -* "Diagnostic plots" are renamed. -* GetNormalisedSample now uses fitted covariance. - -fdapace v0.2.5 (Release date: 14-Jul-2016) -============= -Changes: -* `K` is used for specifying the number of components in functions such as SelectK, fitted, CreatePathPlot, CreateFuncBoxPlot, etc, instead of `k`. -* GetCrCovYX is sped up. - -Minors: -* Improved the legend placing in CreateDesignPlot. -* Plot functions no longer show warnings. -* Changed clustering example in vignettes. - -Minors: -* Improved the legend placing in CreateDesignPlot. -* Plot functions no longer show warnings. - -fdapace v0.2.0 (Release date: 17-Jun-2016) -============== - -New functionality: -* Addition of Functional Variance Process Analysis (FVPA.R), Functional Clustering (FClust.R) and Functional Singular Value Decomposition (FSVD.R) functionality. - -Changes: -* Minor changes to the interface of functions FPCA.R and FCReg.R. -* New internal C++ smoother used. -* General improvements and bug fixes. -* Vignette with knitr. - -fdapace v0.1.1 (Release data: 15-Mar-2016) -============== - -* Initial release diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_SR.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_SR.R deleted file mode 100644 index b52299e0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_SR.R +++ /dev/null @@ -1,31 +0,0 @@ -# Find optimal designs for scalar response prediction -BestDes_SR <- function(p, ridge, workGrid, Cov, CCov, isSequential=FALSE){ - # select optimal designs for regression case, sequential method available - if(isSequential == FALSE){ - comblist <- utils::combn(1:length(workGrid), p) - temps <- rep(0,ncol(comblist)) - for(i in 1:ncol(comblist)){ temps[i] <- SRCri(comblist[,i], ridge, Cov, CCov) } - best <- sort(comblist[,min(which(temps==max(temps)))]) - return(list(best=best)) - } else{ # sequential selection - optdes <- c() - for(iter in 1:p){ - candidx <- which(!((1:length(workGrid)) %in% optdes)) - seqcri <- rep(NA, length(candidx)) - for(i in 1:length(candidx)){ - tempdes <- sort(c(optdes,candidx[i])) - seqcri[i] <- SRCri(tempdes, ridge, Cov, CCov) - } - optdes <- sort(c(optdes, candidx[min(which(seqcri == max(seqcri)))])) - } - return(list(best=optdes,med=NULL)) - } -} - -SRCri <- function(design,ridge,Cov,CCov){ - # Optimization criterion for SR - design <- sort(design) - ridgeCov <- Cov + diag(ridge,nrow(Cov)) - srcri <- t(CCov[design]) %*% solve(ridgeCov[design,design]) %*% CCov[design] - return(srcri) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_TR.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_TR.R deleted file mode 100644 index 8b439935..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/BestDes_TR.R +++ /dev/null @@ -1,37 +0,0 @@ -# Find optimal designs for trajectory recovery -BestDes_TR <- function(p, ridge, workGrid, Cov, isSequential=FALSE){ - # select optimal designs for trajectory recovery case, sequential method available - if(isSequential == FALSE){ # Global Selection - comblist <- utils::combn(1:length(workGrid),p) - temps <- rep(0,ncol(comblist)) - for(i in 1:ncol(comblist)){ temps[i] <- TRCri(comblist[,i], ridge, Cov, workGrid) } - best <- sort(comblist[,min(which(temps==max(temps)))]) - return(list(best=best)) - } else { # Sequential optimization - optdes <- c() - for(iter in 1:p){ - candidx <- which(!((1:length(workGrid)) %in% optdes)) - seqcri <- rep(NA, length(candidx)) - for(i in 1:length(candidx)){ - tempdes <- sort(c(optdes,candidx[i])) - seqcri[i] <- TRCri(tempdes, ridge, Cov, workGrid) - } - optdes <- sort(c(optdes, candidx[min(which(seqcri == max(seqcri)))])) - } - return(list(best=optdes,med=NULL)) # based on sequential selection - } -} - -TRCri <- function(design, ridge, Cov, workGrid){ - # Optimization criterion for TR - # Numerical Integration, equal to matrix multiplication if time grid is year - design <- sort(design) - RidgeCov <- Cov + diag(ridge, nrow(Cov)) - designcovinv <- solve(RidgeCov[design,design]) - if(length(design) > 1){ - trcri <- trapzRcpp(X=workGrid,Y=diag(t(Cov[design,])%*%designcovinv%*%(Cov[design,]))) - } else { - trcri <- trapzRcpp(X=workGrid,Y=diag(Cov[design,]%*%designcovinv%*%(Cov[design,]))) - } - return(trcri) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/BinData.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/BinData.R deleted file mode 100644 index 845dfbfe..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/BinData.R +++ /dev/null @@ -1,53 +0,0 @@ -BinData = function(y,t,optns){ - - # Bin the data 'y' - # y : n-by-1 list of vectors - # t : n-by-1 list of vectors - # dataType : indicator about structure of the data - # (dense (2), or dataType data with missing values (1) or sparse (0)) - # verbose gives warning messages - # numBins: number of bins (if set) - - BinDataOutput <- list( newy <- NULL, newt <- NULL); - - dataType = optns$dataType; - verbose = optns$verbose; - - n = length(t); - ni = sapply(FUN= length,t); - - if (dataType == 'Sparse'){ - m = median(ni) - } else { - m = max(ni); - } - - # Check the number of bins automatically - if (is.null(numBins)){ - numBins = GetBinNum(n,m,dataType,verbose) - }else if( numBins <1){ - warning("number of bins must be positive integer! We reset to the default number of bins!\n") - numBins = GetBinNum(n,m,dataType,verbose) - } - - # If it is determined to be NULL return the unbinned data - if (is.null(numBins)){ - BinDataOutput$newt = t; - BinDataOutput$newy = y; - return( BinDataOutput ) - } - - numBins = ceiling(numBins); - - tt = unlist(t); - a0 = min(tt); - b0 = max(tt); - - for (i in 1:n){ - res = GetBinnedCurve(t[[i]], y[[i]], numBins, TRUE, TRUE, c(a0, b0)); - BinDataOutput$newt[i] = res$midpoint; - BinDataOutput$newy[i] = res$newy; - } - - return( BinDataOutput ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/BinRawCov.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/BinRawCov.R deleted file mode 100644 index 94cf6224..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/BinRawCov.R +++ /dev/null @@ -1,46 +0,0 @@ -# Bin a `RawCov` object. Observations with the same time pairs are binned together and only one entry will be returned, containting the mean value (`meanVals`), weight (`count`), and residual sums of squares at each point (`RSS`). If `rcov$diag` is used then also bin the diagonal of the raw covariance similarly (with fields `diagMeans`, `diagRSS`, and `diagCount`. -# rcov: A `RawCov` object. -# returns: A list of class `BinnedRawCov`. -BinRawCov <- function(rcov) { - - if ('RawCC' %in% class(rcov)) { - rcov$cxxn <- rcov$rawCCov - rcov$tPairs <- rcov$tpairn - } - # Get the count, mean raw cov, and residual sum of squares at each pair of observed time points. - tmp <- aggregate(rcov$cxxn, list(rcov$tPairs[, 1], rcov$tPairs[, 2]), - function(yy) c(RCPPmean(yy), length(yy), RCPPvar(yy) * (length(yy) - 1))) - - tPairs <- unname(as.matrix(tmp[, 1:2])) - summaryDat <- tmp[, 3] - meanVals <- summaryDat[, 1] - count <- summaryDat[, 2] - RSS <- summaryDat[, 3] # Residual sum of squares. For implementing GCV. - RSS[is.na(RSS)] <- 0 - - diagRSS <- diagCount <- diagMeans <- tDiag <- NULL - if (!is.null(rcov$diag)) { - tmp <- aggregate(rcov$diag[, 2], list(rcov$diag[, 1]), - function(yy) c(RCPPmean(yy), length(yy), RCPPvar(yy) * (length(yy) - 1))) - - tDiag <- tmp[, 1] - diagSummary <- tmp[, 2] - diagMeans <- diagSummary[, 1] - diagCount <- diagSummary[, 2] - diagRSS <- diagSummary[, 3] - diagRSS[is.na(diagRSS)] <- 0 - } - - res <- list(tPairs=tPairs, meanVals=meanVals, RSS=RSS, - tDiag=tDiag, diagMeans=diagMeans, diagRSS=diagRSS, - count=count, - diagCount=diagCount, - error=rcov$error, dataType=rcov$dataType) - if ('RawCC' %in% class(rcov)) { - class(res) <- 'BinnedRawCC' - } else { - class(res) <- 'BinnedRawCov' - } - - return(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/BwNN.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/BwNN.R deleted file mode 100644 index 6addcf56..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/BwNN.R +++ /dev/null @@ -1,59 +0,0 @@ -#' Minimum bandwidth based on kNN criterion. -#' -#' Input a list of time points Lt, and the number of unique neighbors k and get the minimum bandwidth garanteeing k unique neighbours. -#' -#' @param Lt n-by-1 list of vectors -#' @param k number of unique neighbors for cov and mu (default = 3) -#' @param onlyCov Indicator to return only the minium bandwidth for the covariance -#' @param onlyMean Indicator to return only the minimum bandwidth for the mean -#' @examples -#' tinyGrid = list(c(1,7), c(2,3), 6, c(2,4), c(4,5)) -#' BwNN(tinyGrid, k = 2) # c(3,2) -#' @export - -BwNN <- function(Lt, k=3, onlyMean = FALSE, onlyCov = FALSE) { - - tPairs <- do.call(rbind, lapply(Lt, function(t) { - expand.grid(t, t) - })) - - if( k <1){ - stop("You cannot have less than 1 neighbours.") - } - - if( onlyMean && onlyCov){ - stop("BwNN returns nothing!") - } - - distNN2 = NULL - distNN1 = NULL - - if( !onlyMean ){ - uniqTPairs <- unique(tPairs) - distNN2 <- FindNN(uniqTPairs, k) - } - - if( !is.null(distNN2) && is.infinite(distNN2)){ - stop("You are asking an unreasonable ammount of neighbours for the covariace.") - } - - if( !onlyCov ){ - gridPts <- sort(unique(uniqTPairs[, 1])) - distNN1 <- max(diff(gridPts, lag=k)) - } - - if( !is.null(distNN1) && is.infinite(distNN1)){ - stop("You are asking an unreasonable ammount of neighbours for the mean.") - } - - return(c(cov = distNN2, mu = distNN1)) -} - -FindNN <- function(mat, k=3) { - max(apply(mat, 1, function(x) { - d <- abs(mat - matrix(1, nrow(mat), 1) %*% x) - distTox <- pmax(d[, 1], d[, 2]) - sort(distTox, partial=k + 1)[k + 1] - })) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CVLwls1D.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CVLwls1D.R deleted file mode 100644 index 2c1ccabc..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CVLwls1D.R +++ /dev/null @@ -1,112 +0,0 @@ -CVLwls1D <- function(y, t, kernel, npoly, nder, dataType, kFolds = 5, useBW1SE = FALSE ){ - - # If 'y' and 't' are vectors "cheat" and break them in a list of 10 elements - if ( is.vector(y) && is.vector(t) && !is.list(t) && !is.list(y) ){ - if (length(t) < 21) { - stop("You are trying to use a local linear weight smoother in a vector with less than 21 values.\n") - } - myPartition = c(1:10, sample(10, length(t)-10, replace=TRUE)); - y = split(y, myPartition) - t = split(t, myPartition) - dataType = 'Sparse'; - } - - # Make everything into vectors - ncohort = length(t); - tt = unlist(t); - yy = unlist(y); - ind = unlist(lapply( 1:ncohort, function(j) rep(j, times=length(t[[j]])))); - yyn = yy[order(tt)]; - ind = ind[order(tt)]; - ttn = sort(tt); - - # Get minimum reasonable bandwidth - a0=ttn[1]; - b0=ttn[length(ttn)]; - rang = b0-a0; - dstar = Minb(tt, npoly+2); - if (dataType != 'Dense'){ - h0 = 2.5*dstar; - } else { - h0 = dstar; - } - if (h0 > rang/4){ - h0 = h0*.75; - warning(sprintf("Warning: the min bandwith choice is too big, reduce to %f !", (h0) )) - } - - # Get the candidate bandwidths - nbw = 11; - bw = rep(0,nbw-1); - n = length(unique(tt)); - for (i in 1:(nbw-1)){ - bw[i]=2.5*rang/n*(n/2.5)^((i-1)/(nbw-1)); # Straight from MATLAB - } - bw = bw-min(bw)+h0; - - #ave = rep(0, length(t[[1]])); - # - #if (dataType == 'Dense'){ - # for (i in 1:ncohort){ - # ave = ave + t[[i]]/ncohort; - # } - #} - - cv = matrix(0, ncol = length(bw), nrow = kFolds); - #count = c(); - theFolds = CreateFolds(unique(ind), k= kFolds) - - for (j in 1:(nbw-1)){ - # cv[j]=0; - # count[j]=0; - #for (i in 1:ncohort){ - for (i in 1:kFolds){ - - xout= ttn[ ind %in% theFolds[[i]]]; - obs = yyn[ ind %in% theFolds[[i]]]; - xin = ttn[!ind %in% theFolds[[i]]]; - yin = yyn[!ind %in% theFolds[[i]]]; - - win=rep(1,length(yin)); - #win[ind==i] = NA; - #if(dataType=='Dense') { - # yyn=(ave*ncohort-t[[i]])/(ncohort-1); - # ttn=t[[1]]; - # win=pracma::ones(1,length(t[[1]])); - # yyn = yyn[order(ttn)] - # ttn = sort(ttn) - #} - - mu = tryCatch( - Lwls1D(bw= bw[j], kernel_type = kernel, npoly=npoly, nder= nder, xin = xin, yin= yin, xout=xout, win = win), - error=function(err) { - warning('Invalid bandwidth during CV. Try enlarging the window size.') - return(Inf) - }) - - cv[i,j] = sum((obs-mu)^2) - # print(cv) - if(is.na(cv[i,j])){ - cv[i,j] = Inf; - } - #count[j] = count[j]+1; - } - } - #cv = cv[(count/ncohort>0.90)]; - #bw = bw[(count/ncohort>0.90)]; - if(min(cv) == Inf){ - stop("All bandwidths resulted in infinite CV costs.") - } - if( useBW1SE ){ - # This will pick the bandwidth that is the max but it's average cost is at most - # 1 standard error of the minimum cost / I use means so it is more straighforward what the SE is. - bopt = bw[max(which( - colMeans(cv) < min(colMeans(cv)) + apply(cv,2, sd)[which.min(colMeans(cv))]/sqrt(kFolds)))] - } else { - bopt = bw[which.min( colMeans(cv))]; - } - - return(bopt) - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckAndCreateCOPoptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckAndCreateCOPoptions.R deleted file mode 100644 index 56fb1978..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckAndCreateCOPoptions.R +++ /dev/null @@ -1,113 +0,0 @@ -### CheckAndCreateCOPoptions # COP = CreateOutliersPlot - -CheckAndCreateCOPoptions <- function(optns,fObjClass){ - - if(is.null(optns$ifactor)){ - ifactor = NULL - } else { - ifactor = optns$ifactor - } - - if(is.null(optns$outlierList)){ - outlierList = NULL - } else { - outlierList = optns$outlierList - } - - if(is.null(optns$unimodal)){ - unimodal = NULL - } else { - unimodal = optns$unimodal - } - - if(is.null(optns$colSpectrum)){ - colSpectrum = NULL - } else { - colSpectrum = optns$colSpectrum - } - - if(is.null(optns$groupingType)){ - groupingType = 'standard' - } else { - groupingType = optns$groupingType - } - - if(is.null(optns$variant)){ - variant = 'KDE' - } else { - variant = optns$variant - } - - if(is.null(optns$nSlices)){ - nSlices = 4 - } else { - nSlices = optns$nSlices - } - - - if(is.null(optns$showSlices)){ - showSlices = FALSE - } else { - showSlices = optns$showSlices - } - - if(is.null(optns$fIndeces)){ - if(fObjClass == 'FPCA'){ - fIndeces <- c(1,2) - } else { - fIndeces <- c(1,1) - } - } else { - if( 2 < length(optns$fIndeces)){ - warning("fIndeces has more than two elements; only the first two will be used.") - } - fIndeces <- (optns$fIndeces[1:2]) - } - - if( !any( groupingType == c('standard','slice')) ){ - stop("You request an groupingType method not currenty available.") - } - if( !any( variant == c('KDE','bagplot', 'NN')) ){ - stop("You request an outlier detection method not currenty available.") - } - if ( variant == 'bagplot' && !is.element('aplpack', installed.packages()[,1]) ){ - stop("Cannot the use the bagplot method; the package 'aplpack' is unavailable.") - } - if ( variant == 'KDE' && !is.element('ks', installed.packages()[,1]) ){ - stop("Cannot the use the KDE method; the package 'ks' is unavailable.") - } - if ( !is.null(unimodal) && !is.logical(unimodal) ){ - stop("The variable 'unimodal' must be logical.") - } - if (is.null(colSpectrum)){ - colFunc = colorRampPalette(c("red", "yellow", 'blue')); - } else { - colFunc = colorRampPalette(colSpectrum) - } - if (!is.null(ifactor) && (1 >= ifactor) ){ - warning("It is nonsensical for an inflation factor to be <= 1. 'ifactor' set to 1.1.") - ifactor = 1.1; - } - if ( !(2 <= nSlices) || !(16 >= nSlices) || !(nSlices %% 1 == 0) ){ - warning("nSlices must be between a natural number between 2 and 16. 'nSlices' set to 4.") - nSlices = 4; - } - if(diff(range(fIndeces)) < .Machine$double.eps){ - if( fObjClass == 'FPCA'){ - stop("You request a scatter over the same component; check the fIndeces.") - } - } - if(is.null(optns$maxVar)){ - maxVar = !( fObjClass == 'FPCA') - } else { - maxVar = optns$maxVar - } - - - perfOptns <- list(nSlices = nSlices, ifactor = ifactor, colFunc = colFunc, fIndeces = fIndeces, maxVar = maxVar, - showSlices = showSlices, - variant = variant, groupingType = groupingType, unimodal = unimodal, outlierList = outlierList) - return(perfOptns) - - -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckData.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckData.R deleted file mode 100644 index 4c6c3f4e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckData.R +++ /dev/null @@ -1,46 +0,0 @@ -#' Check data format -#' -#' Check if there are problems with the form and basic structure of the functional data 'y' and the recorded times 't'. -#' -#' @param y is a n-by-1 list of vectors -#' @param t is a n-by-1 list of vectors -#' @export - - -CheckData = function(y,t){ - - if(!is.list(y)){ - stop('y should be list \n') - } - if(!is.list(t)){ - stop('t should be list \n') - } - - if( length(t) != length(y)){ - stop('t and y should have the same length \n') - } - - ni_y = unlist(lapply(y,function(x) sum(!is.na(x)))) - if(all(ni_y == 1)){ - stop("FPCA is aborted because the data do not contain repeated measurements in y!\n"); - } - ni_tt = unlist(lapply(t,function(x) sum(!is.na(x)))) - if(all(ni_tt == 1)){ - stop("FPCA is aborted because the data do not contain repeated measurements in t!\n"); - } - if( !all(unlist(lapply(y,function(x) typeof(x) %in% c('integer', 'double') ) ) ) ){ - stop("FPCA is aborted because 'y' members are not all of type double or integer! Try \"lapply(y,function(x) typeof(x))\" to see the current types \n"); - } - if( !all(unlist(lapply(t,function(x) typeof(x) %in% c('integer', 'double'))) ) ){ - stop("FPCA is aborted because 't' members are not all of type double or integer! Try \"lapply(t,function(x) typeof(x))\" to see the current types \n"); - } - - if(any( unlist( lapply(t, function(x) length(x) != length(unique(x))))) ){ - stop("FPCA is aborted because within-subject 't' members have duplicated values. Try \"which( unlist( lapply(t, function(x) length(x) != length(unique(x)))))\" to see potentially problematic entries. \n"); - } - if( any(sapply(t[seq_len(min(1001, length(t)))], is.unsorted, na.rm=TRUE)) ) { - stop('Each vector in t should be in ascending order') - } - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckOptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckOptions.R deleted file mode 100644 index 91a497be..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckOptions.R +++ /dev/null @@ -1,181 +0,0 @@ -#' Check option format -#' -#' Check if the options structure is valid and set the ones that are NULL -#' -#' @param t is a n-by-1 list of vectors -#' @param optns is an initialized option list -#' @param n is a total number of sample curves -#' @export - -CheckOptions = function(t,optns,n){ - - - if( !( any(optns[['useBinnedData']] == c('FORCE','AUTO','OFF')) )){ - # Force, turn off or automatically decide about the use of bin data - stop("FPCA is aborted because the argument: useBinnedData is invalid!\n"); - } - if( !( (length(optns[['userBwMu']])==1) && is.numeric(optns[['userBwMu']]) && (0<=optns[['userBwMu']]) ) ){ - # bandwidth Bhoice for mean function is using CV or GCV - stop("FPCA is aborted because the argument: userBwMu is invalid!\n"); - } - if( !( any(optns[['methodBwMu']] == c('Default','CV','GCV','GMeanAndGCV')) )){ - # bandwidth choice for mean function is GCV if userBwMu = 0 - stop("FPCA is aborted because the argument: methodBwMu is invalid!\n"); - } - if(!(length(optns[['userBwCov']])==1) && is.numeric(optns[['userBwCov']]) && (all(optns[['userBwCov']]>=0))){ - # bandwidth choice for covariance function is CV or GCV - stop("FPCA is aborted because the argument: userBwCov is invalid!\n"); - } - if( !( any(optns[['methodBwCov']] == c('Default','CV','GCV','GMeanAndGCV') ) )){ - # bandwidth choice for covariance function is GCV if userBwCov = c(0,0) - stop("FPCA is aborted because the argument: methodBwCov is invalid!\n"); - } - - if (is.nan(optns[['kFoldMuCov']]) || optns[['kFoldMuCov']] < 2) { - stop('Invalid `kFoldMuCov` option') - } - - if( !(any(optns[['methodSelectK']] == c('FVE','AIC','BIC')))){ - if(is.numeric(optns[['methodSelectK']])){ - if(as.integer(optns[['methodSelectK']]) != optns[['methodSelectK']] || optns[['methodSelectK']] <= 0 || optns[['methodSelectK']] > n){ - stop('FPCA is aborted because the argument: methodSelectK is invalid!\n') - } - } else { - stop('FPCA is aborted because the argument: methodSelectK is invalid!\n') - } - } - if( ( (length(optns[['FVEthreshold']])==1) && is.numeric(optns[['FVEthreshold']]) ) ){ - if (!( (0<=optns[['FVEthreshold']]) && (optns[['FVEthreshold']]<=1) ) ){ - # the Fraction-of-Variance-Explained - stop("FPCA is aborted because the argument: FVEthreshold is invalid!\n"); - } - } - if( !( (length(optns[['maxK']])==1) && is.numeric(optns[['maxK']]) && (1<=optns[['maxK']]) && (optns[['maxK']]<=n) )){ - # maximum number of principal components to consider - stop("FPCA is aborted because the argument: maxK is invalid!\n"); - } - #if( !is.null(optns$numComponents) ) { - # if( !( (length(optns$numComponents)==1) && is.numeric(optns$numComponents) && (1<=optns$numComponents) && (optns$numComponents<=n) )){ - # # maximum number of principal components to return - # stop("FPCA is aborted because the argument: numComponents is invalid!\n"); - # } - #} - if( !( is.null(optns[['dataType']]) || any(optns[['dataType']]==c("Sparse","DenseWithMV","Dense","p>>n")) )){ - #do we have regualr or sparse functional data - stop("FPCA is aborted because the argument: dataType is invalid!\n"); - } - if( ( is.null(optns[['dataType']]) )){ - optns[['dataType']] = IsRegular(t) - } - if(!is.logical(optns[['error']])){ - # error assumption with measurement error - stop("FPCA is aborted because the error option is invalid!\n"); - } - if( !( (length(optns[['nRegGrid']])==1) && is.numeric(optns[['nRegGrid']]) && (1<=optns[['nRegGrid']]) && (optns[['nRegGrid']]>optns[['maxK']]) ) ){ - # number of support points in each direction of covariance surface - stop("FPCA is aborted because the argument: nRegGrid is invalid!\n"); - } - if( !(any(optns[['methodXi']] == c('CE','IN')))){ - #method to estimate the PC scores - stop("FPCA is aborted because the argument: methodXi is invalid!\n"); - } - # if (optns[['methodXi']] == 'IN' && optns[['dataType']] != 'Dense') { - # stop("integration method can only be applied on dense data now!") - # } - if(!(any(optns[['kernel']] == c('epan','gauss','rect','quar','gausvar')))){ - #method to estimate the PC scores - stop("FPCA is aborted because the argument: kernel is invalid!\n"); - } - if( !( ( is.numeric(optns[['numBins']]) && (optns[['numBins']]>1)) || is.null(optns[['numBins']]) ) ){ - # Check suitability of number of bins - stop("FPCA is aborted because the argument: numBins is invalid!\n"); - } - if( ( ( optns[['useBinnedData']] == 'FORCE') && is.null(optns[['numBins']]) ) ){ - # Check that we have a number of the bins if we force binning - stop("FPCA is aborted because the argument: numBins is NULL but you FORCE binning!\n"); - } - if(!is.character(optns[['yname']])){ - # name of the variable analysed - stop("FPCA is aborted because the argument: yname is invalid!\n"); - } - if(!is.logical(optns[['plot']])){ - # make plot - stop("FPCA is aborted because the argument: plot is invalid!\n"); - } - if(!(any(optns[['rho']] == c('cv-random', 'cv', 'none', 'no')))){ - # truncation threshold for the iterative residual that is used - stop("FPCA is aborted because the argument: rho is invalid!\n"); - } - if(!is.logical(optns[['verbose']])){ - # display diagnostic messages - stop("FPCA is aborted because the argument: verbose is invalid!\n"); - } - if (! ( is.null(optns[['userMu']]) || - (is.list(optns[['userMu']]) && is.vector(optns[['userMu']][['t']]) && is.vector(optns[['userMu']][['mu']]) && - ( length(optns[['userMu']][['t']]) == length(optns[['userMu']][['mu']]) ) ))){ - # display diagnostic messages - stop("FPCA is aborted because the argument: userMu is invalid!\n"); - } - if (! ( is.null(optns[['userCov']]) || - ( is.list(optns[['userCov']]) && is.vector(optns[['userCov']][['t']]) && is.matrix(optns[['userCov']][['cov']]) && - (length(optns[['userCov']][['t']]) == ncol(optns[['userCov']][['cov']]) ) && ( isSymmetric(optns[['userCov']][['cov']]) ) ) ) ){ - # display diagnostic messages - stop("FPCA is aborted because the argument: userCov is invalid! (eg. Check if 'cov' is symmetric and 't' is of appropriate size.)\n"); - return(TRUE); - } - if (!is.null(optns[['userSigma2']])) { - if (!(is.numeric(optns[['userSigma2']]) && - length(optns[['userSigma2']]) == 1 && - optns[['userSigma2']] >= 0)) { - stop('userSigma2 invalid.') - } - - if (optns[['userSigma2']] == 0 && optns[['error']]) { - stop('userSigma2 specified to be 0 but error = TRUE. If no measurement error is assumed then use error = FALSE.') - } - } - if (!is.null(optns[['userRho']])) { - if (!(is.numeric(optns[['userRho']]) && - length(optns[['userRho']]) == 1 && - optns[['userRho']] >= 0)) { - stop('userSigma2 invalid.') - } - if (optns[['userRho']] == 0 && optns[['error']]) { - stop('userRho specified to be 0 but error = TRUE. If no measurement error is assumed then use error = FALSE.') - } - } - #if(!(any(optns[['methodMu']] == c('PACE','RARE','CrossSectional')))){ - # # user-defined mean functions - # stop("FPCA is aborted because the argument: methodMu is invalid!\n"); - #} - if( !( (length(optns[['outPercent']])==2) && is.numeric(optns[['outPercent']]) && all(0<=optns[['outPercent']]) && all(optns[['outPercent']]<=1) )){ - # display diagnostic messages - stop("FPCA is aborted because the argument: outPercent is invalid!\n"); - } - if( !( (length(optns[['rotationCut']])==2) && is.numeric(optns[['rotationCut']]) && all(0<=optns[['rotationCut']]) && all(optns[['rotationCut']]<=1) )){ - # display diagnostic messages - stop("FPCA is aborted because the argument: rotationCut is invalid!\n"); - } - if(is.logical(optns[['userCov']])){ - # display diagnostic messages - stop("FPCA is aborted because the argument: userCov is invalid!\n"); - } - if(!(any(optns[['methodMuCovEst']] == c('smooth', 'cross-sectional')))){ - stop("FPCA is aborted because the argument: methodMuCovEst is invalid!\n"); - } - - if(!is.logical(optns[['lean']])){ - # error assumption with measurement error - stop("FPCA is aborted because the lean option is invalid!\n"); - } - - if(!is.logical(optns[['useBW1SE']])){ - # error assumption with measurement error - stop("FPCA is aborted because the useBW1SE option is invalid!\n"); - } -# if (optns[['methodMuCovEst']] == 'smooth' && optns[['dataType']] == 'DenseWithMV') { -# stop('Smoothing method not supported for \'DenseWithMV\' dataType. Use \'Sparse\' dataType instead') -# } - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckSVDOptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckSVDOptions.R deleted file mode 100644 index 4f7c50fb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CheckSVDOptions.R +++ /dev/null @@ -1,18 +0,0 @@ -### CheckSVDOptions - -CheckSVDOptions <- function(Ly1, Lt1, Ly2, Lt2, SVDoptns){ - - if( (SVDoptns[['dataType1']]=='Sparse' && is.null(SVDoptns[['userMu1']])) || - (SVDoptns[['dataType2']]=='Sparse' && is.null(SVDoptns[['userMu2']])) ){ - stop('User specified mean function required for sparse functional data for cross covariance estimation.') - } - if(is.numeric(SVDoptns$methodSelectK)){ - if(SVDoptns$methodSelectK != round(SVDoptns$methodSelectK) || - SVDoptns$methodSelectK <= 0){ - stop("FSVD is aborted: 'methodSelectK' is invalid!\n") - } - } - if( !(SVDoptns$regulRS %in% c('sigma2','rho') ) ){ - stop("FSVD is aborted: Unknown regularization option. The argument 'regulRS' should be 'rho' or 'sigma2'!") - } -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CompFntCent.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CompFntCent.R deleted file mode 100644 index 877c6524..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CompFntCent.R +++ /dev/null @@ -1,29 +0,0 @@ -##### -##### centering conponent function by marginal mean -##### - -##### input variables: -##### f: evaluated values of component functions at estimation grid (N*d matrix) -##### j: index of centering for the j-th component function (scalar) -##### x: estimation grid (N*d matrix) -##### MgnJntDensity: evaluated values of marginal and 2-dim. joint densities (2-dim. list, referred to the output of 'MgnJntDensity') - -##### output: -##### NW marginal regression function kernel estimators at estimation grid (N*d matrix) - - -# centering -CompFntCent <- function(f,j,x,MgnJntDens){ - - fj <- f[,j] - xj <- x[,j] - - pMatMgn <- MgnJntDens$pMatMgn - - tmp1 <- pMatMgn[,j] - tmp <- fj-trapzRcpp(sort(xj),(fj*tmp1)[order(xj)]) - - return(tmp) - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CondProjection.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CondProjection.R deleted file mode 100644 index f9350e17..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CondProjection.R +++ /dev/null @@ -1,57 +0,0 @@ -##### -##### conditional projection -##### - -##### input variables: -##### f: evaluated values of component functions at estimation grid (N*d matrix) -##### kj: index of conditional projection for the k-th component function on the j-th component function space (2-dim. vector) -##### x: estimation grid (N*d matrix) -##### X: covariate observation grid (n*d matrix) -##### MgnJntDensity: evaluated values of marginal and 2-dim. joint densities (2-dim. list, referred to the output of 'MgnJntDensity') - -##### output: -##### conditional projection of the k-th component function on the j-th component function space (N-dim. vector) - - -CondProjection <- function(f, kj, x, X, MgnJntDens){ - - N <- nrow(x) - n <- nrow(X) - d <- ncol(X) - - k <- kj[1] - j <- kj[2] - - xj <- x[,j] - xk <- c() - - fk <- f[,k] - if (length(fk)==n) { - xk <- X[,k] - } else { - xk <- x[,k] - } - - asdf <- MgnJntDens$pMatMgn[,j] - - tmpInd <- which(asdf!=0) - qwer <- MgnJntDens$pArrJnt[,tmpInd,k,j] - - if (length(tmpInd)>0) { - - pHat <- matrix(0,nrow=length(xk),ncol=length(xj)) - - pHat[,tmpInd] <- t(t(qwer)/asdf[tmpInd]) - - tmp <- c() - for (l in 1:ncol(pHat)) { - tmptmp <- fk*c(pHat[,l]) - tmp[l] <- trapzRcpp(sort(xk),tmptmp[order(xk)]) - } - - return(tmp) - - } else { - return(0) - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/ConvertSupport.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/ConvertSupport.R deleted file mode 100644 index bd7931df..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/ConvertSupport.R +++ /dev/null @@ -1,42 +0,0 @@ -#' Convert support of a mu/phi/cov etc. to and from obsGrid and workGrid -#' -#' Convert the support of a given function 1-D or 2-D function from 'fromGrd' to 'toGrid'. -#' Both grids need to be sorted. This is a interpolation/convenience function. -#' -#' @param fromGrid vector of points with input grid to interpolate from -#' @param toGrid vector of points with the target grid to interpolate on -#' @param mu any vector of function to be interpolated -#' @param phi any matrix, each column containing a function to be interpolated -#' @param Cov a square matrix supported on fromGrid * fromGrid, to be interpolated to toGrid * toGrid. -#' @param isCrossCov logical, indicating whether the input covariance is a cross-covariance. If so then the output is not made symmetric. -#' -#' @export - - -ConvertSupport <- function(fromGrid, toGrid, mu=NULL, Cov=NULL, phi=NULL, isCrossCov=FALSE) { - - # In case the range of toGrid is larger than fromGrid due to numeric error - buff <- .Machine$double.eps * max(abs(fromGrid)) * 3 - if (abs(toGrid[1] - fromGrid[1]) < buff) - toGrid[1] <- fromGrid[1] - if (abs(toGrid[length(toGrid)] - fromGrid[length(fromGrid)]) < buff) - toGrid[length(toGrid)] <- fromGrid[length(fromGrid)] - if ( ( fromGrid[1] - buff > toGrid[1]) || - ( fromGrid[length(fromGrid)] + buff < toGrid[length(toGrid)]) ) { - stop("Insufficient size of 'fromGrid'.")} - - if (!is.null(mu)) {# convert mu - return(MapX1D(fromGrid, mu, toGrid)) - } else if (!is.null(Cov)) { - gd <- expand.grid(X=toGrid, Y=toGrid) - ret <- matrix(interp2lin(fromGrid, fromGrid, Cov, gd$X, gd$Y), nrow=length(toGrid)) - if (!isCrossCov) { # ensure that covariance is symmetric - ret <- 0.5 * (ret + t(ret)) - } - return(ret) - } else if (!is.null(phi)) { - return(MapX1D(fromGrid, phi, toGrid)) - } - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBWPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBWPlot.R deleted file mode 100644 index 66100009..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBWPlot.R +++ /dev/null @@ -1,110 +0,0 @@ -#' Functional Principal Component Analysis Bandwidth Diagnostics plot -#' -#' This function by default creates the mean and first principal modes of variation plots for -#' 50%, 75%, 100%, 125% and 150% of the defined bandwidth choices in the fpcaObj provided as input. -#' If provided with a derivative options object (?FPCAder) it will return the -#' differentiated mean and first two principal modes of variations for 50%, 75%, 100%, 125% and 150% of the defined bandwidth choice. -#' -#' @param fpcaObj An FPCA class object returned by FPCA(). -#' @param derOptns A list of options to control the derivation parameters; see ?FPCAder. If NULL standard diagnostics are returned -#' @param bwMultipliers A vector of multipliers that the original 'bwMu' and 'bwCov' will be multiplied by. (default: c(0.50, 0.75, 1.00, 1.25, 1.50)) -#' - default: NULL -#' -#' @examples -#' set.seed(1) -#' n <- 25 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -#' CreateBWPlot(res1) -#' @export - -CreateBWPlot <-function(fpcaObj, derOptns = NULL, bwMultipliers = NULL){ - - if(class(fpcaObj) != 'FPCA'){ - stop("Input class is incorrect; CreateDiagnosticsPlot() is only usable from FPCA objects.") - } - oldPar <- par(no.readonly=TRUE) - on.exit(par(oldPar)) - if( is.null(bwMultipliers)){ - bwMultipliers = c(0.50, 0.75, 1.00, 1.25, 1.50) - # This is knowingly wasteful as 1.00 is already computed; not having it would perplex the code - # unnecessarily though. - } - - M <- length(bwMultipliers) - - if(is.null(derOptns) || !is.list(derOptns)){ - - if(fpcaObj$optns$lean){ - stop("FPCA bandwidth diagnostics are not available for lean FPCA objects.") - } - - newFPCA <- function(mlt){ - optnsNew = fpcaObj$optns; - optnsNew[c('userBwMu', 'userBwCov')] = mlt * unlist(fpcaObj[c('bwMu', 'bwCov')]) - return( FPCA(fpcaObj[['inputData']][['Ly']], fpcaObj[['inputData']][['Lt']], optnsNew) ) - } - - yy = lapply( bwMultipliers, function(x) tryCatch( newFPCA(x), error = function(err) { - #warning('Probable invalid bandwidth. Try enlarging the window size.') - stop( paste( collapse =' ', c('Multiplier :', x, 'failed to return valid FPCA object. Change multiplier values.'))) - return(NA)})) - # if( any(is.na(yy))){ - # warning( paste( collapse =' ', c('Multipliers :', bwMultipliers[is.na(yy)], 'fail to return valid FPCA objects.'))) - # bwMultipliers = bwMultipliers[!is.na(yy)] - # M = length(bwMultipliers) - # yy[[is.na(yy)]] = NULL - # } - - par(mfrow=c(1,3)) - - Z = rbind( sapply(1:M, function(x) yy[[x]]$mu)); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', mu, "(s)")), xlab = 's') - grid(); legend('topright', lty = 1, col=1:M, legend = apply( rbind( rep('bwMu: ',M), round( digits = 2, bwMultipliers * fpcaObj$bwMu)), 2, paste, collapse = '')) - - Z = rbind(sapply(1:M, function(x) yy[[x]]$phi[,1])); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', phi[1], "(s)")), xlab = 's') - grid(); legend('topright', lty = 1, col=1:M, legend = apply( rbind( rep('bwCov: ',M), round( digits = 2, bwMultipliers * fpcaObj$bwCov)), 2, paste, collapse = '')) - - Z = rbind(sapply(1:M, function(x) yy[[x]]$phi[,2])); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', phi[2], "(s)")), xlab = 's') - grid(); legend('topright', lty = 1, col=1:M, legend = apply( rbind( rep('bwCov: ',M), round( digits= 2, bwMultipliers * fpcaObj$bwCov)), 2, paste, collapse = '')) - - - } else { - - derOptns <- SetDerOptions(fpcaObj,derOptns = derOptns) - p <- derOptns[['p']] - method <- derOptns[['method']] - bw <- derOptns[['bw']] - kernelType <- derOptns[['kernelType']] - k <- derOptns[['k']] - if(p==0){ - stop("Derivative diagnostics are inapplicable when p = 0") - } - - yy = lapply( bwMultipliers * bw, function(x) FPCAder(fpcaObj, list(p=p, method = method, kernelType = kernelType, k = k, bw = x))) - - par(mfrow=c(1,3)) - - Z = rbind(sapply(1:M, function(x) yy[[x]]$muDer)); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', mu, "/ds")), - main= substitute(paste("Derivatives of order ", p, " of ", mu)), xlab = 's') - grid(); legend('topright', lty = 1, col=1:M, legend = apply( rbind( rep('bw: ',M), round( digits=2, bwMultipliers * bw)), 2, paste, collapse = '')) - - Z = rbind(sapply(1:M, function(x) yy[[x]]$phiDer[,1])); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', phi[1], "/ds")), - main= substitute(paste("Derivatives of order ", p, " of ", phi[1])), xlab = 's') - grid(); legend('topright', lty = 1, col=1:M, legend = apply( rbind( rep('bw: ',M), round(digits= 2, bwMultipliers * bw)), 2, paste, collapse = '')) - - Z = rbind(sapply(1:M, function(x) yy[[x]]$phiDer[,2])); - matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', phi[2], "/ds")), - main= substitute(paste("Derivatives of order ", p, " of ", phi[2])), xlab = 's') - grid(); legend('topleft', lty = 1, col=1:M, legend = apply( rbind( rep('bw: ',M), round( bwMultipliers * bw, digits=2) ), 2, paste, collapse = '')) - - } -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBasis.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBasis.R deleted file mode 100644 index 4306b2cb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateBasis.R +++ /dev/null @@ -1,78 +0,0 @@ -#' Create an orthogonal basis of K functions in [0, 1], with nGrid points. -#' -#' @param K A positive integer specifying the number of eigenfunctions to generate. -#' @param pts A vector specifying the time points to evaluate the basis functions. -#' @param type A string for the type of orthogonal basis. -#' @return A K by nGrid matrix, each column containing an basis function. -#' -#' @examples -#' basis <- CreateBasis(3, type='fourier') -#' head(basis) -#' -#' @export -CreateBasis <- function(K, pts=seq(0, 1, length.out=50), type=c('cos', 'sin', 'fourier', 'legendre01', 'poly')) { - - nGrid <- length(pts) - type <- match.arg(type) - - stopifnot(is.numeric(K) && length(K) == 1 && K > 0) - - if (type == 'cos') { - res <- sapply(seq_len(K), function(k) - if (k == 1) { - rep(1, nGrid) - } else { - sqrt(2) * cos((k - 1) * pi * pts) - } - ) - } else if (type == 'sin') { - res <- sapply(seq_len(K), function(k) sqrt(2) * sin(k * pi * pts)) - } else if (type == 'fourier') { - res <- sapply(seq_len(K), function(k) - if (k == 1) { - rep(1, nGrid) - } else if (k %% 2 == 0) { - sqrt(2) * sin(k * pi * pts) - } else { - sqrt(2) * cos((k - 1) * pi * pts) - } - ) - } else if (type == 'legendre01') { - # coefMat <- matrix(0, K, K) - if (K == 1) { - res <- matrix(1, length(pts), 1) - } else if (K > 1) { - coefMat <- sapply(seq_len(K), function(n) { - coef <- rep(0, K) - # # coef[1] <- (-1)^(n - 1) - for (k in seq_len(n)) { - coef[k] <- (-1)^(n - k) * choose(n - 1, k - 1) * - choose(n + k - 2, k - 1) - } - coef * sqrt(2 * n - 1) - }) - xMat <- cbind(1, stats::poly(pts, K - 1, raw=TRUE)) - res <- xMat %*% coefMat - # browser() - } - - if (K >= 25) { - warning('Numeric unstability may occur. Use K < 25.') - } - } else if (type == 'poly') { - if (K == 1) { - res <- matrix(1, length(pts), 1) - } else if (K > 1) { - res <- cbind(1, stats::poly(pts, K - 1, raw=TRUE)) - } - - if (K >= 25) { - warning('Numeric unstability may occur. Use K < 25.') - } - } else if (type == 'unknown') { - stop('unknown basis type') - } - - res <- matrix(res, ncol=K) # prevent single length pts - res -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateCovPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateCovPlot.R deleted file mode 100644 index 8ebd0504..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateCovPlot.R +++ /dev/null @@ -1,108 +0,0 @@ -#' Create the covariance surface plot based on the results from FPCA() or FPCder(). -#' -#' This function will open a new device if not instructed otherwise. -#' -#' @param fpcaObj returned object from FPCA(). -#' @param covPlotType a string specifying the type of covariance surface to be plotted: -#' 'Smoothed': plot the smoothed cov surface -#' 'Fitted': plot the fitted cov surface -#' @param isInteractive an option for interactive plot: -#' TRUE: interactive plot; FALSE: printable plot -#' @param colSpectrum character vector to be use as input in the 'colorRampPalette' function defining the colouring scheme (default: c('blue','red')) -#' @param ... other arguments passed into persp3d, persp3D, plot3d or points3D for plotting options -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' CreateCovPlot(res) -#' @export - -CreateCovPlot = function(fpcaObj, covPlotType = 'Fitted', isInteractive = FALSE, colSpectrum = NULL, ...){ - - if(!(class(fpcaObj) %in% c('FPCA','FSVD','FPCAder'))){ - stop("Input object must be class: 'FPCA','FSVD' or 'FPCAder'.") - } - - if('FSVD' == class(fpcaObj)){ - if('Fitted' != covPlotType){ - stop("Only 'Fitted' cross-covariance is available when using FSVD objects.") - } - covPlotType == 'Fitted'; - } - - ## Check if plotting covariance surface for fitted covariance surface is proper - if(covPlotType == 'Fitted'){ - no_opt = ifelse('FSVD' == class(fpcaObj), length(fpcaObj$sValues), length(fpcaObj$lambda)) - if(length(no_opt) == 0){ - warning('Warning: Input is not a valid FPCA, FSVD or FPCder output.') - return() - } else if(no_opt == 1){ - warning('Warning: Covariance surface is not available when only one principal component is used.') - return() - } - } - - if(is.null(colSpectrum)){ - colFunc = colorRampPalette( c('blue','red') ); - } else { - colFunc = colorRampPalette(colSpectrum) - } - - ## Check if rgl is installed - if (isInteractive == FALSE && (!'plot3D' %in% installed.packages()[, ])) { - stop("CreateCovPlot requires package 'plot3D'") - } - if(isInteractive == TRUE && is.element('rgl', installed.packages()[,1]) == FALSE){ - stop("Interactive plot requires package 'rgl'") - } - - ## Define the variables to plot - if(covPlotType == 'Smoothed'){ - covSurf = fpcaObj$smoothedCov # smoothed covariance matrix - } else if(covPlotType == 'Fitted'){ - if('FSVD' == class(fpcaObj)){ - covSurf = fpcaObj$CrCov # fitted cross-covariance matrix - } else { - covSurf = fpcaObj$fittedCov # fitted covariance matrix - } - } else { - warning("Covariance plot type no recognised; using default ('Fitted').") - covSurf = fpcaObj$fittedCov - covPlotType = 'Fitted' - } - - ## Define the plotting arguments - args1 <- list( xlab='s', ylab='t', col = colFunc(24), zlab = 'C(s,t)', lighting=FALSE) - if( covPlotType == 'Fitted' ){ - if('FSVD' == class(fpcaObj)){ - args1$main = 'Fitted cross-covariance surface'; - } else { - args1$main = 'Fitted covariance surface'; - } - } else { - args1$main = 'Smoothed covariance surface'; - } - if (isInteractive){ # If is interactive make it blue instead of topological - args1$col = 'blue' - } - inargs <- list(...) - args1[names(inargs)] <- inargs - if('FSVD' == class(fpcaObj)){ - args2 = list (x = fpcaObj$grid1, y = fpcaObj$grid2, z = covSurf) - } else { - workGrid = fpcaObj$workGrid - args2 = list (x = workGrid, y = workGrid, z = covSurf) - } - - ## Plot the thing - if(isInteractive){ # Interactive Plot - do.call(rgl::persp3d, c(args2, args1)) - } else { # Static plot - do.call(plot3D::persp3D, c(args2, args1)) - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDesignPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDesignPlot.R deleted file mode 100644 index ce442d54..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDesignPlot.R +++ /dev/null @@ -1,125 +0,0 @@ -#' Create the design plot of the functional data. -#' -#' Display the scatter plot of \eqn{\{(T_{ij}, T_{il}\}_{i \le n,\, j,l \le n_i }}{{(T_{ij}, T_{il}}}, which is used to diagnose whether the design time points are sufficiently dense in the domain of interest so that the 2D smoothed covariance estimate is feasible. See Figure 2 of Yao et al (2005). This function will open a new device if not instructed otherwise. -#' -#' @param Lt a list of observed time points for functional data -#' @param obsGrid a vector of sorted observed time points. Default to the -#' unique time points in Lt. -#' @param isColorPlot an option for colorful plot: -#' TRUE: create color plot with color indicating counts -#' FALSE: create black and white plot with dots indicating observed time pairs -#' @param noDiagonal an option specifying plotting the diagonal design points: -#' TRUE: remove diagonal time pairs -#' FALSE: do not remove diagonal time pairs -#' @param addLegend Logical, default TRUE -#' @param ... Other arguments passed into \code{plot()}. -#' @references -#' \cite{Yao, Fang, Hans-Georg Mueller, and Jane-Ling Wang. "Functional data analysis for sparse longitudinal data." Journal of the American Statistical Association 100, no. 470 (2005): 577-590.} -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' CreateDesignPlot(sampWiener$Lt, sort(unique(unlist(sampWiener$Lt)))) -#' @export - -CreateDesignPlot = function(Lt, obsGrid = NULL, isColorPlot=TRUE, noDiagonal=TRUE, addLegend= TRUE, ...){ - - if( class(Lt) != 'list'){ - stop("You do need to pass a list argument to 'CreateDesignPlot'!"); - } - if( is.null(obsGrid)){ - obsGrid = sort(unique(unlist(Lt))) - } - - args1 <- list( main="Design Plot", xlab= 'Observed time grid', ylab= 'Observed time grid', addLegend = addLegend) - inargs <- list(...) - args1[names(inargs)] <- inargs - - - # Check if we have very dense data (for visualization) on a regular grid - if( (length(obsGrid) > 101) & all(sapply(Lt, function(u) identical(obsGrid, u)))){ - res = matrix(length(Lt), nrow = 101, ncol = 101) - obsGrid = approx(x = seq(0,1,length.out = length(obsGrid)), y = obsGrid, - xout = seq(0,1,length.out = 101))$y - } else { - res = DesignPlotCount(Lt, obsGrid, noDiagonal, isColorPlot) - } - - oldpty <- par()[['pty']] - on.exit(par(pty=oldpty)) - par(pty="s") - if(isColorPlot == TRUE){ - createColorPlot(res, obsGrid, args1) - } else { - createBlackPlot(res, obsGrid, args1) - } - -} - -createBlackPlot = function(res, obsGrid, args1){ - - args1$addLegend = NULL - if( is.null(args1$col)){ - args1$col = 'black' - } - if (is.null(args1$cex)){ - args1$cex = 0.33 - } - if (is.null(args1$pch)){ - args1$pch = 19 - } - - u1 = as.vector(res) - u2 = as.vector(t(res)) - t1 = rep(obsGrid, times = length(obsGrid) ) - t2 = rep(obsGrid, each = length(obsGrid)) - do.call( plot, c(args1, list( x = t1[u1 != 0], y = t2[u2 !=0] ) ) ) - -} - -createColorPlot = function(res, obsGrid, args1){ - - res[res > 4] = 4; - notZero <- which(res != 0, arr.ind=TRUE) - nnres <- res[notZero] - - addLegend <- args1$addLegend; - args1$addLegend <- NULL - - if ( is.null(args1$col) ){ - colVec <- c(`1`='black', `2`='blue', `3`='green', `4`='red') - args1$col = colVec[nnres]; - } else { - colVec = args1$col; - } - - if ( is.null(args1$pch) ){ - pchVec <- rep(19, length(colVec)) - args1$pch = pchVec[nnres]; - } else { - pchVec = args1$pch; - } - - if ( is.null(args1$cex) ){ - cexVec <- seq(from=0.3, by=0.1, length.out=length(colVec)) - args1$cex <- cexVec[nnres] - } else { - cexVec <- args1$cex; - } - - do.call( plot, c(args1, list( x = obsGrid[notZero[, 1]], y = obsGrid[notZero[, 2]]) )) - - pars <- par() - # plotWidth <- (pars[['fin']][1] - sum(pars[['mai']][c(2, 4)])) - if(addLegend){ - if (!identical(unique(nnres), 1)){ - legend('right', c('1','2','3','4+'), pch = pchVec, col=colVec, pt.cex=1.5, title = 'Count',bg='white', - inset=-pars[['mai']][4] / pars[['pin']][1] * 1.5, xpd=TRUE) - } - } -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDiagnosticsPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDiagnosticsPlot.R deleted file mode 100644 index e24d251b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateDiagnosticsPlot.R +++ /dev/null @@ -1,12 +0,0 @@ -#' Functional Principal Component Analysis Diagnostics plot -#' -#' Deprecated. Use \code{plot.FPCA} instead. -#' @param ... passed into \code{plot.FPCA}. -#' @export -#' @rdname plot.FPCA - -CreateDiagnosticsPlot <-function(...){ - message('Deprecated and will be removed in the next version. Use plot.FPCA() instead.') - plot.FPCA(...) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFolds.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFolds.R deleted file mode 100644 index 33353563..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFolds.R +++ /dev/null @@ -1,60 +0,0 @@ -# Returns the test sets indices for k-Fold cross-validation. Stratified sampling is used. -# y: the response vector, for stratifying -# k: number of folds -# returns: a list of length k, containing the test-set indices. -CreateFolds <- function(y, k=10) { - n <- length(y) - if (n == 0) - stop('response length is zero') - - uniqY <- unique(y) - if (!is.factor(y) && length(y) / length(uniqY) >= k) { -# Intepret the integer-valued y as class labels. Stratify if the number of class labels is <= 5. - y <- factor(y) - } else if (is.numeric(y)) { -# 5-stratum Stratified sampling - if (n >= 5 * k) { - breaks <- unique(quantile(y, probs=seq(0, 1, length.out=5))) - y <- as.integer(cut(y, breaks, include.lowest=TRUE)) - } else - y <- rep(1, length(y)) - } - - sampList <- tapply(seq_along(y), y, SimpleFolds, k=k, simplify=FALSE) - list0 <- list() - length(list0) <- k - samp <- Reduce(function(list1, list2) { - mapply(c, list1, list2, SIMPLIFY=FALSE) - }, sampList, list0) - - return(samp) -} - -# Simple k-fold test-set samples. -# Input a set of SAMPLES -# Returns: a list of length k, containing the SAMPLES. -SimpleFolds <- function(yy, k=10) { - if (length(yy) > 1) - allSamp <- sample(yy) - else - allSamp <- yy - - n <- length(yy) - nEach <- n %/% k - samp <- list() - length(samp) <- k - for (i in seq_along(samp)) { - if (nEach > 0) - samp[[i]] <- allSamp[1:nEach + (i - 1) * nEach] - else - samp[[i]] <- numeric(0) - } - restSamp <- allSamp[seq(nEach * k + 1, length(allSamp), length.out=length(allSamp) - nEach * k)] - restInd <- sample(k, length(restSamp)) - for (i in seq_along(restInd)) { - sampInd <- restInd[i] - samp[[sampInd]] <- c(samp[[sampInd]], restSamp[i]) - } - - return(samp) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFuncBoxPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFuncBoxPlot.R deleted file mode 100644 index a60d226c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateFuncBoxPlot.R +++ /dev/null @@ -1,247 +0,0 @@ -#' Create functional boxplot using 'bagplot', 'KDE' or 'pointwise' methodology -#' -#' Using an FPCA object create a functional box-plot based on the function scores. -#' The green line corresponds to the functional median, the dark grey area to the area spanned -#' by the curves within the 25th and 75-th percentile and the light gret to the area spanned -#' by the curves within the 2.5th and 97.5-th percentile. -#' -#' @param fpcaObj An object of class FPCA returned by the function FPCA(). -#' @param optns A list of options control parameters specified by \code{list(name=value)}. See `Details'. -#' @param ... Additional arguments for the 'plot' function. -#' -#' @details Available control options are -#' \describe{ -#' \item{ifactor}{inflation ifactor for the bag-plot defining the loop of bag-plot or multiplying ifactor the KDE pilot bandwidth matrix. (see ?aplpack::compute.bagplot; ?ks::Hpi respectively; default: 2.58; 2 respectively).} -#' \item{variant}{string defining the method used ('KDE', 'pointwise' or 'bagplot') (default: 'bagplot')} -#' \item{unimodal}{logical specifying if the KDE estimate should be unimodal (default: FALSE, relavant only for variant='KDE')} -#' \item{addIndx}{vector of indeces corresponding to which samples one should overlay (Default: NULL)} -#' \item{K}{integer number of the first K components used for the representation. (default: length(fpcaObj$lambda ))} -#' } -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' CreateFuncBoxPlot(res, list(addIndx=c(1:3)) ) -#' @references -#' \cite{P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382-387} -#' -#' @export - -CreateFuncBoxPlot <- function(fpcaObj, optns = list() , ...){ - - if (!is.null(optns[['k']])) { - optns[['K']] <- optns[['k']] - optns[['k']] <- NULL - warning("specifying 'k' is deprecated. Use 'K' instead!") - } - - if(is.null(optns$K)){ - K = length(fpcaObj$lambda) - } else { - K = optns$K - } - - if(is.null(optns$addIndx)){ - addIndx = NULL - } else { - addIndx = optns$addIndx - } - - if(is.null(optns$ifactor)){ - ifactor = NULL - } else { - ifactor = optns$ifactor - } - - if(is.null(optns$outlierList)){ - outlierList = NULL - } else { - outlierList = optns$outlierList - } - - if(is.null(optns$unimodal)){ - unimodal = FALSE - } else { - unimodal = optns$unimodal - } - - if(is.null(optns$variant)){ - variant = 'bagplot' - } else { - variant = optns$variant - } - if ( !is.null(unimodal) && !is.logical(unimodal) ){ - stop("The variable 'unimodal' must be logical.") - } - args1 <- list( xlab='s', ylab='') - inargs <- list(...) - args1[names(inargs)] <- inargs - if( is.na( any(match( variant, c('pointwise', 'bagplot', 'KDE') )) ) ){ - stop("This plotting utility function can only implement a 'KDE', 'bagplot' or 'pointwise' mapping.") - return(NULL) - } - if ( variant == 'bagplot' && !is.element('aplpack', installed.packages()[,1])){ - warning('Cannot use bagplot because aplpack::compute.bagplot is unavailable; reverting to point-wise'); - variant = 'pointwise' - } - if ( variant == 'KDE' && !is.element('ks', installed.packages()[,1])){ - warning('Cannot use KDE because ks::kde is unavailable; reverting to point-wise'); - variant = 'pointwise' - } - - fittedCurves <- fitted(fpcaObj, K = K, ...) - s <- fpcaObj$workGrid - N <- nrow(fittedCurves) - - if(is.null(args1$ylim)){ - args1$ylim = range(fittedCurves) - } - - do.call(plot, c(list(type='n'), list(x=s), list(y=s), - (args1))) - grid() - - if ( length(fpcaObj$lambda) <2) { - warning('There is a single component used. We will use a standard boxpot on the FPC scores.'); - bgObj = boxplot(plot=FALSE, fpcaObj$xiEst[,1] ) - fittedCurvesFence = fittedCurves[ (fpcaObj$xiEst > bgObj$stats[1]) & (fpcaObj$xiEst < bgObj$stats[5]),]; - fittedCurvesBag = fittedCurves[ (fpcaObj$xiEst > bgObj$stats[2]) & (fpcaObj$xiEst < bgObj$stats[4]),]; - polygon(x=c(s, rev(s)), y = c(apply(rbind(fittedCurvesFence, fittedCurvesBag),2, min), - rev(apply(rbind( fittedCurvesFence, fittedCurvesBag),2, max))), col= 'lightgrey',border=0) - polygon(x=c(s, rev(s)), y = c(apply(fittedCurvesBag,2, min), - rev(apply(fittedCurvesBag,2,max))), col= 'darkgrey',border=1) - lines(x=s, y= apply(fittedCurves,2, mean) , col='red') - } - - if ( length(fpcaObj$lambda)> 1) { - - if ( !is.null(ifactor) && (1 >= ifactor) ){ - warning("It is nonsensical for an inflation factor to be <= 1. 'ifactor' set to 1.1.") - ifactor = 1.1; - } - if ( variant == 'bagplot' ){ - - if ( is.null (ifactor) ){ - ifactor = 2.58 - } - - bgObj = aplpack::compute.bagplot(x= fpcaObj$xiEst[,1], y= fpcaObj$xiEst[,2], approx.limit=3333, factor = ifactor) - fittedCurvesFence = fittedCurves[ is.element( rowSums(fpcaObj$xiEst[,1:2]), rowSums(bgObj$pxy.outer) ),]; - fittedCurvesBag = fittedCurves[ is.element( rowSums(fpcaObj$xiEst[,1:2]), rowSums(bgObj$pxy.bag) ),]; - - Y95 = c(apply(rbind( fittedCurvesFence, fittedCurvesBag),2, min), - rev(apply(rbind( fittedCurvesFence, fittedCurvesBag),2, max))) - Y50 = c(apply(fittedCurvesBag,2, min), rev(apply(fittedCurvesBag,2,max))) - medianPoint = which.min( apply( fpcaObj$xiEst[,1:2], 1, function(x) sqrt(sum( (x- bgObj$center)^2)) ) ) - } else if (variant== 'pointwise'){ - Y95 = c(apply(fittedCurves,2, quantile, 0.025), - rev(apply(fittedCurves,2, quantile, 0.975))) - Y50 = c(apply(fittedCurves,2, quantile, 0.25), - rev(apply(fittedCurves,2, quantile, 0.75))) - mediansCurve = apply(fittedCurves,2, quantile, 0.50); - medianPoint = NULL - } else if (variant == 'KDE') { - if (is.null(ifactor)){ - ifactor = 2 - } - fhat <- ks::kde(x=fpcaObj$xiEst[,1:2], gridsize = c(400,400), compute.cont = TRUE, - H = ks::Hpi( x=fpcaObj$xiEst[,1:2], binned=TRUE, pilot="dscalar" ) * ifactor) - zin = fhat$estimate - - if( is.null(unimodal) || unimodal ){ - maxIndex = which( zin == max(zin), arr.ind = TRUE) - zin = monotoniseMatrix( fhat$estimate, maxIndex[1], maxIndex[2]) - } - - qq = quickNNeval(xin = fhat$eval.points[[1]], yin = fhat$eval.points[[2]], zin = zin, - xout = fpcaObj$xiEst[,1], yout = fpcaObj$xiEst[,2] ) - curves0to50= which(qq >= fhat$cont[50]) - curves50to95 = which(qq > fhat$cont[95] & qq <= fhat$cont[50]) - - fittedCurvesBag = fittedCurves[ c(curves0to50 ),]; - fittedCurvesFence = fittedCurves[ c( curves50to95,curves0to50), ]; - Y95 = c( apply(rbind(fittedCurvesFence, fittedCurvesBag),2, min), - rev(apply(rbind(fittedCurvesFence, fittedCurvesBag),2, max))) - Y50 = c(apply(fittedCurvesBag,2, min), rev(apply(fittedCurvesBag,2,max))) - medianPoint = which.min( apply( fpcaObj$xiEst[,1:2], 1, function(x) sqrt(sum( (x- c(0,0))^2)) ) ) - - } else { - stop('Additional variants are not yet implemented') - } - polygon(x=c(s, rev(s)), y = Y95, col= 'lightgrey',border=1) - polygon(x=c(s, rev(s)), y = Y50, col= 'darkgrey', border=1) - #n = length(Y95)*0.5 - #lines(x=s, y= apply( cbind(Y95[1:n],Y50[1:n]),1, min) , col='black', lwd=1) - #lines(x=s, y= apply( cbind(rev(Y95[n+(1:n)]), rev(Y50[n+(1:n)])),1, max) , col='black', lwd=1) - - if(!is.null(medianPoint)){ - mediansCurve = fittedCurves[medianPoint,] - } - - lines(x=s, col='green', lwd=2, y = mediansCurve) - } - - Ly = fpcaObj$inputData$Ly - Lt = fpcaObj$inputData$Lt - - #add sample lines - if (!is.null(addIndx) && !is.null(Ly) && !is.null(Lt) ){ - for (i in 1:length(addIndx) ) { - lines(x = Lt[[addIndx[i]]] , y= Ly[[addIndx[i]]], lwd = 1.5, type='o', pch=0, col=args1$col) - } - } -} - -quickNNeval <- function(xin,yin, zin, xout, yout){ - xindeces = sapply( xout, function(myArg) which.min( abs( xin - myArg) ), simplify = TRUE) - yindeces = sapply( yout, function(myArg) which.min( abs( yin - myArg) ), simplify = TRUE ) - return( zin[ cbind(xindeces,yindeces)] ) -} - -monotonise <- function(x, maxIndex = NULL){ - xq = x; - if (is.null(maxIndex)){ - maxIndex = which.max(x); - } - - if( maxIndex != length(x) ){ - for (i in 1:( length(x) - maxIndex)){ - if( xq[ i + maxIndex] > xq[maxIndex + i - 1] ){ - xq[ i + maxIndex] = xq[maxIndex + i - 1] - } - } - } - if (maxIndex >= 3){ - for (i in 1:(maxIndex - 2 )){ - if( xq[ - 1 - i + maxIndex] > xq[maxIndex - i] ){ - xq[ - 1- i + maxIndex] = xq[maxIndex - i] - } - } - } - return(xq) -} - -monotoniseMatrix = function(zin, xmaxind, ymaxind){ - if(is.null(xmaxind) && is.null(ymaxind)){ - maxIndx = which( max(zin) == zin, arr.ind = TRUE) - xmaxind = maxIndx[1] - ymaxind = maxIndx[2] - } - zq = zin; - for (j in 1:dim(zin)[2]){ - for (i in 1:dim(zin)[1]){ - if (i == 1 || j == 1 || j == dim(zin)[1] || i == dim(zin)[2]){ - sizeOut = max( abs(xmaxind - i) +1, abs(ymaxind - j) +1 ) - xcoord = round( ( seq(i, xmaxind , length.out = sizeOut) ) ) - ycoord = round( ( seq(j, ymaxind , length.out = sizeOut) ) ) - zq[ cbind(xcoord,ycoord) ] = monotonise( zq[ cbind(xcoord,ycoord) ]) - } - } - } - return(zq) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateModeOfVarPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateModeOfVarPlot.R deleted file mode 100644 index 0f487350..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateModeOfVarPlot.R +++ /dev/null @@ -1,89 +0,0 @@ -#' Functional Principal Component Analysis mode of variation plot -#' -#' Create the k-th mode of variation plot around the mean. The red-line is -#' the functional mean, the grey shaded areas show the range of variations -#' around the mean: \eqn{ \pm Q \sqrt{\lambda_k} \phi_k}{+/- Q sqrt{lambda_k} phi_k} -#' for the dark grey area Q = 1, and for the light grey are Q = 2. In the case of 'rainbow' plot -#' the blue edge corresponds to Q = -3, the green edge to Q = +3 and the red-line to Q = 0 (the mean). -#' In the case of 'minimal' the blue line corresponds to Q = -2 and green line to Q = 2. -#' -#' @param fpcaObj An FPCA class object returned by FPCA(). -#' @param k The k-th mode of variation to plot (default k = 1) -#' @param plotType Character indicating the creation of "standard" shaded plot, a "rainbow"-plot or a "minimal" sketch plot (default: "standard") -#' @param colSpectrum Character vector to be use as input in the 'colorRampPalette' function defining the outliers colours (default: c("blue","red", "green"), relavant only for rainbowPlot=TRUE) -#' @param ... Additional arguments for the \code{plot} function. -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' CreateModeOfVarPlot(res) -#' @export - -CreateModeOfVarPlot <-function(fpcaObj, k = 1, plotType = "standard", colSpectrum = NULL, ...){ - - if( !(any(plotType %in% c("standard", "rainbow", "minimal") ) ) ){ - stop('Unknown plotType. Must be: "standard", "rainbow", "minimal".') - } - - if(k> length(fpcaObj$lambda) ){ - stop("You are asking to plot a mode of variation that is incomputable.") - } - - if( is.null(colSpectrum) ){ - colSpectrum = c("blue","red", "green") - } - - - args1 <- list( main=paste( collapse=" ", "Variation associated with FPC", k,":", round(digits= 2, fpcaObj$cumFVE[k]), "%" ), xlab='s', ylab='') - inargs <- list(...) - - obsGrid = fpcaObj$obsGrid - s = fpcaObj$workGrid - mu = fpcaObj$mu - - sigma = sqrt(fpcaObj$lambda[k]) - sigma1 = sqrt(fpcaObj$lambda[1]) - phi = fpcaObj$phi[,k] - phi1 = fpcaObj$phi[,1] - - if( is.null(inargs$ylim)){ - inargs$ylim=range(c( 3* sigma1 * phi1 + mu , -3* sigma1 * phi1 + mu )) - } - - args1[names(inargs)] <- inargs - - if(plotType != "rainbow"){ - do.call(plot, c(list(type='n'), list(x=s), list(y=s), args1)) - grid() - if(plotType == "standard"){ - - polygon(x=c(s, rev(s)), y = c( -2* sigma * phi + mu, - rev(2* sigma * phi + mu)), col= 'lightgrey',border=NA) - polygon(x=c(s, rev(s)), y = c( -1* sigma * phi + mu, - rev(1* sigma * phi + mu)), col= 'darkgrey',border=NA) - } else { - lines( x=s, y = -2* sigma * phi + mu, col = "blue", lwd= 2, lty= 3) - lines( x=s, y = +2* sigma * phi + mu, col = "green", lwd= 2, lty= 2) - } - lines(x=s, y=mu , col='red') - } else { - # The numver of modes as well as the colour palette could/shoud be possibly user-defined - numOfModes = 257 # Just a large number of make things look "somewhat solid". - thisColPalette = colorRampPalette(colSpectrum)(numOfModes) - - Qmatrix = (seq(-2 ,2 ,length.out = numOfModes) %*% t(fpcaObj$phi[,k] * sqrt(fpcaObj$lambda[k]))) + - matrix(rep(mu,numOfModes), nrow=numOfModes, byrow = TRUE) - - do.call(matplot, c(list(type='n'), list(x=s), list(y=t(Qmatrix)), args1)) - grid() - do.call(matplot, - c(list(type='l'), list(add=TRUE) , list(x=s), list(y=t(Qmatrix)), list(col= thisColPalette), list(lty=1), list(lwd=2))) - lines(x=s, y=mu , col= thisColPalette[129]) - - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateOutliersPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateOutliersPlot.R deleted file mode 100644 index 397c429b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateOutliersPlot.R +++ /dev/null @@ -1,309 +0,0 @@ -#' Functional Principal Component or Functional Singular Value Decomposition Scores Plot using 'bagplot' or 'KDE' methodology -#' -#' This function will create, using the first components scores, a set of convex hulls of the scores based on 'bagplot' or 'KDE' methodology. -#' -#' @param fObj A class object returned by FPCA() or FSVD(). -#' @param optns A list of options control parameters specified by \code{list(name=value)}. See `Details'. -#' @param ... Additional arguments for the 'plot' function. -#' -#' @details Available control options are -#' \describe{ -#' \item{ifactor}{inflation ifactor for the bag-plot defining the loop of bag-plot or multiplying ifactor the KDE pilot bandwidth matrix. (see ?aplpack::compute.bagplot; ?ks::Hpi respectively; default: 2.58; 2 respectively).} -#' \item{variant}{string defining the outlier method used ('KDE', 'NN' or 'bagplot') (default: 'KDE')} -#' \item{unimodal}{logical specifying if the KDE estimate should be unimodal (default: FALSE, relavant only for variant='KDE')} -#' \item{maxVar}{logical specifying if during slicing we should used the directions of maximum variance (default: FALSE for FPCA, TRUE for FSVD)} -#' \item{nSlices}{integer between 3 and 16, denoting the number of slices to be used (default: 4, relavant only for groupingType='slice') } -#' \item{showSlices}{logical specifying if during slicing we should show the outline of the slice (default: FALSE)} -#' \item{colSpectrum}{character vector to be use as input in the 'colorRampPalette' function defining the outliers colours (default: c("red", "yellow", 'blue'), relavant only for groupingType='slice') } -#' \item{groupingType}{string specifying if a slice grouping ('slice') or a standard percentile/bagplot grouping ('standard') should be returned (default: 'standard')} -#' \item{fIndeces}{a two-component vector with the index of the mode of variation to consider (default: c(1,2) for FPCA and c(1,1) for FSVD)} -#' } -#' -#' @return An (temporarily) invisible copy of a list containing the labels associated with each of sample curves. -#' -#' @examples -#' \dontrun{ -#' set.seed(1) -#' n <- 420 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' CreateOutliersPlot(res) -#' } -#' @references -#' \cite{P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382-387} -#' \cite{R. J. Hyndman and H. L. Shang. (2010) Rainbow plots, bagplots, and boxplots for functional data, Journal of Computational and Graphical Statistics, 19(1), 29-45} -#' -#' @export - -CreateOutliersPlot <- function(fObj, optns = NULL, ...){ - - fObjClass <- class(fObj) - if( !(fObjClass %in% c('FSVD','FPCA')) ){ - stop("CreateOutliersPlot() expects an FPCA or an FSVD object as input.") - } - - newOptns <- CheckAndCreateCOPoptions(optns,fObjClass); - - nSlices = newOptns$nSlices; ifactor = newOptns$ifactor; - colFunc = newOptns$colFunc; fIndeces = newOptns$fIndeces; - variant = newOptns$variant; groupingType = newOptns$groupingType; - unimodal = newOptns$unimodal; outlierList = newOptns$outlierList; - maxVar = newOptns$maxVar; showSlices = newOptns$showSlices - - fVarAlls <- c(); - if(fObjClass == 'FPCA'){ - fVarAlls <- fObj$lambda - } else { - fVarAlls <- (fObj$sValues)^2 - } - - if(fIndeces[2] > length(fVarAlls)){ - stop("You requested a mode of variation that is not available.") - } - - fScores1 <- fScores2 <- c(); - if(fObjClass == 'FPCA'){ - fScores1 <- fObj$xiEst[,fIndeces[1]] - fScores2 <- fObj$xiEst[,fIndeces[2]] - } else { - fScores1 <- fObj$sScores1[,fIndeces[1]] - fScores2 <- fObj$sScores2[,fIndeces[2]] - } - fScoresAll <- cbind(fScores1, fScores2) - - xedge = 1.05 * max( abs(fScores1)) - yedge = 1.05 * max( abs(fScores2)) - - args1 <- list(); - if(fObjClass == 'FSVD'){ - args1 <- list( pch=10, xlab=paste('S1 FSC', fIndeces[1] ,' scores ', sep='' ), - ylab=paste('S2 FSC', fIndeces[2] ,' scores ', sep='' ), - xlim = c(-xedge, xedge), ylim =c(-yedge, yedge), lwd= 2) - } else { - args1 <- list( pch=10, xlab=paste('FPC', fIndeces[1] ,' scores ', round(fObj$cumFVE[fIndeces[1]]), '%', sep='' ), - ylab=paste('FPC', fIndeces[2] ,' scores ', round( diff( fObj$cumFVE[c(fIndeces[2]-1, fIndeces[2])])), '%', sep='' ), - xlim = c(-xedge, xedge), ylim =c(-yedge, yedge), lwd= 2) - } - inargs <- list(...) - args1[names(inargs)] <- inargs - - nComp <- length(fVarAlls) - - if(nComp <2 ){ - stop("This plotting utility function needs at least two functional components.") - return(NULL) - } - - if ( variant == 'bagplot' ){ - - if ( is.null((ifactor))){ ifactor = 2.58 } - bgObj = aplpack::compute.bagplot(x= fScores1, y= fScores2, approx.limit=3333 , factor = ifactor) - # I do this because panel.first() does not work with the do.call() - - if(groupingType =='standard'){ - - args2 = list(x= fScores1, y= fScores2, cex= .33, type='n' ) - do.call(plot, c(args2, args1)) - points(x = fScores1, y = fScores2, cex= .33, panel.first = grid(), lwd= 2) - lines( bgObj$hull.bag[c(1:nrow(bgObj$hull.bag),1),], col=2, lwd=2) - lines( bgObj$hull.loop[c(1:nrow(bgObj$hull.loop),1),], col=4, lwd=2) - legend(legend= c('0.500', 'The fence'), x='topright', col=c(2,4), lwd=2) - - return( invisible( list( - 'bag' = match( apply(bgObj$pxy.bag,1, prod), apply( bgObj$xydata,1, prod)), - 'loop'= match( apply(bgObj$pxy.outer,1, prod), apply( bgObj$xydata,1, prod)), - 'outlier' = ifelse( is.null(bgObj$pxy.outlier), NA, - match( apply(bgObj$pxy.outlier,1, prod) ,apply( bgObj$xydata,1, prod))) - ) ) ) - } else { # groupingType : slice - - N <- nrow(fScoresAll) - kNNindeces95plus <- (1:N %in% match( apply(bgObj$pxy.outlier,1, prod) ,apply( bgObj$xydata,1, prod))) - return( makeSlicePlot(nSlices, colFunc, p95plusInd = kNNindeces95plus, N, args1, - scoreEsts = fScoresAll , varEsts = fVarAlls[fIndeces], - useDirOfMaxVar = maxVar, showSlices = showSlices) ) - - } - } else if (variant == 'KDE') { # variant 'kde' - - if ( is.null((ifactor))){ ifactor = 2 } - fhat <- ks::kde(x=fScoresAll, gridsize = c(400,400), compute.cont = TRUE, - H = ks::Hpi( x=fScoresAll, binned=TRUE, pilot="dscalar" ) * ifactor) - zin = fhat$estimate - if( !is.null(unimodal) && unimodal ){ - maxIndex = which( fhat$estimate == max(fhat$estimate), arr.ind = TRUE) - zin = monotoniseMatrix( fhat$estimate, maxIndex[1], maxIndex[2]) - } - qq = quickNNeval(xin = fhat$eval.points[[1]], yin = fhat$eval.points[[2]], zin = zin, - xout = fScores1, yout = fScores2 ) - - if(groupingType =='standard'){ - args2 = list (x= fhat$eval.points[[1]], y=fhat$eval.points[[2]], z = zin, - labcex=1.66, col= c('black','blue','red'), levels = fhat$cont[c(50, 95, 99)], labels = c('50%', '95%', '99%')) - do.call(graphics::contour, c(args2, args1)); - grid(col = "#e6e6e6") - - points(fScoresAll[qq <= fhat$cont[99], ],cex=0.5, col='orange', pch=10 , lwd =2 ) - points(fScoresAll[qq > fhat$cont[99] & qq <= fhat$cont[95], ],cex=0.33, col='red', pch=10, lwd =2 ) - points(fScoresAll[qq > fhat$cont[95] & qq <= fhat$cont[50], ],cex=0.33, col='blue', pch=10 , lwd =2 ) - points(fScoresAll[qq >= fhat$cont[50], ],cex=0.33, col='black' , pch=10, lwd =2 ) - legend('bottomleft', c('< 50%','50%-95%','95%-99%','> 99%'), pch = 19, - col= c('black','blue','red', 'orange'), pt.cex=1.5, bg='white' ) - - return( invisible( list( 'p0to50'= which(qq >= fhat$cont[50]), - 'p50to95' = which(qq > fhat$cont[95] & qq <= fhat$cont[50]), - 'p95to99' = which(qq > fhat$cont[99] & qq <= fhat$cont[95]), - 'p99plus' = which(qq <= fhat$cont[99]) ))) - } else { # groupingType : slice - - kNNindeces95plus <- qq <= fhat$cont[95] - return( makeSlicePlot(nSlices, colFunc, p95plusInd = kNNindeces95plus, N, args1, - scoreEsts = fScoresAll , varEsts = fVarAlls[fIndeces], - useDirOfMaxVar = maxVar, showSlices = showSlices) ) - - } - } else if (variant == 'NN') { - - centrePoint = c(0,0); - distName = 'euclidean'; - N <- nrow(fScoresAll) - k99 <- floor(0.99*N); - k95 <- floor(0.95*N); - k50 <- floor(0.50*N); - scaledXi <- apply(fScoresAll, 2, scale) - distances <- apply(scaledXi, 1, function(aRow) dist(x = rbind(aRow, centrePoint), method = distName) ) - kNNindeces0to99 <- sort(x = distances, index.return = TRUE)$ix[1:k99] # Partial sort should be better - kNNindeces0to50 <- kNNindeces0to99[1:k50] - kNNindeces50to95 <- kNNindeces0to99[(1+k50):k95] - kNNindeces95to99 <- kNNindeces0to99[(1+k95):k99] - kNNindeces99plus <- setdiff(1:N, kNNindeces0to99) - - if(groupingType =='standard'){ - - args2 = list (x = fScores1, y = fScores2, cex= .33, type='n' ) - do.call(plot, c(args2, args1)) - grid(col = "#e6e6e6") - points(fScoresAll[kNNindeces99plus,],cex=0.5, col='orange', pch=10 , lwd =2 ) - points(fScoresAll[kNNindeces95to99,],cex=0.33, col='red', pch=10, lwd =2 ) - points(fScoresAll[kNNindeces50to95,],cex=0.33, col='blue', pch=10 , lwd =2 ) - points(fScoresAll[kNNindeces0to50, ],cex=0.33, col='black' , pch=10, lwd =2 ) - legend('bottomleft', c('< 50%','50%-95%','95%-99%','> 99%'), pch = 19, - col= c('black','blue','red', 'orange'), pt.cex=1.5, bg='white' ) - - return( invisible( list( 'p0to50'= kNNindeces0to50, - 'p50to95' = kNNindeces50to95, - 'p95to99' = kNNindeces95to99, - 'p99plus' = kNNindeces99plus))) - } else { # groupingType : slice - - kNNindeces95plus <- (1:N %in% setdiff(1:N, kNNindeces0to99[1:k95])) - return( makeSlicePlot(nSlices, colFunc, p95plusInd = kNNindeces95plus, N, args1, - scoreEsts = fScoresAll, varEsts = fVarAlls[fIndeces], - useDirOfMaxVar = maxVar, showSlices = showSlices) ) - - } - } -} - -makeSlicePlot <- function( nSlices, colFunc, p95plusInd, N, args1, args2, scoreEsts, varEsts, useDirOfMaxVar, showSlices){ - - - kNNindeces95plus <- p95plusInd - - args2 = list (x = scoreEsts[,1], y = scoreEsts[,2], cex= .33, type='n' ) - do.call(plot, c(args2, args1)) - grid(col = "#e6e6e6") - - points(scoreEsts[!p95plusInd, ],cex=0.33, col='black' , pch=10, lwd =2 ) - Qstr = apply(scoreEsts, 2, scale, center = FALSE) # - #scoreEsts / matrix( c( rep( sqrt(varEsts ), each= length(scoreEsts[,1]))), ncol=2); - - dirOfMaxVar <- c(1,0); - if(useDirOfMaxVar){ - dirOfMaxVar <- svd(scoreEsts, nv = 1)$v; - if(all(dirOfMaxVar <0) ){ - dirOfMaxVar = -dirOfMaxVar - } - abline(0, dirOfMaxVar[2]/dirOfMaxVar[1], col='magenta', lty=2) # Uncomment if you want to see the direction of max variance - } - - colPal = colFunc( nSlices ) - v = 1:nSlices; - colPal = colPal[v] # this just gives a smooth change and maximized the diffference between oppositve slices - outlierList <- list() - # steps = seq(-1, (nSlices-1) *2 -1 , by =2 ) - angles <- seq(0,2*pi, length.out = nSlices + 1) - 1*pi/nSlices + atan2(dirOfMaxVar[2],dirOfMaxVar[1]) - sd1 = sd(scoreEsts[,1]); - sd2 = sd(scoreEsts[,2]); - for( i in 1:nSlices){ - angle = angles[i] # atan2(dirOfMaxVar[2],dirOfMaxVar[1]) + steps[i] * pi/nSlices - multiplier1 = sign( sin( angle + pi/2) ) - multiplier2 = sign( cos( angle + pi/ (nSlices/2))) - qrtIndx = multiplier1 * Qstr[,2] > multiplier1 * tan(angle) * Qstr[,1] & - multiplier2 * Qstr[,2] < multiplier2 * tan(angle + pi/ (nSlices/2) ) * Qstr[,1] - outlierList[[i]] = qrtIndx & kNNindeces95plus - points(scoreEsts[ outlierList[[i]], c(1,2), drop=FALSE], cex=0.93, col= colPal[i], pch=3, lwd =2 ) - if(showSlices){ - bigNumber = 10 * max(abs(as.vector(scoreEsts))) - lines(x = c(0, bigNumber * multiplier1), col=colPal[i], - y = c(0, bigNumber * multiplier1 * tan(angle) * sd2 / sd1)) - #lines(x = c(0, bigNumber * multiplier2), col=colPal[i], - # y = c(0, bigNumber * multiplier2 * tan(angle + pi/ (nSlices/2) ) * sd2 / sd1)) - } - } - return( invisible( list( 'p0to95'= which(!p95plusInd), - 'outlier' = sapply(outlierList, which), - 'outlierColours' = colPal)) ) -} - -quickNNeval <- function(xin,yin, zin, xout, yout){ - xindeces = sapply( xout, function(myArg) which.min( abs( xin - myArg) ), simplify = TRUE) - yindeces = sapply( yout, function(myArg) which.min( abs( yin - myArg) ), simplify = TRUE ) - return( zin[ cbind(xindeces,yindeces)] ) -} - -monotonise <- function(x, maxIndex = NULL){ - xq = x; - if (is.null(maxIndex)){ - maxIndex = which.max(x); - } - - if( maxIndex != length(x) ){ - for (i in 1:( length(x) - maxIndex)){ - if( xq[ i + maxIndex] > xq[maxIndex + i - 1] ){ - xq[ i + maxIndex] = xq[maxIndex + i - 1] - } - } - } - if (maxIndex >= 3){ - for (i in 1:(maxIndex - 2 )){ - if( xq[ - 1 - i + maxIndex] > xq[maxIndex - i] ){ - xq[ - 1- i + maxIndex] = xq[maxIndex - i] - } - } - } - return(xq) -} - -monotoniseMatrix = function(zin, xmaxind, ymaxind){ - if(is.null(xmaxind) && is.null(ymaxind)){ - maxIndx = which( max(zin) == zin, arr.ind = TRUE) - xmaxind = maxIndx[1] - ymaxind = maxIndx[2] - } - zq = zin; - for (j in 1:dim(zin)[2]){ - for (i in 1:dim(zin)[1]){ - if (i == 1 || j == 1 || j == dim(zin)[1] || i == dim(zin)[2]){ - sizeOut = max( abs(xmaxind - i) +1, abs(ymaxind - j) +1 ) - xcoord = round( ( seq(i, xmaxind , length.out = sizeOut) ) ) - ycoord = round( ( seq(j, ymaxind , length.out = sizeOut) ) ) - zq[ cbind(xcoord,ycoord) ] = monotonise( zq[ cbind(xcoord,ycoord) ]) - } - } - } - return(zq) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreatePathPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreatePathPlot.R deleted file mode 100644 index 72fea8e0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreatePathPlot.R +++ /dev/null @@ -1,142 +0,0 @@ -#' Create the fitted sample path plot based on the results from FPCA(). -#' -#' @param fpcaObj Returned object from FPCA(). -#' @param subset A vector of indices or a logical vector for subsetting the -#' observations. -#' @param K The number of components to reconstruct the fitted sample paths. -#' @param inputData A list of length 2 containing the sparse/dense -#' (unsupported yet) observations. \code{inputData} needs to contain two -#' fields: \code{Lt} for a list of time points and \code{Ly} for a list of -#' observations. Default to the `inputData` field within `fpcaObj`. -#' @param showObs Whether to plot the original observations for each subject. -#' @param obsOnly Whether to show only the original curves. -#' @param showMean Whether to plot the mean function as a bold solid curve. -#' @param derOptns A list of options to control derivation parameters; see `fitted.FPCA'. (default = NULL) -#' @param ... other arguments passed into matplot for plotting options -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', -#' verbose=TRUE)) -#' CreatePathPlot(res, subset=1:5) -#' -#' # CreatePathPlot has a lot of usages: -#' \dontrun{ -#' CreatePathPlot(res) -#' CreatePathPlot(res, 1:20) -#' CreatePathPlot(res, 1:20, showObs=FALSE) -#' CreatePathPlot(res, 1:20, showMean=TRUE, showObs=FALSE) -#' CreatePathPlot(res, 1:20, obsOnly=TRUE) -#' CreatePathPlot(res, 1:20, obsOnly=TRUE, showObs=FALSE) -#' CreatePathPlot(inputData=sampWiener, subset=1:20, obsOnly=TRUE)} -#' -#' @export - -CreatePathPlot = function(fpcaObj, subset, K=NULL, - inputData=fpcaObj[['inputData']], - showObs=!is.null(inputData), - obsOnly=FALSE, showMean=FALSE, - derOptns = list(p=0), ...) { - - if (missing(fpcaObj)) { - showFit <- FALSE - n <- length(inputData[['Lt']]) - isDer <- FALSE - } else { - isDer <- 'FPCAder' %in% class(fpcaObj) || (!is.null(derOptns[['p']]) && - derOptns[['p']] >= 1) - showFit <- !obsOnly - n <- dim(fpcaObj[['xiEst']])[1] - } - - inargs <- list(...) - if (!is.null(inargs[['k']])) { - K <- inargs[['k']] - inargs[['k']] <- NULL - warning("specifying 'k' is deprecated. Use 'K' instead!") - } - - if (isDer && missing(showObs)) { - # makes no sense to show original observations with derivatives. - showObs <- FALSE - } - - if (!is.null(inputData)) { - if (!all(c('Lt', 'Ly') %in% names(inputData))) { - stop('inputData does not contain the required fields `Lt` and `Ly`') - } - } - - if (showObs) { - if (is.null(inputData)) { - stop('Cannot show the sparse observations due to unspecified input data') - } else { - if (length(inputData[['Lt']]) != n) - stop('length of inputData mismatches that in fpcaObj') - } - } - - if (missing(subset)) { - subset <- seq_len(n) - } - - if (!missing(fpcaObj)) { - workGrid <- fpcaObj[['workGrid']] - } else { - workGrid <- NA - } - - if (showFit) { - fit <- fitted(fpcaObj, K=K, derOptns = derOptns)[subset, , drop=FALSE] - } - - defaultColPalette = palette() - args1 <- list( xlab= 's', ylab= ' ',col = defaultColPalette, pch=1) - args1[names(inargs)] <- inargs - - #matplot(obst, obsy, type='p',...) - #args2 = list (x = obst, y = obsy, type='p' ) - - plotx <- ploty <- numeric(0) - - if( showObs || obsOnly ) { - # make a matrix with NAs for the sparse observations. - maxN_i <- max(sapply(inputData[['Lt']][subset], length)) - obst <- sapply(inputData[['Lt']][subset], function(x) c(x, rep(NA, maxN_i - length(x)))) - obsy <- sapply(inputData[['Ly']][subset], function(x) c(x, rep(NA, maxN_i - length(x)))) - plotx <- c(plotx, t(obst)) - ploty <- c(ploty, t(obsy)) - } - - if (showFit) { - plotx <- c(plotx, rep(workGrid, nrow(fit))) - ploty <- c(ploty, t(fit)) - } - - # Make canvas - do.call(plot, c(list(x=plotx, y=ploty, type='n'), args1)) - - if (obsOnly) { - do.call(matplot, c(list(x=obst, y=obsy, type='l', add=TRUE), args1)) - } - if (showObs) { - do.call(matplot, c(list(x=obst, y=obsy, type='p', add=TRUE), args1)) - } - if (showFit) { # plot fitted curves - do.call(matplot, c(list(x=workGrid, y=t(fit), type='l', add=TRUE ), args1)) - } - if (showMean) { - if (!isDer) { - meanCurve <- fpcaObj[['mu']] - } else { # isDer - meanCurve <- fpcaObj[['muDer']] - } - lines(workGrid, meanCurve, lty=1, lwd=2) - } - - invisible() -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateScreePlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateScreePlot.R deleted file mode 100644 index fa4111fb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateScreePlot.R +++ /dev/null @@ -1,46 +0,0 @@ -#' Create the scree plot for the fitted eigenvalues -#' -#' This function will open a new device if not instructed otherwise. -#' -#' @param fpcaObj A object of class FPCA returned by the function FPCA(). -#' @param ... Additional arguments for the 'plot' function. -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' CreateScreePlot(res) -#' @export - -CreateScreePlot <-function(fpcaObj, ...){ - - args1 <- list( main="Scree-plot", ylab='Fraction of Variance Explained', xlab='Number of components') - inargs <- list(...) - args1[names(inargs)] <- inargs - - ys <- fpcaObj$cumFVE; - - - if( !is.vector(ys) ){ - stop('Please use a vector as input.') - } - if(max(ys) > 100){ - warning('The maximum number in the input vector is larger than 100; are sure it is right?'); - } - if(any(ys < 0) || any(diff(ys) <0) ){ - stop('This does not appear to be a valid cumulative FVE vector. Please check it carefully.') - } - - dfbar <- do.call( barplot, c( args1, list( ylim=c(0,105)), list(axes=FALSE), list(height = rep(NA,length(ys))) ) ) - - abline(h=(seq(0,100,5)), col="lightgray", lty="dotted") - barplot(c(ys[1], diff(ys)), add = TRUE ) - lines(dfbar, y= ys, col='red') - points(dfbar, y= ys, col='red') - legend("right", "Cumul. FVE", col='red', lty=1, pch=1, bty='n') - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateStringingPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateStringingPlot.R deleted file mode 100644 index c4772408..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateStringingPlot.R +++ /dev/null @@ -1,82 +0,0 @@ -#' Create plots for observed and stringed high dimensional data -#' -#' The function produces the following three plots: -#' 1) A plot of predictors (standardized if specified so during stringing) in original order for a subset of observations; -#' 2) A plot of predictors in stringed order for the same subset of observations; -#' 3) A plot of the stringing function, which is the stringed order vs. the original order. -#' -#' @param stringingObj A stringing object of class "Stringing", returned by the function Stringing. -#' @param subset A vector of indices or a logical vector for subsetting the observations. If missing, first min(n,50) observations will be plotted where n is the sample size. -#' @param ... Other arguments passed into matplot for plotting options -#' @examples -#' set.seed(1) -#' n <- 50 -#' wiener = Wiener(n = n)[,-1] -#' p = ncol(wiener) -#' rdmorder = sample(size = p, x=1:p, replace = FALSE) -#' stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -#' diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -#' diff_rev = sum(abs(rdmorder[stringingfit$StringingOrder] - p:1)) -#' if(diff_rev <= diff_norev){ -#' stringingfit$StringingOrder = rev(stringingfit$StringingOrder) -#' stringingfit$Ly = lapply(stringingfit$Ly, rev) -#' } -#' CreateStringingPlot(stringingfit, 1:20) -#' -#' @export - -CreateStringingPlot <- function(stringingObj, subset, ...){ - if(class(stringingObj) != "Stringing"){ - stop("Invalid input class for the stringing object. Need to be returned from the Stringing function.") - } - n <- nrow(stringingObj$Xin) - p <- ncol(stringingObj$Xin) - if(missing(subset)){ - subset <- seq_len(min(n, 50)) - } - subset = subset[which(subset > 0)] - subset = unique(subset) - if( !all(subset %in% seq_len(n)) ){ - stop("Invalid subset of subjects specified for generating plots. Need to be a subset of the set of row indices.") - } - ylabel = "Standardized Predictors" - X = stringingObj$Xstd - if(is.null(stringingObj$Xstd)){ - X = stringingObj$Xin - ylabel = "Observed Predictors" - } - - inargs = list(...) # additional options for plotting - - defaultColPalette = palette() - args1 <- list( xlab= 'Observed Order', ylab= ylabel, col = defaultColPalette, pch=1) - args1[names(inargs)] <- inargs - - args2 <- list( xlab= 'Stringed Order', ylab= ylabel, col = defaultColPalette, pch=1) - args2[names(inargs)] <- inargs - - plotx = matrix(rep(seq_len(p), length(subset)), nrow = length(subset), byrow = TRUE) - ploty1 = X[subset, ,drop = FALSE] - ploty2 = X[subset, stringingObj$StringingOrder, drop = FALSE] - - # 1. plot for the original observations - # Make canvas - do.call(plot, c(list(x=plotx, y=ploty1, type='n'), args1)) - # plot the observed/standardized predictors - do.call(matplot, c(list(x=t(plotx), y=t(ploty1), type='l', add = TRUE), args1)) - readline("Press enter to continue.") - - # 2. plot for the stringed observations - # Make canvas - do.call(plot, c(list(x=plotx, y=ploty2, type='n'), args2)) - # plot the stringed predictors - do.call(matplot, c(list(x=t(plotx), y=t(ploty2), type='l', add = TRUE), args2)) - readline("Press enter to continue.") - - # 3. plot the stringing function - plot(seq_len(ncol(X)), stringingObj$StringingOrder, - xlab="Observed Order", ylab="Stringed Order", pch = 18) - par(mfrow=c(1,1)) - - invisible() -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateTrueMean.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateTrueMean.R deleted file mode 100644 index 03c9f81d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/CreateTrueMean.R +++ /dev/null @@ -1,8 +0,0 @@ -CreateTrueMean = function(tt,optns){ - # old mu_true - - tt[!(tt >= 0 & tt <= optns)] = 0 - mu = (tt+sin(tt)) - return(mu[!is.na(mu)]) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/DesignPlotCount.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/DesignPlotCount.R deleted file mode 100644 index 6a4303fe..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/DesignPlotCount.R +++ /dev/null @@ -1,46 +0,0 @@ -# This function is used to create count matrix based on -# observed pairs of time points for the raw covariance. - -###### -# Input: -###### -# t: n * 1 array contains time points for n subjects -# obsGrid: 1 * N vector contains sorted unique time points from t -# noDiagonal: TRUE: set diagonal count as 0 -# FALSE: don't set diagonal count as 0 -# isColorPlot: TRUE: the resulting matrix has 1 indicates there exists points for out1(i) and out1(j) -# FALSE: the resulting matrix contains counts of points for out1(i) and out1(j) -###### -# Output: -###### -# res: N * N matrix contains count for each distinct pairs of -# time points - -DesignPlotCount = function(t, obsGrid, noDiagonal, isColorPlot){ - N = length(obsGrid) # number of distinct observed time pts - res = matrix(0, nrow = N, ncol = N) - - for(cur in t){ - curidx = match(cur, obsGrid) - if(isColorPlot == FALSE){ - res[curidx, curidx] = 1 - } else { - res[curidx, curidx] = res[curidx, curidx] + 1 - } - } - - if(noDiagonal == TRUE){ - diag(res) = 0 - } - - return(res) -} - -# searchID = function(cur, obsGrid){ - # ni = length(cur) - # id = rep(0, ni) - # for(i in 1:ni){ - # id[i] = which(obsGrid == cur[i]) - # } - # return(id) -# } diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/DynCorr.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/DynCorr.R deleted file mode 100644 index ff78e068..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/DynCorr.R +++ /dev/null @@ -1,64 +0,0 @@ -#' @title Dynamical Correlation -#' @description Calculate Dynamical Correlation for 2 paired dense regular functional data observed on the same grid. -#' @param x a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param y a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param t a length m vector of time points where x,y are observed. -#' @return A length m vector of individual dynamic correlations -#' @examples -#' set.seed(10) -#' n=200 # sample size -#' t=seq(0,1,length.out=100) # length of data -#' mu_quad_x=8*t^2-4*t+5 -#' mu_quad_y=8*t^2-12*t+6 -#' fun=rbind(rep(1,length(t)),-t,t^2) -#' z1=matrix(0,n,3) -#' z1[,1]=rnorm(n,0,2) -#' z1[,2]=rnorm(n,0,16/3) -#' z1[,3]=rnorm(n,0,4) -#' x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -#' for (i in 1:n){ -#' x1_quad_error[i,]=mu_quad_x+z1[i,]%*%fun+rnorm(length(t),0,0.01) -#' y1_quad_error[i,]=mu_quad_y+2*z1[i,]%*%fun +rnorm(length(t),0,0.01) -#' } -#' dyn1_quad=DynCorr(x1_quad_error,y1_quad_error,t) -#' @references -#' \cite{Dubin J A, M\"uller H G. Dynamical correlation for multivariate longitudinal data[J]. Journal of the American Statistical Association, 2005, 100(471): 872-881.} -#' \cite{Liu S, Zhou Y, Palumbo R, et al. Dynamical correlation: A new method for quantifying synchrony with multivariate intensive longitudinal data[J]. Psychological methods, 2016, 21(3): 291.} -#' @export - -DynCorr = function(x,y,t){ - if(dim(x)[1] != dim(y)[1] | dim(x)[2] != dim(y)[2]){ - stop("dimension of x and y does not match!") - } - if(dim(x)[2] != length(t)){ - stop("dimension of x,y does not match with t!") - } - na = sum(is.na(x)+is.na(y)) - - if (na>0) { - for (i in 1:dim(x)[1]){ - x[i,]=approx(t,x[i,],xout=t,rule=2)$y - y[i,]=approx(t,y[i,],xout=t,rule=2)$y - } - } - - temp1_x=temp1_y=matrix(0,nrow=dim(x)[1],ncol=dim(x)[2]) - temp2_x=temp2_y=matrix(0,nrow=dim(x)[1],ncol=dim(x)[2]) - M_x=M_y=z=numeric() - - for (i in 1:dim(x)[1]){ - aver_x=trapzRcpp(t,x[i,])/(tail(t,1)-head(t,1)) - aver_y=trapzRcpp(t,y[i,])/(tail(t,1)-head(t,1)) - temp1_x[i,]=x[i,]-aver_x - temp1_y[i,]=y[i,]-aver_y - } - - M_x=colMeans(temp1_x) - M_y=colMeans(temp1_y) - for (i in 1:dim(x)[1]){ - temp2_x[i,]=(temp1_x[i,]-M_x)/sqrt(trapzRcpp(t,(temp1_x[i,]-M_x)^2)/(tail(t,1)-head(t,1))) - temp2_y[i,]=(temp1_y[i,]-M_y)/sqrt(trapzRcpp(t,(temp1_y[i,]-M_y)^2)/(tail(t,1)-head(t,1))) - z[i]=trapzRcpp(t,temp2_x[i,]*temp2_y[i,])/(tail(t,1)-head(t,1)) - } - return(z) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Dyn_test.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Dyn_test.R deleted file mode 100644 index 4867de91..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Dyn_test.R +++ /dev/null @@ -1,110 +0,0 @@ -#' @title Bootstrap test of Dynamic correlation -#' @description Perform one sample (H0: Dynamic correlation = 0) or two sample (H0:Dynamic_correlation_1 = Dynamic_correlation_2) bootstrap test of Dynamical Correlation. -#' @param x1 a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param y1 a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param t1 a vector of time points where x1,y1 are observed. -#' @param x2 (optional if missing will be one sample test) a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param y2 (optional if missing will be one sample test) a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed. -#' @param t2 (optional if missing will be one sample test) a vector of time points where x2,y2 are observed. -#' @param B number of bootstrap samples. -#' @return a list of the following -#' \item{stats: test statistics.} -#' \item{pval: p-value of the test.} -#' @examples -#' n=200 # sample size -#' t=seq(0,1,length.out=100) # length of data -#' mu_quad_x=8*t^2-4*t+5 -#' mu_quad_y=8*t^2-12*t+6 -#' fun=rbind(rep(1,length(t)),-t,t^2) -#' z1=matrix(0,n,3) -#' z1[,1]=rnorm(n,0,2) -#' z1[,2]=rnorm(n,0,16/3) -#' z1[,3]=rnorm(n,0,4) # covariance matrix of random effects -#' x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -#' for (i in 1:n){ -#' x1_quad_error[i,]=mu_quad_x+z1[i,]%*%fun+rnorm(length(t),0,0.01) -#' y1_quad_error[i,]=mu_quad_y+2*z1[i,]%*%fun +rnorm(length(t),0,0.01) -#' } -#' bt_DC=Dyn_test(x1_quad_error,y1_quad_error,t,B=1000) -#' -#' @references -#' \cite{Dubin J A, M\"uller H G. Dynamical correlation for multivariate longitudinal data[J]. Journal of the American Statistical Association, 2005, 100(471): 872-881.} -#' -#' \cite{Liu S, Zhou Y, Palumbo R, et al. Dynamical correlation: A new method for quantifying synchrony with multivariate intensive longitudinal data[J]. Psychological methods, 2016, 21(3): 291.} -#' @export - -Dyn_test = function(x1,y1,t1,x2,y2,t2,B=1000){ - n=dim(x1)[1] - if (missing(x2)) { ### one-sample test ### - na1 = sum(is.na(x1)+is.na(y1)) - if(sum(is.na(x1[,1])+is.na(x1[,ncol(x1)]))+ sum(is.na(y1[,1])+is.na(y1[,ncol(y1)])) > 0){ - warning('extrapolations may make results unreliable') - } - if (na1>0) { ### impute missing values by linear interpolation ### - for (i in 1:n){ - x1[i,]=approx(t1,x1[i,],xout=t1,rule=2)$y - y1[i,]=approx(t1,y1[i,],xout=t1,rule=2)$y - } - } - dyncor_1=DynCorr(x1,y1,t1) ### observed DC ### - obs_1_stud=mean(dyncor_1)*sqrt(n)/sd(dyncor_1) ### observed standardized version ### - boot_1_stud=numeric() - boot_x1=boot_y1=matrix(0,nrow=n,ncol=length(t1)) - - for(b in 1:B){ - idx=sample(c(1:n),replace = TRUE) - boot_x1=x1[idx,] ### bootstrap replicates ### - boot_y1=y1[idx,] - boot_dyncor_1=DynCorr(boot_x1,boot_y1,t1) ### DC based on bootstrap samples ### - boot_1_stud[b]=mean(boot_dyncor_1-dyncor_1)*sqrt(n)/sd(boot_dyncor_1) ### bootstrap standardized version ### - } - - emp.stat=obs_1_stud ### bootstrap test statistic ### - emp.pval=length(boot_1_stud[boot_1_stud>abs(obs_1_stud) | boot_1_stud< -abs(obs_1_stud)])/B ### p-value based on bootstrap null distribution ### - outp=list(stats=emp.stat, pval=emp.pval) - return(outp) - } else { ### two-sample paired test (similar as above) ### - na1 = sum(is.na(x1)+is.na(y1)) - na2 = sum(is.na(x2)+is.na(y2)) #check missing - if (na1 > 0) { ### impute missing values by linear interpolation ### - for (i in 1:n){ - x1[i,]=approx(t1,x1[i,],xout=t1,rule=2)$y - y1[i,]=approx(t1,y1[i,],xout=t1,rule=2)$y - } - } - if (na2 > 0) { ### impute missing values by linear interpolation ### - for (i in 1:n){ - x2[i,]=approx(t1,x1[i,],xout=t1,rule=2)$y - y2[i,]=approx(t2,y2[i,],xout=t2,rule=2)$y - } - } - dyncor_1=DynCorr(x1,y1,t1) - dyncor_2=DynCorr(x2,y2,t2) - obs_1_stud=mean(dyncor_1)*sqrt(n)/sd(dyncor_1) - obs_2_stud=mean(dyncor_2)*sqrt(n)/sd(dyncor_2) - obsdiff=dyncor_2-dyncor_1 - obsdiff_stud=mean(obsdiff)*sqrt(n)/sd(obsdiff) - boot_1_stud=boot_2_stud=boot_diff_stud=numeric() - - boot_x1=boot_y1=matrix(0,nrow=n,ncol=length(t1)) - boot_x2=boot_y2=matrix(0,nrow=n,ncol=length(t2)) - - for(b in 1:B){ - idx=sample(c(1:n),replace = TRUE) - boot_x1=x1[idx,] - boot_y1=y1[idx,] - boot_x2=x2[idx,] - boot_y2=y2[idx,] - boot_dyncor_1=DynCorr(boot_x1,boot_y1,t1) - boot_dyncor_2=DynCorr(boot_x2,boot_y2,t2) - boot_1_stud[b]=mean(boot_dyncor_1-dyncor_1)*sqrt(n)/sd(boot_dyncor_1) - boot_2_stud[b]=mean(boot_dyncor_2-dyncor_2)*sqrt(n)/sd(boot_dyncor_2) - boot_diff_stud[b]=mean(boot_dyncor_2-boot_dyncor_1)*sqrt(n)/sd(boot_dyncor_2-boot_dyncor_1) - } - - emp.stat=obsdiff_stud - emp.pval=length(boot_diff_stud[boot_diff_stud>abs(obsdiff_stud) | boot_diff_stud< -abs(obsdiff_stud)])/B - outp=list(stats=emp.stat, pval=emp.pval) - return(outp) - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FAM.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FAM.R deleted file mode 100644 index 7626f4b8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FAM.R +++ /dev/null @@ -1,195 +0,0 @@ -#' Functional Additive Models -#' -#' Functional additive models with a single predictor process -#' -#' @param Y An \emph{n}-dimensional vector whose elements consist of scalar responses. -#' @param Lx A list of \emph{n} vectors containing the observed values for each individual. See \code{FPCA} for detail. -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual. Each vector should be sorted in ascending order. See \code{FPCA} for detail. -#' @param nEval The number of evaluation grid points for kernel smoothing (default is 51. If it is specified as 0, then estimated FPC scores in the training set are used for evaluation grid instead of equal grid). -#' @param newLx A list of the observed values for test set. See \code{predict.FPCA} for detail. -#' @param newLt A list of the observed time points for test set. See \code{predict.FPCA} for detail. -#' @param bwMethod The method of bandwidth selection for kernel smoothing, a positive value for designating K-fold cross-validtaion and zero for GCV (default is 50) -#' @param alpha The shrinkage factor (positive number) for bandwidth selection. See Han et al. (2016) (default is 0.7). -#' @param supp The lower and upper limits of kernel smoothing domain for studentized FPC scores, which FPC scores are divided by the square roots of eigenvalues (default is [-2,2]). -#' @param optns A list of options control parameters specified by list(name=value). See \code{FPCA}. -#' -#' @details \code{FAM} fits functional additive models for a scalar response and single predictor process proposed by Mueller and Yao (2007) that \deqn{E(Y | \mathbf{X}) = \sum_{k=1}^K g_{k}(\xi_{k}),} where \eqn{\xi_{k}} stand for the k-th FPC score of the the predictor process. -#' -#' @return A list containing the following fields: -#' \item{mu}{Mean estimator of \eqn{EY}} -#' \item{fam}{A \emph{N} by \emph{K} matrix whose column vectors consist of the component function estimators at the given estimation points.} -#' \item{xi}{An \emph{N} by \emph{K} matrix whose column vectors consist of \emph{N} vectors of estimation points for each component function.} -#' \item{bw}{A \emph{K}-dimensional bandwidth vector.} -#' \item{lambda}{A \emph{K}-dimensional vector containing eigenvalues.} -#' \item{phi}{An \emph{nWorkGrid} by \emph{K} matrix containing eigenfunctions, supported by \code{WorkGrid}. See \code{FPCA}.} -#' \item{workGrid}{An \emph{nWorkGrid} by \emph{K_j} working grid, the internal regular grid on which the eigen analysis is carried on. See \code{FPCA}.} -#' @examples -#' set.seed(1000) -#' -#' library(MASS) -#' -#' f1 <- function(t) 0.5*t -#' f2 <- function(t) 2*cos(2*pi*t/4) -#' f3 <- function(t) 1.5*sin(2*pi*t/4) -#' f4 <- function(t) 2*atan(2*pi*t/4) -#' -#' n<-250 -#' N<-500 -#' -#' sig <- diag(c(4.0,2.0,1.5,1.2)) -#' -#' scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -#' scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) -#' -#' Y <- f1(scoreX[,1]) + f2(scoreX[,2]) + f3(scoreX[,3]) + f4(scoreX[,4]) + rnorm(n,0,0.1) -#' YTest <- f1(scoreXTest[,1]) + f2(scoreXTest[,2]) + -#' f3(scoreXTest[,3]) + f4(scoreXTest[,4]) + rnorm(N,0,0.1) -#' -#' phi1 <- function(t) sqrt(2)*sin(2*pi*t) -#' phi2 <- function(t) sqrt(2)*sin(4*pi*t) -#' phi3 <- function(t) sqrt(2)*cos(2*pi*t) -#' phi4 <- function(t) sqrt(2)*cos(4*pi*t) -#' -#' grid <- seq(0,1,length.out=21) -#' Lt <- Lx <- list() -#' for (i in 1:n) { -#' Lt[[i]] <- grid -#' Lx[[i]] <- scoreX[i,1]*phi1(grid) + scoreX[i,2]*phi2(grid) + -#' scoreX[i,3]*phi3(grid) + scoreX[i,4]*phi4(grid) + rnorm(1,0,0.01) -#' } -#' -#' LtTest <- LxTest <- list() -#' for (i in 1:N) { -#' LtTest[[i]] <- grid -#' LxTest[[i]] <- scoreXTest[i,1]*phi1(grid) + scoreXTest[i,2]*phi2(grid) + -#' scoreXTest[i,3]*phi3(grid) + scoreXTest[i,4]*phi4(grid) + rnorm(1,0,0.01) -#' } -#' -#' -#' # estimation -#' fit <- FAM(Y=Y,Lx=Lx,Lt=Lt) -#' -#' xi <- fit$xi -#' -#' par(mfrow=c(2,2)) -#' j <- 1 -#' g1 <- f1(sort(xi[,j])) -#' tmpSgn <- sign(sum(g1*fit$fam[,j])) -#' plot(sort(xi[,j]),g1,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi1') -#' points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') -#' -#' j <- 2 -#' g2 <- f2(sort(xi[,j])) -#' tmpSgn <- sign(sum(g2*fit$fam[,j])) -#' plot(sort(xi[,j]),g2,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi2') -#' points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') -#' -#' j <- 3 -#' g3 <- f3(sort(xi[,j])) -#' tmpSgn <- sign(sum(g3*fit$fam[,j])) -#' plot(sort(xi[,j]),g3,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi3') -#' points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') -#' -#' j <- 4 -#' g4 <- f4(sort(xi[,j])) -#' tmpSgn <- sign(sum(g4*fit$fam[,j])) -#' plot(sort(xi[,j]),g4,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi4') -#' points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') -#' -#' -#' # fitting -#' fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,nEval=0) -#' yHat <- fit$mu+apply(fit$fam,1,'sum') -#' par(mfrow=c(1,1)) -#' plot(yHat,Y) -#' abline(coef=c(0,1),col=2) -#' -#' -#' # R^2 -#' R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -#' R2 -#' -#' -#' # prediction -#' fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,newLx=LxTest,newLt=LtTest) -#' yHat <- fit$mu+apply(fit$fam,1,'sum') -#' par(mfrow=c(1,1)) -#' plot(yHat,YTest,xlim=c(-10,10)) -#' abline(coef=c(0,1),col=2) -#' @references -#' \cite{Mueller, H.-G. and Yao, F. (2005), "Functional additive models", JASA, Vol.103, No.484, p.1534-1544.} -#' -#' @export - -FAM <- function(Y,Lx,Lt,nEval=51,newLx=NULL,newLt=NULL,bwMethod=0,alpha=0.7,supp=c(-2,2),optns=NULL){ - - - - if (is.null(optns)==TRUE) { - optns <- list() - } - - n <- length(Y) - - tmpFPCA <- FPCA(Ly=Lx, Lt=Lt, optns=optns) - - XiStd <- t(t(tmpFPCA$xiEst)/sqrt(tmpFPCA$lambda)) - d <- length(tmpFPCA$lambda) - - estLambda <- tmpFPCA$lambda - estEigen <- tmpFPCA$phi - workGrid <- tmpFPCA$workGrid - - N <- xiStdGrid <- c() - if (is.null(newLx)==TRUE | is.null(newLt)==TRUE) { - - if (nEval==0) { - N <- nrow(XiStd) - xiStdGrid <- XiStd - } else { - N <- nEval - xiStdGrid <- matrix(rep(seq(supp[1],supp[2],length.out=N),d),nrow=N,ncol=d) - } - - } else { - xiStdGrid <- predict.FPCA(tmpFPCA,newLy=newLx,newLt=newLt,K=d)%*%diag(1/sqrt(tmpFPCA$lambda)) - N <- nrow(xiStdGrid) - } - - h <- c() - for (j in 1:d) { - if (bwMethod>0) { - options(warn = -1) - h[j] <- CVLwls1D(y=(Y-mean(Y)),t=XiStd[,j],kernel='epan',npoly=1,nder=0,dataType='Sparse',kFolds=bwMethod) - options(warn = 0) - } else { - options(warn = -1) - h[j] <- GCVLwls1D1(yy=(Y-mean(Y)),tt=XiStd[,j],kernel='epan',npoly=1,nder=0,dataType='Sparse')$bOpt - options(warn = 0) - } - } - - h <- alpha*h - - fam <- matrix(nrow=N,ncol=d) - for (j in 1:d) { - xiTmp <- sort(xiStdGrid[,j]) - fitTmp <- Lwls1D(bw=h[j],kernel_type='epan',xin=sort(XiStd[,j]),yin=(Y[order(XiStd[,j])]-mean(Y)),xout=xiTmp,npoly=1,nder=0) - fam[,j] <- fitTmp[match(xiStdGrid[,j],xiTmp)] - - fam[,j] <- fam[,j] - mean(fam[,j]) - } - yMean <- mean(Y) - - xiGrid <- xiStdGrid%*%diag(sqrt(estLambda)) - bw <- h*sqrt(estLambda) - phi <- estEigen - - fit <- list(mu=yMean, fam=fam, xi=xiGrid, bw=bw, lambda=estLambda, phi=phi, workGrid=workGrid) - - return(fit) - -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FCCor.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FCCor.R deleted file mode 100644 index 168aef24..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FCCor.R +++ /dev/null @@ -1,83 +0,0 @@ -#' Calculate functional correlation between two simultaneously observed processes. -#' -#' @param x A list of function values corresponding to the first process. -#' @param y A list of function values corresponding to the second process. -#' @param Lt A list of time points for both \code{x} and \code{y}. -#' @param bw A numeric vector for bandwidth of length either 5 or 1, specifying the bandwidths for E(X), E(Y), var(X), var(Y), and cov(X, Y). If \code{bw} is a scalar then all five bandwidths are chosen to be the same. -#' @param kern Smoothing kernel for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" (default: "gauss") -#' @param Tout Output time points. Default to the sorted unique time points. -#' -#' @details \code{FCCor} calculate only the concurrent correlation corr(X(t), Y(t)) (note that the time points t are the same). It assumes no measurement error in the observed values. -#' @return A list with the following components: -#' \item{corr}{A vector of the correlation corr(X(t), Y(t)) evaluated at \code{Tout}.} -#' \item{Tout}{Same as the input Tout.} -#' \item{bw}{The bandwidths used for E(X), E(Y), var(X), var(Y), and cov(X, Y).} -#' -#' @examples -#' set.seed(1) -#' n <- 200 -#' nGridIn <- 50 -#' sparsity <- 1:5 # must have length > 1 -#' bw <- 0.2 -#' kern <- 'epan' -#' T <- matrix(seq(0.5, 1, length.out=nGridIn)) -#' -#' ## Corr(X(t), Y(t)) = 1/2 -#' A <- Wiener(n, T) -#' B <- Wiener(n, T) -#' C <- Wiener(n, T) + matrix((1:nGridIn) , n, nGridIn, byrow=TRUE) -#' X <- A + B -#' Y <- A + C -#' indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) -#' tAll <- lapply(1:n, function(i) T[indEach[[i]]]) -#' Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) -#' Ysp <- lapply(1:n, function(i) Y[i, indEach[[i]]]) -#' -#' plot(T, FCCor(Xsp, Ysp, tAll, bw)[['corr']], ylim=c(-1, 1)) -#' abline(h=0.5) -#' @export - -FCCor <- function(x, y, Lt, bw=stop('bw missing'), kern='epan', Tout=sort(unique(unlist(Lt)))) { - - stopifnot(!is.null(x) && !is.null(y) && !is.null(Lt)) - - Xvec <- unlist(x) - Yvec <- unlist(y) - tvec <- unlist(Lt) - ord <- order(tvec) - Xvec <- Xvec[ord] - Yvec <- Yvec[ord] - tvec <- tvec[ord] - Tall <- sort(unique(unlist(Lt))) - - if (length(bw) != 1 && length(bw) != 5) - stop('bw length incorrect.') - if (is.numeric(bw) && length(bw) == 1) - bw <- rep(bw, 5) - - muX <- Lwls1D(bw[1], kern, npoly=1L, nder=0L, xin=tvec, yin=Xvec, win=rep(1, length(tvec)), xout=Tall) - muY <- Lwls1D(bw[2], kern, npoly=1L, nder=0L, xin=tvec, yin=Yvec, win=rep(1, length(tvec)), xout=Tall) - names(muX) <- Tall - names(muY) <- Tall - - Xcent <- Xvec - muX[as.character(tvec)] - Ycent <- Yvec - muY[as.character(tvec)] - varX <- Lwls1D(bw[3], kern, npoly=1L, nder=0L, xin=tvec, yin=Xcent^2, win=rep(1, length(tvec)), xout=Tout) - varY <- Lwls1D(bw[4], kern, npoly=1L, nder=0L, xin=tvec, yin=Ycent^2, win=rep(1, length(tvec)), xout=Tout) - covXY <- Lwls1D(bw[5], kern, npoly=1L, nder=0L, xin=tvec, yin=Xcent * Ycent, win=rep(1, length(tvec)), xout=Tout) - -# The denominator variance esitmates may be negative sometimes. Set them to - # NaN. - varX[varX <= 0 ] <- NaN - varY[varY <= 0 ] <- NaN - - if (any(is.nan(varX)) || any(is.nan(varY))) - warning('NaN produced because the variance estimate is negative') - - res <- list(corr = covXY / sqrt(varX * varY), - Tout = Tout, - bw = bw) - - return(res) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FCReg.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FCReg.R deleted file mode 100644 index be4f3713..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FCReg.R +++ /dev/null @@ -1,365 +0,0 @@ -#' Functional Concurrent Regression by 2D smoothing method. -#' -#' Functional concurrent regression with dense or sparse functional data for scalar or functional dependent variable. -#' -#' @param vars A list of input functional/scalar covariates. Each field corresponds to a functional (a list) or scalar (a vector) covariate. The last entry is assumed to be the response if no entry is names 'Y'. If a field corresponds to a functional covariate, it should have two fields: 'Lt', a list of time points, and 'Ly', a list of function values. -#' @param userBwMu A scalar with bandwidth used for smoothing the mean -#' @param userBwCov A scalar with bandwidth used for smoothing the auto- and cross-covariances -#' @param outGrid A vector with the output time points -#' @param kern Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" (default: "gauss") -#' @param measurementError Indicator measurement errors on the functional observations should be assumed. If TRUE the diagonal raw covariance will be removed when smoothing. (default: TRUE) -#' @param diag1D A string specifying whether to use 1D smoothing for the diagonal line of the covariance. -#' 'none': don't use 1D smoothing; 'cross': use 1D only for cross-covariances; 'all': use 1D for both auto- and cross-covariances. (default : 'none') -#' @param useGAM Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE) -#' @param returnCov Indicator to return the covariance surfaces, which is a four dimensional array. The first two dimensions correspond to outGrid -#' and the last two correspond to the covariates and the response, i.e. (i, j, k, l) entry being Cov(X_k(t_i), X_l(t_j)) (default: FALSE) -#' @param ... Additional arguments -#' -#' @details If measurement error is assumed, the diagonal elements of the raw covariance will be removed. This could result in highly unstable estimate if the design is very sparse, or strong seasonality presents. -#' @references -#' \cite{Yao, F., Mueller, H.G., Wang, J.L. "Functional Linear Regression Analysis for Longitudinal Data." Annals of Statistics 33, (2005): 2873-2903.(Dense data)} -#' -#' \cite{Senturk, D., Nguyen, D.V. "Varying Coefficient Models for Sparse Noise-contaminated Longitudinal Data", Statistica Sinica 21(4), (2011): 1831-1856. (Sparse data)} -#' @export -#' @examples -#' # Y(t) = \beta_0(t) + \beta_1(t) X_1(t) + \beta_2(t) Z_2 + \epsilon -#' -#' # Settings -#' set.seed(1) -#' n <- 75 -#' nGridIn <- 150 -#' sparsity <- 5:10 # Sparse data sparsity -#' T <- round(seq(0, 1, length.out=nGridIn), 4) # Functional data support -#' bw <- 0.1 -#' outGrid <- round(seq(min(T), 1, by=0.05), 2) -#' -#' # Simulate functional data -#' mu <- T * 2 # mean function for X_1 -#' sigma <- 1 -#' -#' beta_0 <- 0 -#' beta_1 <- 1 -#' beta_2 <- 1 -#' -#' Z <- MASS::mvrnorm(n, rep(0, 2), diag(2)) -#' X_1 <- Z[, 1, drop=FALSE] %*% matrix(1, 1, nGridIn) + matrix(mu, n, nGridIn, byrow=TRUE) -#' epsilon <- rnorm(n, sd=sigma) -#' Y <- matrix(NA, n, nGridIn) -#' for (i in seq_len(n)) { -#' Y[i, ] <- beta_0 + beta_1 * X_1[i, ] + beta_2 * Z[i, 2] + epsilon[i] -#' } -#' -#' # Sparsify functional data -#' set.seed(1) -#' X_1sp <- Sparsify(X_1, T, sparsity) -#' set.seed(1) -#' Ysp <- Sparsify(Y, T, sparsity) -#' vars <- list(X_1=X_1sp, Z_2=Z[, 2], Y=Ysp) -#' withError2D <- FCReg(vars, bw, bw, outGrid) - - -FCReg <- function(vars, userBwMu, userBwCov, outGrid, kern='gauss', measurementError=TRUE, diag1D='none', useGAM = FALSE, returnCov=TRUE) { - - n <- lengthVars(vars) - p <- length(vars) - 1 - if (p == 0) - stop('Too few covariates.') - - if (is.null(names(vars))) - names(vars) <- c(paste0('X', seq_len(length(vars) - 1)), 'Y') - - if ('Y' %in% names(vars)) { - vars <- c(vars[names(vars) != 'Y'], vars['Y']) - } else if (names(vars)[length(vars)] == '') { - names(vars)[length(vars)] <- 'Y' - } - - Yname <- names(vars)[length(vars)] - - # Handle NaN, int to double - vars[sapply(vars, is.list)] <- lapply( - vars[sapply(vars, is.list)], - function(v) HandleNumericsAndNAN(v[['Ly']], v[['Lt']]) - ) - # outGrid <- as.numeric(outGrid) - - # De-mean. - demeanedRes <- demean(vars, userBwMu, kern) - vars <- demeanedRes[['xList']] - muList <- demeanedRes[['muList']] - - allCov <- MvCov(vars, userBwCov, outGrid, kern, measurementError, center=FALSE, diag1D) - beta <- sapply(seq_len(dim(allCov)[1]), function(i) { - tmpCov <- allCov[i, i, , ] - beta_ti <- qr.solve(tmpCov[1:p, 1:p], tmpCov[1:p, p + 1]) - beta_ti - }) - if (is.null(nrow(beta))) - beta <- matrix(beta, 1) - rownames(beta) <- names(vars)[-length(vars)] - - # coefficient of determination: - # R2 = cov(X, Y)' var(X)^{-1} cov(X, Y) / var(Y) - R2 <- sapply(seq_len(dim(allCov)[1]), function(i) { - tmpCov <- allCov[i, i, , ] - tmpCov[p + 1, 1:p, drop=FALSE] %*% beta[, i, drop=FALSE] / tmpCov[p + 1, p + 1] - }) - - muBeta <- sapply(seq_len(p), function(j) { - if (!is.function(muList[[j]])) { # scalar mean - beta[j, ] * rep(muList[[j]], length(outGrid)) - } else { # functional mean - beta[j, ] * muList[[j]](outGrid) - } - }) - beta0 <- muList[[Yname]](outGrid) - colSums(t(muBeta)) - - res <- list(beta=beta, beta0 = beta0, outGrid=outGrid, cov=allCov, R2=R2, n=n) - if (!returnCov) - res[['cov']] <- NULL - res -} - -demean <- function(vars, userBwMu, kern) { - tmp <- lapply(vars, function(x) { - if (is.numeric(x)) { # scalar - xmu <- mean(x) - x <- x - xmu - } else if (is.list(x)) { # functional - Tin <- sort(unique(unlist(x[['Lt']]))) - xmu <- GetSmoothedMeanCurve(x[['Ly']], x[['Lt']], Tin, Tin[1], - list(userBwMu=userBwMu, kernel=kern))[['mu']] - muFun <- approxfun(Tin, xmu) - x[['Ly']] <- lapply(1:length(x[['Ly']]), function(i) - x[['Ly']][[i]]- muFun(x[['Lt']][[i]])) - xmu <- muFun - } - - list(x=x, mu=xmu) - }) - - xList <- lapply(tmp, `[[`, 'x') - muList <- lapply(tmp, `[[`, 'mu') - - list(xList = xList, muList = muList) -} - -## Multivariate function/scalar covariance. -# INPUTS: same as FCReg -# Output: a 4-D array containing the covariances. The first two dimensions corresponds to -# time s and t, and the last two dimensions correspond to the variables taken covariance upon. -MvCov <- function(vars, userBwCov, outGrid, kern, measurementError=TRUE, center=TRUE, diag1D='none') { - if (!is.list(vars) || length(vars) < 1) - stop('`vars` needs to be a list of length >= 1') - - if (diag1D == 'all' && measurementError) { - stop("Cannot assume measurement error when diag1D == 'all'") - } - isFuncVars <- sapply(vars, is.list) - p <- length(isFuncVars) - pFunc <- sum(isFuncVars) - pScaler <- sum(!isFuncVars) - - if (any(isFuncVars)) { - tAll <- do.call(c, lapply(vars[isFuncVars], function(x) unlist(x[['Lt']]))) - Tin <- sort(unique(tAll)) - - if (missing(outGrid)) - outGrid <- Tin - lenoutGrid <- length(outGrid) - - } else { - stop('No functional observation found') - } - - # First two dimensions are for s, t, and the last two dimensions are for matrix of # random variables. - res <- array(NA, c(lenoutGrid, lenoutGrid, p, p)) - for (j in seq_len(p)) { - for (i in seq_len(p)) { - if (j <= i) { - use1D <- diag1D == 'all' || ( diag1D == 'cross' && j != i ) - covRes <- uniCov(vars[[i]], vars[[j]], userBwCov, outGrid, kern, - rmDiag = (i == j) && measurementError, - center, use1D) - if (attr(covRes, 'covType') %in% c('FF', 'SS')) - res[, , i, j] <- covRes - else { - if (nrow(covRes) == 1) # cov(scalar, function) - res[, , i, j] <- matrix(covRes, lenoutGrid, lenoutGrid, byrow=TRUE) - else # cov(function, scalar) - res[, , i, j] <- matrix(covRes, lenoutGrid, lenoutGrid, byrow=FALSE) - } - } else { # fill up the symmetric cov(y, x) - res[, , i, j] <- t(res[, , j, i]) - } - } - } - - return(res) -} - -## Univariate function/scalar covariance. -# rmDiag: whether to remove the diagonal of the raw covariance. Ignored if 1D smoother is used. -# center: whether to center the covariates before calculate covariance. -# use1D: whether to use 1D smoothing for estimating the diagonal covariance. -uniCov <- function(X, Y, userBwCov, outGrid, kern='gauss', rmDiag=FALSE, center=TRUE, use1D=FALSE) { - flagScalerFunc <- FALSE - # Force X to be a function in the scalar-function case. - if (!is.list(X) && is.list(Y)) { - flagScalerFunc <- TRUE - tmp <- X - X <- Y - Y <- tmp - } - - # Scalar-scalar - if (!is.list(X) && !is.list(Y)) { - res <- cov(X, Y) - attr(res, 'covType') <- 'SS' - - # Scalar-function - } else if (is.list(X) && !is.list(Y)) { - Tin <- sort(unique(unlist(X[['Lt']]))) - if (center) { - Xmu <- GetSmoothedMeanCurve(X[['Ly']], X[['Lt']], Tin, Tin[1], list(userBwMu=userBwCov, kernel=kern))[['mu']] - Ymu <- mean(Y) - } else { - Xmu <- rep(0, length(Tin)) - Ymu <- 0 - } - res <- GetCrCovYZ(userBwCov, Y, Ymu, X[['Ly']], X[['Lt']], Xmu, Tin, kern)[['smoothedCC']] - res <- as.matrix(ConvertSupport(Tin, outGrid, mu=res)) - if (flagScalerFunc) - res <- t(res) - - attr(res, 'covType') <- 'FS' - - # function-function - } else { - TinX <- sort(unique(unlist(X[['Lt']]))) - TinY <- sort(unique(unlist(Y[['Lt']]))) - noutGrid <- length(outGrid) - if (center) { - if (min(TinX) > min(outGrid) || min(TinY) > min(outGrid) || - max(TinY) < max(outGrid) || max(TinX) < max(outGrid)) - stop('Observation time points coverage too low') - - Xmu <- GetSmoothedMeanCurve(X[['Ly']], X[['Lt']], TinX, TinX[1], - list(userBwMu=userBwCov, kernel=kern))[['mu']] - Ymu <- GetSmoothedMeanCurve(Y[['Ly']], Y[['Lt']], TinY, TinY[1], - list(userBwMu=userBwCov, kernel=kern))[['mu']] - } else { - Xmu <- rep(0, length(TinX)) - Ymu <- rep(0, length(TinY)) - } - names(Xmu) <- TinX - names(Ymu) <- TinY - - if (use1D) { - Xvec <- unlist(X[['Ly']]) - Yvec <- unlist(Y[['Ly']]) - tvecX <- unlist(X[['Lt']]) - tvecY <- unlist(Y[['Lt']]) - if (!identical(tvecX, tvecY)){ - stop('Cannot use 1D covariance smoothing if the observation time points for X and Y are different') - } - - ord <- order(tvecX) - tvecX <- tvecX[ord] - Xvec <- Xvec[ord] - Yvec <- Yvec[ord] - Xcent <- Xvec - Xmu[as.character(tvecX)] - Ycent <- Yvec - Ymu[as.character(tvecX)] - covXY <- Lwls1D(userBwCov, kern, npoly=1L, nder=0L, - xin=tvecX, yin=Xcent * Ycent, - win=rep(1, length(tvecX)), xout=outGrid) - res <- matrix(NA, noutGrid, noutGrid) - diag(res) <- covXY - } else { # use 2D smoothing - tmp <- GetCrCovYX(userBwCov, userBwCov, X[['Ly']], X[['Lt']], Xmu, - Y[['Ly']], Y[['Lt']], Ymu, rmDiag=rmDiag, kern=kern) - gd <- tmp[['smoothGrid']] - res <- matrix( - interp2lin(as.numeric(gd[, 1]), - as.numeric(gd[, 2]), - matrix(as.numeric(tmp[['smoothedCC']]), - nrow(tmp[['smoothedCC']]), - ncol(tmp[['smoothedCC']])), - rep(as.numeric(outGrid), times=noutGrid), - rep(as.numeric(outGrid), each=noutGrid)), - noutGrid, noutGrid) - } - attr(res, 'covType') <- 'FF' - } - - return(res) -} - -## Concurrent functional regression by imputation. This does not provide consistent estimates. -## FPCAlist: a list of functional covariates and response. Each field corresponds to a covariate. -# The last entry is assumed to be the response if no entry is names 'Y'. -imputeConReg <- function(FPCAlist, Z, outGrid) { - - if (is.null(names(FPCAlist))) - names(FPCAlist) <- c(paste0('X', seq_len(length(FPCAlist) - 1)), 'Y') - - if ('Y' %in% names(FPCAlist)) { - Yname <- 'Y' - FPCAlist <- c(FPCAlist[names(FPCAlist) != 'Y'], FPCAlist['Y']) - } else - Yname <- names(FPCAlist)[length(FPCAlist)] - - imputeCurves <- sapply(FPCAlist, function(x) - apply(fitted(x), 1, function(fit) - approx(x[['workGrid']], fit, outGrid)[['y']]), - simplify='array') - alphaBeta <- apply(imputeCurves, 1, function(XYt) { - Yt <- XYt[, ncol(XYt)] - designMat <- cbind(1, XYt[, -ncol(XYt), drop=FALSE], Z) - beta_t <- qr.solve(designMat, Yt) - return(beta_t) - }) - beta0 <- alphaBeta[1, ] - beta <- alphaBeta[-1, , drop=FALSE] - - return(list(beta0 = beta0, beta = beta, outGrid = outGrid)) -} - -## regObj: an object returned by mvConReg. -## vars: a list of input functional/scalar covariates. Each field can correspond to a covariate. -# The last entry is assumed to be the response if no entry is names 'Y'. -summaryConReg <- function(regObj, vars) { - -} - -## subset a list of covariates and responses. -subsetVars <- function(vars, subset) { - sapply(vars, function(x) { - if (is.list(x)) { - sapply(x, `[`, subset, drop=FALSE, simplify=FALSE) - } else if (is.numeric(x)) { - x[subset, drop=FALSE] - } else { - stop('Cannot subset variable') - } - }, simplify=FALSE) -} - -## get the number of subjects for a list of covariates and responses. -lengthVars <- function(vars, subset) { - lenEach <- sapply(vars, function(x) { - if (is.list(x)) { - sapply(x, length) - } else if (is.numeric(x)) { - length(x) - } else { - stop('Cannot subset variable') - } - }, simplify=FALSE) - len <- unique(unlist(lenEach)) - if (length(len) != 1) { - stop('Length of variables are not the same!') - } - - return(len) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FClust.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FClust.R deleted file mode 100644 index 1ccb7622..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FClust.R +++ /dev/null @@ -1,78 +0,0 @@ -#' Functional clustering and identifying substructures of longitudinal data -#' -#' By default the function will cluster the data using the functional principal component (FPC) scores from the data's -#' FPC analysis using EMCluster (Chen and Maitra, 2015) or directly clustering the functional data using kCFC (Chiou and Li, 2007). -#' -#' Within EMCluster we examine the model initiated "EMCluster::em.EM" and return the optimal model based on 'EMCluster::emcluster'. -#' See ?EMCluster::emcluster for details. -#' -#' @param Ly A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. -#' @param k A scalar defining the number of clusters to define; default 3. -#' @param cmethod A string specifying the clusterig method to use ('EMCluster' or 'kCFC'); default: 'EMCluster'. -#' @param optnsFPCA A list of options control parameters specified by \code{list(name=value)} to be used for by FPCA on the sample y; by default: -#' "list( methodMuCovEst ='smooth', FVEthreshold= 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'. -#' @param optnsCS A list of options control parameters specified by \code{list(name=value)} to be used for cluster-specific FPCA from kCFC; by default: -#' "list( methodMuCovEst ='smooth', FVEthreshold= 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA' and '?kCFC'. -#' -#' @return A list containing the following fields: -#' \item{cluster}{A vector of levels 1:k, indicating the cluster to which each curve is allocated.} -#' \item{fpca}{An FPCA object derived from the sample used by Rmixmod, otherwise NULL.} -#' \item{clusterObj}{Either a EMCluster object or kCFC object.} -#' -#' @examples -#' \dontrun{ -#' data(medfly25) -#' Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -#' newClust <- FClust(Flies$Ly, Flies$Lt, k = 2, optnsFPCA = -#' list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90)) -#' -#' # We denote as 'veryLowCount' the group of flies that lay less -#' # than twenty-five eggs during the 25-day period examined. -#' -#' veryLowCount = ifelse( sapply( unique(medfly25$ID), function(u) -#' sum( medfly25$nEggs[medfly25$ID == u] )) < 25, 0, 1) -#' N <- length(unique(medfly25$ID)) -#' (correctRate <- sum( (1 + veryLowCount) == newClust$cluster) / N) # 99.6% -#' } -#' @references -#' \cite{Wei-Chen Chen and Ranjan Maitra, "EMCluster: EM Algorithm for Model-Based Clusttering of Finite Mixture Gaussian Distribution". (2015)} -#' -#' \cite{Julien Jacques and Cristian Preda, "Funclust: A curves clustering method using functional random variables density approximation". Neurocomputing 112 (2013): 164-171} -#' -#' \cite{Jeng-Min Chiou and Pai-Ling Li, "Functional clustering and identifying substructures of longitudinal data". Journal of the Royal Statistical Society B 69 (2007): 679-699} -#' @export - -FClust = function(Ly, Lt, k = 3, cmethod = 'EMCluster', optnsFPCA = NULL, optnsCS = NULL){ - - if(is.null(optnsFPCA)){ - optnsFPCA = list( methodMuCovEst = 'smooth', FVEthreshold = 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV') - } - if(is.null(optnsCS)){ - optnsCS = list( methodMuCovEst = 'smooth', FVEthreshold = 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV') - } - - if( (k <2) || (floor(length(Ly)*0.5) < k) ){ - warning("The value of 'k' is outside [2, 0.5*N]; clustering is possibly incoherent.") - } - if( !(cmethod %in% c("EMCluster", "kCFC")) ){ - stop("The clustering method specified in neither 'EMCluster' or 'kCFC'.") - } - - if( cmethod == 'EMCluster'){ - if( !is.element('EMCluster', installed.packages()[,1]) ) { - stop("Cannot the use the EMCluster method; the package 'EMCluster' is unavailable.") - } - # suppressMessages(library(EMCluster)) - fpcaObjY <- FPCA(Ly = Ly, Lt = Lt, optnsFPCA) - xiData <- as.data.frame(fpcaObjY$xiEst) - clusterObj <- EMCluster::emcluster(xiData, EMCluster::em.EM(xiData, nclass =k, EMC = EMCluster::.EMControl()), assign.class= TRUE, EMC = EMCluster::.EMControl() ) - clustConf = clusterObj$class - } else { - fpcaObjY <- NULL - clusterObj <- kCFC(y= Ly, t= Lt, k = k, optnsSW = optnsFPCA, optnsCS = optnsCS) - clustConf <- clusterObj$cluster - } - - return( list(cluster = clustConf, fpca = fpcaObjY, clusterObj = clusterObj) ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FOptDes.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FOptDes.R deleted file mode 100644 index 19cede15..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FOptDes.R +++ /dev/null @@ -1,132 +0,0 @@ -#' Optimal Designs for Functional and Longitudinal Data -#' for Trajectory Recovery or Scalar Response Prediction -#' -#' @param Ly A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order. -#' @param Resp A vector of response values, keep void for trajectory recovery, only necessary for scalar response prediction task. -#' @param p A fixed positive integer indicating the number of optimal design points requested, with default: 3. -#' @param optns A list of options control parameters specified by \code{list(name=value)} for FPCA, with default: list(). -#' @param isRegression A logical argument, indicating the purpose of the optimal designs: TRUE for scalar response prediction, FALSE for trajectory recovery, with default value !missing(Resp). -#' @param isSequential A logical argument, indicating whether to use the sequential optimization procedure for faster computation, recommended for relatively large p (default: FALSE). -#' @param RidgeCand A vector of positive numbers as ridge penalty candidates for regularization. The final value is selected via cross validation. If only 1 ridge parameter is specified, CV procedure is skipped. -#' -#' @details To select a proper RidgeCand, check with the returned optimal ridge parameter. If the selected parameter is the maximum/minimum values in the candidates, it is possible that the selected one is too small/big. -#' -#' @return A list containing the following fields: -#' \item{OptDes}{The vector of optimal design points of the regular time grid of the observed data.} -#' \item{R2}{Coefficient of determination. (Check the paper for details.)} -#' \item{R2adj}{Adjusted coefficient of determination.} -#' \item{OptRidge}{The selected ridge parameter.} -#' -#' @examples -#' set.seed(1) -#' n <- 50 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- MakeFPCAInputs(IDs = rep(1:n, each=length(pts)), -#' tVec = rep(pts, times = n), -#' yVec = t(sampWiener)) -#' res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=2, -#' isSequential=FALSE, RidgeCand = seq(0.02,0.2,0.02)) -#' @references -#' \cite{Ji, H., Mueller, H.G. (2016) "Optimal Designs for Longitudinal and Functional Data" Journal of the Royal Statistical Society: Series B (Statistical Methodology)} -#' -#' @export - -FOptDes <- function(Ly, Lt, Resp, p = 3, optns = list(), - isRegression = !missing(Resp), isSequential = FALSE, RidgeCand = NULL){ - # check inputs - if(is.null(RidgeCand)){ - stop("RidgeCand missing! Need to specify at least one ridge candidate.") - } - if( !(is.vector(RidgeCand) && is.numeric(RidgeCand)) ){ - stop("RidgeCand does not have the correct input format! Need to be a vector of positive numbers.") - } - if(any(RidgeCand <= 0)){ - stop("Some ridge candidates are non-positive! Change RidgeCand to make sure all ridge candidates are postive") - } - if( !(is.numeric(p) && p==as.integer(p) && p > 0) ){ - stop("Argument 'p' is not a positive integer! Need to specify a positive integer as the number of design points to be selected.") - } - if(isRegression){ - if(!(is.numeric(Resp) && is.vector(Resp)) ){ - stop("Resp does not have the correct input format! Need to be a vector of numbers.") - } - if( length(Resp) != length(Ly) ){ - stop("Resp does not have the same length as Ly! Double check the data inputs.") - } - cat("Finding optimal designs for scalar response prediction.\n") - } else { - cat("Finding optimal designs for trajectory recovery.\n") - } - - CheckData(y = Ly, t = Lt); - inputData <- HandleNumericsAndNAN(Ly, Lt); - y <- inputData$Ly; - t <- inputData$Lt; - - obsGrid = sort(unique(c(unlist(t)))); - - optns$nRegGrid = as.integer(1+diff(range(obsGrid))/min(diff(obsGrid))); - # make sure that FPCA workGrid is a denser grid of obsGrid for cv - # if measurement times are random, bin data first before run the function. - optns = SetOptions(y, t, optns); - - numOfCurves = length(y); - CheckOptions(t, optns, numOfCurves); - if(optns$dataType == "Dense"){ - isDense = TRUE; - } else { - isDense = FALSE; # currently dense with missing is treated as sparse - } - - RegGrid = seq(min(obsGrid), max(obsGrid), length.out = optns$nRegGrid); - - # find the best ridge parameter via cross validation - if(length(RidgeCand) > 1){ - OptRidge <- MCVOptRidge(y = y, t = t, Resp = Resp, p = p, RidgeCand = RidgeCand, - isDense = isDense, - isRegression = isRegression, isSequential = isSequential) - optridge <- OptRidge$optridge - } else { # skip CV if only ridge is prespecified. - cat("Only 1 ridge candidate in RidgeCand. The candidate is used and cross validation is skipped.\n") - OptRidge <- RidgeCand - optridge <- RidgeCand - } - # find optdes with optridge - TrainFPCA <- FPCA(Ly=y, Lt=t, optns=optns) - if(isRegression == FALSE){ # Trajectory Recovery - BestDesTR <- BestDes_TR(p=p, ridge=optridge, workGrid=TrainFPCA$workGrid, - Cov=TrainFPCA$fittedCov, isSequential=isSequential)$best - # calculate R2_X - VarX <- sum(TrainFPCA$lambda) - mu <- TrainFPCA$mu - Cov <- TrainFPCA$fittedCov - ridgeCov <- TrainFPCA$fittedCov + diag(optridge, nrow(Cov)) - R2XNum <- sum(diag(Cov[,BestDesTR] %*% solve(ridgeCov[BestDesTR, BestDesTR]) %*% Cov[BestDesTR,]))*diff(RegGrid)[1] - R2X <- R2XNum/VarX - R2Xadj <- 1-(1-R2X)*(length(y)-1)/(length(y)-p-1) - if(R2X >= 1){ - warning("Coefficient of determination is greater than 1! Select other ridge candidates for proper regularization.") - } - return(list(OptDes = RegGrid[BestDesTR], R2 = R2X, R2adj = R2Xadj, OptRidge = OptRidge)) - } else{ # scalar response regression - mu <- TrainFPCA$mu - Cov <- TrainFPCA$fittedCov - ridgeCov <- TrainFPCA$fittedCov + diag(optridge, nrow(Cov)) - # FPCA for cross cov - y1 <- list() - for(subj in 1:length(y)){y1[[subj]] = y[[subj]]*Resp[subj]} - FPCACC <- FPCA(y1, t, optns) - CCov <- FPCACC$mu - mean(Resp)*mu - BestDesSR <- BestDes_SR(p=p, ridge=optridge, workGrid=TrainFPCA$workGrid, - Cov=TrainFPCA$fittedCov, CCov=CCov, isSequential=isSequential)$best - R2Y <- (var(Resp) - CCov[BestDesSR] %*% solve(ridgeCov[BestDesSR,BestDesSR]) %*% CCov[BestDesSR])/var(Resp) - R2Yadj <- 1-(1-R2Y)*(length(y)-1)/(length(y)-p-1) - if(R2Y >= 1){ - warning("Coefficient of determination is greater than 1! Select other ridge candidates for proper regularization.") - } - return(list(OptDes = RegGrid[BestDesSR], R2 = R2Y, R2adj = R2Yadj, OptRidge = OptRidge)) - } -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCA.R deleted file mode 100644 index 40635b18..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCA.R +++ /dev/null @@ -1,246 +0,0 @@ -#' Functional Principal Component Analysis -#' -#' FPCA for dense or sparse functional data. -#' -#' @param Ly A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order. -#' @param optns A list of options control parameters specified by \code{list(name=value)}. See `Details'. -#' -#' @details If the input is sparse data, make sure you check the design plot is dense and the 2D domain is well covered, using \code{plot} or \code{CreateDesignPlot}. Some study design such as snippet data (each subject is observed only on a sub-interval of the period of study) will have an ill-covered design plot, for which the covariance estimate will be unreliable. -#' -#' Available control options are -#' \describe{ -#' \item{userBwCov}{The bandwidth value for the smoothed covariance function; positive numeric - default: determine automatically based on 'methodBwCov'} -#' \item{methodBwCov}{The bandwidth choice method for the smoothed covariance function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 10\% of the support} -#' \item{userBwMu}{The bandwidth value for the smoothed mean function (using 'CV' or 'GCV'); positive numeric - default: determine automatically based on 'methodBwMu'} -#' \item{methodBwMu}{The bandwidth choice method for the mean function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 5\% of the support} -#' \item{dataType}{The type of design we have (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV', 'p>>n' - default: determine automatically based on 'IsRegular'} -#' \item{diagnosticsPlot}{Deprecated. Same as the option 'plot'} -#' \item{plot}{Plot FPCA results (design plot, mean, scree plot and first K (<=3) eigenfunctions); logical - default: FALSE} -#' \item{error}{Assume measurement error in the dataset; logical - default: TRUE} -#' \item{fitEigenValues}{Whether also to obtain a regression fit of the eigenvalues - default: FALSE} -#' \item{FVEthreshold}{Fraction-of-Variance-Explained threshold used during the SVD of the fitted covar. function; numeric (0,1] - default: 0.9999} -#' \item{kernel}{Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" - default: "gauss"; dense data are assumed noise-less so no smoothing is performed. } -#' \item{kFoldMuCov}{The number of folds to be used for mean and covariance smoothing. Default: 10} -#' \item{lean}{If TRUE the 'inputData' field in the output list is empty. Default: FALSE} -#' \item{maxK}{The maximum number of principal components to consider - default: min(20, N-1), N:# of curves} -#' \item{methodXi}{The method to estimate the PC scores; 'CE' (Condit. Expectation), 'IN' (Numerical Integration) - default: 'CE' for sparse data and dense data with missing values, 'IN' for dense data.} -#' \item{methodMuCovEst}{The method to estimate the mean and covariance in the case of dense functional data; 'cross-sectional', 'smooth' - default: 'cross-sectional'} -#' \item{nRegGrid}{The number of support points in each direction of covariance surface; numeric - default: 51} -#' \item{numBins}{The number of bins to bin the data into; positive integer > 10, default: NULL} -#' \item{methodSelectK}{The method of choosing the number of principal components K; 'FVE','AIC','BIC', or a positive integer as specified number of components: default 'FVE')} -#' \item{shrink}{Whether to use shrinkage method to estimate the scores in the dense case (see Yao et al 2003) - default FALSE} -#' \item{outPercent}{A 2-element vector in [0,1] indicating the outPercent data in the boundary - default (0,1)} -#' \item{rho}{The truncation threshold for the iterative residual. 'cv': choose rho by leave-one-observation out cross-validation; 'no': no regularization - default "cv" if error == TRUE, and "no" if error == FALSE.} -#' \item{rotationCut}{The 2-element vector in [0,1] indicating the percent of data truncated during sigma^2 estimation; default (0.25, 0.75))} -#' \item{useBinnedData}{Should the data be binned? 'FORCE' (Enforce the # of bins), 'AUTO' (Select the # of bins automatically), 'OFF' (Do not bin) - default: 'AUTO'} -#' \item{useBinnedCov}{Whether to use the binned raw covariance for smoothing; logical - default:TRUE} -#' \item{userCov}{The user-defined smoothed covariance function; list of two elements: numerical vector 't' and matrix 'cov', 't' must cover the support defined by 'Ly' - default: NULL} -#' \item{userMu}{The user-defined smoothed mean function; list of two numerical vector 't' and 'mu' of equal size, 't' must cover the support defined 'Ly' - default: NULL} -##' \item{userSigma2}{The user-defined measurement error variance. A positive scalar. If specified then no regularization is used (rho is set to 'no', unless specified otherwise). Default to `NULL`} -#' \item{userRho}{The user-defined measurement truncation threshold used for the calculation of functional principal components scores. A positive scalar. Default to `NULL`} -#' \item{useBW1SE}{Pick the largest bandwidth such that CV-error is within one Standard Error from the minimum CV-error, relevant only if methodBwMu ='CV' and/or methodBwCov ='CV'; logical - default: FALSE} -#' \item{verbose}{Display diagnostic messages; logical - default: FALSE} -#' } -#' @return A list containing the following fields: -#' \item{sigma2}{Variance for measure error.} -#' \item{lambda}{A vector of length \emph{K} containing eigenvalues.} -#' \item{phi}{An nWorkGrid by \emph{K} matrix containing eigenfunctions, supported on workGrid.} -#' \item{xiEst}{A \emph{n} by \emph{K} matrix containing the FPC estimates.} -#' \item{xiVar}{A list of length \emph{n}, each entry containing the variance estimates for the FPC estimates.} -#' \item{obsGrid}{The (sorted) grid points where all observation points are pooled.} -#' \item{mu}{A vector of length nWorkGrid containing the mean function estimate.} -#' \item{workGrid}{A vector of length nWorkGrid. The internal regular grid on which the eigen analysis is carried on.} -#' \item{smoothedCov}{A nWorkGrid by nWorkGrid matrix of the smoothed covariance surface.} -#' \item{fittedCov}{A nWorkGrid by nWorkGrid matrix of the fitted covariance surface, which is guaranteed to be non-negative definite.} -#' \item{optns}{A list of actually used options.} -#' \item{timings}{A vector with execution times for the basic parts of the FPCA call.} -#' \item{bwMu}{The selected (or user specified) bandwidth for smoothing the mean function.} -#' \item{bwCov}{The selected (or user specified) bandwidth for smoothing the covariance function.} -#' \item{rho}{A regularizing scalar for the measurement error variance estimate.} -#' \item{cumFVE}{A vector with the percentages of the total variance explained by each FPC. Increase to almost 1.} -#' \item{FVE}{A percentage indicating the total variance explained by chosen FPCs with corresponding 'FVEthreshold'.} -#' \item{criterionValue}{A scalar specifying the criterion value obtained by the selected number of components with specific methodSelectK: FVE,AIC,BIC values or NULL for fixedK.} -#' \item{inputData}{A list containting the original 'Ly' and 'Lt' lists used as inputs to FPCA. NULL if 'lean' was specified to be TRUE.} -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' plot(res) # The design plot covers [0, 1] * [0, 1] well. -#' CreateCovPlot(res, 'Fitted') -#' @references -#' \cite{Yao, F., Mueller, H.G., Clifford, A.J., Dueker, S.R., Follett, J., Lin, Y., Buchholz, B., Vogel, J.S. (2003). "Shrinkage estimation for functional principal component scores, with application to the population kinetics of plasma folate." Biometrics 59, 676-685. (Shrinkage estimates for dense data)} -#' -#' \cite{Yao, Fang, Hans-Georg Mueller, and Jane-Ling Wang. "Functional data analysis for sparse longitudinal data." Journal of the American Statistical Association 100, no. 470 (2005): 577-590. (Sparse data FPCA)} -#' -#' \cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} -#' -#' \cite{Castro, P. E., W. H. Lawton, and E. A. Sylvestre. "Principal modes of variation for processes with continuous sample curves." Technometrics 28, no. 4 (1986): 329-337. (Dense data FPCA)} -#' @export - -FPCA = function(Ly, Lt, optns = list()){ - - firsttsFPCA <- Sys.time() #First time-stamp for FPCA - # Check the data validity for further analysis - CheckData(Ly,Lt) - - # Force the data to be list of numeric members and handle NA's - #Ly <- lapply(Ly, as.numeric) - #Lt <- lapply(Lt, as.numeric) - #Lt <- lapply(Lt, signif, 14) - #inputData <- list(Ly=Ly, Lt=Lt); - - inputData <- HandleNumericsAndNAN(Ly,Lt); - Ly <- inputData$Ly; - Lt <- inputData$Lt; - - # Set the options structure members that are still NULL - optns = SetOptions(Ly, Lt, optns); - - # Check the options validity for the PCA function. - numOfCurves = length(Ly); - CheckOptions(Lt, optns,numOfCurves) - - # Bin the data - if ( optns$useBinnedData != 'OFF'){ - BinnedDataset <- GetBinnedDataset(Ly,Lt,optns) - Ly = BinnedDataset$newy; - Lt = BinnedDataset$newt; - optns[['nRegGrid']] <- min(optns[['nRegGrid']], - BinnedDataset[['numBins']]) - inputData$Ly <- Ly - inputData$Lt <- Lt - } - - # Generate basic grids: - # obsGrid: the unique sorted pooled time points of the sample and the new - # data - # regGrid: the grid of time points for which the smoothed covariance - # surface assumes values - # cutRegGrid: truncated grid specified by optns$outPercent for the cov - # functions - obsGrid = sort(unique( c(unlist(Lt)))); - regGrid = seq(min(obsGrid), max(obsGrid),length.out = optns$nRegGrid); - outPercent <- optns$outPercent - buff <- .Machine$double.eps * max(abs(obsGrid)) * 10 - rangeGrid <- range(regGrid) - minGrid <- rangeGrid[1] - maxGrid <- rangeGrid[2] - cutRegGrid <- regGrid[regGrid > minGrid + diff(rangeGrid) * outPercent[1] - - buff & - regGrid < minGrid + diff(rangeGrid) * outPercent[2] + - buff] - - ymat <- List2Mat(Ly, Lt) - - ## Mean function - # If the user provided a mean function use it - firsttsMu <- Sys.time() #First time-stamp for calculation of the mean - userMu <- optns$userMu - if ( is.list(userMu) && (length(userMu$mu) == length(userMu$t))){ - smcObj <- GetUserMeanCurve(optns, obsGrid, regGrid, buff) - smcObj$muDense = ConvertSupport(obsGrid, regGrid, mu = smcObj$mu) - } else if (optns$methodMuCovEst == 'smooth') { # smooth mean - smcObj = GetSmoothedMeanCurve(Ly, Lt, obsGrid, regGrid, optns) - } else if (optns$methodMuCovEst == 'cross-sectional') { # cross-sectional mean - smcObj = GetMeanDense(ymat, obsGrid, optns) - } -# mu: the smoothed mean curve evaluated at times 'obsGrid' - mu <- smcObj$mu - lasttsMu <- Sys.time() - - - firsttsCov <- Sys.time() #First time-stamp for calculation of the covariance -## Covariance function and sigma2 - if (!is.null(optns$userCov) && optns$methodMuCovEst != 'smooth') { - scsObj <- GetUserCov(optns, obsGrid, cutRegGrid, buff, ymat) - } else if (optns$methodMuCovEst == 'smooth') { -# smooth cov and/or sigma2 - scsObj = GetSmoothedCovarSurface(Ly, Lt, mu, obsGrid, regGrid, optns, - optns$useBinnedCov) - } else if (optns$methodMuCovEst == 'cross-sectional') { - scsObj = GetCovDense(ymat, mu, optns) - if (length(obsGrid) != length(cutRegGrid) || !all.equal(obsGrid, cutRegGrid)) { - scsObj$smoothCov = ConvertSupport(obsGrid, cutRegGrid, Cov = - scsObj$smoothCov) - } - scsObj$outGrid <- cutRegGrid - } - sigma2 <- scsObj[['sigma2']] - lasttsCov <- Sys.time() - firsttsPACE <- Sys.time() #First time-stamp for calculation of PACE - # workGrid: possibly truncated version of the regGrid - workGrid <- scsObj$outGrid - - - # convert mu to truncated workGrid - muWork <- ConvertSupport(obsGrid, toGrid = workGrid, mu=smcObj$mu) - - # Get the results for the eigen-analysis - eigObj = GetEigenAnalysisResults(smoothCov = scsObj$smoothCov, workGrid, optns, muWork = muWork) - - # Truncated obsGrid, and observations. Empty observation due to truncation has length 0. - truncObsGrid <- obsGrid - if (!all(abs(optns$outPercent - c(0, 1)) < .Machine$double.eps * 2)) { - truncObsGrid <- truncObsGrid[truncObsGrid >= min(workGrid) - buff & - truncObsGrid <= max(workGrid) + buff] - tmp <- TruncateObs(Ly, Lt, truncObsGrid) - Ly <- tmp$Ly - Lt <- tmp$Lt - } - - # convert phi and fittedCov to obsGrid. - muObs <- ConvertSupport(obsGrid, truncObsGrid, mu=mu) - phiObs <- ConvertSupport(workGrid, truncObsGrid, phi=eigObj$phi) - if (optns$methodXi == 'CE') { - CovObs <- ConvertSupport(workGrid, truncObsGrid, Cov=eigObj$fittedCov) - } - - # Get scores - if (optns$methodXi == 'CE') { - if (optns$rho != 'no') { - if( is.null(optns$userRho) ){ - if( length(Ly) > 2048 ){ - randIndx <- sample( length(Ly), 2048) - rho <- GetRho(Ly[randIndx], Lt[randIndx], optns, muObs, truncObsGrid, CovObs, eigObj$lambda, phiObs, sigma2) - } else { - rho <- GetRho(Ly, Lt, optns, muObs, truncObsGrid, CovObs, eigObj$lambda, phiObs, sigma2) - } - } else { - rho = optns$userRho; - } - sigma2 <- rho - } - scoresObj <- GetCEScores(Ly, Lt, optns, muObs, truncObsGrid, CovObs, eigObj$lambda, phiObs, sigma2) - } else if (optns$methodXi == 'IN') { - ymat = List2Mat(Ly,Lt) - scoresObj <- GetINScores(ymat, Lt, optns, muObs, eigObj$lambda, phiObs, sigma2) - } - - if (optns$fitEigenValues) { - fitLambda <- FitEigenValues(scsObj$rcov, workGrid, eigObj$phi, optns$maxK) - } else { - fitLambda <- NULL - } - - lasttsPACE <- Sys.time() - # Make the return object by MakeResultFPCA - ret <- MakeResultFPCA(optns, smcObj, muObs, scsObj, eigObj, - inputData = inputData, - scoresObj, truncObsGrid, workGrid, - rho = if (optns$rho != 'no') rho else NULL, - fitLambda=fitLambda, - timestamps = c(lasttsMu, lasttsCov, lasttsPACE, firsttsFPCA, firsttsMu, firsttsCov, firsttsPACE) ) - - # Plot the results - if(optns$plot){ - plot.FPCA(ret) - } - - return(ret); -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCAder.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCAder.R deleted file mode 100644 index 11d71682..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCAder.R +++ /dev/null @@ -1,276 +0,0 @@ -#' Take derivative of an FPCA object -#' -#' @param fpcaObj A object of class FPCA returned by the function FPCA(). -#' @param derOptns A list of options to control the derivation parameters specified by \code{list(name=value)}. See `Details'. (default = NULL) -#' -#' @details Available derivation control options are -#' \describe{ -#' \item{method}{The method used for obtaining the derivatives (default: 'FPC'). 'DPC': derivatives principal component, with G^(1,1) estimated by first kernel local smoothing G^(1,0), and then apply a 1D smoother on the second direction; 'FPC': functional principal component, based on smoothing the eigenfunctions; 'FPC1': functional principal component, based on smoothing G^(1,0). May produce better estimate than 'FPC' but is slower.} -#' \item{p}{The order of the derivatives returned (default: 1, max: 2). } -#' \item{bw}{Bandwidth for the 1D and the 2D smoothers (default: p * 0.1 * S).} -#' \item{kernelType}{Smoothing kernel choice; same available types are FPCA(). default('epan')} -#' } -#' -#' @references -#' \cite{Dai, Xiongtao, Hans-Georg Mueller, and Wenwen Tao. "Derivative Principal Component Analysis for Representing the Time Dynamics of Longitudinal and Functional Data." Submitted (DPC)} -#' \cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (FPC)} -#' @examples -#' -#' bw <- 0.2 -#' kern <- 'epan' -#' set.seed(1) -#' n <- 100 -#' M <- 40 -#' pts <- seq(0, 1, length.out=M) -#' lambdaTrue <- c(1, 0.8, 0.1)^2 -#' sigma2 <- 0.1 -#' -#' samp2 <- MakeGPFunctionalData(n, M, pts, K=length(lambdaTrue), -#' lambda=lambdaTrue, sigma=sqrt(sigma2), basisType='legendre01') -#' samp2 <- c(samp2, MakeFPCAInputs(tVec=pts, yVec=samp2$Yn)) -#' fpcaObj <- FPCA(samp2$Ly, samp2$Lt, list(methodMuCovEst='smooth', -#' userBwCov=bw, userBwMu=bw, kernel=kern, error=TRUE)) -#' CreatePathPlot(fpcaObj, showObs=FALSE) -#' -#' FPCoptn <- list(bw=bw, kernelType=kern, method='FPC') -#' DPCoptn <- list(bw=bw, kernelType=kern, method='DPC') -#' FPC <- FPCAder(fpcaObj, FPCoptn) -#' DPC <- FPCAder(fpcaObj, DPCoptn) -#' -#' CreatePathPlot(FPC, ylim=c(-5, 10)) -#' CreatePathPlot(DPC, ylim=c(-5, 10)) -#' -#' # Get the true derivatives -#' phi <- CreateBasis(K=3, type='legendre01', pts=pts) -#' basisDerMat <- apply(phi, 2, function(x) -#' ConvertSupport(seq(0, 1, length.out=M - 1), pts, diff(x) * (M - 1))) -#' trueDer <- matrix(1, n, M, byrow=TRUE) + tcrossprod(samp2$xi, basisDerMat) -#' matplot(t(trueDer), type='l', ylim=c(-5, 10)) -#' -#' # DPC is slightly better in terms of RMSE -#' mean((fitted(FPC) - trueDer)^2) -#' mean((fitted(DPC) - trueDer)^2) -#' -#' @export - - -FPCAder <- function (fpcaObj, derOptns = list(p=1)) { - - derOptns <- SetDerOptions(fpcaObj,derOptns = derOptns) - p <- derOptns[['p']] - method <- derOptns[['method']] - bwMu <- derOptns[['bwMu']] - bwCov <- derOptns[['bwCov']] - kernelType <- derOptns[['kernelType']] - # K <- derOptns[['K']] - - # TODO: truncated workGrid/obsGrid may not work - obsGrid <- fpcaObj$obsGrid - workGrid <- fpcaObj$workGrid - nWorkGrid <- length(workGrid) - gridSize <- workGrid[2] - workGrid[1] - Lt <- fpcaObj[['inputData']][['Lt']] - Ly <- fpcaObj[['inputData']][['Ly']] - phi <- fpcaObj[['phi']] - fittedCov <- fpcaObj[['fittedCov']] - lambda <- fpcaObj[['lambda']] - - if (!class(fpcaObj) %in% 'FPCA'){ - stop("FPCAder() requires an FPCA class object as basic input") - } - - if( ! (p %in% c(1, 2))){ - stop("The derivative order p should be in {1, 2}!") - } - - if (p == 2 && (substr(method, 1, 3) == 'DPC' || method == 'FPC1')) { - stop('Only \'FPC\' supports p = 2') - } - - if (p == 2) { - warning('Second derivative is experimental only.') - } - - if (substr(method, 1, 3) == 'DPC') { - # if (!derOptns$useTrue) { - # Get mu'(t) - xin <- unlist(Lt) - yin <- unlist(Ly) - ord <- order(xin) - xin <- xin[ord] - yin <- yin[ord] - muDense <- Lwls1D(bwMu, kernelType, xin=xin, yin=yin, xout=obsGrid) - mu1 <- Lwls1D(bwMu, kernelType, xin=xin, yin=yin, xout=workGrid, npoly=p + 1, nder=p) - - # Get raw covariance - rcov <- BinRawCov(GetRawCov(Ly, Lt, obsGrid, muDense, 'Sparse', TRUE)) - - # Use 1D smoothing on G(s, t) for G^(1,0)(s, t) - # if (is.null(derOptns[['G10_1D']]) || !derOptns[['G10_1D']]) { - # cov10 <- Lwls2DDeriv(bwCov, kernelType, xin=rcov$tPairs, yin=rcov$meanVals, - # win=rcov$count, xout1=workGrid, xout2=workGrid, - # npoly=1L, nder1=1L, nder2=0L) - # } else { - tmpGrid <- seq(min(workGrid), max(workGrid), length=nWorkGrid - 1) - cov10 <- ConvertSupport(tmpGrid, workGrid, apply(fpcaObj[['smoothedCov']], 2, diff) / gridSize) - # } - - if (method == 'DPC') { - # 1D smooth cov10 to get cov11 - cov11 <- apply(cov10, 1, function(x) - Lwls1D(bwCov, kernelType, xin=workGrid, yin=x, xout=workGrid, npoly=2, - nder=1) - ) - } - cov11 <- (cov11 + t(cov11)) / 2 - # } else { # use true values - # muDense <- rep(0, length(obsGrid)) - # mu1 <- rep(0, nWorkGrid) - # cov10 <- ConvertSupport(obsGrid, workGrid, Cov=cov10True, isCrossCov=TRUE) - # cov11 <- ConvertSupport(obsGrid, workGrid, Cov=cov11True) - # cov10T <- ConvertSupport(obsGrid, workGrid, Cov=cov10True, isCrossCov=TRUE) - # cov11T <- ConvertSupport(obsGrid, workGrid, Cov=cov11True) - # rgl::persp3d(workGrid, workGrid, cov10, xlab='s', ylab='t') - # rgl::persp3d(workGrid, workGrid, cov10T, xlab='s', ylab='t') - # rgl::persp3d(workGrid, workGrid, cov11) - # rgl::persp3d(workGrid, workGrid, cov11T, xlab='s', ylab='t') - # } - # browser() - eig <- eigen(cov11) - positiveInd <- eig[['values']] >= 0 - if (sum(positiveInd) == 0) { - stop('Derivative surface is negative definite') - } - lambda1 <- eig[['values']][positiveInd] * gridSize - FVE1 <- cumsum(lambda1) / sum(lambda1) - # TODO: select number of derivative components - FVEthreshold1 <- 0.9999 - K <- min(which(FVE1 >= FVEthreshold1)) - lambda1 <- lambda1[seq_len(K)] - phi1 <- apply(eig[['vectors']][, positiveInd, drop=FALSE][, seq_len(K), drop=FALSE], 2, - function(tmp) - tmp / sqrt(trapzRcpp(as.numeric(workGrid), - as.numeric(tmp^2)))) - # phi1 <- eig[['vectors']][, seq_len(ncol(phi))] - - # fittedCov1 <- phi1 %*% diag(lambda1, K) %*% t(phi1) - - # rgl::persp3d(workGrid, workGrid, fittedCov1) - # rgl::persp3d(workGrid, workGrid, cov11) - # rgl::persp3d(workGrid, workGrid, cov10) - - # convert phi and fittedCov to obsGrid. - zeta <- crossprod(cov10, phi1) * gridSize - zetaObs <- ConvertSupport(workGrid, obsGrid, phi=zeta) - CovObs <- ConvertSupport(workGrid, obsGrid, Cov=fittedCov) - phiObs <- ConvertSupport(workGrid, obsGrid, phi=phi) - - # conditional expectation - sigma2 <- ifelse(is.null(fpcaObj[['rho']]), fpcaObj[['sigma2']], - max(fpcaObj[['sigma2']], fpcaObj[['rho']])) - - # browser() - - # For estimating the xiVar1, Estimate lambdaDer from the difference - # quotient surface constructed from smoothedCov, and xiVar1 by truncating - # the negative eigenvalues - # noSmooth <- !is.null(derOptns[['lambdaDerNoSmooth']]) && - # derOptns[['lambdaDerNoSmooth']] - # if (noSmooth) { - d <- function(x) diff(x) / gridSize - cov11diff <- apply(apply(fpcaObj[['smoothedCov']], 2, d), 1, d) - cov11diff <- (cov11diff + t(cov11diff)) / 2 - lambdaDerNoSmooth <- eigen(cov11diff)[['values']] * gridSize - lambdaDerNoSmooth <- lambdaDerNoSmooth[seq_len(K)] - # } else { - # lambdaDerNoSmooth <- lambda1 - # } - - xi1 <- GetCEScores(Ly, Lt, list(verbose=FALSE), - muDense, obsGrid, CovObs, - lambda=lambdaDerNoSmooth, - phi=zetaObs %*% diag(1 / lambdaDerNoSmooth , - length(lambdaDerNoSmooth )), - sigma2=sigma2) - xiEst1 <- t(do.call(cbind, xi1['xiEst', ])) - # if (is.null(derOptns[['truncxiVar1']]) || derOptns[['truncxiVar1']]) { - # # truncate negative eigenvalues because cov10 is smoothed--the joint - # # covariance of xi1 and Yi is not garanteed to be PD. Default to truncate - xiVar1 <- lapply(xi1['xiVar', ], function(x) { - eig <- eigen(x) - keep <- eig[['values']] > 0 - if (sum(keep) == 0) { - # warning('xiVarDer is unrealiable due to degeneracy') - return(matrix(0, nrow(x), ncol(x))) - } else { - return(eig[['vectors']][, keep, drop=FALSE] %*% - diag(eig[['values']][keep], sum(keep)) %*% - t(eig[['vectors']][, keep, drop=FALSE])) - }}) - # } else { - # xiVar1 <- xi1['xiVar', ] - # } - - # xi <- GetCEScores(Ly, Lt, list(verbose=FALSE), - # muDense, obsGrid, CovObs, - # lambda=lambda, phiObs, - # ifelse(is.null(fpcaObj[['rho']]), - # fpcaObj[['sigma2']], fpcaObj[['rho']])) - # xiEst <- t(simplify2array(xi['xiEst', ], higher=FALSE)) - - ret <- append(fpcaObj, list(muDer=mu1, phiDer=phi1, - xiDer=xiEst1, xiVarDer=xiVar1, - lambdaDer=lambda1, - zeta=zeta, - derOptns=derOptns)) - # if (noSmooth) { - # ret <- append(ret, list(lambdaDerNoSmooth = lambdaDerNoSmooth)) - # } - } else if (method == 'FPC') { - # smooth phi to get phi1 - muDer <- Lwls1D(bwMu, kernelType, rep(1, nWorkGrid), workGrid, fpcaObj$mu, workGrid, p+0, nder= p) - phiDer <- apply(phi, 2, function(phij) Lwls1D(bwCov, kernelType, rep(1, nWorkGrid), workGrid, phij, workGrid, p+0, nder= p)) - - # muDer2<- fpcaObj$mu - # phiDer2 <- fpcaObj$phi - # for (i in seq_len(p)) { - # # derivative - # muDer2 <- getDerivative(y = muDer2, t = obsGrid, ord=p) - # phiDer2 <- apply(phiDer2, 2, getDerivative, t= workGrid, ord=p) - # # smooth - # muDer2 <- getSmoothCurve(t=obsGrid, - # ft= muDer2, - # GCV = TRUE, - # kernelType = kernelType, mult=2) - # phiDer2 <- apply(phiDer2, 2, function(x) - # getSmoothCurve(t=workGrid, ft=x, GCV =TRUE, kernelType = kernelType, mult=1)) - # } - - ret <- append(fpcaObj, list(muDer = muDer, phiDer = phiDer, derOptns = derOptns)) - } else if (method == 'FPC1') { - # Smooth out cov10 first and then estimate phi1 - xin <- unlist(Lt) - yin <- unlist(Ly) - ord <- order(xin) - xin <- xin[ord] - yin <- yin[ord] - muDense <- Lwls1D(bwMu, kernelType, xin=xin, yin=yin, xout=obsGrid) - muDer <- Lwls1D(bwMu, kernelType, xin=xin, yin=yin, xout=workGrid, npoly=p + 1, nder=p) - - # Get raw covariance - rcov <- BinRawCov(GetRawCov(Ly, Lt, obsGrid, muDense, 'Sparse', TRUE)) - - if (p != 1) { - stop("'FPC1' is available only for p=1") - } - cov10 <- Lwls2DDeriv(bwCov, kernelType, xin=rcov$tPairs, yin=rcov$meanVals, - win=rcov$count, xout1=workGrid, xout2=workGrid, - npoly=1L, nder1=1L, nder2=0L) - phiDer <- cov10 %*% phi %*% diag(1 / lambda[seq_len(ncol(phi))], ncol(phi)) * gridSize - - ret <- append(fpcaObj, list(muDer = muDer, phiDer = phiDer, derOptns = derOptns)) - } - - class(ret) <- c('FPCAder', class(fpcaObj)) - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCReg.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCReg.R deleted file mode 100644 index 0300fee0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCReg.R +++ /dev/null @@ -1,637 +0,0 @@ -#' Function for performing functonal linear regression where the covariates are functions X1(t1),X2(t2),.. and the response is a function Y(t_y). -#' -#' @param vars A list of input functional covariates with name of "X1", "X2",.. and a functional response with name "Y". Each field should have two fields: 'Lt', a list (sparse) or a matrix (Dense) specifying the time of observations, and 'Ly', a list (Sparse) or a matrix (Dense) of the observations. -#' @param varsOptns A list of options named by "X1", "X2",..."Y". Each filed specify the paramaters that control the corresponding variables. (default: see details of FPCA()) -#' @param isNewSub A 1*n vector of 0s or 1s, where n is the total count of subjects. 0 denotes the corresponding subject is only used for estimation and 1 denotes the corresponding subject is only used for prediction. (default: 0's) -#' @param method The method used for selecting the number of principal components of functional predictors X's used in functional regression , including 'AIC', 'BIC' and 'FVE'. (default: "AIC") -#' @param FVEthreshold A scalar specifying the proportion used for 'FVE'. (default: 0.99) -#' @param alpha A scalar specifying the level of the confidence bands. (default: 0.05) -#' @param Kx The number of principal components of functional predictors X's used in functional regression. -#' -#' @return A list containing the following fields: -#' \item{estiBeta}{A list with fields of estimated beta_XiY(s,t) defiend on [range(Xi),range(Y)]} -#' \item{predictY}{A list containing fitted or predicted (when is NewSub is true) functions for E(Y|X).} -#' \item{cbandY}{A list with confidence bands of E(Y|X).} -#' \item{Q}{Quasi R-square} -#' \item{r2}{Functional R-square.} -#' \item{varsMean}{A list with mean function of covariates and response.} -#' \item{Kx}{The number of principal components of functional predictors X's used in functional regression.} -#' -#' @references -#' \cite{Yao, F., Mueller, H.G., Wang, J.L. "Functional Linear Regression Analysis for Longitudinal Data." Annals of Statistics 33, (2005): 2873-2903.} -#' -#' @export -#' @examples -#' set.seed(1000) -#' #Model: E(Y(t)|X) = int(beta(s,t)*X(s)) -#' n <- 200 #number of subjects -#' ngrids <- 51 #number of grids in [0,1] for X(s) -#' ngridt <- 101 #number of grids in [0,1] for Y(t) -#' grids <- seq(0, 1, length.out=ngrids) #regular grids in [0,1] for X(s) -#' gridt <- seq(0, 1, length.out=ngridt) #regular grids in [0,1] for Y(t) -#' -#' #generate X -#' #{1, sqrt(2)*sin(2*pi*s), sqrt(2)*cos(2*pi*t)} are used to generate X. -#' eigenFun <- list( function(s){1 + 0 * s}, -#' function(s){sqrt(2) * sin(2*pi*s)}, -#' function(s){sqrt(2) * cos(2*pi*s)}) -#' -#' sig <- matrix(c(1.5, 0.0, 0.0, 0.9, -.5, 0.1, -#' 0.0, 1.2, 0.0, -.3, 0.8, 0.4, -#' 0.0, 0.0, 1.0, 0.4, -.3, 0.7, -#' 0.9, -.3, 0.4, 2.0, 0.0, 0.0, -#' -.5, 0.8, -.3, 0.0, 1.5, 0.0, -#' 0.1, 0.4, 0.7, 0.0, 0.0, 1.0), -#' nrow=6,ncol=6) -#' -#' scoreX <- MASS::mvrnorm(n,mu=rep(0,6),Sigma=sig) -#' scoreX1 <- scoreX[,1:3] -#' scoreX2 <- scoreX[,4:6] -#' -#' basisX1 <- sapply(eigenFun,function(x){x(grids)}) -#' latentX1 <- scoreX1 %*% t(basisX1) -#' measErrX1 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -#' denseX1 <- latentX1 + measErrX1 -#' -#' basisX2 <- sapply(eigenFun,function(x){x(grids)}) -#' latentX2 <- scoreX2 %*% t(basisX2) -#' measErrX2 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -#' denseX2 <- latentX2 + measErrX2 -#' -#' #generate Y -#' #beta(s, t) <- sin(2 * pi * s)*cos(2 * pi * t) -#' betaEigen1 <- function(t){f <- function(s){ -#' sin(2*pi*s) * cos(2*pi*t) * (1+0*s)}; return(f)} -#' betaEigen2 <- function(t){f <- function(s){ -#' sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*sin(2*pi*s))}; return(f)} -#' betaEigen3 <- function(t){f <- function(s){ -#' sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*cos(2*pi*s))}; return(f)} -#' betaEigen <- list(betaEigen1, betaEigen2, betaEigen3) -#' basisY <- array(0,c(ngridt, 3)) -#' for(i in 1:3){ -#' intbetaEigen <- function (t) {integrate(betaEigen[[i]](t), lower = 0, upper = 1)$value} -#' basisY[, i] <- sapply(1:ngridt, function(x){intbetaEigen(gridt[x])}) -#' } -#' latentY <- scoreX1 %*% t(basisY) - scoreX2 %*% t(basisY) -#' measErrY <- sqrt(0.01) * matrix(rnorm(n*ngridt), n, ngridt) #0.01 is sigma^2 -#' denseY <- latentY + measErrY -#' -#' #======Dense data=============================================== -#' timeX <- t(matrix(rep(grids, n),length(grids), n)) -#' timeY <- t(matrix(rep(gridt, n),length(gridt), n)) -#' denseVars <- list(X1 = list(Ly = denseX1, Lt = timeX), -#' X2 = list(Ly = denseX2, Lt = timeX), -#' Y=list(Ly = denseY,Lt = timeY)) -#' -#' resuDense <- FPCReg(denseVars, method="FVE") -#' -#' par(mfrow=c(1,2)) -#' estiBetaX1Y_Dense <- resuDense$estiBeta$betaX1Y -#' args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Dense(s, t)', -#' lighting = FALSE, phi = 45, theta = 45) -#' args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX1Y_Dense[1:ngrids, 1:ngridt]) -#' do.call(plot3D::persp3D,c(args2, args1)) -#' -#' estiBetaX2Y_Dense <- resuDense$estiBeta$betaX2Y -#' args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Dense(s, t)', -#' lighting = FALSE, phi = 45, theta = 45) -#' args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX2Y_Dense[1:ngrids, 1:ngridt]) -#' # do.call(plot3D::persp3D,c(args2, args1)) -#' -#' #======Sparse data=============================================== -#' \dontrun{ -#' sparsity = 5:8 -#' sparseX1 <- Sparsify(denseX1, grids, sparsity) -#' sparseX2 <- Sparsify(denseX2, grids, sparsity) -#' sparseY <- Sparsify(denseY, gridt, sparsity) -#' sparseVars <- list(X1 = sparseX1, X2 = sparseX2, Y = sparseY) -#' -#' resuSparse <- FPCReg(sparseVars, method="FVE", FVEthreshold=0.98) -#' #or resuSparse <- FPCReg(vars = sparseVars, -#' # varsOptns = list(X1=list(userBwCov = 0.03))) -#' -#' par(mfrow=c(1,2)) -#' estiBetaX1Y_Sparse = resuSparse$estiBeta$betaX1Y -#' args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Sparse(s,t)', -#' lighting = FALSE, phi = 45,theta = 45) -#' args2 = list(x = 1:51, y = 1:51, z = estiBetaX1Y_Sparse[1:51, 1:51]) -#' do.call(plot3D::persp3D, c(args2, args1)) -#' -#' estiBetaX2Y_Sparse = resuSparse$estiBeta$betaX2Y -#' args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Sparse(s,t)', -#' lighting = FALSE, phi = 45,theta = 45) -#' args2 = list(x = 1:51, y = 1:51, z = estiBetaX2Y_Sparse[1:51, 1:51]) -#' do.call(plot3D::persp3D, c(args2, args1)) -#' -#' par(mfrow=c(2,3)) -#' for(i in 1:6){ -#' plot(sparseVars[['Y']]$Lt[[i]], sparseVars[['Y']]$Ly[[i]], -#' xlab = 'time', ylab = 'observations', ylim = c(-1.5, 1.5)) -#' lines(seq(0, 1, length.out = 51), resuSparse$predictY[[i]]) -#' lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,2], lty = 2) -#' lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,1], lty = 2) -#' } -#' } - -FPCReg <- function(vars, varsOptns = NULL, isNewSub = NULL, method = 'AIC', FVEthreshold = 0.99, alpha = 0.05, Kx = NULL){ - #===============data checking and manipulation=============== - p <- length(vars) - 1 - if (p == 0) stop('Too few covariates.') - if (!'Y' %in% names(vars)|"" %in% names(vars)) stop('Missing name of the response which should be "Y".') - if (!'X1' %in% names(vars)|"" %in% names(vars)) stop('Missing name of preictors which should be "X1","X2",...') - if (anyDuplicated(names(vars)) > 0) stop('Duplicated Names.') - if ('Y' %in% names(vars)) {vars <- c(vars[names(vars) != 'Y'], vars['Y'])} - - #Set Lt in [0,1] for dense data without Lt. - for (i in 1:(p+1)) { - if (is.null(vars[[i]]$Lt) & is.matrix(vars[[i]]$Ly)) { - n1 <- dim(vars[[i]]$Ly)[1] - n2 <- dim(vars[[i]]$Ly)[2] - vars[[i]]$Lt <- t(matrix(rep(seq(0, 1, length.out = n2), n1), n2, n1)) - } - } - - #Dense==1 iff all covariates and response are Matrix - if (sum(sapply(vars, function(x){is.matrix(x$Ly)}) * sapply(vars, function(x){is.matrix(x$Lt)}))) {Dense <- 1} else {Dense <- 0} - - #set options - #varsOptnsDef is the default - #specific default setting for optns now and output grids for sparse is fixed at 51 now due to the cross-cov. - if (Dense == 1) {optns <- list(dataType = "Dense" ,error = 1, kernel='gauss', nRegGrid=51, useBinnedData='OFF')} else {optns <- list(dataType = "Sparse", error = TRUE, kernel = 'gauss' ,nRegGrid = 51, useBinnedData = 'OFF')} - for (i in 1:(p+1)) { - if (i == 1) {varsOptnsDef <- list(optns)} else {varsOptnsDef <- c(varsOptnsDef, list(optns))} - } - names(varsOptnsDef) <- names(vars) - if (is.null(varsOptns)) {varsOptns <- varsOptnsDef} else if (!is.list(varsOptns)) {stop('wrong inpiut of varsOptns.')} - if (!sum(names(varsOptns) %in% names(vars)) == length(names(varsOptns))) stop('Check names of varsOptns which should be X1,X2..Y.') - for (i in 1:(p+1)) { - name1=names(varsOptns) - if (!names(vars)[i]%in%names(varsOptns)) {varsOptns <- c(varsOptns, list(optns)); names(varsOptns) = c(name1, names(vars)[i])} - if (is.null(varsOptns[names(vars)[i]]$dataType) & Dense == 0) {varsOptns[[names(vars)[i]]] <- c(varsOptns[[names(vars)[i]]], dataType = "Sparse") - }else if(is.null(varsOptns[names(vars)[i]]$dataType) & Dense==1){ - varsOptns[[names(vars)[i]]] <- c(varsOptns[[names(vars)[i]]], dataType = "Dense") - } - if (is.null(varsOptns[names(vars)[i]]$nRegGrid) & Dense == 0) {varsOptns[[names(vars)[i]]] <- c(varsOptns[[names(vars)[i]]], nRegGrid = 51)} - if (is.null(varsOptns[names(vars)[i]]$error)) {varsOptns[[names(vars)[i]]] <- c(varsOptns[[names(vars)[i]]], error = TRUE)} - if (Dense == 1) {varsOptns[[names(vars)[i]]]$nRegGrid <- dim(vars[[i]]$Ly)[2]} - } - varsOptns <- varsOptns[names(vars)] - - #nRegGrids determine the numbers of ouput grids - if (Dense == 0) {nRegGrids <- sapply(varsOptns, function(x){x$nRegGrid})} - - for ( i in 1:(p+1)) { - if (!'Ly' %in% names(vars[[i]])) stop('Insert the name "Ly" for the predictors and response to indicate time of data.') - if (!'Lt' %in% names(vars[[i]])) stop('Insert the name "Lt" for the predictors and response to indicate time of data.') - if (! length(names(vars[[i]])) == 2) stop('Check data.') - } - - #list dense data for using HandleNumericsAndNAN and demeanFuc func. - for (i in 1:(p+1)) { - if (is.list(vars[[i]]$Lt) == 0) {vars[[i]]$Lt <- lapply(1:nrow(vars[[i]]$Lt), function(j) vars[[i]]$Lt[j, ])} - if (is.list(vars[[i]]$Ly) == 0) {vars[[i]]$Ly <- lapply(1:nrow(vars[[i]]$Ly), function(j) vars[[i]]$Ly[j, ])} - } - vars[sapply(vars, is.list)] <- lapply(vars[sapply(vars, is.list)], function(v) HandleNumericsAndNAN(v[['Ly']], v[['Lt']])) - - if (is.null(isNewSub)) {isNewSub <- rep(0, length(vars[[1]]$Lt))} - varsTrain <- vars - for (i in 1:(p+1)) { - varsTrain[[i]]$Lt <- vars[[i]]$Lt[which(isNewSub == 0)] - varsTrain[[i]]$Ly <- vars[[i]]$Ly[which(isNewSub == 0)] - } - - #===============population parameters=============== - demeanedRes <- demeanFuc(p, varsTrain, kern='gauss', varsOptns) #Centered predictors. Using gauss for demeanFuc, but may be relaxed. - varsTrain <- demeanedRes[['xList']] - muList <- demeanedRes[['muList']] - intLen <- array(0, p+1) #lengthes of time window - gridNum <- array(0, p+1) #number of grids for varss - regGrid <- list() - varsMean <- list() - for (i in 1:(p+1)) { - intLen[i] <- max(c(unlist(varsTrain[[i]]$Lt)))-min(c(unlist(varsTrain[[i]]$Lt))) - gridNum[i] <- if (Dense==1) {length(varsTrain[[i]]$Ly[[1]])} else {nRegGrids[i]} #sparse output grids is fixed to be 51 so far. - regGrid[[i]] <- seq(min(unlist(varsTrain[[i]]$Lt)), max(unlist(varsTrain[[i]]$Lt)), length.out=gridNum[i]) #time grids for output mean and beta. - varsMean[[i]] <- muList[[i]](regGrid[[i]]) - } - brkX <- c(0, cumsum(gridNum[1:p])) #break points for matrix products - dxMatrix <- dx(p, intLen[1:p], gridNum[1:p], brkX) #generate the inner product for multivariate predictors - - #matrilize the dense data. - if (Dense == 1) { - for (i in 1:(p+1)) { - varsTrain[[i]]$Lt <- do.call(rbind, varsTrain[[i]]$Lt) - varsTrain[[i]]$Ly <- do.call(rbind, varsTrain[[i]]$Ly) - } - } - - varsCov <- if (Dense == 1) {denseCov(p, varsTrain, brkX, dxMatrix, gridNum, varsOptns)} else {sparseCov(p, varsTrain, brkX, varsOptns, vars, muList, gridNum, dxMatrix, regGrid)} - xCov <- varsCov[['xCov']] - croCov <- varsCov[['croCov']] - yCov <- varsCov[['yCov']] - varsSigma2 <- varsCov[['varsSigma2']] - numposiEigen <- varsCov[['numposiEigen']] #number of positive eigenvalues - eigenValue <- varsCov[['eigenValue']] - eigenFun <- varsCov[['eigenFun']] - - #estimate score - if (Dense == 1) { - diagSigma2 <- varsCov[['diagSigma2']] - for (i in 1:p) { - if (i == 1) {varsMatrix <- t(sapply(vars[[1]]$Ly, c))}else{varsMatrix <- cbind(varsMatrix, t(sapply(vars[[i]]$Ly, c)))} - if (i == 1) {muListX <- muList[[1]](regGrid[[i]])}else{muListX <- c(muListX, muList[[i]](regGrid[[i]]))} - } - varsMatrixDemean <- apply(varsMatrix,1, '-', muListX) - varsMatrixDemean <- t(varsMatrixDemean) - denseScore <- innerProd(varsMatrixDemean, eigenFun, brkX, intLen[1:p]) #for dense data, he score is directly estimated by integral(x,ei) - } else { - varsDemean <- varsCov[['varsDemean']] - subCov <- varsCov[['subCov']] - subEigenFun <- varsCov[['subEigenFun']] - subMeanX <- varsCov[['subMeanX']] - diagSigma2 <- varsCov[['diagSigma2']] - numposiEigen <- varsCov[['numposiEigen']] - #for sparse data, empute score is estimated in sparseCov() - invSigma <- lapply(subCov, function(x){as.matrix(solve(x))}) - invSigmaY <- mapply(function(X, Y){X %*% Y}, X=invSigma, Y=varsDemean, SIMPLIFY=FALSE) - emputeScore <- mapply(function(X, Y){diag(eigenValue[1:numposiEigen]) %*% X %*% Y}, X = subEigenFun, Y = invSigmaY, SIMPLIFY = FALSE) - } - - #if (Dense == 0) {Kx <- sparseComp(emputeScore, varsDemean, method, FVEthreshold, eigenValue, numposiEigen, isNewSub, diagSigma2, subEigenFun)} else {Kx <- denseComp(method, varsMatrixDemean, denseScore, eigenFun, eigenValue, isNewSub, diagSigma2, numposiEigen, FVEthreshold)} - if(!is.null(Kx)==1) {Kx <- Kx} else if (Dense == 0) {Kx <- sparseComp(emputeScore, varsDemean, method, FVEthreshold, eigenValue, numposiEigen, isNewSub, diagSigma2, subEigenFun)} else {Kx <- denseComp(method, varsMatrixDemean, denseScore, eigenFun, eigenValue, isNewSub, diagSigma2, numposiEigen, FVEthreshold)} - - - #prodedure of FPCA Regression - pcaBeta <- array(0, c(dim(croCov))) - for (i in 1:Kx) { - pcaBeta <- pcaBeta + (1/eigenValue[i]) * eigenFun[, i] %*% innerProd(t(eigenFun[, i]), croCov, brkX, intLen) - } - estiBeta <- list() - #divide beta for output - for (i in 1:p) { - estiBeta[[i]] <- pcaBeta[(brkX[i]+1):brkX[i+1],] - } - names(estiBeta) <- lapply(names(vars)[1:p], function(x){paste("beta", x, "Y", sep = '')}) - - intBetaPhi <- innerProd(t(pcaBeta), as.matrix(eigenFun[, 1:Kx]), brkX, intLen) - diagYcov <- diag(yCov) ; diagYcov[which(diagYcov<0)] <- min(diagYcov[diagYcov>0]) - varY <- innerProd(t(diagYcov), as.matrix(rep(1, gridNum[p+1])), c(0,gridNum[p+1]), intLen[p+1]) - varYX <- sum(innerProd(t(intBetaPhi^2), as.matrix(rep(1, gridNum[p+1])),c(0, gridNum[p+1]), intLen[p+1]) * eigenValue[1:Kx]) - - Q <- min(varYX / varY, 1) #quasi R^2? - - r2 <- apply(intBetaPhi^2 %*% diag(eigenValue[1:Kx]), 1, sum) / diagYcov #functional R^2? - r2 <- sapply(r2, function(x){min(x, 1)}) - #R2=innerProd(t(r2),as.matrix(rep(1,gridNum[p+1])),c(0,gridNum[p+1]),intLen[p+1])/intLen[p+1] - - #===============the predictions=============== - if (Dense == 1) { - meanY <- varsMean[[p+1]] - names(varsMean) <- names(vars) - predictY <- meanY + intBetaPhi%*%t(denseScore[, 1:Kx]) - predictY <- t(predictY) - diageValue <- diag(eigenValue[1:Kx]) - for (i in 1:p) { - if (i == 1) { - diagSigma2 <- c(rep(varsSigma2[1], gridNum[1])) - }else{ - diagSigma2 = c(diagSigma2, rep(varsSigma2[i],gridNum[i])) - } - } - SigmaY <- xCov + diag(diagSigma2) #This part may be considered to use raw cov - Omega <- diageValue - diageValue %*% t(eigenFun[, 1:Kx]) %*% solve(SigmaY) %*% eigenFun[, 1:Kx] %*% t(diageValue) - pwVar <- diag(intBetaPhi %*% Omega %*% t(intBetaPhi)) - upCI <- t(apply(predictY, 1, '+', stats::qnorm(1-alpha / 2) * sqrt(pwVar))) - lwCI <- t(apply(predictY, 1, '-', stats::qnorm(1-alpha / 2) * sqrt(pwVar))) - cbandY <- list(upCI = upCI, lwCI = lwCI) - } else { - score <- lapply(emputeScore, function(x){x[1:Kx]}) - imputeY <- lapply(score, function(x){intBetaPhi %*% x}) - meanY <- varsMean[[p+1]] - names(varsMean) <- names(vars) - predmean <- innerProd(t(pcaBeta), as.matrix(subMeanX), brkX, intLen[1:p]) - predictY <- lapply(imputeY, function(x){x + meanY}) - diageValue <- diag(eigenValue[1:Kx]) - H <- lapply(subEigenFun, function(x){diag(eigenValue[1:Kx]) %*% x[1:Kx, ]}) - Omega <- mapply(function(X, Y){diageValue - X %*% Y %*% t(X)}, X=H, Y=invSigma, SIMPLIFY = FALSE) - pwVar <- lapply(Omega, function(x){diag(intBetaPhi %*% x %*% t(intBetaPhi))}) - upCI <- mapply(function(X, Y){X + stats::qnorm(1 - alpha / 2)*sqrt(Y)}, X = predictY, Y = pwVar) - lwCI <- mapply(function(X, Y){X - stats::qnorm(1 - alpha / 2)*sqrt(Y)}, X = predictY, Y = pwVar) - cbandY <- lapply(1:dim(lwCI)[2], function(x){CI = cbind(lwCI[, x], upCI[, x]) ; colnames(CI) = c('lwCI', 'upCI') ; return(CI)}) - } - - res <- list(estiBeta = estiBeta, predictY = predictY, cbandY = cbandY, Q = Q, r2 = r2, Kx = Kx, varsMean = varsMean) - res -} - -demeanFuc <- function(p, varsTrain, kern, varsOptns) { - for (i in 1:(p+1)) { - userBwMuXi <- SetOptions(varsTrain[[i]]$Ly, varsTrain[[i]]$Lt, varsOptns[[i]])$userBwMu - varsTrain[[i]] <- list(Lt = varsTrain[[i]]$Lt, Ly = varsTrain[[i]]$Ly, userBwMu = userBwMuXi) - } - tmp <- lapply(varsTrain, function(x) { - Tin <- sort(unique(unlist(x[['Lt']]))) - xmu <- GetSmoothedMeanCurve(x[['Ly']], x[['Lt']], Tin, Tin[1], list(userBwMu = x[['userBwMu']], kernel=kern))[['mu']] - muFun<-approxfun(Tin, xmu) - x[['Ly']] <- lapply(1:length(x[['Ly']]), function(i) x[['Ly']][[i]] - muFun(x[['Lt']][[i]])) - xmu <- muFun - list(x = x, mu = xmu) - }) - xList <- lapply(tmp, `[[`, 'x') - muList <- lapply(tmp, `[[`, 'mu') - list(xList = xList, muList = muList) -} - -innerProd <- function(A, B, gridbrk, intlen){ - brkX <- gridbrk - oupmat <- array(0, c(dim(A)[1], dim(B)[2])) - for (i in 1:(length(brkX)-1)) { - a1 <- brkX[i] + 1 - a2 <- brkX[i + 1] - A[,a1] <- A[, a1] / 2 ; A[, a2] = A[, a2] / 2 - oupmat <- oupmat + A[, a1:a2] %*% B[a1:a2, ] * intlen[i] / (a2 - a1) - } - return(oupmat) -} - -dx <- function(p, intLenX, gridNumX, brkX){ - for(i in 1:p){ - if (i == 1) {dxMatrix <- diag(intLenX[1] / (gridNumX[1] - 1), gridNumX[1])}else{dxMatrix <- cdiag(dxMatrix, diag(intLenX[i] / (gridNumX[i]-1), gridNumX[i]))} - dxMatrix[brkX[i]+1, brkX[i]+1] <- dxMatrix[brkX[i]+1, brkX[i]+1]/2 - dxMatrix[brkX[i+1], brkX[i+1]] <- dxMatrix[brkX[i+1], brkX[i+1]]/2 - } - dxMatrix <- sqrt(as.matrix(dxMatrix)) - return(dxMatrix) -} - -denseCov <- function(p, varsTrain, brkX, dxMatrix, gridNum, varsOptns){ - indRaw <- varsTrain[[1]]$Ly - if (varsOptns[[1]]$error == 1) {covDense <- GetCovDense(indRaw, optns=varsOptns[[1]]) ; blkCov <- covDense$smoothCov ; varsSigma2 = covDense$sigma2} else {blkCov <- cov(indRaw)} - if (p >= 2) { - for (i in 2:p) { - indRaw <- varsTrain[[i]]$Ly - if (varsOptns[[i]]$error == 1) {covDense <- GetCovDense(indRaw, optns=varsOptns[[i]]) ; blkCov <- cdiag(blkCov, covDense$smoothCov) ; varsSigma2 <- c(varsSigma2, covDense$sigma2)} else {blkCov <- cdiag(blkCov, cov(indRaw))} - } - - for (i in 1:p) { - gridBrk1 <- brkX[i]+1 - gridBrk2 <- brkX[i+1] - for (j in 1:p) { - if (j > i) { - gridBrk3 <- brkX[j]+1 - gridBrk4 <- brkX[j+1] - blkCov[gridBrk1:gridBrk2, gridBrk3:gridBrk4] <- cov(varsTrain[[i]]$Ly, varsTrain[[j]]$Ly) - blkCov[gridBrk3:gridBrk4, gridBrk1:gridBrk2] <- t(as.matrix(blkCov[gridBrk1:gridBrk2, gridBrk3:gridBrk4])) - } - } - } - } - xCov <- as.matrix(blkCov) - adjxCov <- eigen(dxMatrix %*% xCov %*% dxMatrix) - eigenValue <- adjxCov$value - eigenValue <- sapply(eigenValue, function(x){max(x, 0)}) - numposiEigen <- sum(eigenValue > 0) - eigenFun <- diag(diag(1 / dxMatrix)) %*% adjxCov$vector - xCov <- eigenFun %*% diag(eigenValue) %*% t(eigenFun) - - for (i in 1:p) { - if(i==1) {croCov <- cov(varsTrain[[i]]$Ly, varsTrain[[p+1]]$Ly)} else {croCov <- rbind(croCov, cov(varsTrain[[i]]$Ly, varsTrain[[p+1]]$Ly))} - } - indRaw <- varsTrain[[p+1]]$Ly - if (varsOptns[[p+1]]$error == 1) {yCov <- GetCovDense(indRaw, optns = varsOptns[[p+1]])$smoothCov} else {yCov <- cov(indRaw)} - for (i in 1:p) { - if(i == 1){diagSigma2 <- c(rep(varsSigma2[1], gridNum[1]))}else{diagSigma2 <- c(diagSigma2, rep(varsSigma2[i], gridNum[i]))} - } - return(list(xCov = xCov, croCov = croCov, yCov = yCov, varsSigma2 = varsSigma2, eigenValue = eigenValue, eigenFun = eigenFun, diagSigma2 = diagSigma2, numposiEigen = numposiEigen)) -} - -#gridNum may be used in the future to generalize the output grids, not restricted by 51. -sparseCov <- function(p, varsTrain, brkX, varsOptns, vars, muList, gridNum, dxMatrix, regGrid){ - Ly <- varsTrain[[1]]$Ly ; Lt=varsTrain[[1]]$Lt; - optns <- SetOptions(Ly, Lt, varsOptns[[1]]) - obsGrid <- sort(unique(c(unlist(Lt)))) - meanCr <- array(0,c(length(obsGrid))) - meanCrAll <- list(meanCr) #meanCrAll is a input required by GetCrCovYX(). It's zero since varsTrain is demeaned. - rfpca <- FPCA(Ly, Lt, optns) - blkCov <- rfpca$smoothedCov - varsSigma2 <- rfpca$sigma2 - varsbwMu <- list(rfpca$bwMu) - varsbwCov <- list(rfpca$bwCov) - - if (p>=2) { - for (i in 2:p) { - Ly <- varsTrain[[i]]$Ly ; Lt = varsTrain[[i]]$Lt; - optns <- SetOptions(Ly, Lt, varsOptns[[i]]) - obsGrid <- sort(unique(c(unlist(Lt)))) - meanCr <- array(0, c(length(obsGrid))) - meanCrAll[[i]] <- meanCr - rfpca <- FPCA(Ly, Lt, optns) - mx_temp1 <- rfpca$smoothedCov - assign(paste("sigma_", i, sep = ""), rfpca$sigma2) - varsSigma2 <- c(varsSigma2, get(paste("sigma_", i, sep = ""))) - blkCov <- cdiag(blkCov, mx_temp1) - varsbwMu[[i]] <- rfpca$bwMu - varsbwCov[[i]] <- rfpca$bwCov - } - - for (i in 1:p) { - gridBrk1 <- brkX[i]+1 - gridBrk2 <- brkX[i+1] - for (j in 1:p) { - if (j>i) { - gridBrk3 <- brkX[j]+1 - gridBrk4 <- brkX[j+1] - blkCov[gridBrk1:gridBrk2, gridBrk3:gridBrk4] <- GetCrCovYX(bw1 = varsbwCov[[i]], bw2 = varsbwCov[[j]], Ly1 = varsTrain[[i]]$Ly, Lt1 = varsTrain[[i]]$Lt, Ymu1 = meanCrAll[[i]], Ly2 = varsTrain[[j]]$Ly, Lt2 = varsTrain[[j]]$Lt, Ymu2 = meanCrAll[[j]])$smoothedCC - blkCov[gridBrk3:gridBrk4, gridBrk1:gridBrk2] <- t(as.matrix(blkCov[gridBrk1:gridBrk2, gridBrk3:gridBrk4])) - } - } - } - } - xCov <- as.matrix(blkCov) - adjxCov <- eigen(dxMatrix %*% xCov %*% dxMatrix) - eigenValue <- adjxCov$value - eigenValue <- sapply(eigenValue, function(x){max(x, 0)}) - numposiEigen <- sum(eigenValue > 0) - eigenFun <- diag(diag(1 / dxMatrix)) %*% adjxCov$vector - xCov <- eigenFun %*% diag(eigenValue) %*% t(eigenFun) - - Ly <- varsTrain[[p+1]]$Ly ; Lt <- varsTrain[[p+1]]$Lt; - optns <- SetOptions(Ly, Lt, varsOptns[[p+1]]) - obsGrid <- sort(unique(c(unlist(Lt)))) - yfpca <- FPCA(Ly, Lt, optns) - yCov <- yfpca$fittedCov - varsbwMu[[p+1]] <- yfpca$bwMu - varsbwCov[[p+1]] <- yfpca$bwCov - meanCrY <- array(0, c(length(obsGrid))) - for(i in 1:p){ - if (i==1) {croCov <- GetCrCovYX(bw1 = varsbwCov[[i]], bw2 = varsbwCov[[p+1]], Ly1 = varsTrain[[i]]$Ly, Lt1 = varsTrain[[i]]$Lt, Ymu1 = meanCrAll[[i]], Ly2 = varsTrain[[p+1]]$Ly, Lt2 = varsTrain[[p+1]]$Lt, Ymu2 = meanCrY)$smoothedCC - }else { - croCov <- rbind(croCov,GetCrCovYX(bw1 = varsbwCov[[i]], bw2 = varsbwCov[[p+1]], Ly1 = varsTrain[[i]]$Ly, Lt1 = varsTrain[[i]]$Lt, Ymu1 = meanCrAll[[i]], Ly2 = varsTrain[[p+1]]$Ly, Lt2 = varsTrain[[p+1]]$Lt, Ymu2 = meanCrY)$smoothedCC) - } - } - #========================== - for (i in 1:p) { - varDemean <- mapply('-',vars[[i]]$Ly, lapply(vars[[i]]$Lt, muList[[i]]), SIMPLIFY = FALSE) - if(i==1){varsDemean <- varDemean}else{varsDemean <- mapply(function(X, Y){c(X, Y)}, X = varsDemean, Y = varDemean, SIMPLIFY = FALSE)} - } - nZero <- rep(list(0), lengthVarsFPCReg(vars)) - for (i in 1:p) { - varPnumber <- sapply(vars[[i]]$Lt, length) - nZero <- mapply(c, nZero, varPnumber, SIMPLIFY=FALSE) - } - varsPnumber <- lapply(nZero, cumsum) - if(p == 1){diagSigma2 <- lapply(nZero, function(x){if(x[2]==1){sv <- as.matrix(rep(varsSigma2[1], x[2]))}else{sv <- rep(varsSigma2[1], x[2])};C <- diag(sv)}) - }else{ - diagSigma2 <- lapply(nZero, function(x){if(x[2]==1){sv <- as.matrix(rep(varsSigma2[1], x[2]))}else{sv <- rep(varsSigma2[1], x[2])}; C <- diag(sv) ; for (i in 2:p) {if(x[i+1]==1){sv <- as.matrix(rep(varsSigma2[i], x[i+1]))}else{sv <- rep(varsSigma2[i], x[i+1])};C <- cdiag(C, diag(sv))} ; return(as.matrix(C))}) - } - - a1 <- brkX[1]+1 - a2 <- brkX[1+1] - subCov <- lapply(vars[[1]]$Lt,function(x){ConvertSupport(regGrid[[1]],x,Cov= xCov[a1:a2, a1:a2])}) - - if (p>=2) { - for (i in 2:p) { - a1 <- brkX[i]+1 - a2 <- brkX[i+1] - assign(paste("subMx_", i, i, sep = ""),lapply(vars[[i]]$Lt,function(x){ConvertSupport(regGrid[[i]],x,Cov= xCov[a1:a2, a1:a2])})) - subCov <- mapply(function(X, Y){cdiag(X, Y)}, subCov, get(paste("subMx_", i, i, sep = "")),SIMPLIFY=FALSE) - } - - for (i in 1:p) { - gridBrk1 <- brkX[i]+1 - gridBrk2 <- brkX[i+1] - for(j in 1:p){ - if (j > i) { - gridBrk3 <- brkX[j]+1 - gridBrk4 <- brkX[j+1] - assign(paste("subMx_", i, j, sep = ""), mapply(function(X, Y){gd <- expand.grid(X,Y); matrix(interp2lin(regGrid[[i]], regGrid[[j]], xCov[gridBrk1:gridBrk2, gridBrk3:gridBrk4], gd$Var1, gd$Var2), nrow=length(X))}, X = vars[[i]]$Lt, Y = vars[[j]]$Lt,SIMPLIFY=FALSE)) - subMxx <- get(paste("subMx_", i, j,sep = "")) - subCov <- mapply(function(X, Y, Z){ - pnumber1 = Z[i] + 1 - pnumber2 = Z[i + 1] - pnumber3 = Z[j] + 1 - pnumber4 = Z[j + 1] - X[pnumber1:pnumber2, pnumber3:pnumber4] = Y - X[pnumber3:pnumber4, pnumber1:pnumber2] = t(Y) - return(X) - }, X = subCov, Y = subMxx, Z = varsPnumber ,SIMPLIFY=FALSE) - } - } - } - } - subCov <- mapply('+', subCov, diagSigma2, SIMPLIFY=FALSE) - listEigenFun <- lapply(1:numposiEigen, function(i) eigenFun[,i]) - - for (i in 1:p) { - a1 <- brkX[i]+1 - a2 <- brkX[i+1] - eigenFunXi <- eigenFun[a1:a2] - listEigenFunXi <- lapply(listEigenFun,'[', a1:a2) - phimx0 <- lapply(vars[[i]]$Lt,function(Y){t(sapply(listEigenFunXi, function(x){approxfun(regGrid[[i]], x)(Y)}))}) - phimx0 <- lapply(phimx0,function(x){if(dim(x)[1]==1){x <- t(x)}else{x <- x}}) - if (i == 1) {subEigenFun <- phimx0} else {subEigenFun <- mapply(function(X, Y){cbind(X, Y)}, X = subEigenFun, Y = phimx0 ,SIMPLIFY=FALSE)} - if (i == 1) {subMeanX <- muList[[i]](regGrid[[i]])} else {subMeanX <- c(subMeanX, muList[[i]](regGrid[[i]]))} - } - - return(list(xCov = xCov, croCov = croCov, varsSigma2 = varsSigma2, yCov = yCov, varsbwMu = varsbwMu, varsbwCov = varsbwCov, varsDemean = varsDemean, subCov = subCov, subEigenFun = subEigenFun, subMeanX = subMeanX, numposiEigen = numposiEigen, diagSigma2 = diagSigma2, eigenValue = eigenValue, eigenFun = eigenFun)) -} - -lengthVarsFPCReg <- function(varsTrain, subset) { - lenEach <- sapply(varsTrain, function(x) { - if (is.list(x)) { - x[['userBwMu']] <- NULL - x[['userBwCov']] <- NULL - sapply(x, length) - } else { - stop('Cannot subset variable') - } - }, simplify = FALSE) - len <- unique(unlist(lenEach)) - if (length(len) != 1) { - stop('Length of variables are not the same!') - } - return(len) -} - -sparseComp <- function(emputeScore, varsDemean, method, FVEthreshold, eigenValue, numposiEigen, isNewSub, diagSigma2, subEigenFun){ - if (length(which(isNewSub == 1)) == 0) {varsDemeanTrain <- varsDemean}else{varsDemeanTrain <- varsDemean[-which(isNewSub == 1)]} - if (length(which(isNewSub == 1)) == 0) {emputeScoreTrain <- emputeScore}else{emputeScoreTrain <- emputeScore[-which(isNewSub == 1)]} - if (length(which(isNewSub == 1)) == 0) {subEigenFunTrain <- subEigenFun}else{subEigenFunTrain <- subEigenFun[-which(isNewSub == 1)]} - if (length(which(isNewSub == 1)) == 0) {diagSigma2Train <- diagSigma2}else{diagSigma2Train <- diagSigma2[-which(isNewSub == 1)]} - if (method == 'FVE') {ratio <- cumsum(eigenValue[which(eigenValue > 0)]) / sum(eigenValue[which(eigenValue > 0)]); Kx <- min(which(ratio > FVEthreshold))} - if (method == 'AIC') { - psuLogli <- array(0, c(numposiEigen)) - for (i in 1:numposiEigen) { - if(i == 1) {psuVec <- mapply(function(X, Y, Z){Z - as.matrix(X[1:i, ]) * Y[1:i]}, X = subEigenFunTrain, Y = emputeScoreTrain, Z = varsDemeanTrain, SIMPLIFY=FALSE)} else {psuVec <- mapply(function(X, Y, Z){Z - as.matrix(t(X[1:i, ]))%*%as.matrix(Y[1:i])}, X = subEigenFunTrain, Y = emputeScoreTrain, Z = varsDemeanTrain, SIMPLIFY=FALSE)} - #psuLogli[i] <- sum(mapply(function(X, Y){t(Y) %*% diag(1/diag(X)) %*% Y / 2}, X = diagSigma2Train, Y = psuVec)) + i - psuLogli[i] <- sum(mapply(function(X, Y){t(Y) %*% solve(X) %*% Y / 2}, X = diagSigma2Train, Y = psuVec)) + i - } - diffRatio <- (max(psuLogli) - psuLogli) / diff(range(psuLogli)) - Kx <- min(which(diffRatio > 0.95)) - #diffRatio=abs(psuLogli/min(psuLogli)) - #Kx=min(which(diffRatio<1.2)) - #Kx=which.min(psuLogli>min(psuLogli)*1.1) - } - - if (method == 'BIC') { - psuLogli <- array(0, c(numposiEigen)) - for (i in 1:numposiEigen) { - if (i==1) {psuVec <- mapply(function(X, Y, Z){Z - as.matrix(X[1:i, ]) * Y[1:i]}, X = subEigenFunTrain, Y = emputeScoreTrain, Z = varsDemeanTrain, SIMPLIFY=FALSE)} else {psuVec <- mapply(function(X, Y, Z){Z - as.matrix(t(X[1:i, ])) %*% as.matrix(Y[1:i])}, X = subEigenFunTrain, Y = emputeScoreTrain, Z = varsDemeanTrain, SIMPLIFY=FALSE)} - #psuLogli[i] <- sum(mapply(function(X, Y){t(Y) %*% diag(1 / diag(X)) %*% Y / 2}, X = diagSigma2Train,Y=psuVec)) + i * log(length(unlist(varsDemeanTrain))) / 2 - psuLogli[i] <- sum(mapply(function(X, Y){t(Y) %*% solve(X) %*% Y / 2}, X = diagSigma2Train,Y=psuVec)) + i * log(length(unlist(varsDemeanTrain))) / 2 - } - diffRatio <- (max(psuLogli) - psuLogli)/diff(range(psuLogli)) - Kx <- min(which(diffRatio > 0.95)) - #diffRatio=abs(psuLogli/min(psuLogli)) - #Kx=min(which(diffRatio<1.2)) - #Kx=which.min(psuLogli>min(psuLogli)*1.2) - } - Kx -} - - -denseComp <- function(method, varsMatrixDemean, denseScore, eigenFun, eigenValue, isNewSub, diagSigma2, numposiEigen, FVEthreshold){ - if (method=='FVE') {ratio <- cumsum(eigenValue[which(eigenValue > 0)]) / sum(eigenValue[which(eigenValue > 0)]) ; Kx <- min(which(ratio > FVEthreshold))} - if (method=='AIC') { - if (length(which(isNewSub == 1)) == 0) {varsMatrixDemeanTrain <- varsMatrixDemean} else {varsMatrixDemeanTrain <- varsMatrixDemean[-which(isNewSub == 1), ]} - if (length(which(isNewSub == 1)) == 0) {denseScoreTrain <- denseScore} else {denseScoreTrain <- denseScore[-which(isNewSub == 1), ]} - psuLogli <- array(0, c(numposiEigen)) - for (i in 1:numposiEigen) { - psuVec <- varsMatrixDemeanTrain-denseScoreTrain[, 1:i] %*% t(eigenFun[, 1:i]) - psuLogli[i] <- sum(diag(psuVec %*% diag(1 / diagSigma2) %*% t(psuVec))) / 2 + i - } - diffRatio <- (max(psuLogli) - psuLogli) / diff(range(psuLogli)) - Kx <- min(which(diffRatio > 0.95)) - #diffRatio=abs(psuLogli/min(psuLogli)) - #Kx=min(which(diffRatio<1.3)) - } - if (method == 'BIC') { - if (length(which(isNewSub == 1)) == 0) {varsMatrixDemeanTrain <- varsMatrixDemean} else {varsMatrixDemeanTrain <- varsMatrixDemean[-which(isNewSub == 1), ]} - if (length(which(isNewSub == 1)) == 0) {denseScoreTrain <- denseScore} else {denseScoreTrain <- denseScore[-which(isNewSub == 1), ]} - total_p <- length(varsMatrixDemeanTrain) - psuLogli <- array(0, c(numposiEigen)) - for (i in 1:numposiEigen) { - psuVec <- varsMatrixDemeanTrain - denseScoreTrain[, 1:i] %*% t(eigenFun[, 1:i]) - psuLogli[i] <- sum(diag(psuVec %*% diag(1 / diagSigma2) %*% t(psuVec))) / 2 + i * log(total_p) / 2 - } - diffRatio <- (max(psuLogli) - psuLogli) / diff(range(psuLogli)) - Kx <- min(which(diffRatio > 0.95)) - #diffRatio=abs(psuLogli/min(psuLogli)) - #Kx=min(which(diffRatio<1.3)) - } - return(Kx) -} - -cdiag <- function(A,B){ - if(is.matrix(A)==0){A <- as.matrix(A)} - if(is.matrix(B)==0){B <- as.matrix(B)} - nrow <- dim(A)[1]+dim(B)[1] - ncol <- dim(A)[2]+dim(B)[2] - C <- array(0,c(nrow,ncol)) - C[1:dim(A)[1],1:dim(A)[2]] <- A - C[(dim(A)[1]+1):(dim(A)[1]+dim(B)[1]),(dim(A)[2]+1):(dim(A)[2]+dim(B)[2])] <- B - return(C) -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCquantile.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCquantile.R deleted file mode 100644 index a9adf7fb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FPCquantile.R +++ /dev/null @@ -1,134 +0,0 @@ -#'@title Conditional Quantile estimation with functional covariates -#' -#'@description Main function to implement conditional Quantile estimation with functional covariates and scalar response. The method includes 3 steps: -#'1) FPCA using the PACE method for X(t_x) -#'2) Computation of the conditional distribution function through a functional generalized linear model. -#'3) Prediction of quantiles for given predictor values -#' -#'@param Lx A length n list of predictor function where x[[i]] is the row vector of measurements for ith subject, i=1,...,n -#'@param Lt_x A length n list where the observations of x are taken, t_x[[i]] is a row vector of time points where x[[i]] are observed, i=1,...,n -#'@param y A 1*n vector for scalar response y. y[i] is the response value for the ith subject, i = 1,...,n. -#'@param outQ A vector of desired quantile levels with default value outQ = c(0.1, 0.25, 0.5, 0.75, 0.9). -#'@param optns_x A list of options for predictor x with control parameters specified by list(name=value) with default NA. See function FPCA for details. -#'@param isNewSub A 1*n vector of 0s or 1s, where n is the total count of subjects. 0 denotes the corresponding subject is only used for training and 1 denotes the corresponding subject is only used for prediction. (default: 0's) -#' -#'@return A list of the following -#'\item{pred_quantile: a matrix of n*length(outQ) where the the first nn (number of 0s in isNewSub) rows containing fitted conditional quantiles of Y corresponding to the trainning subjects, and the last n-nn rows containing predicted conditional quantiles of Y corresponding to the subjects isNewSub ==1.} -#'\item{pred_CDF: a matrix of n*100. The ith row contains the fitted or predicted conditional distribution function \eqn{F(y|X_i)}, evaluated at an equally spaced grid of 100 points.} -#'\item{b: a matrix of 50*(K+1) contains the coefficient functions, defined as \eqn{F(y|X) = g(\sum_(k=0)^K b_k(y)\xi_k)}, see equation (5) in the paper for details, where K is the number of components selected to expand the predictor functions X, and \eqn{\xi_k} is the kth principal component score.} -#' -#'@examples -#'set.seed(10) -#' -#'n = 200 -#'npred = 50 -#'m = 50 -#'xi <- Wiener(n, 0:m/m) -#' -#'x=list() -#'t_x=list() -#'y=numeric(n) -#'for(i in 1:n){ -#' t_x = c(t_x,list(0:m/m)) -#' x = c(x,list(xi[i,])) -#' y[i] = 5*rnorm(1)+2*sum(xi[i,]) -#'} -#' -#'outQ = c(0.1,0.25,0.5,0.75,0.9,0.95) -#'isNewsub = c(rep(0,150),rep(1,50)) -#'qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) -#' -#'@references -#' \cite{Chen, K., M\"uller, H.G. (2011). Conditional quantile analysis when covariates are functions, with application to growth data. J. Royal Statistical Society B.} -#' @export - - -FPCquantile = function(Lx,Lt_x,y,outQ=c(0.1,0.25,0.5,0.75,0.9),optns_x = NULL,isNewsub = NULL){ - CheckData(Lx,Lt_x) - if(min(outQ) < 0 || max(outQ) > 1){ - stop("quantile levels must be between 0 and 1") - } - if(length(Lx) != length(y)){ - stop('length of Lx and y must agree') - } - n = length(Lx) - if(is.null(isNewsub)){ - isNewsub = rep(0,n) - } - nn = sum(isNewsub == 0) - Lx_e = list() - Lt_x_e = list() - Lnewx = list() - Lnewt_x = list() - for(i in 1:n){ - if(isNewsub[i] == 0){ - Lx_e = c(Lx_e,list(Lx[[i]])) - Lt_x_e = c(Lt_x_e,list(Lt_x[[i]])) - }else{ - Lnewx = c(Lnewx,list(Lx[[i]])) - Lnewt_x = c(Lnewt_x,list(Lt_x[[i]])) - } - } - ty= y[isNewsub==0] - optns_x = SetOptions(Lx, Lt_x, optns_x) - CheckOptions(Lt_x, optns_x,n) - verbose_x = optns_x$verbose - if(verbose_x == TRUE){ - print('Obtain functional object for x:\n') - } - xfpca = FPCA(Lx_e, Lt_x_e, optns_x) - xitrain = xfpca$xiEst - optns = xfpca$optns - - zm = 50 - ysort = sort(ty) - zgrid= seq(ysort[5], ysort[nn-5], length.out=zm) - K_x = ncol(xitrain) - b = matrix(0,zm,K_x+1) - for(i in 1:zm){ - z=zgrid[i] - ytrain =array(0,nn) - ytrain[ty<=z]=1 - glmfit= glm(ytrain ~ xitrain, family = binomial(link= 'logit')) - b[i,] = glmfit$coefficients - } - xi = matrix(0,n, K_x) - xi[1:nn,] = xitrain - if(length(Lnewx) > 0){ - xi[(nn+1):n,] = predict.FPCA(xfpca,Lnewx,Lnewt_x,K = K_x,xiMethod = optns$methodXi) - } - - m = 100 - outF = seq(ysort[5], ysort[nn-5], length.out=m) - predF = matrix(0,n, m) - nQ = length(outQ) - predQ = matrix(0,n, nQ) - - bw = 4*(zgrid[2]-zgrid[1]) - for(i in 1:n){ - CDF = 1:zm - for(j in 1:zm){ - eta = b[j,] %*% c(1,xi[i,]) - if(eta>=30){ - CDF[j] = 1 - }else if(eta <= -30){ - CDF[j] = 0 - }else{ - CDF[j] = exp(eta)/(1+exp(eta)) - } - } - win=array(1,zm); - predF[i,] =Lwls1D(bw,'epan', win, zgrid, CDF, outF) - } - - for(i in 1:n){ - for(j in 1:nQ){ - if(predF[i,m] <= outQ[j]){ - predQ[i,j]= outF[m] - }else{ - predQ[i,j]= outF[which(predF[i,] > outQ[j])[1]] - } - } - } - return(list(pred_quantile = predQ,pred_CDF = predF,beta = b)) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FSVD.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FSVD.R deleted file mode 100644 index 3141941a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FSVD.R +++ /dev/null @@ -1,256 +0,0 @@ -#' Functional Singular Value Decomposition -#' -#' FSVD for a pair of dense or sparse functional data. -#' -#' @param Ly1 A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param Lt1 A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order. -#' @param Ly2 A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param Lt2 A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order. -#' @param FPCAoptns1 A list of options control parameters specified by \code{list(name=value)} for the FPC analysis of sample 1. See `?FPCA'. -#' @param FPCAoptns2 A list of options control parameters specified by \code{list(name=value)} for the FPC analysis of sample 2. See `?FPCA'. -#' @param SVDoptns A list of options control parameters specified by \code{list(name=value)} for the FSVD analysis of samples 1 & 2. See `Details`. -#' -#' @details Available control options for SVDoptns are: -#' \describe{ -#' \item{bw1}{The bandwidth value for the smoothed cross-covariance function across the direction of sample 1; positive numeric - default: determine automatically based on 'methodBwCov'} -#' \item{bw2}{The bandwidth value for the smoothed cross-covariance function across the direction of sample 2; positive numeric - default: determine automatically based on 'methodBwCov'} -#' \item{methodBwCov}{The bandwidth choice method for the smoothed covariance function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 10\% of the support} -#' \item{userMu1}{The user defined mean of sample 1 used to centre it prior to the cross-covariance estimation. - default: determine automatically based by the FPCA of sample 1} -#' \item{userMu2}{The user defined mean of sample 2 used to centre it prior to the cross-covariance estimation. - default: determine automatically based by the FPCA of sample 2} -#' \item{maxK}{The maximum number of singular components to consider; default: min(20, N-1), N:# of curves.} -#' \item{kernel}{Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" - default: "gauss"; dense data are assumed noise-less so no smoothing is performed.} -#' \item{rmDiag}{Logical describing if the routine should remove diagonal raw cov for cross cov estimation (default: FALSE) } -#' \item{noScores}{Logical describing if the routine should return functional singular scores or not (default: TRUE) } -#' \item{regulRS}{String describing if the regularisation of the compositie cross-covariance matrix should be done using 'sigma1' or 'rho' (see ?FPCA for details) (default: 'sigma2') } -#' \item{bwRoutine}{String specifying the routine used to find the optimal bandwidth 'grid-search', 'bobyqa', 'l-bfgs-b' (default: 'l-bfgs-b')} -#' \item{flip}{Logical describing if the routine should flip the sign of the singular components functions or not after the SVD of the cross-covariance matrix. (default: FALSE)} -#' \item{useGAM}{Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE)} -#' \item{dataType1}{The type of design we have for sample 1 (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV' - default: determine automatically based on 'IsRegular'} -#' \item{dataType2}{The type of design we have for sample 2 (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV' - default: determine automatically based on 'IsRegular'} -#' } -#' -#' @return A list containing the following fields: -#' \item{bw1}{The selected (or user specified) bandwidth for smoothing the cross-covariance function across the support of sample 1.} -#' \item{bw2}{The selected (or user specified) bandwidth for smoothing the cross-covariance function across the support of sample 2.} -#' \item{CrCov}{The smoothed cross-covariance between samples 1 & 2.} -#' \item{sValues}{A list of length \emph{nsvd}, each entry containing the singuar value estimates for the FSC estimates.} -#' \item{nsvd}{The number of singular componentes used.} -#' \item{canCorr}{The canonical correlations for each dimension.} -#' \item{FVE}{A percentage indicating the total variance explained by chosen FSCs with corresponding 'FVEthreshold'.} -#' \item{sFun1}{An nWorkGrid by \emph{K} matrix containing the estimated singular functions for sample 1.} -#' \item{sFun2}{An nWorkGrid by \emph{K} matrix containing the estimated singular functions for sample 2.} -#' \item{grid1}{A vector of length nWorkGrid1. The internal regular grid on which the singular analysis is carried on the support of sample 1.} -#' \item{grid2}{A vector of length nWorkGrid2. The internal regular grid on which the singular analysis is carried on the support of sample 2.} -#' \item{sScores1}{A \emph{n} by \emph{K} matrix containing the singular scores for sample 1.} -#' \item{sScores2}{A \emph{n} by \emph{K} matrix containing the singular scores for sample 2.} -#' \item{optns}{A list of options used by the SVD and the FPCA's procedures.} -#' -#' @export - -FSVD <- function(Ly1, Lt1, Ly2, Lt2, FPCAoptns1 = NULL, FPCAoptns2 = NULL, SVDoptns = list()){ - # Check and refine data - CheckData(Ly1, Lt1) - CheckData(Ly2, Lt2) - inputData1 <- HandleNumericsAndNAN(Ly1,Lt1); - ly1 <- inputData1$Ly; - lt1 <- inputData1$Lt; - inputData2 <- HandleNumericsAndNAN(Ly2,Lt2); - ly2 <- inputData2$Ly; - lt2 <- inputData2$Lt; - - # set up and check options - numOfCurves = length(ly1) - SVDoptns = SetSVDOptions(Ly1=ly1, Lt1=lt1, Ly2=ly2, Lt2=lt2, SVDoptns=SVDoptns) - #CheckSVDOptions(Ly1=y1, Lt1=t1, Ly2=y2, Lt2=t2, SVDoptns=SVDoptns) - - if(is.null(FPCAoptns1)){ - FPCAoptns1 = SetOptions(ly1, lt1, optns = list(dataType = SVDoptns$dataType1, nRegGrid = SVDoptns$nRegGrid1)) - CheckOptions(lt1, FPCAoptns1, numOfCurves) - } - - if(is.null(FPCAoptns2)){ - FPCAoptns2 = SetOptions(ly2, lt2, optns = list(dataType = SVDoptns$dataType2, - nRegGrid = SVDoptns$nRegGrid2)) - CheckOptions(lt2, FPCAoptns2, numOfCurves) - } - - # Obtain regular grid for both samples - obsGrid1 = sort(unique( c(unlist(lt1)))) - #regGrid1 = seq(min(obsGrid1), max(obsGrid1),length.out = SVDoptns$nRegGrid1) - obsGrid2 = sort(unique( c(unlist(lt2)))) - #regGrid2 = seq(min(obsGrid2), max(obsGrid2),length.out = SVDoptns$nRegGrid2) - - ### FPCA on both functional objects - FPCAObj1 = FPCA(Ly = ly1, Lt = lt1, optns = FPCAoptns1) - Ymu1 = ConvertSupport(fromGrid = FPCAObj1$workGrid, toGrid = FPCAObj1$obsGrid, mu = FPCAObj1$mu) - FPCAObj2 = FPCA(Ly = ly2, Lt = lt2, optns = FPCAoptns2) - Ymu2 = ConvertSupport(fromGrid = FPCAObj2$workGrid, toGrid = FPCAObj2$obsGrid, mu = FPCAObj2$mu) - if(!is.null(SVDoptns$userMu1)){ - Ymu1 = SVDoptns$userMu1 - } - if(!is.null(SVDoptns$userMu2)){ - Ymu2 = SVDoptns$userMu2 - } - - ### Estimate cross covariance - if(SVDoptns$dataType1 != 'Dense' || SVDoptns$dataType2 != 'Dense'){ # sparse or missing data - CrCovObj = GetCrCovYX(bw1 = SVDoptns$bw1, bw2 = SVDoptns$bw2, Ly1 = ly1, Lt1 = lt1, - Ymu1 = Ymu1, Ly2 = ly2, Lt2 = lt2, Ymu2 = Ymu2, - useGAM = SVDoptns$useGAM, rmDiag=SVDoptns$rmDiag, kern=SVDoptns$kernel, - bwRoutine = SVDoptns$bwRoutine) - CrCov = CrCovObj$smoothedCC - grid1 = CrCovObj$smoothGrid[,1] - grid2 = CrCovObj$smoothGrid[,2] - bw1 <- CrCovObj$bw[1] - bw2 <- CrCovObj$bw[2] - } else { # dense data, use sample cross covariance - y1mat = matrix(unlist(ly1), nrow = numOfCurves, byrow = TRUE) - y2mat = matrix(unlist(ly2), nrow = numOfCurves, byrow = TRUE) - mudf = 0 - if(!is.null(SVDoptns$userMu1)){ - mudf = mudf + 1 - } - if(!is.null(SVDoptns$userMu2)){ - mudf = mudf + 1 - } - CrCov = (t(y1mat) - Ymu1) %*% t(t(y2mat) - Ymu2)/(numOfCurves - 2 + mudf) - grid1 = obsGrid1 - grid2 = obsGrid2 - bw1 = NULL # not used for dense data - bw2 = NULL - } - gridSize1 = grid1[2] - grid1[1] - gridSize2 = grid2[2] - grid2[1] - - # SVD on smoothed cross covariance - SVDObj <- svd(CrCov) - sValues<- SVDObj$d - sValues<- sValues[sValues>0] # pick only positive singular values - if(length(sValues) > SVDoptns$maxK){ # reset number of singular component as maxK - sValues<- sValues[seq_len(SVDoptns$maxK)] - } - # determine number of singular component retained - if(is.numeric(SVDoptns$methodSelectK)){ # user specified number of singular components - nsvd = SVDoptns$methodSelectK - if(length(sValues) < nsvd){ - nsvd <- length(sValues) - warning(sprintf("Only %d Singular Components are available, pre-specified nsvd set to %d. \n", - length(sValues), length(sValues))) - } - } else { # select nsvd using FVEthreshold - nsvd <- min(which(cumsum(sValues^2)/sum(sValues^2) >= SVDoptns$FVEthreshold), SVDoptns$maxK) - } - - FVE <- sum(sValues[seq_len(nsvd)]^2)/sum(sValues^2) # fraction of variation explained - sValues<- sValues[seq_len(nsvd)] - # singular functions - sfun1 <- SVDObj$u[,seq_len(nsvd)] - sfun2 <- SVDObj$v[,seq_len(nsvd)] - # normalizing singular functions - sFun1 <- apply(sfun1, 2, function(x) { - x <- x / sqrt(trapzRcpp(grid1, x^2)) - return(x* ifelse(SVDoptns$flip, -1, 1)) - }) - sFun2 <- apply(sfun2, 2, function(x) { - x <- x / sqrt(trapzRcpp(grid2, x^2)) - return(x * ifelse(SVDoptns$flip, -1, 1)) - }) - # Grid size correction - sValues<- sqrt(gridSize1 * gridSize2) * sValues - - ### calculate canonical correlations - canCorr = rep(0, nsvd) - for(i in seq_len(nsvd)){ - canCorr[i] = sValues[i] * (gridSize1^2 * t(sFun1[,i]) %*% FPCAObj1$fittedCov %*% (sFun1[,i]))^(-0.5) * - (gridSize2^2 * t(sFun2[,i]) %*% FPCAObj2$fittedCov %*% (sFun2[,i]))^(-0.5) - } - canCorr <- ifelse(abs(canCorr)>1,1,abs(canCorr)) * sign(canCorr) # confine this to [-1,1] - - if(!SVDoptns$noScores){ - - ### calculate the singular scores - if(SVDoptns$dataType1 != 'Dense' || SVDoptns$dataType2 != 'Dense'){ - # sparse data (not both dense): conditional expectation - # patch the covariance matrix for stacked processes - StackSmoothCov = rbind(cbind(FPCAObj1$smoothedCov, CrCov), - cbind(t(CrCov), FPCAObj2$smoothedCov)) - eig = eigen(StackSmoothCov) - positiveInd <- eig[['values']] >= 0 - if (sum(positiveInd) == 0) { - stop('All eigenvalues are negative. The covariance estimate is incorrect.') - } - d <- eig[['values']][positiveInd] - eigenV <- eig[['vectors']][, positiveInd, drop=FALSE] - StackFittedCov <- eigenV %*% diag(x=d, nrow = length(d)) %*% t(eigenV) - # regularize with rho/sigma2 in FPCA objects - if( SVDoptns$regulRS == 'sigma2'){ - samp1minRS2 <- FPCAObj1$sigma2; - samp2minRS2 <- FPCAObj2$sigma2; - if(is.null(samp1minRS2) ||is.null(samp2minRS2)){ - stop("Check the FPCA arguments used. At least one of the FPCA objects created does not have 'sigma2'!") - } - } else { #( SVDoptns$regulRS == 'rho' ) - samp1minRS2 <- FPCAObj1$rho; - samp2minRS2 <- FPCAObj2$rho; - if(is.null(samp1minRS2) ||is.null(samp2minRS2)){ - stop("Check the FPCA arguments used. At least one of the FPCA objects created does not have 'rho'!") - } - } - - StackRegCov <- StackFittedCov + diag(x = c(rep(samp1minRS2,length(FPCAObj1$workGrid)), - rep(samp2minRS2,length(FPCAObj2$workGrid))), - nrow = length(FPCAObj1$workGrid)+length(FPCAObj2$workGrid) ) - StackworkGrid12 = c(FPCAObj1$workGrid, FPCAObj2$workGrid + max(FPCAObj1$workGrid) + gridSize1) - StackobsGrid12 = c(FPCAObj1$obsGrid, FPCAObj2$obsGrid + max(FPCAObj1$obsGrid) + gridSize1) - StackRegCovObs = ConvertSupport(fromGrid = StackworkGrid12, toGrid = StackobsGrid12, - Cov = StackRegCov) - Pim = list(); Qik = list() - Sigmai1 = list(); Sigmai2 = list() - fittedCovObs1 = ConvertSupport(fromGrid = FPCAObj1$workGrid, toGrid = FPCAObj1$obsGrid, Cov = FPCAObj1$fittedCov) - sfObs1 = ConvertSupport(fromGrid = grid1, toGrid = FPCAObj1$obsGrid, phi = sFun1) - fittedCovObs2 = ConvertSupport(fromGrid = FPCAObj2$workGrid, toGrid = FPCAObj2$obsGrid, Cov = FPCAObj2$fittedCov) - sfObs2 = ConvertSupport(fromGrid = grid2, toGrid = FPCAObj2$obsGrid, phi = sFun2) - - # declare singular components - sScores1 = matrix(0, nrow = numOfCurves, ncol = nsvd) - sScores2 = matrix(0, nrow = numOfCurves, ncol = nsvd) - for(i in seq_len(numOfCurves)){ # calculate singular component for each obs pair - Pim[[i]] = matrix(0, nrow=length(lt1[[i]]), ncol=nsvd) - Qik[[i]] = matrix(0, nrow=length(lt2[[i]]), ncol=nsvd) - Tind1 = which(FPCAObj1$obsGrid %in% lt1[[i]]) - Tind2 = which(FPCAObj2$obsGrid %in% lt2[[i]]) - Tind12 = c(Tind1, length(FPCAObj1$obsGrid) + Tind2) - for(j in seq_len(nsvd)){ - Pim[[i]][,j] = apply(fittedCovObs1[,Tind1, drop=FALSE], 2, function(x){ - pij = trapzRcpp(X = FPCAObj1$obsGrid, Y = x*sfObs1[,j]) - }) - Qik[[i]][,j] = apply(fittedCovObs2[,Tind2, drop=FALSE], 2, function(x){ - qij = trapzRcpp(X = FPCAObj2$obsGrid, Y = x*sfObs2[,j]) - }) - } - Sigmai1[[i]] = rbind(Pim[[i]], t(sValues* t(sfObs2))[Tind2, ]) - Sigmai2[[i]] = rbind(t(sValues* t(sfObs1))[Tind1, ], Qik[[i]]) - sScores1[i,] = c( t(Sigmai1[[i]]) %*% solve(StackRegCovObs[Tind12, Tind12], c(ly1[[i]] - Ymu1[Tind1], ly2[[i]] - Ymu2[Tind2])) ) - sScores2[i,] = c( t(Sigmai2[[i]]) %*% solve(StackRegCovObs[Tind12, Tind12], c(ly1[[i]] - Ymu1[Tind1], ly2[[i]] - Ymu2[Tind2])) ) - } - - } else { # both are dense, utilize GetINscores as it does the same job - # sFun1/sFun2 are already in obsGrid1/obsGrid2 in dense case - sScores1 = GetINScores(ymat = y1mat, t = lt1, optns = FPCAoptns1, - mu = Ymu1, lambda = sValues, phi = sFun1, sigma2 = FPCAObj1$sigma2)$xiEst - sScores2 = GetINScores(ymat = y2mat, t = lt2, optns = FPCAoptns2, - mu = Ymu2, lambda = sValues, phi = sFun2, sigma2 = FPCAObj2$sigma2)$xiEst - } - - } else { - sScores1 <- NULL - sScores2 <- NULL - } - - res <- list(bw1 = bw1, bw2 = bw2, CrCov = CrCov, sValues= sValues, nsvd = nsvd, - canCorr = canCorr, FVE = FVE, sFun1 = sFun1, grid1 = grid1, sScores1 = sScores1, - sFun2 = sFun2, grid2 = grid2, sScores2 = sScores2, - optns = list(SVDopts = SVDoptns, FPCA1opts = FPCAObj1$optns, FPCA2opts = FPCAObj2$optns)) - class(res) <- 'FSVD' - return(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FVPA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FVPA.R deleted file mode 100644 index 6d23e5ad..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FVPA.R +++ /dev/null @@ -1,73 +0,0 @@ -#' Functional Variance Process Analysis for dense functional data -#' -#' @param y A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param t A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. -#' @param q A scalar defining the percentile of the pooled sample residual sample used for adjustment before taking log (default: 0.1). -#' @param optns A list of options control parameters specified by \code{list(name=value)}; by default: 'error' has to be TRUE, 'FVEthreshold' is set to 0.90. See `Details in ?FPCA'. -#' -#' -#' @return A list containing the following fields: -#' \item{sigma2}{Variance estimator of the functional variance process.} -#' \item{fpcaObjY}{FPCA object for the original data.} -#' \item{fpcaObjR}{FPCA object for the functional variance process associated with the original data.} -#' -#' @examples -#' set.seed(1) -#' n <- 25 -#' pts <- seq(0, 1, by=0.01) -#' sampWiener <- Wiener(n, pts) -#' # Data have to dense for FVPA to be relevant! -#' sampWiener <- Sparsify(sampWiener, pts, 101) -#' fvpaObj <- FVPA(sampWiener$Ly, sampWiener$Lt) -#' @references -#' \cite{Hans-Georg Mueller, Ulrich Stadtmuller and Fang Yao, "Functional variance processes." Journal of the American Statistical Association 101 (2006): 1007-1018} -#' @export - -FVPA = function(y, t, q= 0.1, optns = list(error=TRUE, FVEthreshold = 0.9)){ - - if( (q <0) || (1 < q) ){ - warning("The value of 'q' is outside [0,1]; reseting to 0.1.") - } - if(is.null(optns$error)){ - stop("User provided 'optns' has to provided 'error' information.") - } - if(is.null(optns$FVEthreshold)){ - stop("User provided 'optns' has to provided 'FVEthreshold' information.") - } - if(!optns$error){ - stop("FVPA is irrelevant if no error is assumed") - } - if (!is.null(optns[['useBinnedData']]) && optns[['useBinnedData']] == 'FORCE') { - stop("optns$useBinnedData cannot be 'FORCE'") - } - optns[['useBinnedData']] <- 'OFF' - - fpcaObjY <- FPCA(y, t, optns) - - if( fpcaObjY$optns$dataType != 'Dense' ){ - - stop(paste0("The data has to be 'Dense' for FVPA to be relevant; the current dataType is : '", fpcaObjY$optns$dataType,"'!") ) - } - - yFitted <- fitted(fpcaObjY); - rawRes = GetVarianceProcess(y, t, yFitted, workGrid = fpcaObjY$workGrid, delta = 0, logarithm = FALSE ) - delta = quantile(unlist(rawRes), q); - rm(rawRes) - logRes = GetVarianceProcess(y, t, yFitted, workGrid = fpcaObjY$workGrid, delta = delta, logarithm = TRUE ) - - fpcaObjR = FPCA(logRes, t, optns); - return( list( sigma2 = fpcaObjR$sigma2, fpcaObjY = fpcaObjY, fpcaObjR = fpcaObjR)) -} - -GetVarianceProcess = function(y, t, yFitted, workGrid, delta =0.0, logarithm = FALSE){ - r <- list() - for (i in 1:nrow(yFitted)){ - tempV = delta + ( y[[i]] - approx(x = workGrid, y = yFitted[i,], xout = t[[i]])$y )^2 - if(logarithm){ - r[[i]] = log(tempV); - } else { - r[[i]] = tempV; - } - } - return(r) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/FitEigenValues.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/FitEigenValues.R deleted file mode 100644 index 411a6328..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/FitEigenValues.R +++ /dev/null @@ -1,34 +0,0 @@ -FitEigenValues <- function(rcov, phiGrid, phi, noEig) { - buff <- .Machine$double.eps * max(abs(phiGrid)) * 3 - - if (is.null(noEig)) - noEig <- ncol(phi) - - # Get design matrix X: - X <- apply(phi[, 1:noEig], 2, function(y) - approx(phiGrid, y, rcov$tPairs[, 1])$y * approx(phiGrid, y, rcov$tPairs[, 2])$y - ) - - if (class(rcov) == 'RawCov') { - dat <- cbind(y=rcov[['cxxn']], X) - dat <- dat[rcov$tPairs[, 1] > min(phiGrid) - buff & - rcov$tPairs[, 1] < max(phiGrid) + buff & - rcov$tPairs[, 2] > min(phiGrid) - buff & - rcov$tPairs[, 2] < max(phiGrid) + buff, ] - mod <- lm(y ~ . - 1, data.frame(dat)) - } else if (class(rcov) == 'BinnedRawCov') { - dat <- cbind(y=rcov[['meanVals']], X) - dat <- dat[rcov$tPairs[, 1] > min(phiGrid) - buff & - rcov$tPairs[, 1] < max(phiGrid) + buff & - rcov$tPairs[, 2] > min(phiGrid) - buff & - rcov$tPairs[, 2] < max(phiGrid) + buff, ] - mod <- lm(y ~ . - 1, data.frame(dat), weights=rcov[['count']]) - } - - lam <- unname(mod[['coefficients']]) - - if (any(lam <= 0)) - warning('Fit method produces negative estimates of eigenvalues') - - return(lam) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls1D1.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls1D1.R deleted file mode 100644 index cbab065b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls1D1.R +++ /dev/null @@ -1,99 +0,0 @@ -# This function computes the optimal bandwidth choice for the mean -# function use GCV method by pooling the longitudinal data together. -# verbose is unused for now -# this is compatible with PACE because the GCV is calculated in a same way - -GCVLwls1D1 <- function(yy,tt, kernel, npoly, nder, dataType, verbose=TRUE) { - - # If 'yy' and 't' are vectors "cheat" and break them in - # a list of 10 elements - if ( is.vector(yy) && is.vector(tt) && !is.list(yy) && !is.list(tt) ){ - if (length(tt) < 21) { - stop("You are trying to use a local linear weight smoother in a vector with less than 21 values.\n") - } - myPartition = c(1:10, sample(10, length(tt)-10, replace=TRUE)); - yy = split(yy, myPartition) - tt = split(tt, myPartition) - dataType = 'Sparse'; - } - - t = unlist(tt); - y = unlist(yy)[order(t)]; - - t = sort(t); - - # r = diff(range(t)) - N = length(t); - r = t[N] - t[1]; - - # Specify the starting bandwidth candidates - if ( dataType == "Sparse") { - dstar = Minb(t, npoly+2); - if ( dstar > r*0.25){ - dstar = dstar * 0.75; - warning( c( "The min bandwidth choice is too big, reduce to ", dstar, "!\n")) - } - h0 = 2.5 * dstar; - }else if(dataType == "DenseWithMV"){ - h0 = 2.0 * Minb(t, npoly+1); - } else { - h0 = 1.5 * Minb(t,npoly+1); - } - if ( is.nan(h0) ){ - if ( kernel == "gauss" ){ - h0 = 0.2 * r; - }else{ - stop("The data is too sparse, no suitable bandwidth can be found! Try Gaussian kernel instead!\n") - } - } - h0 <- min(h0,r) - q = (r/(4*h0))^(1/9); - bwCandidates = sort(q^(0:9)*h0) ; - - # idx = apply(X= sapply(X=t, FUN='==', ...=sort(unique(t)) ),MARGIN=2, FUN=which) - idx = pracma::uniq(t)$n; # pracma - # This is to make sure we get the same as MATLAB PACE - # I would write them in a function (equivalent of mykernel.m) if it is worth it - # Similarly there is no reason to repeat the FOR-loop twice; this too can go into a seperate function - k0_candidates <- list('quar' = 0.9375, 'epan' = 0.7500, 'rect' = 0.5000, - 'gausvar' = 0.498677, 'gausvar1' = 0.598413, 'gausvar2' = 0.298415, 'other' = 0.398942) - if( any(names(k0_candidates) == kernel)){ - k0 = as.numeric(k0_candidates[kernel]) - } else { - k0 = as.numeric(k0_candidates$other) - } - gcvScores <- c() - # Get the corresponding GCV scores - for(i in 1:length(bwCandidates)){ - # newmu = Lwls1D(bwCandidates[i], kern=kernel, npoly=npoly, nder=nder, xin = t,yin= y,xout= sort(unique(t)))[idx] - newmu = Lwls1D(bwCandidates[i], kernel_type=kernel, npoly=npoly, nder=nder, xin = t,yin= y, win = rep(1,length(y)),xout= sort(unique(t)))[idx] - cvsum = sum((newmu -y)^2 ) - gcvScores[i] =cvsum/(1-(r*k0)/(N*bwCandidates[i]))^2 - } - - # If no bandwith gives a finite gcvScore increase the candidate bandwith and retry on a finer grid - if(all((is.infinite(gcvScores)))){ - bwCandidates = seq( max(bwCandidates), r, length.out = 2*length(bwCandidates)) - for(i in 1:length(bwCandidates)){ - # newmu = Lwls1D(bwCandidates[i], kern=kernel, npoly=npoly, nder=nder, xin = t,yin= y,xout= sort(unique(t)))[idx] - newmu = Lwls1D(bwCandidates[i], kernel_type =kernel, npoly=npoly, nder=nder, xin = t,yin= y, win = rep(1,length(y)), xout= sort(unique(t)))[idx] - cvsum = sum((newmu -y)^2 ) - gcvScores[i] =cvsum/(1-(r*k0)/(N*bwCandidates[i]))^2 - } - } - - # If the problem persist we clearly have too sparse data - if(all((is.infinite(gcvScores)))){ - stop("The data is too sparse, no suitable bandwidth can be found! Try Gaussian kernel instead!\n") - } - - bInd = which(gcvScores == min(gcvScores)); - bScr = gcvScores[bInd][1] - bOpt = max(bwCandidates[bInd]); - - if( bOpt == r){ - warning("data is too sparse, optimal bandwidth includes all the data!You may want to change to Gaussian kernel!\n") - } - bOptList <- list( 'bOpt' = bOpt, 'bScore' = bScr) - return( bOptList) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls2DV2.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls2DV2.R deleted file mode 100644 index 5f4f7c5e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GCVLwls2DV2.R +++ /dev/null @@ -1,251 +0,0 @@ -GCVLwls2DV2 <- function(obsGrid, regGrid, ngrid=NULL, dataType=rcov$dataType, error=rcov$error, kern, - rcov, h0=NULL, verbose=FALSE, CV=FALSE, t, useBW1SE = FALSE) { - - # TODO:? get the residual values only within truncated regGrid - - # Returns: a list of length 2, containing the optimal bandwidth and the gcv score. - # obsGrid: observation points. - # ngrid: I think this should not be used in the gcv function. - # CV: whether to use CV rather than GCV. Default to FALSE as not using CV. If CV is used use an integer value to specify the number of cross-validation folds. - - # This function computes the optimal bandwidth choice for the covariance surface. - # function use GCV method by pooling the longitudinal data together. - # verbose is unused for now - # this follows exactly the matlab 2D gcv selector. - - ## Get minimal bandwidth and range - r <- diff(range(obsGrid)) * sqrt(2) # sqrt(2) because the window is circular. - minBW <- GetMinb(t, dataType=rcov$dataType, obsGrid=obsGrid) - - if (missing(h0)) { - h0 <- minBW - } - - if (is.null(h0)){ - stop('the data is too sparse, no suitable bandwidth can be found! Try Gaussian Kernel instead!\n') - } - - if (kern == 'gauss') { - h0 = h0 * 0.2; - } - - ## Get Candidate Bandwidths - h0 <- min(h0, r/4) - if (h0 < r/4) { - q <- (r / (4 * h0)) ^ (1/9) - } else if (h0 < r/2) { - q <- (r / (2 * h0)) ^ (1/9) - } else if (h0 < r) { - q <- (r / h0) ^ (1/9) - } else { - stop('Data is too sparse. The minimal bandwidth is the range of data') - } - bw <- (q ^ seq(0,9,length.out = 10)) * h0 # from h0 to r / 4 - - - ## Set GCV/CV options - opth <- h0 - - leave <- FALSE - iter <- 0 - maxIter <- 1 - if (CV != FALSE) { - # We partition the raw covariance rather than partition the individuals. - fold <- CV - partition <- CreateFolds(1:nrow(rcov$tPairs), k=fold) - } - - minBWInvalid <- FALSE - while (!leave && iter < maxIter) { - if (minBWInvalid){ - minBW <- bw[1] - } - - #Scores <- rep(Inf, length(bw)) - Scores <- matrix(Inf, nrow = length(bw), ncol = 2); colnames(Scores) <- c('SUM','SD'); - # try the bandwidths large to small in order to save time due to sparseness in the windows. - for (i in rev(seq_along(bw))) { - h <- bw[i] - - if (class(rcov) == 'BinnedRawCov') { - if (CV == FALSE) # GCV - Scores[i,'SUM'] <- getGCVscoresV2(h, kern, rcov$tPairs, rcov$meanVals, win=rcov$count, regGrid=regGrid, RSS=rcov$RSS, verbose=verbose) - else # CV - Scores[i,] <- getCVscoresV2(partition, h, kern, rcov$tPairs, rcov$meanVals, win=rcov$count, regGrid=regGrid, RSS=rcov$RSS, verbose=verbose) - } else { - if (CV == FALSE) # GCV - Scores[i,'SUM'] <- getGCVscoresV2(h, kern, rcov$tPairs, rcov$cxxn, regGrid=regGrid, verbose=verbose) - else # CV - Scores[i,] <- getCVscoresV2(partition, h, kern, rcov$tPairs, rcov$cxxn, regGrid=regGrid, verbose=verbose) - } - - if (is.infinite(Scores[i,'SUM'])) { - minBWInvalid <- TRUE - if (i < length(bw)) { - if (minBWInvalid) { - minBW <- bw[i + 1] - minBWInvalid <- FALSE - } - } - break; # This will help break out of the loop if the BW is too small to make sense - } - } - - #optInd <- which.min(Scores) - #opth <- bw[optInd] - #optgcv <- Scores[optInd] - - if(is.infinite(min(Scores[,'SUM']))){ - opth <- max(bw) - optgcv <- Inf - # } else if( sum(!is.infinite(Scores)) >= 2 ){ # Given we have at least two points we can fit "something" - # nonInf = which(!is.infinite(Scores)); - # costSpline = spline(bw[nonInf], Scores[nonInf]) - # opth = costSpline$x[which.min(costSpline$y)] - # optgcv = min(costSpline$y) - } else { - if(useBW1SE){ - ind = max(which( (Scores[,'SUM']/fold) < (min(Scores[,'SUM'])/fold) + Scores[which.min(Scores[,'SUM']),'SD']/sqrt(fold) )) - opth <- bw[ind] - optgcv <- Scores[ind,'SUM'] - } else { - ind <- which.min(Scores[,'SUM']) - opth <- bw[ind] - optgcv <- Scores[ind,'SUM'] - } - } - - ## Check that what we found is coherent. - if (opth >= r - 1e-12) { - minBW <- r - leave <- TRUE - stop('Data is too sparse. The optimal bandwidth equals to the range of input time points. Try Gaussian kernel.') - } - if ( (abs(opth - max(bw)) > 1e-12) && !is.infinite(optgcv)) - leave <- TRUE - else if (is.infinite(optgcv)) { - if (verbose) - warning('Data is too sparse, retry with larger bandwidths!') - h0 <- max(bw) * 1.01 - } else if ( (abs(opth - max(bw)) > 1e-12) ) { - warning('Optimal bandwidth not found in the candidate bandwidths. Retry with larger bandwidths') - h0 <- max(bw) - } - if (!leave) { - newr <- seq(0.5, 1, by=0.05) * r # ??? this can be quite slow - ind <- which(newr > h0)[1] - q <- (newr[ind] / h0) ^ (1/9) - bw <- q ^ (0:9) * h0 - if (verbose) { - message('New bwuserCov candidates:\n') - print(bw) - } - iter <- iter + 1 - } - } # The "while (!leave && iter < maxIter) ..." end here - - ret <- list(h=opth, gcv=optgcv, minBW=minBW) - if (CV != FALSE) - names(ret)[2] <- 'cv' - - return(ret) - -} - - -getGCVscoresV2 <- function(bw, kern, xin, yin, win=NULL, regGrid, RSS=NULL, verbose=FALSE) { - # ...: passed on to Lwls2D - # RSS: for implementing GCV of binned rcov. - # browser() - if (is.null(win)) - win <- rep(1, length(yin)) - - fit <- tryCatch(Lwls2D(bw, kern, xin=xin, yin=yin, win=win, xout1=regGrid, xout2=regGrid), error=function(err) { - if (verbose) { - message('Invalid bandwidth. Try enlarging the window size.\n') - } - return(Inf) - }) - - # Catch - if (is.infinite(fit[1])) - return(Inf) - - # workaround for degenerate case. - if (any(is.nan(fit))) - return(Inf) - - obsFit <- interp2lin(regGrid, regGrid, fit, xin[, 1], xin[, 2]) - - # residual sum of squares - res <- sum((yin - obsFit) ^ 2 * win) - if (!is.null(RSS)) - res <- res + sum(RSS) - - # kernel at x=0 - k0 <- KernelAt0(kern) - N <- sum(win) - r <- diff(range(xin[, 1])) - bottom <- max(1 - 3 * (1 / N) * (r * k0 / bw)^2, 0) - GCV <- res / bottom^2 - - return(GCV) -} - -# k-fold CV -# partition: a list of testset observation indices, returned by caret::createFolds -# ...: passed on to Lwls2D -getCVscoresV2 <- function(partition, bw, kern, xin, yin, win=NULL, regGrid, RSS=NULL, verbose=FALSE) { - - if (is.null(win)) - win <- rep(1, length(yin)) - - n <- length(yin) - - # browser() - cvSubSum <- sapply(partition, function(testSet) { - # browser() - fit <- tryCatch(Lwls2D(bw, kern, xin=xin, yin=yin, win=win, xout1=regGrid, xout2=regGrid, subset=-testSet), error=function(err) { - if (verbose) { - message('Invalid bandwidth. Try enlarging the window size.\n') - } - return(Inf) - }) - - # Catch - if (is.infinite(fit[1])) - return(Inf) - - # workaround for degenerate case. - if (any(is.nan(fit))) - return(Inf) - - obsPred <- interp2lin(regGrid, regGrid, fit, xin[testSet, 1], xin[testSet, 2]) - tmpSum <- sum((yin[testSet] - obsPred) ^ 2 * win[testSet]) - - # residual sum of squares - if (!is.null(RSS)) - tmpSum <- tmpSum + sum(RSS[testSet]) - - return(tmpSum) - }) - - return(c(sum(cvSubSum), sd(cvSubSum))) -} - -KernelAt0 <- function(kern) { - if (kern == 'quar') - k0 <- 0.9375 - else if (kern == 'epan') - k0 <- 0.75 - else if (kern == 'rect') - k0 <- 0.5 - else if (kern == 'gausvar') - k0 <- 0.498677850501791 - else if (kern == 'gauss') - k0 <- 0.398942280401433 - else - stop('Unknown kernel') - - return(k0) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GenerateFunctionalData.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GenerateFunctionalData.R deleted file mode 100644 index 2473400c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GenerateFunctionalData.R +++ /dev/null @@ -1,32 +0,0 @@ -GenerateFunctionalData <-function(N, M, mu=NULL, lambda=NULL, k = 2, basisType='cos'){ - - if(N <2){ - stop("Sampes of size 1 are irrelevant.") - } - if(M <20){ - stop("Dense samples with less than 20 observations per subject are irrelevant.") - } - s <- seq(0,1,length.out = M) - if(is.null(mu)){ - mu = rep(0,M); - } - if(length(mu) != M){ - stop("Make sure that 'M' and the number of points over which 'mu' is evaluated is the same.") - } - if(is.null(lambda)){ - lambda = seq(k,1,-1) - } - if(k != length(lambda)){ - stop("Make sure you provide 'lambda's for all 'k' modes of variation.") - } - if( !(basisType %in% c('cos','sin','fourier'))){ - stop("Make sure you provide a valid parametric basis.") - } - - Ksi <- apply(matrix(rnorm(N*k), ncol=k), 2, scale) %*% diag(lambda, k) - Phi <- CreateBasis(pts= s, type= basisType, K = k) - - yTrue <- t(matrix(rep(mu,N), nrow=M)) + Ksi %*% t(Phi) - return(list(Y = yTrue, Phi = Phi) ) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinNum.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinNum.R deleted file mode 100644 index b73cac82..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinNum.R +++ /dev/null @@ -1,45 +0,0 @@ -GetBinNum = function(n, m, dataType, verbose ){ - - # Get the number of bins - # n : number of curves - # m : median or max value of number of time-points - # dataType : indicator about structure of the data - # (dense (2), or dataType data with missing values (1) or sparse (0)) - # verbose : outpit diagnostics/progress - - numBin = NULL; - if (m <= 20){ - if (dataType =='Sparse'){ - str = 'Median of ni'; - } else { - str = 'Maximum of ni'; - } - if (verbose){ - message(paste0(str, 'is no more than 20! No binning is performed!\n')) - } - return(NULL) - } - - - if (m >400){ - numBin = 400; - } - - if (n > 5000){ - mstar = max(20,(((5000-n)*19)/2250)+400); - if (mstar < m){ - numBin = ceiling(mstar); - } else { - if (verbose){ - message('No binning is needed!\n'); - } - return(NULL) - } - } - - if( verbose && is.null(numBin) ) { - message('No binning is needed!\n'); - } - - return(numBin) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedCurve.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedCurve.R deleted file mode 100644 index 697c2f20..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedCurve.R +++ /dev/null @@ -1,120 +0,0 @@ -GetBinnedCurve <- function(x, y, M = 10, isMnumBin = TRUE, - nonEmptyOnly = FALSE, limits = c(min(x),max(x)) ){ - - # x : 1 * n vector of values to be binned - # y : 1 * n vector of values corresponding to x - # M : positive interger denotes the number of bins to be use or - # positive value of the width of each equidistant bin - # isMnumBin : use number of bin (TRUE) or bandwith h (FALSE) - # nonEmptyOnly : output only non-empty bins (TRUE) - # limits : lower and upper limit of domain x (a0, b0) - - - # Function 'GetBinnedCurve' starts here - if( M<0 ){ - stop("GetBinnedCurve is aborted because the argument: M is invalid!\n"); - } - - if(!isMnumBin){ - # Use bandwidth h - h = M; - if ( h >= diff(range(x))){ - res = getResMisOne(x,y,h) - return(res); - } - - xx = seq(limits[1],limits[2],by=h) - M = length(xx)-1; - N = M + 1; - midpoint = xx[1:(N-1)]+(h/2); - print(midpoint) - zList = GetBins(x,y,xx) - newy = zList$newy - count = zList$count - - if (nonEmptyOnly){ - midpoint = midpoint[count > 0]; - newy = newy[count > 0]; - count = count[count > 0]; - M = length(midpoint); - } - - res = list(midpoint, newy, count, M, h) - return(res); - } else { - # Use number of bins M - M = ceiling(M) - if (M == 1){ - res = getResMisOne(x,y); - return(res); - } else { - h <- diff(limits) / M - xx <- c(limits[1], - seq(limits[1] + h / 2, limits[2] - h / 2, length.out=M - 1), - limits[2]) - N <- length(xx); - midpoint <- seq(limits[1], limits[2], length.out=M) - # browser() - - zList = GetBins(x,y,xx) - newy = zList$newy - count = zList$count - - if (nonEmptyOnly){ - midpoint = midpoint[count > 0]; - newy = newy[count > 0]; - count = count[count > 0]; - M = length(midpoint); - } - - res = list(midpoint = midpoint, newy = newy, count = count, numBin = M, binWidth = h) - return(res); - } - - } -} - -# Auxilary function 'GetBins' -GetBins <- function(x,y, xx){ - N <- length(xx) - count = rep(0,N-1); - newy = count; - - for (i in 2:(N-1)){ - ids = ((x >= xx[i-1]) & (x < xx[i])); - if (all(ids == 0)){ - count[i-1] = 0; - newy[i-1] = NaN; - } else { - count[i-1] = sum(ids); - newy[i-1] = mean(y[ids]); - } - } - - # print('GetBins used') - # for the last bin, include the left and right end point - ids = ((x >= xx[i]) &(x <= xx[i+1])); - if (all(ids == 0)){ - count[i] = 0; - newy[i] = NaN; - }else { - count[i] = sum(ids); - newy[i] = mean(y[ids]); - } - - zList = list(newy = newy, count = count) - return( zList ); -} - - # Auxilary function 'GetResMisOne' -getResMisOne <- function(x, y, h = diff(range(x))){ - r = h; - M = 1; - midpoint = r*0.5; - count = length(x); - newy = mean(y); - zList = list(midpoint, newy, count, M, h) - return( zList ); - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedDataset.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedDataset.R deleted file mode 100644 index 109d7edf..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetBinnedDataset.R +++ /dev/null @@ -1,56 +0,0 @@ -GetBinnedDataset <- function (y, t, optns){ - - # Bin the data 'y' - # y : n-by-1 list of vectors - # t : n-by-1 list of vectors - - BinDataOutput <- list( newy=NULL, newt=NULL); - - dataType = optns$dataType; - verbose = optns$verbose; - numBins = optns$numBins; - tt = unlist(t); - a0 = min(tt); - b0 = max(tt); - - n = length(t); - ni = sapply(FUN= length,t); - - if (dataType == 'Sparse'){ - m = median(ni) - } else { - m = max(ni); - } - - # Determine the number of bins automatically if numBins is null - if (is.null(numBins) && optns$useBinnedData =='AUTO'){ - numBins = GetBinNum(n,m,dataType,verbose) - # and if it is still NULL return the unbinned data - if (is.null(numBins)){ - BinDataOutput$newt = t; - BinDataOutput$newy = y; - return( BinDataOutput ) - } else if (optns$useBinnedData == 'AUTO') { - warning('Automatically binning measurements. To turn off this warning set option useBinnedData to \'FORCE\' or \'OFF\'') - } - } - # otherwise use the one provided by the user (ceiled) - numBins = ceiling(numBins); - - resList <- lapply(1:n, function(i) - GetBinnedCurve(t[[i]], y[[i]], numBins, TRUE, TRUE, c(a0, b0))) - BinDataOutput[['newt']] <- lapply(resList, `[[`, 'midpoint') - BinDataOutput[['newy']] <- lapply(resList, `[[`, 'newy') - - # for (i in 1:n){ - # res = GetBinnedCurve(t[[i]], y[[i]], numBins, TRUE, TRUE, c(a0, b0)); - # BinDataOutput$newt[[i]] = res$midpoint; - # BinDataOutput$newy[[i]] = res$newy; - # } - - result <- list( 'newt' = BinDataOutput$newt, 'newy' = BinDataOutput$newy, - numBins = numBins) - return(result) -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCEScores.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCEScores.R deleted file mode 100644 index 0f047445..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCEScores.R +++ /dev/null @@ -1,105 +0,0 @@ -# obsGrid: supports fittedCov and phi. May be a truncated version. -# Assumes each tVec in t are all supported on obsGrid. -# return: ret is a 3 by n array, with the first row containing the xiEst, second row containing the xiVar, and the third containing the fitted values. -GetCEScores <- function(y, t, optns, mu, obsGrid, fittedCov, lambda, phi, sigma2) { - - if (length(lambda) != ncol(phi)) - stop('No of eigenvalues is not the same as the no of eigenfunctions.') - - if (is.null(sigma2)) - sigma2 <- 0 - - Sigma_Y <- fittedCov + diag(sigma2, nrow(phi)) - - MuPhiSig <- GetMuPhiSig(t, obsGrid, mu, phi, Sigma_Y) - ret <- mapply(function(yVec, muphisig) - GetIndCEScores(yVec, muphisig$muVec, lambda, muphisig$phiMat, muphisig$Sigma_Yi, verbose=optns$verbose), - y, MuPhiSig) - - return(ret) -} - - -GetMuPhiSig <- function(t, obsGrid, mu, phi, Sigma_Y) { - - #obsGrid <- signif(obsGrid, 14) - ret <- lapply(t, function(tvec) { - #ind <- match(signif(tvec, 14), obsGrid) - ind <- match(tvec, obsGrid) - if (sum(is.na(ind)) != 0) - stop('Time point not found in obsGrid.') - - return(list(muVec=mu[ind], phiMat=phi[ind, , drop=FALSE], Sigma_Yi=Sigma_Y[ind, ind, drop=FALSE])) - }) - - return(ret) -} - - -GetIndCEScores <- function(yVec, muVec, lamVec, phiMat, Sigma_Yi, newyInd=NULL, verbose=FALSE) { - - if (length(yVec) == 0) { - if (verbose) { - warning('Empty observation found, possibly due to truncation') - } - return(list(xiEst=matrix(NA, length(lamVec)), xiVar=matrix(NA, length(lamVec), length(lamVec)), fittedY=matrix(NA, 0, 0))) - } - -# -## When an individual has only one observation, the leave-one-out predicted Y is NA. -# if (length(yVec) == 1 && !is.null(newyInd)) { -# newPhi <- matrix(NA, ncol=length(lamVec)) -# newMu <- NA -# } -# -# if (!is.null(newyInd) && length(yVec) != 1) { -# # newy <- yVec[newyInd] -# newPhi <- phiMat[newyInd, , drop=FALSE] -# newMu <- muVec[newyInd] -# -# yVec <- yVec[-newyInd] -# muVec <- muVec[-newyInd] -# phiMat <- phiMat[-newyInd, , drop=FALSE] -# Sigma_Yi <- Sigma_Yi[-newyInd, -newyInd, drop=FALSE] -# } -# -# Lam <- diag(x=lamVec, nrow = length(lamVec)) -# LamPhi <- Lam %*% t(phiMat) -# LamPhiSig <- LamPhi %*% solve(Sigma_Yi) -# xiEst <- LamPhiSig %*% matrix(yVec - muVec, ncol=1) -# xiVar <- Lam - LamPhi %*% t(LamPhiSig) -# -# -# fittedY <- if(is.null(newyInd)) -# muVec + phiMat %*% xiEst else -# newMu + newPhi %*% xiEst -# -# ret <- list(xiEst=xiEst, xiVar=xiVar, fittedY=fittedY) -# -# return(ret) - - # Do all subscripting stuff in R - if (!is.null(newyInd)) { - if (length(yVec) != 1){ - newPhi <- phiMat[newyInd, , drop=FALSE] - newMu <- muVec[newyInd] - yVec <- yVec[-newyInd] - muVec <- muVec[-newyInd] - phiMat <- phiMat[-newyInd, , drop=FALSE] - Sigma_Yi <- Sigma_Yi[-newyInd, -newyInd, drop=FALSE] - return ( GetIndCEScoresCPPnewInd( yVec, muVec, lamVec, phiMat, Sigma_Yi, newPhi, newMu) ) - } else { - # This should be an uncommon scenario - Lam <- diag(x=lamVec, nrow = length(lamVec)) - LamPhi <- Lam %*% t(phiMat) - LamPhiSig <- LamPhi %*% solve(Sigma_Yi) - xiEst <- LamPhiSig %*% matrix(yVec - muVec, ncol=1) - xiVar <- Lam - LamPhi %*% t(LamPhiSig) - return( list(xiEst=xiEst, xiVar = xiVar, fittedY=NA) ) - } - } - return( GetIndCEScoresCPP( yVec, muVec, lamVec, phiMat, Sigma_Yi) ) - # Unfortunately function overloading is not yet available in Rcpp - # GetIndCEScoresCPPnewInd and GetIndCEScoresCPP are nearly identical. - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCount.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCount.R deleted file mode 100644 index fb3c0c06..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCount.R +++ /dev/null @@ -1,15 +0,0 @@ -# get the count number of time pairs output by GetRawCov -# Output: a data.frame of three columns: t1, t2, count -GetCount <- function(tpairs) { - # browser() - tab <- table(tpairs[, 1], tpairs[, 2]) - pts <- sort(unique(as.numeric(tpairs))) - ret <- data.frame(expand.grid(pts, pts), as.numeric(tab)) - names(ret) <- c('t1', 't2', 'count') - ret <- ret[ret$count != 0, ] - - return(ret) -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCovDense.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCovDense.R deleted file mode 100644 index 2f2e3086..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCovDense.R +++ /dev/null @@ -1,71 +0,0 @@ -# This function obtains the sample covariance matrix at observed grid -# for dense regular functional data - -###### -# Input: -###### -# ymat: n by p matrix of dense regular functional data -# mu: p-dim vector, estimated cross-sectional mean -# optns: options for FPCA function -# y: list of amplitude information -# t: list of time information -###### -# Output: -###### -# a SmoothCov object containing: -# - p by p matrix of sample cov surface estimation on observed grid -# - NULL for all other entires -########################################################################## - -GetCovDense <- function(ymat, mu, optns) { - if(!(optns$dataType %in% c('Dense', 'DenseWithMV'))){ - stop('Sample Covariance is only applicable for option: dataType = "Dense" or "DenseWithMV"!') - } - # if( optns$muCovEstMethod == 'cross-sectional' ){ - n = nrow(ymat) - m = ncol(ymat) - if( !is.null(optns$userMu) ){ - ymat = ymat - matrix(rep(times= nrow(ymat), mu), ncol= ncol(ymat), byrow=TRUE) - K = matrix( rep(0,m^2), m) - for( i in (1:m)){ - for( j in (1:m)){ - XcNaNindx = which(is.na(ymat[,i])); - YcNaNindx = which(is.na(ymat[,j])); - NaNrows = union(XcNaNindx, YcNaNindx); - # Find inner product of the columns with no NaN values - indx = setdiff( 1:n, NaNrows) - K[i,j] = sum(ymat[indx,i] * ymat[indx,j]) * (1/(n-1-length(NaNrows))); - } - } - } else { - K = cov(ymat, use = 'pairwise.complete.obs') # sample variance using non-missing data - } - K = 0.5 * (K + t(K)) # ensure that K is symmetric - - if (any(is.na(K))) { - stop("Data is too sparse to be considered DenseWithMV. Remove sparse observations or specify dataType='Sparse' for FPCA") - } - - if (optns[['error']] == TRUE) { - # 2nd order difference method for finding sigma2 - if (!is.null(optns[['userSigma2']])) { - sigma2 <- optns[['userSigma2']] - } else { - #browser() - ord <- 2 - sigma2 <- mean(diff(t(ymat), differences=ord)^2, na.rm=TRUE) / - choose(2 * ord, ord) - diag(K) <- diag(K) - sigma2 - } - } else { - sigma2 <- NULL - } - - ret = list('rawCov' = NULL, 'smoothCov' = K, 'bwCov' = NULL, - 'sigma2' = sigma2, outGrid = NULL) - class(ret) = "SmoothCov" - return(ret) - # } else { - # stop('optns$muCovEstMethod is unknown!\n') - # } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYX.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYX.R deleted file mode 100644 index dec532d8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYX.R +++ /dev/null @@ -1,61 +0,0 @@ -#' Make cross-correlation matrix from auto- and cross-covariance matrix -#' -#' Make cross-correlation matrix from auto- andcross-covariance matrix -#' -#' @param ccXY The cross-covariance matrix between variables X and Y. -#' @param ccXX The auto-covariance matrix of variable X or the diagonal of that matrix. -#' @param ccYY The auto-covariance matrix of variable Y or the diagonal of that matrix. -#' -#' @return A cross-correlation matrix between variables X and Y. -#' -#' @export -#' -#' -GetCrCorYX <- function(ccXY, ccXX , ccYY){ - - if(!is.matrix(ccXY)){ - stop('The cross-covariance matrix is must be a matrix.') - } - - if(!is.matrix(ccXX) && !is.vector(ccXX)){ - stop('The auto-covariance matrix for X must be a matrix or vector.') - } - - if(!is.matrix(ccYY) && !is.vector(ccYY)){ - stop('The auto-covariance matrix for Y must be a matrix or vector.') - } - - if(is.matrix(ccYY)){ - diagYY = diag(ccYY) - } else { - diagYY =(ccYY) - } - - if(is.matrix(ccXX)){ - diagXX = diag(ccXX) - } else { - diagXX =(ccXX) - } - - if( length(diagXX) != dim(ccXY)[1] ){ - stop('The cross-covariance matrix for XY and the provided covariance for X are incompatible.') - } - - if( length(diagYY) != dim(ccXY)[2] ){ - stop('The cross-covariance matrix for XY and the provided covariance for Y are incompatible.') - } - - if( any(1e-12> diagXX)){ - stop('The provided covariance for X are unreasonable small or negative. Rescale/check your data.') - } - - if( any(1e-12> diagYY)){ - stop('The provided covariance for X are unreasonable small or negative. Rescale/check your data.') - } - - # return (solve(sqrt(diag(diagXX))) %*% ccXY %*% solve(sqrt(diag(diagYY)))) - return( diag(1/sqrt(diagXX) , nrow = length(diagXX)) %*% ccXY %*% diag(1/sqrt(diagYY), nrow = length(diagYY)) ) -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYZ.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYZ.R deleted file mode 100644 index 6d8adcc5..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCorYZ.R +++ /dev/null @@ -1,56 +0,0 @@ -#' Make cross-correlation matrix from auto- and cross-covariance matrix -#' -#' Make cross-correlation matrix from auto- andcross-covariance matrix -#' -#' @param ccYZ The cross-covariance vector between variables Y and Z (n-by-1). -#' @param acYY The auto-covariance n-by-n matrix of variable Y or the (n-by-1) diagonal of that matrix. -#' @param covZ The (scalar) covariance of variable Z. -#' -#' @return A cross-correlation matrix between variables Y (functional) and Z (scalar). -#' -#' @export -#' -GetCrCorYZ <- function(ccYZ, acYY , covZ){ - - acYY = as.matrix(acYY); # Such a messy things because R does not treat vectors as matrices. - - # Check basic sizes - if(1 != length(covZ)){ - stop('The variance of Z must be a scalar.') - } - if(!is.matrix(ccYZ) && !is.vector(ccYZ)){ - stop('The cross-covariance of Y and Z is must be a matrix or a vector.') - } - if( is.matrix(ccYZ) && (1 != dim(ccYZ)[2]) ){ - stop('The cross-covariance matrix of a functional variable Y and a scalar variable Z is not n-by-1.') - } - N = length(ccYZ); - - if( N^2 == length(acYY)){ - diagYY = diag(acYY) - } else { - if( 1 != dim(acYY)[2]){ - stop('The auto-covariance is not n-by-n or n-by-1 ') - } else { - diagYY = as.vector(acYY) - } - } - - diagZ =(covZ[1]) - - if( length(diagYY) != length(ccYZ) ){ - stop('The cross-covariance for YZ and the provided covariance for Y are of incompatible sizes.') - } - if( any(1e-12> diagYY)){ - stop('The provided covariance for X are unreasonable small or negative. Rescale/check your data.') - } - if( any(1e-12> diagZ)){ - stop('The provided covariance for Z are unreasonable small or negative. Rescale/check your data.') - } - - # return (solve(sqrt(diag(diagYY))) %*% ccYZ %*% solve(sqrt(diag(diagZ)))) - return( diag(1/sqrt(diagYY) , nrow = length(diagYY)) %*% ccYZ %*% diag(1/sqrt(diagZ), nrow = length(diagZ)) ) -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX.R deleted file mode 100644 index c28fff72..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX.R +++ /dev/null @@ -1,247 +0,0 @@ -#' Functional Cross Covariance between longitudinal variable Y and longitudinal variable X -#' -#' Calculate the raw and the smoothed cross-covariance between functional predictors using bandwidth bw or estimate that bw using GCV. -#' -#' @param Ly1 List of N vectors with amplitude information (Y) -#' @param Lt1 List of N vectors with timing information (Y) -#' @param Ymu1 Vector Q-1 Vector of length nObsGrid containing the mean function estimate (Y) -#' @param bw1 Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (Y) -#' @param Ly2 List of N vectors with amplitude information (X) -#' @param Lt2 List of N vectors with timing information (X) -#' @param Ymu2 Vector Q-1 Vector of length nObsGrid containing the mean function estimate (X) -#' @param bw2 Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (X) -#' @param useGAM Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE) -#' @param rmDiag Indicator to remove the diagonal element when smoothing (default: FALSE) -#' @param kern String specifying the kernel type (default: FALSE; see ?FPCA for details) -#' @param bwRoutine String specifying the routine used to find the optimal bandwidth 'grid-search', 'bobyqa', 'l-bfgs-b' (default: 'l-bfgs-b') -#' If the variables Ly1 and Ly2 are in matrix form the data are assumed dense -#' and only the raw cross-covariance is returned. One can obtain Ymu1 and Ymu2 -#' from \code{FPCA} and \code{ConvertSupport}. -#' @return A list containing: -#' \item{smoothedCC}{The smoothed cross-covariance as a matrix (currently only 51 by 51)} -#' \item{rawCC}{The raw cross-covariance as a list} -#' \item{bw}{The bandwidth used for smoohting as a vector of lengh 2} -#' \item{score}{The GCV score associated with the scalar used} -#' \item{smoothGrid}{The grid over which the smoothed cross-covariance is evaluated} -#' @examples -#' Ly1= list( rep(2.1,7), rep(2.1,3),2.1 ); -#' Lt1 = list(1:7,1:3, 1); -#' Ly2 = list( rep(1.1,7), rep(1.1,3),1.1); -#' Lt2 = list(1:7,1:3, 1); -#' Ymu1 = rep(55,7); -#' Ymu2 = rep(1.1,7); -#' AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2) -#' -#' @references -#' \cite{Yang, Wenjing, Hans-Georg Mueller, and Ulrich Stadtmueller. "Functional singular component analysis." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73.3 (2011): 303-324} -#' @export - -GetCrCovYX <- function(bw1 = NULL, bw2 = NULL, Ly1, Lt1 = NULL, Ymu1 = NULL, Ly2, Lt2 = NULL, Ymu2 = NULL, - useGAM = FALSE, rmDiag=FALSE, kern='gauss', bwRoutine = 'l-bfgs-b') { - - if (kern != 'gauss' && (is.null(bw1) || is.null(bw2))) { - stop('Cannot select bandwidth for non-Gaussian kernel') - } - - if( !(bwRoutine %in% c('grid-search', 'bobyqa', 'l-bfgs-b') ) ){ - stop("'bwRoutine' argument is invalid.") - } - - # If only Ly1 and Ly2 are available assume DENSE data - if( is.matrix(Ly1) && is.null(Lt1) && is.null(Ymu1) && is.matrix(Ly2) && is.null(Lt2) && is.null(Ymu2)){ - rawCC <- GetRawCrCovFuncFunc(Ly1 = Ly1, Ly2 = Ly2) - return ( list(smoothedCC = NULL, rawCC = rawCC, bw = NULL, score = NULL) ) - } - - # Otherwise assume you have SPARSE data - if( is.null(Ymu1) || is.null(Ymu2)){ - stop("Both functional means must be provided.") - } - - # Get the Raw Cross-covariance - rawCC = GetRawCrCovFuncFunc(Ly1 = Ly1, Lt1 = Lt1, Ymu1 = Ymu1, Ly2 = Ly2, Lt2 = Lt2, Ymu2 = Ymu2) - # Use a heuristic to decide when to bin - if (!useGAM && sum(duplicated(rawCC$tpairn)) >= 0.2 * length(rawCC$rawCCov)) { - # message('Binning rawCC') - rawCC <- BinRawCov(rawCC) - } else { - # rename the fields to be the same as the binned rawCC - names(rawCC)[names(rawCC) == 'rawCCov'] <- 'meanVals' - names(rawCC)[names(rawCC) == 'tpairn'] <- 'tPairs' - rawCC$count <- rep(1, length(rawCC$meanVals)) - } - - if (rmDiag) { - diagInd <- rawCC$tPairs[, 1] == rawCC$tPairs[, 2] - rawCC$tDiag <- rawCC$tPairs[diagInd, , drop=FALSE] - rawCC$diagMeans <- rawCC$meanVals[diagInd] - rawCC$diagCount <- rawCC$count[diagInd] - rawCC$diagRSS <- rawCC$RSS[diagInd] - rawCC$tPairs <- rawCC$tPairs[!diagInd, , drop=FALSE] - rawCC$meanVals <- rawCC$meanVals[!diagInd] - rawCC$count <- rawCC$count[!diagInd] - rawCC$RSS <- rawCC$RSS[!diagInd] - } - - # Calculate the observation and the working grids - ulLt1 = unlist(Lt1); ulLt2 = unlist(Lt2) - obsGrid1 = sort(unique(ulLt1)); obsGrid2 = sort(unique(ulLt2)) - - workGrid1 = seq(obsGrid1[1], max(obsGrid1), length.out = 51) - workGrid2 = seq(obsGrid2[1], max(obsGrid2), length.out = 51) - workGrid12 = matrix(c(workGrid1, workGrid2),ncol= 2) - - if (useGAM == TRUE){ - # stop('Cannot be used on binned rawCC') # we cannot use binning for useGAM - Qdata = data.frame(x = rawCC$tPairs[,1], y = rawCC$tPairs[,2], z = rawCC$meanVals, group = rawCC$IDs ) - # I comparsed with 're', ds' and 'gp' too, and 'tp' seems to have a slight edge for what we want - # myGAM = mgcv::gamm( z ~ s(x,y, bs =c('tp','tp')), random=list(group=~1) , data= Qdata)$gam - myGAM = mgcv::gam( z ~ s(x,y, bs =c('tp','tp')), data= Qdata) - estPoints = data.frame( x= rep(workGrid1, times=51), y= rep(workGrid2, each =51), group = rep(3,51*51 )) - smoothedCC = matrix(predict(myGAM, estPoints), 51) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = NULL, score = NULL) ) - } - - # If the bandwidth is known already smooth the raw CrCov - if( is.numeric(bw1) && is.numeric(bw2)){ - smoothedCC <- smoothRCC2D(rcov =rawCC, bw1, bw2, workGrid1, workGrid2, - kern=kern) - # potentially incorrect GCV score if the kernel is non-Gaussian - score = GCVgauss2D(smoothedCC = smoothedCC, smoothGrid = workGrid12, - rawCC = rawCC$meanVals, rawGrid = rawCC$tPairs, - bw1 = bw1, bw2 = bw2) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = c(bw1, bw2), score = score, smoothGrid = workGrid12 ) ) - - # If the bandwidths are unknown use GCV to take find it - } else { - # Construct candidate bw's - bwCandidates <- getBWidths(Lt1, Lt2) - minGcvScores = Inf - - if(bwRoutine == 'grid-search'){ - # Find their associated GCV scores - gcvScores = rep(Inf, nrow(bwCandidates)) - for (i in 1:length(bwCandidates)){ - gcvScores[i] = theCostFunc(bwCandidates[i,], rawCC, workGrid1, workGrid2, kern, workGrid12) - } - # Pick the one with the smallest score - minimumScore = min(gcvScores, na.rm=TRUE) - if( minimumScore == Inf) { - stop("It seems that the minimum GCV score equals infinity. Stopping 'GetCrCovYX'") - } - bInd = which(gcvScores == minimumScore); - bOpt1 = max(bwCandidates[bInd,1]); - bOpt2 = max(bwCandidates[bInd,2]); - minGcvScores = minimumScore - } else { - - bwRanges = apply(bwCandidates,2, range) - upperB = bwRanges[2,] - lowerB = bwRanges[1,] - - if( !is.element('minqa', installed.packages()[,1]) && bwRoutine == 'bobyqa'){ - warning("Cannot use 'minqa::bobyqa' to find the optimal bandwidths. 'minqa' is not installed. We will do an 'L-BFGS-B' search.") - bwRoutine == 'l-bfgs-b' - } - - if( bwRoutine == 'l-bfgs-b' ){ - theSols = optim(fn = theCostFunc, par = upperB*0.95, # Starting value that "is safe" - upper = upperB, lower = lowerB, method ='L-BFGS-B', control = list(maxit = 51), - rawCC = rawCC, workGrid1 = workGrid1, workGrid2 = workGrid2, kern = kern, workGrid12 = workGrid12) - minGcvScores = theSols$value - } else { # when BOBYQA is available - theSols = minqa::bobyqa(fn = theCostFunc, par = upperB*0.95, # Starting value that "is safe" - upper = upperB, lower = lowerB, control = list(maxfun = 41), - rawCC, workGrid1, workGrid2, kern, workGrid12) - minGcvScores = theSols$fval - } - - bOpt1 = theSols$par[1] - bOpt2 = theSols$par[2] - - if( bOpt1 > 0.75 * upperB[1] && bOpt2 > 0.75 * upperB[2] ){ - warning('It seems that the bandwidth selected by the solvers is somewhat large. Maybe you are in local minima.') - } - } - smoothedCC <- smoothRCC2D(rcov=rawCC, bw1 =bOpt1, bw2 =bOpt2, workGrid1, workGrid2, kern=kern) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = c(bOpt1, bOpt2), smoothGrid = workGrid12, - score = minGcvScores) ) - } -} - -theCostFunc <- function(xBW, rawCC, workGrid1, workGrid2, kern, workGrid12){ - smoothedCC <- try(silent=TRUE, smoothRCC2D(rcov=rawCC, bw1 = xBW[1], bw2 = xBW[2], - workGrid1, workGrid2, kern=kern) ) - if( is.numeric(smoothedCC) ){ - theCost = GCVgauss2D( smoothedCC = smoothedCC, smoothGrid = workGrid12, - rawCC = rawCC$meanVals, rawGrid = rawCC$tPairs, bw1 = xBW[1], bw2 = xBW[2]) - } else { - theCost = Inf - } - return(theCost) -} - -getBWidths <- function(Lt1, Lt2){ - - numPoints = 10; - oldVersion = FALSE - if(oldVersion == TRUE){ - - # bwCandidates <- matrix(rep(0,numPoints * numPoints * 2),ncol=2) - # h0 = 2.0 * Minb( sort(ulLt1), 2+1); # 2x the bandwidth needed for at least 3 points in a window - # r = diff(range(ulLt1)) - # q = (r/(4*h0))^(1/9); - # bwCandidates[,1] = rep( sort(q^( seq(0,12,length.out=numPoints) )*h0), times= numPoints); - # h0 = 2.0 * Minb( sort(ulLt2), 2+1); # 2x the bandwidth needed for at least 3 points in a window - # r1 = diff(range(ulLt2)) - # q = (r/(4*h0))^(1/9); - # bwCandidates[,2] = rep( sort(q^( seq(0,12,length.out=numPoints) )*h0), each= numPoints); - - } else { - - bwCandidates <- matrix(rep(0,numPoints * numPoints * 2),ncol=2) - bwCandidates[,1] = rep( seq( BwNN(Lt1, onlyCov = TRUE, k = 5), BwNN(Lt1, onlyCov = TRUE, k = 45), - length.out=numPoints), times= numPoints); - bwCandidates[,2] = rep( seq( BwNN(Lt2, onlyCov = TRUE, k = 5), BwNN(Lt2, onlyCov = TRUE, k = 45), - length.out=numPoints), each= numPoints); - - } - - return(bwCandidates) -} - -smoothRCC2D <- function(rcov,bw1, bw2, xout1, xout2, kern='gauss'){ - # Calculate the smooth Covariances between two functional variables - # rcov : raw cross covariance list object returned by BinRawCov(GetRawCrCovFuncFunc()) - # bw1 : scalar - # bw2 : scalar - # xout1 : vector M-1 - # xout2 : vector L-1 - # returns : matrix M-L - # browser() - return( Lwls2D( bw = c(bw1, bw2), kern = kern, xin=rcov$tPairs, - yin=rcov$meanVals, win=rcov$count, xout1=xout1, xout2=xout2, crosscov=TRUE) ) -} - -GCVgauss2D <- function( smoothedCC, smoothGrid, rawCC, rawGrid, bw1, bw2){ - # Calculate GCV cost off smoothed sample assuming a Gaussian kernel - # smoothedY : vector M-1 - # smoothedX : vector M-1 - # rawX : vector N-1 - # rawY : vector N-1 - # bw : scalar - # returns : scalar - obsFit <- interp2lin(smoothGrid[,1], smoothGrid[,2], smoothedCC, as.numeric(rawGrid[, 1]), - as.numeric(rawGrid[, 2])) - # workaround for degenerate case. - if (any(is.nan(obsFit)) || any(is.infinite(obsFit)) ){ - return(Inf) - } - # residual sum of squares - cvsum <- sum((rawCC - obsFit) ^ 2) - N = length( rawCC ) - r1 = diff( range(smoothGrid[,1] ) ) - r2 = diff( range(smoothGrid[,2] ) ) - k0 = 0.398942; # hard-coded constant for Gaussian kernel - return( cvsum / (1 - (1/N) * (r1 * k0 * r2 * k0) /(bw1 * bw2))^2 ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX_old.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX_old.R deleted file mode 100644 index 5d3d4900..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYX_old.R +++ /dev/null @@ -1,214 +0,0 @@ -# #' Functional Cross Covariance between longitudinal variable Y and longitudinal variable X -# #' -# #' Calculate the raw and the smoothed cross-covariance between functional predictors using bandwidth bw or estimate that bw using GCV. -# #' -# #' @param Ly1 List of N vectors with amplitude information (Y) -# #' @param Lt1 List of N vectors with timing information (Y) -# #' @param Ymu1 Vector Q-1 Vector of length nObsGrid containing the mean function estimate (You can get that from FPCA) (Y) -# #' @param bw1 Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (Y) -# #' @param Ly2 List of N vectors with amplitude information (X) -# #' @param Lt2 List of N vectors with timing information (X) -# #' @param Ymu2 Vector Q-1 Vector of length nObsGrid containing the mean function estimate (You can get that from FPCA) (X) -# #' @param bw2 Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (X) -# #' @param useGAM Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE) -# #' @param rmDiag Indicator to remove the diagonal element when smoothing (default: FALSE) -# #' @param kern String specifying the kernel type (default: FALSE; see ?FPCA for details) -# #' @param bwRoutine String specifying the routine used to find the optimal bandwidth 'grid-search', 'bobyqa', 'l-bfgs-b' (default: 'l-bfgs-b') -# #' If the variables Ly1 and Ly2 are in matrix form the data are assumed dense and only the raw cross-covariance is returned. -# #' @return A list containing: -# #' \item{smoothedCC}{The smoothed cross-covariance as a matrix (currently only 51 by 51)} -# #' \item{rawCC}{The raw cross-covariance as a list} -# #' \item{bw}{The bandwidth used for smoohting as a vector of lengh 2} -# #' \item{score}{The GCV score associated with the scalar used} -# #' \item{smoothGrid}{The grid over which the smoothed cross-covariance is evaluated} -# #' @examples -# #' Ly1= list( rep(2.1,7), rep(2.1,3),2.1 ); -# #' Lt1 = list(1:7,1:3, 1); -# #' Ly2 = list( rep(1.1,7), rep(1.1,3),1.1); -# #' Lt2 = list(1:7,1:3, 1); -# #' Ymu1 = rep(55,7); -# #' Ymu2 = rep(1.1,7); -# #' AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2) -# #' -# #' @references -# #' \cite{Yang, Wenjing, Hans-Georg Mueller, and Ulrich Stadtmueller. "Functional singular component analysis." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73.3 (2011): 303-324} -# #' @export - -GetCrCovYX_old <- function(bw1 = NULL, bw2 = NULL, Ly1, Lt1 = NULL, Ymu1 = NULL, Ly2, Lt2 = NULL, Ymu2 = NULL, - useGAM = FALSE, rmDiag=FALSE, kern='gauss', bwRoutine = 'l-bfgs-b') { - - if (kern != 'gauss' && (is.null(bw1) || is.null(bw2))) { - stop('Cannot select bandwidth for non-Gaussian kernel') - } - - if( !(bwRoutine %in% c('grid-search', 'bobyqa', 'l-bfgs-b') ) ){ - stop("'bwRoutine' argument is invalid.") - } - - # If only Ly1 and Ly2 are available assume DENSE data - if( is.matrix(Ly1) && is.null(Lt1) && is.null(Ymu1) && is.matrix(Ly2) && is.null(Lt2) && is.null(Ymu2)){ - rawCC <- GetRawCrCovFuncFunc(Ly1 = Ly1, Ly2 = Ly2) - return ( list(smoothedCC = NULL, rawCC = rawCC, bw = NULL, score = NULL) ) - } - - # Otherwise assume you have SPARSE data - if( is.null(Ymu1) || is.null(Ymu2)){ - stop("Both functional means must be provided.") - } - - # Get the Raw Cross-covariance - rawCC = GetRawCrCovFuncFunc(Ly1 = Ly1, Lt1 = Lt1, Ymu1 = Ymu1, Ly2 = Ly2, Lt2 = Lt2, Ymu2 = Ymu2) - - if (rmDiag) { - diagInd <- rawCC$tpairn[, 1] == rawCC$tpairn[, 2] - rawCC$tpairn <- rawCC$tpairn[!diagInd, , drop=FALSE] - rawCC$rawCCov <- rawCC$rawCCov[!diagInd] - } - - # Calculate the observation and the working grids - ulLt1 = unlist(Lt1); ulLt2 = unlist(Lt2) - obsGrid1 = sort(unique(ulLt1)); obsGrid2 = sort(unique(ulLt2)) - - workGrid1 = seq(obsGrid1[1], max(obsGrid1), length.out = 51) - workGrid2 = seq(obsGrid2[1], max(obsGrid2), length.out = 51) - workGrid12 = matrix(c(workGrid1, workGrid2),ncol= 2) - - if (useGAM == TRUE){ - Qdata = data.frame(x = rawCC$tpairn[,1], y = rawCC$tpairn[,2], z = rawCC$rawCCov, group = rawCC$IDs ) - # I comparsed with 're', ds' and 'gp' too, and 'tp' seems to have a slight edge for what we want - # myGAM = mgcv::gamm( z ~ s(x,y, bs =c('tp','tp')), random=list(group=~1) , data= Qdata)$gam - myGAM = mgcv::gam( z ~ s(x,y, bs =c('tp','tp')), data= Qdata) - estPoints = data.frame( x= rep(workGrid1, times=51), y= rep(workGrid2, each =51), group = rep(3,51*51 )) - smoothedCC = matrix(predict(myGAM, estPoints), 51) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = NULL, score = NULL) ) - } - - # If the bandwidth is known already smooth the raw CrCov - if( is.numeric(bw1) && is.numeric(bw2)){ - smoothedCC <- smoothRCC2D_old(rcov =rawCC, bw1, bw2, workGrid1, workGrid2, - kern=kern) - # potentially incorrect GCV score if the kernel is non-Gaussian - score = GCVgauss2D_old(smoothedCC = smoothedCC, smoothGrid = workGrid12, - rawCC = rawCC$rawCCov, rawGrid = rawCC$tpairn, - bw1 = bw1, bw2 = bw2) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = c(bw1, bw2), score = score, smoothGrid = workGrid12 ) ) - - # If the bandwidths are unknown use GCV to take find it - } else { - # Construct candidate bw's - bwCandidates <- getBWidths_old(ulLt1, ulLt2) - minGcvScores = Inf - - if(bwRoutine == 'grid-search'){ - # Find their associated GCV scores - gcvScores = rep(Inf, nrow(bwCandidates)) - for (i in 1:length(bwCandidates)){ - gcvScores[i] = theCostFunc_old(bwCandidates[i,], rawCC, workGrid1, workGrid2, kern, workGrid12) - } - # Pick the one with the smallest score - minimumScore = min(gcvScores, na.rm=TRUE) - if( minimumScore == Inf) { - stop("It seems that the minimum GCV score equals infinity. Stopping 'GetCrCovYX'") - } - bInd = which(gcvScores == minimumScore); - bOpt1 = max(bwCandidates[bInd,1]); - bOpt2 = max(bwCandidates[bInd,2]); - minGcvScores = minimumScore - } else { - - bwRanges = apply(bwCandidates,2, range) - upperB = bwRanges[2,] - lowerB = bwRanges[1,] - - if( !is.element('minqa', installed.packages()[,1]) && bwRoutine == 'bobyqa'){ - warning("Cannot use 'minqa::bobyqa' to find the optimal bandwidths. 'minqa' is not installed. We will do an 'L-BFGS-B' search.") - bwRoutine == 'l-bfgs-b' - } - - if( bwRoutine == 'l-bfgs-b' ){ - theSols = optim(fn = theCostFunc_old, par = upperB*0.95, # Starting value that "is safe" - upper = upperB, lower = lowerB, method ='L-BFGS-B', control = list(maxit = 51), - rawCC = rawCC, workGrid1 = workGrid1, workGrid2 = workGrid2, kern = kern, workGrid12 = workGrid12) - minGcvScores = theSols$value - } else { # when BOBYQA is available - theSols = minqa::bobyqa(fn = theCostFunc_old, par = upperB*0.95, # Starting value that "is safe" - upper = upperB, lower = lowerB, control = list(maxfun = 41), - rawCC, workGrid1, workGrid2, kern, workGrid12) - minGcvScores = theSols$fval - } - - bOpt1 = theSols$par[1] - bOpt2 = theSols$par[2] - - if( bOpt1 > 0.75 * upperB[1] && bOpt2 > 0.75 * upperB[2] ){ - warning('It seems that the bandwidth selected by the solvers is somewhat large. Maybe you are in local minima.') - } - } - smoothedCC <- smoothRCC2D_old(rcov=rawCC, bw1 =bOpt1, bw2 =bOpt2, workGrid1, workGrid2, kern=kern) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = c(bOpt1, bOpt2), smoothGrid = workGrid12, - score = minGcvScores) ) - } -} - -theCostFunc_old <- function(xBW, rawCC, workGrid1, workGrid2, kern, workGrid12){ - smoothedCC <- try(silent=TRUE, smoothRCC2D_old(rcov=rawCC, bw1 = xBW[1], bw2 = xBW[2], - workGrid1, workGrid2, kern=kern) ) - if( is.numeric(smoothedCC) ){ - theCost = GCVgauss2D_old( smoothedCC = smoothedCC, smoothGrid = workGrid12, - rawCC = rawCC$rawCCov, rawGrid = rawCC$tpairn, bw1 = xBW[1], bw2 = xBW[2]) - } else { - theCost = Inf - } - return(theCost) -} - -getBWidths_old <- function(ulLt1, ulLt2){ - numPoints = 10; - bwCandidates <- matrix(rep(0,numPoints * numPoints * 2),ncol=2) - h0 = 2.0 * Minb( sort(ulLt1), 2+1); # 2x the bandwidth needed for at least 3 points in a window - r = diff(range(ulLt1)) - q = (r/(4*h0))^(1/9); - bwCandidates[,1] = rep( sort(q^( seq(0,12,length.out=numPoints) )*h0), times= numPoints); - h0 = 2.0 * Minb( sort(ulLt2), 2+1); # 2x the bandwidth needed for at least 3 points in a window - r1 = diff(range(ulLt2)) - q = (r/(4*h0))^(1/9); - bwCandidates[,2] = rep( sort(q^( seq(0,12,length.out=numPoints) )*h0), each= numPoints); - - return(bwCandidates) -} - -smoothRCC2D_old <- function(rcov,bw1, bw2, xout1, xout2, kern='gauss'){ - # Calculate the smooth Covariances between two functional variables - # rcov : raw cross covariance list object returned by GetRawCrCovFuncFunc - # bw1 : scalar - # bw2 : scalar - # xout1 : vector M-1 - # xout2 : vector L-1 - # returns : matrix M-L - # browser() - return( Lwls2D( bw = c(bw1, bw2), kern = kern, xin=rcov$tpairn, - yin=rcov$rawCC, xout1=xout1, xout2=xout2, crosscov=TRUE) ) -} - -GCVgauss2D_old <- function( smoothedCC, smoothGrid, rawCC, rawGrid, bw1, bw2){ - # Calculate GCV cost off smoothed sample assuming a Gaussian kernel - # smoothedY : vector M-1 - # smoothedX : vector M-1 - # rawX : vector N-1 - # rawY : vector N-1 - # bw : scalar - # returns : scalar - obsFit <- interp2lin(smoothGrid[,1], smoothGrid[,2], smoothedCC, as.numeric(rawGrid[, 1]), - as.numeric(rawGrid[, 2])) - # workaround for degenerate case. - if (any(is.nan(obsFit)) || any(is.infinite(obsFit)) ){ - return(Inf) - } - # residual sum of squares - cvsum <- sum((rawCC - obsFit) ^ 2) - N = length( rawCC ) - r1 = diff( range(smoothGrid[,1] ) ) - r2 = diff( range(smoothGrid[,2] ) ) - k0 = 0.398942; # hard-coded constant for Gaussian kernel - return( cvsum / (1 - (1/N) * (r1 * k0 * r2 * k0) /(bw1 * bw2))^2 ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYZ.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYZ.R deleted file mode 100644 index 5924ca25..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetCrCovYZ.R +++ /dev/null @@ -1,120 +0,0 @@ -#' Functional Cross Covariance between longitudinal variable Y and scalar variable Z -#' -#' Calculate the raw and the smoothed cross-covariance between functional -#' and scalar predictors using bandwidth bw or estimate that bw using GCV -#' -#' @param Ly List of N vectors with amplitude information -#' @param Lt List of N vectors with timing information -#' @param Ymu Vector Q-1 Vector of length nObsGrid containing the mean function estimate -#' @param bw Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) -#' @param Z Vector N-1 Vector of length N with the scalar function values -#' @param Zmu Scalar with the mean of Z (if NULL it will be automaticall estimated) -#' @param support Vector of unique and sorted values for the support of the smoothed cross-covariance function (if NULL it will be automatically estimated) -#' @param kern Kernel type to be used. See ?FPCA for more details. (defult: 'gauss') -#' If the variables Ly1 is in matrix form the data are assumed dense and only -#' the raw cross-covariance is returned. One can obtain Ymu1 -#' from \code{FPCA} and \code{ConvertSupport}. - -#' @return A list containing: -#' \item{smoothedCC}{The smoothed cross-covariance as a vector} -#' \item{rawCC}{The raw cross-covariance as a vector } -#' \item{bw}{The bandwidth used for smoohting as a scalar} -#' \item{score}{The GCV score associated with the scalar used} -#' @examples -#' Ly <- list( runif(5), c(1:3), c(2:4), c(4)) -#' Lt <- list( c(1:5), c(1:3), c(1:3), 4) -#' Z = rep(4,4) # Constant vector so the covariance has to be zero. -#' sccObj = GetCrCovYZ(bw=1, Z= Z, Ly=Ly, Lt=Lt, Ymu=rep(4,5)) -#' @references -#' \cite{Yang, Wenjing, Hans-Georg Mueller, and Ulrich Stadtmueller. "Functional singular component analysis." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73.3 (2011): 303-324} -#' @export - -GetCrCovYZ <- function(bw = NULL, Z, Zmu = NULL, Ly, Lt = NULL, Ymu = NULL, support = NULL, kern='gauss') { - - if (is.null(bw) && kern != 'gauss') { - stop('Cannot select bandwidth for non-Gaussian kernels') - } - - # If only Ly and Z are available assume DENSE data - if( is.matrix(Ly) && is.null(Lt) && is.null(Ymu) ){ - rawCC <- GetRawCrCovFuncScal(Ly = Ly, Z = Z) - return ( list(smoothedCC = NULL, rawCC = rawCC, bw = bw, score = NULL) ) - } - # Otherwise assume you have SPARSE data - if( is.null(Zmu) ){ - Zmu = mean(Z,na.rm = TRUE); - } - # Get the Raw Cross-covariance - ulLt = unlist(Lt) - if (is.null(support) ){ - obsGrid = sort(unique(ulLt)) - } else { - obsGrid = support - } - # Check that the length of Z and the length of Ly are compatible - if (length(Z) != length(Ly)){ - stop("Ly and Z are not compatible (possibly different number of subjects).") - } - - if (is.null(Ymu)){ - stop("Ymu is missing without default.") - } - - rawCC = GetRawCrCovFuncScal(Ly = Ly, Lt = Lt, Ymu = Ymu, Z = Z, Zmu = Zmu ) - - # If the bandwidth is known already smooth the raw CrCov - if( is.numeric(bw) ){ - smoothedCC <- smoothRCC(rawCC, bw, obsGrid, kern=kern) - score = GCVgauss1D( smoothedY = smoothedCC, smoothedX = obsGrid, - rawX = rawCC$tpairn, rawY = rawCC$rawCCov, bw = bw) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = bw, score = score) ) - # If the bandwidth is unknown use GCV to take find it - } else { - # Construct candidate bw's - h0 = 1.5 * Minb( sort(ulLt), 2+1); # 1.5x the bandwidth needed for at least 3 points in a window - r = diff(range(ulLt)) - q = (r/(4*h0))^(1/9); - bwCandidates = sort(q^(0:19)*h0); - # Find their associated GCV scores - gcvScores = rep(Inf, length(bwCandidates)) - for (i in 1:length(bwCandidates)){ - smoothedCC <- try(silent=TRUE, smoothRCC(rawCC, bw = bwCandidates[i], xout = obsGrid, kern=kern)) - if( is.numeric(smoothedCC) ){ - gcvScores[i] = GCVgauss1D( smoothedY = smoothedCC, smoothedX = obsGrid, - rawX = rawCC$tpairn, rawY = rawCC$rawCCov, bw = bwCandidates[i]) - } - } -#browser() - # Pick the one with the smallest score - bInd = which(gcvScores == min(gcvScores, na.rm=TRUE)); - bOpt = max(bwCandidates[bInd]); - smoothedCC <- smoothRCC( rawCC, bw = bOpt, obsGrid, kern=kern ) - return ( list(smoothedCC = smoothedCC, rawCC = rawCC, bw = bOpt, score = min(gcvScores, na.rm=TRUE)) ) - } -} - -# Calculate the smooth Covariances between functional and scalar predictors -# rCC : raw cross covariance list object returned by GetRawCrCovFuncScal -# bw : scalar -# xout : vector M-1 -# returns : vector M-1 -smoothRCC <- function(rCC,bw,xout, kern='gauss'){ - x = matrix( unlist(rCC), ncol=2) - x= x[order(x[,1]),] - return( Lwls1D(bw=bw, win=rep(1,nrow(x)), yin=x[,2], xin=x[,1], kern, xout=xout) ) -} - -# Calculate GCV cost off smoothed sample assuming a Gaussian kernel -# smoothedY : vector M-1 -# smoothedX : vector M-1 -# rawX : vector N-1 -# rawY : vector N-1 -# bw : scalar -# returns : scalar -GCVgauss1D <- function( smoothedY, smoothedX, rawX, rawY, bw){ - cvsum = sum( (rawY - approx(x=smoothedX, y=smoothedY, xout=rawX)$y)^2 ); - k0 = 0.398942; # hard-coded constant for Gaussian kernel - N = length(rawX) - r = diff(range(rawX)) - return( cvsum / (1-(r*k0)/(N*bw))^2 ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetEigenAnalysisResults.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetEigenAnalysisResults.R deleted file mode 100644 index adc415af..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetEigenAnalysisResults.R +++ /dev/null @@ -1,55 +0,0 @@ -# phi: a nRegGrid * no_FVE -# The input smoothCov is possibly truncated. - -GetEigenAnalysisResults <- function(smoothCov, regGrid, optns, muWork = NULL) { - - maxK <- optns$maxK - FVEthreshold <- optns$FVEthreshold - verbose <- optns$verbose - - gridSize <- regGrid[2] - regGrid[1] - numGrids <- nrow(smoothCov) - - eig <- eigen(smoothCov) - - positiveInd <- eig[['values']] >= 0 - if (sum(positiveInd) == 0) { - stop('All eigenvalues are negative. The covariance estimate is incorrect.') - } - d <- eig[['values']][positiveInd] - eigenV <- eig[['vectors']][, positiveInd, drop=FALSE] - - if (maxK < length(d)) { - if (optns[['verbose']]) { - message(sprintf("At most %d number of PC can be selected, thresholded by `maxK` = %d. \n", length(d), maxK)) - } - - d <- d[1:maxK] - eigenV <- eigenV[, 1:maxK, drop=FALSE] - } - - # thresholding for corresponding FVE option - #(not before to avoid not being able to reach the FVEthreshold when pos eigenvalues > maxk) - # i.e. default FVE 0.9999 outputs all components remained here. - FVE <- cumsum(d) / sum(d) * 100 # cumulative FVE for all available eigenvalues from fitted cov - no_opt <- min(which(FVE >= FVEthreshold * 100)) # final number of component chosen based on FVE - - # normalization - if (is.null(muWork)) { - muWork = 1:dim(eigenV)[1] - } - - phi <- apply(eigenV, 2, function(x) { - x <- x / sqrt(trapzRcpp(regGrid, x^2)) - if ( 0 <= sum(x*muWork) ) - return(x) - else - return(-x) - }) - lambda <- gridSize * d; - - fittedCov <- phi %*% diag(x=lambda, nrow = length(lambda)) %*% t(phi) - - return(list(lambda = lambda[1:no_opt], phi = phi[,1:no_opt, drop=FALSE], - cumFVE = FVE, kChoosen=no_opt, fittedCov=fittedCov)) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetINScores.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetINScores.R deleted file mode 100644 index bf19a2bd..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetINScores.R +++ /dev/null @@ -1,45 +0,0 @@ -# This function obtains the FPC scores for dense -# regular functional data by trapezoidal rule integration - -###### -# Input: -###### -# ymat: n by p matrix of dense regular functional observations -# t: list of observed time grids for the functional observations -###### -# Output: -###### -# ret: a list of: -# xiEst: n by length(lambda) matrix of estimated FPC scores -# fittedY: n by p matrix of fitted/recovered functional observations -########################################################################## - -GetINScores <- function(ymat, t, optns, mu, lambda, phi, sigma2=NULL){ - if(length(lambda) != ncol(phi)){ - stop('No. of eigenvalues is not the same as the no. of eigenfunctions.') - } - - n = nrow(ymat) - tau = sort(unique(signif( unlist(t),14 ))) # get observed time grid - ranget <- diff(range(tau)) - mumat = matrix(rep(mu, n), nrow = n, byrow = TRUE) - cymat = ymat - mumat - - xiEst = matrix(0, nrow = n, ncol = length(lambda)) - # Get Scores xiEst - for(i in 1:length(lambda)){ - tempmat = cymat * matrix(rep(phi[,i],n), nrow = n, byrow = TRUE) - xiEst[,i] = sapply(1:n, function(j) trapzRcpp(X = tau[!is.na(tempmat[j,])], Y = tempmat[j, !is.na(tempmat[j,])])) - if (optns[['shrink']] && !is.null(sigma2)) { - xiEst[, i] <- xiEst[, i] * lambda[i] / - (lambda[i] + ranget * sigma2 / length(tau)) - } - } - - # Get Fitted Y: n by p matrix on observed time grid - fittedY = mumat + t(phi %*% t(xiEst)) - - ret = list('xiEst' = xiEst, xiVar = NULL, 'fittedY' = fittedY) - - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetLogLik.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetLogLik.R deleted file mode 100644 index e341e6c0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetLogLik.R +++ /dev/null @@ -1,73 +0,0 @@ -# K: input denoting number of components used -# returns -2 times log-likelihood -GetLogLik = function(fpcaObj, K, Ly = NULL, Lt = NULL){ - if(fpcaObj$optns$lean == TRUE && (is.null(Ly) || is.null(Lt))){ - stop("Option lean is TRUE, need input data Ly and measurement time list Lt to calculate log-likelihood.") - } - if(fpcaObj$optns$lean == FALSE){ # when input data is in fpcaObj - Ly <- fpcaObj$inputData$Ly - Lt <- fpcaObj$inputData$Lt - } - lambda = fpcaObj$lambda[1:K] - sigma2 = fpcaObj$sigma2 - if(is.null(sigma2) && fpcaObj$optns$dataType == "Dense"){ - ymat = matrix(unlist(Ly),nrow=length(Ly), byrow=TRUE) - sddiag = sqrt(diag(var(ymat))) - sigma2 = sddiag*1e-4 - sigma2 = ConvertSupport(fromGrid = fpcaObj$obsGrid, toGrid = fpcaObj$workGrid, mu = sigma2) - } - logLik = 0 - phi = fpcaObj$phi[,1:K, drop=FALSE] - - if(fpcaObj$optns$dataType %in% c('Dense' - #, 'DenseWithMV' # need extra imputation step - )){ - if(K == 1){ - Sigma_y = phi %*% (lambda*diag(K)) %*% t(phi) + sigma2*diag(rep(1,nrow(phi))) - } else { - Sigma_y = phi %*% diag(lambda, length(lambda)) %*% t(phi) + sigma2*diag(rep(1,nrow(phi))) - } - detSigma_y = prod(c(lambda,rep(0,nrow(phi)-K))[1:length(lambda)]+sigma2) - #detSigma_y = det(Sigma_y) - if(detSigma_y == 0){ - logLik = NULL - return(logLik) - } - # calculate loglikelihood via matrix multiplication - ymatcenter = matrix(unlist(Ly)-fpcaObj$mu, nrow = length(Ly), byrow = TRUE) - svd_Sigma_y = svd(Sigma_y) - Sigma_y_inv = svd_Sigma_y$v %*% diag(1/svd_Sigma_y$d, length(svd_Sigma_y$d)) %*% t(svd_Sigma_y$u) - logLik = sum(diag(t(Sigma_y_inv %*% t(ymatcenter)) %*% t(ymatcenter))) + length(Ly)*log(detSigma_y) - return(logLik) - } else { # Sparse case - if(is.null(sigma2)){ sigma2 <- fpcaObj$rho } - if(fpcaObj$optns$error == TRUE && sigma2 <= fpcaObj$rho){ - # especially for the case when sigma2 is estimated to be <=0 and set to 1e-6 - sigma2 <- fpcaObj$rho - } - for(i in 1:length(Ly)){ - if(length(Lt[[i]]) == 1){ - phi_i = t(as.matrix(ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = Lt[[i]], - phi = phi))) - } else { - phi_i = ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = Lt[[i]], - phi = phi) - } - mu_i = ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = Lt[[i]], - mu = fpcaObj$mu) - if(K == 1){ - Sigma_yi = phi_i %*% (lambda*diag(K)) %*% t(phi_i) + sigma2 * diag(rep(1,length(mu_i))) - } else{ - Sigma_yi = phi_i %*% diag(lambda, length(lambda)) %*% t(phi_i) + sigma2 * diag(rep(1,length(mu_i))) - } - detSigma_yi = det(Sigma_yi) - if(detSigma_yi == 0){ - logLik = NULL - return(logLik) - } - invtempi = solve(Sigma_yi, Ly[[i]] - mu_i) - logLik = logLik + log(detSigma_yi) + invtempi %*% (Ly[[i]] - mu_i) - } - return(logLik) - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMeanDense.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMeanDense.R deleted file mode 100644 index 6309e50c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMeanDense.R +++ /dev/null @@ -1,36 +0,0 @@ -# This function obtains the cross sectional mean function at observed grid -# for dense regular functional data - -###### -# Input: -###### -# ymat: matrix of dense regular functional data -# optns: options for FPCA function -###### -# Output: -###### -# a SMC object containing: -# - mu: p-dim vector of mean function estimation, i.e. on observed grid -# - NULL for other entries -########################################################################## - -GetMeanDense <- function(ymat, obsGrid, optns){ - # Check optns - if(!(optns$dataType %in% c('Dense', 'DenseWithMV'))){ - stop('Cross sectional mean is only applicable for option: dataType = "Dense" or "DenseWithMV"!') - } - - if ( is.null(optns$userMu) ){ - mu = colMeans(ymat, na.rm = TRUE) # use non-missing data only - } else { - mu = spline(optns$userMu$t, optns$userMu$mu, xout= obsGrid)$y; - } - - if(any(is.na(mu))){ - stop('The cross sectional mean is appears to have NaN! Consider setting your dataType to \'Sparse\' manually') - } - - ret = list('mu' = mu, 'muDense' = NULL, 'mu_bw' = NULL) - class(ret) = "SMC" - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMinb.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMinb.R deleted file mode 100644 index 38b2eab4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetMinb.R +++ /dev/null @@ -1,39 +0,0 @@ -# Approximate the minimum bandwidth choice for% for the covariance function. -# In stead of the getMinb.m functionality we can garantee minimal number of neighboring points in here. -# TODO: distMat is memory inefficient. -GetMinb <- function(t, obsGrid, dataType='Sparse', npoly=1, minUniqPts=3, minPts=6, legacyCode = FALSE) { - - - if( legacyCode ){ - if (dataType == 'Sparse') { - dstar <- Minb(obsGrid, 2 + npoly) # rough 1D initial value - n_obs = length(obsGrid); - tmp1 = matrix( rep(0, n_obs^2), ncol = n_obs) - - # Find the pair against which we have measurements in the same curve - for (i in 1:length(t)){ - idx = match( t[[i]], obsGrid) - tmp1[idx, idx] = 1 - } - res = tmp1 - diag(n_obs); - # First and last timepoint are always considered observed - res[c(1, n_obs),] = 1; - ids = matrix(res > 0); - b = matrix( rep(obsGrid, n_obs), nrow=n_obs); - # Use half of the largest difference between two consequative points in the same - # as curve as your candidate bandwith. We do no worry about the difference - # between to [t_j(end) - t_{1+j}(1)] because this will be negative. This bandwidth tends to be conservative (too large). - # dstar = max(dstar, max(diff(b[ids])/2)); # Original code - dstar = max(dstar, quantile( diff(b[ids]), 0.95)/2 ); # Fix to avoid outliers - } else if (dataType == 'RegularWithMV') { - dstar <- Minb(obsGrid, 1 + npoly) * 2; - } else if (dataType == 'Dense') { - dstar = Minb(obsGrid, 2 + npoly) * 1.5; - } - return(dstar) - } - - dstar = BwNN(t, k= 2 + npoly, onlyCov = TRUE)['cov'] - - return(dstar) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetNormalisedSample.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetNormalisedSample.R deleted file mode 100644 index ff681862..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetNormalisedSample.R +++ /dev/null @@ -1,50 +0,0 @@ -#' Normalise sparse functional sample -#' -#' Normalise sparse functional sample given in an FPCA object -#' -#' @param fpcaObj An FPCA object. -#' @param errorSigma Indicator to use sigma^2 error variance when normalising the data (default: FALSE) -#' -#' @return A list containing the normalised sample 'y' at times 't' -#' -#' @references -#' \cite{Chiou, Jeng-Min and Chen, Yu-Ting and Yang, Ya-Fang. "Multivariate Functional Principal Component Analysis: A Normalization Approach" Statistica Sinica 24 (2014): 1571-1596} -#' @examples -#' set.seed(1) -#' n <- 100 -#' M <- 51 -#' pts <- seq(0, 1, length.out=M) -#' mu <- rep(0, length(pts)) -#' sampDense <- MakeGPFunctionalData(n, M, mu, K=1, basisType='sin', sigma=0.01) -#' samp4 <- MakeFPCAInputs(tVec=sampDense$pts, yVec=sampDense$Yn) -#' res4E <- FPCA(samp4$Ly, samp4$Lt, list(error=TRUE)) -#' sampN <- GetNormalisedSample(res4E, errorSigma=TRUE) -#' -#' CreatePathPlot(subset=1:20, inputData=samp4, obsOnly=TRUE, showObs=FALSE) -#' CreatePathPlot(subset=1:20, inputData=sampN, obsOnly=TRUE, showObs=FALSE) -#' @export -GetNormalisedSample<- function(fpcaObj, errorSigma = FALSE){ - if (any( 0>=diag(fpcaObj$fittedCov)) ){ - stop("The fitted autocovariance functions appears to have negative or zero values.") - } - - if (errorSigma){ - sigmaE = fpcaObj$sigma2 - } else { - sigmaE = 0 - } - - ynorm = mapply(FUN = function(vy, vt){ - return( ( vy - approx(y = fpcaObj$mu, x =fpcaObj$workGrid, xout = vt)$y) / - approx(y = sqrt(sigmaE + diag(fpcaObj$fittedCov)), x =fpcaObj$workGrid, xout = vt)$y) - }, vy = fpcaObj$inputData$Ly, vt = fpcaObj$inputData$Lt, SIMPLIFY = FALSE) - return(list(Ly = ynorm, Lt = fpcaObj$inputData$Lt )) -} - -#' \code{GetNormalizedSample} is an alias of \code{GetNormalizedSample} -#' @param ... Passed into GetNormalisedSample -#' @export -#' @rdname GetNormalisedSample -GetNormalizedSample <- function(...) { - GetNormalisedSample(...) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCov.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCov.R deleted file mode 100644 index e740bceb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCov.R +++ /dev/null @@ -1,118 +0,0 @@ -GetRawCov <- function(y,t,obsGridnew, mu, dataType, error){ -# obtain raw covariance -# Input y : 1*n cell array of the observed repeated measurements from n subjects -# Input t : 1*n cell array of the observed time points from n subjects -# Input obsGridnew: 1*m vector of time points correspond to mu -# Input mu: 1*m vector of fitted mean functions from Step I, corresponding to -# pooled unique time points from t -# Input dataType: Output of IsRegular() -# Input error: TRUE with measurement error assumption -# FALSE without measurement error assumption -# -# Output res: a list that contains tPairs, cxxn, indx,win and cyy -# tPairs: N * 2 vector denotes the pairs of time points for subject -# concatenating as two vectors -# if error = 1, all (t_ij, t_ij) will be removed -# cxxn: 1 * N vector of raw covariance corresponding to tPairs -# indx: 1 * N vector of indices for each subject -# win: 1 * N weight matrix for the 2-D smoother for covariance function -# cyy: 1 * M vector of raw covariance corresponding to all pairs of time points, -# i.e., it is the same as cxxn if error = 0 -# diag: if error == TRUE: 2-column matrix recording raw covariance along the diagonal direction (col 2) -# and the corresponding observed time points (col 1) -# if error == FALSE: NULL - - ncohort <- length(y); - obsGrid <- sort(unique(unlist(t))) - mu <- MapX1D(x = obsGridnew, y = mu, newx = obsGrid); - count <- NULL - indx = NULL - diag = NULL - - if(dataType %in% c('Sparse', 'DenseWithMV')){ - - Ys = lapply(X = y, FUN=pracma::meshgrid) #pracma - Xs = lapply(X = t, FUN=pracma::meshgrid) #pracma - - # vectorise the grids for y & t - xx1 = unlist(do.call(rbind, lapply(Xs, '[', 'X')) ) - xx2 = unlist(do.call(rbind, lapply(Xs, '[', 'Y')) ) - yy2 = unlist(do.call(rbind, lapply(Ys, '[', 'Y')) ) - yy1 = unlist(do.call(rbind, lapply(Ys, '[', 'X')) ) - - # get id1/2 such that xx1/2 = q(id1/2), where q = unique(xx1/2) - # id1 = apply(X= sapply(X=xx1, FUN='==', ...=sort(unique(xx1)) ),MARGIN=2, FUN=which) - # id2 = apply(X= sapply(X=xx2, FUN='==', ...=sort(unique(xx2)) ),MARGIN=2, FUN=which) - # This is more stable and faster. - id1 = uniqueM(xx1) - id2 = uniqueM(xx2) - cyy = ( yy1 - mu[ id1]) * (yy2 - mu[id2] ) - - # index for subject i - # indx = unlist(sapply( 1:length(y), function(x) rep(x, (unlist(lapply(length, X= y))[x])^2) )) - # This is more stable and faster. - indx = rep( 1:length(y), times = unlist(lapply(y, length))^2) - - tPairs = matrix( c(xx1, xx2), nrow=length(xx1), ncol=2); - - if(error){ - tneq = which(xx1 != xx2) - teq = which(xx1 == xx2) - indx = indx[tneq]; - diag = matrix(c(tPairs[teq,1], cyy[teq]), ncol = 2) - tPairs = tPairs[tneq,]; - cxxn = cyy[tneq]; - }else{ - cxxn = cyy; - } - - # win = pracma::ones(1, length(cxxn)); - # count = GetCount(tPairs)... - - }else if(dataType == 'Dense'){ - - yy = t(matrix(unlist(y), length(y[[1]]), ncohort)) - MU = t(matrix( rep(mu, times=length(y)), ncol=length(y))) - t1 = t[[1]] - yy = yy - MU; - cyy = t(yy) %*% yy / ncohort - cyy = as.vector(t(cyy)) - cxxn = cyy; - xxyy = pracma::meshgrid(t1); # pracma - - tPairs = (matrix( c(c(xxyy$X), c(xxyy$Y)), ncol = 2)) - - if(error){ - tneq = which(tPairs[,1] != tPairs[,2]) - teq = which(tPairs[,1] == tPairs[,2]) - diag = matrix(c(tPairs[teq,1], cyy[teq]), ncol = 2) - tPairs = tPairs[tneq,]; - cxxn = cyy[tneq]; - }else{ - cxxn = cyy; - } - - # win = pracma::ones(1, length(cxxn)); - }else if(dataType == 'RegularWithMV'){ - stop("This is not implemented yet. Contact Pantelis!") - }else { - stop("Invalid 'dataType' argument type") - } - - result <- list( 'tPairs' = tPairs, 'cxxn' = cxxn, 'indx' = indx, # 'win' = win, - 'cyy' = cyy, 'diag' = diag, 'count' = count, 'error' = error, 'dataType' = dataType); - - class(result) <- "RawCov" - return(result) -} - - uniqueM <- function(x){ - g = sort(unique(x)) - id1 = rep(0, length(x)); - for( i in 1:length(g)){ - id1[which(x == g[i])] = i; - } - return(id1) - } - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncFunc.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncFunc.R deleted file mode 100644 index 736efd1e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncFunc.R +++ /dev/null @@ -1,61 +0,0 @@ -GetRawCrCovFuncFunc <- function(Ly1, Lt1 = NULL, Ymu1, Ly2, Lt2 = NULL, Ymu2){ - - # If Ly1 and Ly2 are both matrices and Lt1 and Lt2 are both null then assume DENSE - if ( is.matrix(Ly1) && is.matrix(Ly2) && is.null(Lt1) && is.null(Lt2) ){ - if( dim(Ly1)[1] != dim(Ly2)[1] ){ - stop("Ly1 and Ly2 are not compatible") - } - KK = cov(Ly1,Ly2,use="pairwise.complete.obs") - RCC <- list(rawCCov = 1 * (KK), tpairn = NULL) - class(RCC) <- 'RawCCDense' - return( RCC ) - } - # otherwise assume SPARSE - if ( ! CheckEqualLengths(Lt1,Ly1)){ - stop("Lt1 and Ly1 are not compatible") - } - if ( ! CheckEqualLengths(Lt2,Ly2) ){ - stop("Lt2 and Ly2 are not compatible") - } - ulLt1 = unlist(Lt1) - ulLt2 = unlist(Lt2) - if ( ! CheckEqualLengths(unique(ulLt1), Ymu1)){ - stop("Lt1 and Ymu1 are not compatible") - } - if ( ! CheckEqualLengths(unique(ulLt2), Ymu2)){ - stop("Lt2 and Ymu2 are not compatible") - } - - # Centre both lists according to their means - muY1 <- approxfun(x= sort(unique(ulLt1)), y = Ymu1) - Ly1c <- lapply(1:length(Ly1), function(i) Ly1[[i]]- muY1( Lt1[[i]]) ) - muY2 <- approxfun(x= sort(unique(ulLt2)), y = Ymu2) - Ly2c <- lapply(1:length(Ly2), function(i) Ly2[[i]]- muY2( Lt2[[i]]) ) - - # I keep this so the functional code below is understandable in iterative form - # tPairs1 <- c() - # tPairs2 <- c() - # cyy <- c() - # for (i in 1:length(Ly1c)){ - # q = length(Ly1c[[i]]) - # p = length(Ly2c[[i]]) - # cyy <- c( cyy, rep(x= Ly1c[[i]],each=p) * rep(x= Ly2c[[i]],times=q) ) - # tPairs1 <- c( tPairs1, rep(Lt1[[i]],each=p)) - # tPairs2 <- c( tPairs2, rep(Lt2[[i]],times=q)) - # } - - cyy <- as.vector(unlist (mapply(FUN = function(v1, v2){ return( rep(v1,times = length(v2)) * rep(v2, each = length(v1) )) }, v1= Ly2c, v2 = Ly1c)) ) - tPairs2 <- as.vector(unlist (mapply(FUN = function(v1, v2){ return(rep(v1,times = length(v2))) }, v1= Lt2, v2 = Ly1c)) ) - tPairs1 <- as.vector(unlist (mapply(FUN = function(v1, v2){ return(rep(v1, each = length(v2))) }, v1= Lt1, v2 = Ly2c)) ) - - RCC <-list() - RCC$rawCCov = cyy - RCC$tpairn = cbind(tPairs1, tPairs2) - RCC$IDs = rep( 1:length(Lt1), times = sapply(Lt1, length) * sapply(Lt2, length) ) - class(RCC) <- 'RawCC' - return(RCC) -} - -CheckEqualLengths <- function(x1,x2){ - return( all.equal( unname(sapply(x1, length)), unname(sapply(x2, length) ))) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncScal.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncScal.R deleted file mode 100644 index 98d8660b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRawCrCovFuncScal.R +++ /dev/null @@ -1,25 +0,0 @@ -GetRawCrCovFuncScal <- function(Ly, Lt = NULL, Ymu, Z, Zmu ){ - # Sparse case if Ly and Lt are both lists - if( is.list(Ly) && is.list(Lt) ){ - ulLt = unlist(Lt) - if (length(Ymu) != length(unique(ulLt))){ - stop("Ymu and Lt are of the same size.") - } else { - zstar = Z - Zmu; - RCC <- list(tpairn = ulLt, - rawCCov = rep(zstar, times = unlist( lapply(Ly, length))) * - (unlist(Ly) - approx(x= sort(unique(ulLt)), y = Ymu, xout = ulLt)$y ) ) - return(RCC) - } - # Dense case if Ly is a matrix and Lt is empty - } else if ( is.matrix(Ly) && is.null(Lt)) { - if( length(Z) != dim(Ly)[1] ) { - stop("Ly and Z are not compatible (possibly different number of subjects).") - } - RCC <- list( tpairn = NULL, - rawCCov = cov( Ly, Z, use="pairwise.complete.obs" )) - } else { - stop("It appears you do no refine a valid cross-covariance type.") - } -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRho.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRho.R deleted file mode 100644 index 630d764b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetRho.R +++ /dev/null @@ -1,57 +0,0 @@ -GetRho <- function(y, t, optns, mu, obsGrid, fittedCov, lambda, phi, sigma2) { - - optnsTmp <- optns - optnsTmp$verbose <- FALSE - for (j in 1:2) { - yhat <- GetCEScores(y, t, optnsTmp, mu, obsGrid, fittedCov, lambda, phi, sigma2)[3, ] - sigma2 <- mean(mapply(function(a, b) mean((a - b)^2, na.rm=TRUE), yhat, y), na.rm=TRUE) - } - - R <- sqrt((trapzRcpp(obsGrid, mu ^ 2) + sum(lambda)) / diff(range(obsGrid))) - a1 <- 0.01; a2 <- 0.22 - etaCand <- seq(a1, a2, length.out=50) - rhoCand <- etaCand * R - rhoCand <- rhoCand[rhoCand > sigma2] - rhoCand <- c(sigma2, rhoCand) - - leaveOutInd <- RandTime(t, isRandom=FALSE) - - cvScores <- sapply(rhoCand, cvRho, leaveOutInd=leaveOutInd, y=y, t=t, optns=optns, mu=mu, obsGrid=obsGrid, fittedCov=fittedCov, lambda=lambda, phi=phi) - - return(rhoCand[which.min(cvScores)]) -} - - -# sigma2* = max(rho, sigma2) = rho -# Get the CV score for a given rho. Correspond to getScores2.m -cvRho <- function(rho, leaveOutInd, y, t, optns, mu, obsGrid, fittedCov, lambda, phi) { - - Sigma_Y <- fittedCov + diag(rho, nrow(phi)) - - MuPhiSig <- GetMuPhiSig(t, obsGrid, mu, phi, Sigma_Y) - - yhat <- mapply(function(yVec, muphisig, ind) - GetIndCEScores(yVec, muphisig$muVec, lambda, muphisig$phiMat, - muphisig$Sigma_Yi, newyInd=ind)$fittedY, - y, MuPhiSig, leaveOutInd) - - yobs <- mapply(`[`, y, leaveOutInd) - - return(sum((na.omit(unlist(yobs)) - unlist(yhat))^2, na.rm=TRUE)) -} - - -# sample one observation from each tVec in t. The 'non-random' sampling is for testing against Matlab. -RandTime <- function(t, isRandom=TRUE) { - ni <- sapply(t, length) - if (all(ni <= 1)) - stop('None of the individuals have >= 2 observations. Cannot use rho') - - if (isRandom) { - ind <- sapply(ni, sample, size=1) - } else { - ind <- ((1000 + 1:length(t)) %% ni) + 1 - } - - return(ind) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedCovarSurface.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedCovarSurface.R deleted file mode 100644 index cf8e687d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedCovarSurface.R +++ /dev/null @@ -1,122 +0,0 @@ -# The output outGrid of this function is the (potentially) truncated greid. -GetSmoothedCovarSurface <- function(y, t, mu, obsGrid, regGrid, optns, useBinnedCov=FALSE) { - - dataType <- optns$dataType - error <- optns$error - kern <- optns$kernel - userBwCov <- optns$userBwCov - methodBwCov <- optns$methodBwCov - verbose <- optns$verbose - rotationCut <- optns$rotationCut - - # get the truncation of the output grids. - outPercent <- optns$outPercent - buff <- .Machine$double.eps * max(abs(obsGrid)) * 10 - rangeGrid <- range(regGrid) - minGrid <- rangeGrid[1] - maxGrid <- rangeGrid[2] - cutRegGrid <- regGrid[regGrid > minGrid + diff(rangeGrid) * outPercent[1] - - buff & - regGrid < minGrid + diff(rangeGrid) * outPercent[2] + - buff] - - # Get raw covariance, unless user covariance/sigma2 are specified. - if (is.null(optns[['userCov']]) || - (is.null(optns[['userSigma2']]) && error)) { - - rcov <- GetRawCov(y, t, obsGrid, mu, dataType, error) - if (useBinnedCov && methodBwCov == 'CV') { - stop('If methodBwCov == \'CV\' then we must use the unbinned rcov.') - } - - if (useBinnedCov) { - rcov <- BinRawCov(rcov) - } - } else { - rcov <- NULL - } - - # Obtain smoothed covariance. - if( !is.null(optns$userCov)) { # If covariance function is provided - rangeUser <- range(optns$userCov$t) - rangeCut <- range(cutRegGrid) - if( rangeUser[1] > rangeCut[1] + buff || - rangeUser[2] < rangeCut[2] - buff ) { - stop('The range defined by the user provided covariance does not cover the support of the data.') - } - - bwCov = NULL - smoothCov = ConvertSupport(fromGrid = optns$userCov$t, cutRegGrid, Cov = optns$userCov$cov) - - } else { # estimate the smoothed covariance - - if (userBwCov == 0) { # bandwidth selection - if (methodBwCov %in% c('GCV', 'GMeanAndGCV')) { # GCV - gcvObj <- GCVLwls2DV2(obsGrid, regGrid, kern=kern, rcov=rcov, verbose=verbose, t=t) - bwCov <- gcvObj$h - if (methodBwCov == 'GMeanAndGCV') { - bwCov <- sqrt(bwCov * gcvObj$minBW) - } - } else if (methodBwCov == 'CV') { # CV 10 fold - gcvObj <- GCVLwls2DV2(obsGrid, regGrid, kern=kern, rcov=rcov, t=t, - verbose=optns$verbose, - CV=optns[['kFoldMuCov']], useBW1SE = optns$useBW1SE) - bwCov <- gcvObj$h - } - } else if (userBwCov != 0) { - bwCov <- userBwCov - } - - if (!useBinnedCov) { - smoothCov <- Lwls2D(bwCov, kern, xin=rcov$tPairs, yin=rcov$cxxn, - xout1=cutRegGrid, xout2=cutRegGrid) - } else { - smoothCov <- Lwls2D(bwCov, kern, xin=rcov$tPairs, yin=rcov$meanVals, - win=rcov$count, xout1=cutRegGrid, xout2=cutRegGrid) - } - } - - # Obtain the error sigma2. - if (error) { - if (!is.null(optns[['userSigma2']])) { - sigma2 <- optns[['userSigma2']] - } else if (!is.null(optns[['userCov']])) { - a0 = min(regGrid) - b0 = max(regGrid) - lint = b0 - a0 - middleCutRegGrid <- cutRegGrid > a0 + lint * rotationCut[1] - buff & - cutRegGrid < a0 + lint * rotationCut[2] + buff - if (useBinnedCov) { - diagT <- rcov[['tDiag']] - diagVal <- rcov[['diagMeans']] - } else { - diagTV <- aggregate(rcov[['diag']][, 2], list(rcov[['diag']][, 1]), mean) - diagT <- diagTV[, 1] - diagVal <- diagTV[, 2] - } - diagEst <- approx(diagT, diagVal, cutRegGrid[middleCutRegGrid])[['y']] - sigma2 <- mean(diagEst - diag(smoothCov)[middleCutRegGrid]) - - } else { # has to estimate sigma2 from scratch - sigma2 <- PC_CovE(obsGrid, regGrid, bwCov, rotationCut=rotationCut, kernel=kern, rcov=rcov)$sigma2 - } - - if(sigma2 < 0) { - if(verbose){ - warning("Estimated sigma2 is negative and thus is reset to 1e-6.") - } - sigma2 <- 1e-6 - } - - } else { # error=FALSE - sigma2 <- NULL - } - - res <- list(rawCov = rcov, - smoothCov = (smoothCov + t(smoothCov)) / 2, - bwCov = bwCov, - sigma2 = sigma2, - outGrid = cutRegGrid) - class(res) <- "SmoothCov" - return(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedMeanCurve.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedMeanCurve.R deleted file mode 100644 index 1fcb4013..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetSmoothedMeanCurve.R +++ /dev/null @@ -1,68 +0,0 @@ -GetSmoothedMeanCurve <- function (y, t, obsGrid, regGrid, optns){ - - # Note : If binned data we should use weighted mean response for each time-point. - # This is not currently implemented. \hat{y}_i = \sum_i w_i y_i where w_i are the - # same points for common t_is. so we have: \hat{y}_i = n_t w_i \bar{y} - - userMu = optns$userMu; - methodBwMu = optns$methodBwMu; - npoly = 1 - nder = 0 - userBwMu = optns$userBwMu; - kernel = optns$kernel - - # If the user provided a mean function use it - if ( is.list(userMu) && (length(userMu$mu) == length(userMu$t))){ - - buff <- .Machine$double.eps * max(abs(obsGrid)) * 10 - rangeUser <- range(optns$userMu$t) - rangeObs <- range(obsGrid) - if( rangeUser[1] > rangeObs[1] + buff || - rangeUser[2] < rangeObs[2] - buff ) { - stop('The range defined by the user provided mean does not cover the support of the data.') - } - - mu = spline(userMu$t, userMu$mu, xout= obsGrid)$y; - muDense = spline(obsGrid,mu, xout=regGrid)$y; - bw_mu = NULL; - - # otherwise if the user provided a mean bandwidth use it to estimate the mean function (below) - } else { - if (userBwMu > 0){ - bw_mu = userBwMu; - #otherwise estimate the mean bandwith via the method selected to estimnate the mean function (below) - } else { - if( any(methodBwMu == c('GCV','GMeanAndGCV') )){ - # get the bandwidth using GCV - bw_mu = unlist(GCVLwls1D1(yy = y, tt = t, kernel = kernel, npoly = npoly, nder = nder, dataType = optns$dataType) )[1] - if ( 0 == length(bw_mu)){ - stop('The data is too sparse to estimate a mean function. Get more data!\n') - } - # Uncomment to ensure MATLAB compatibility (AdjustBW1 is removed (3-Jun-16); check older versions.) - # bw_mu = AdjustBW1(kernel=kernel,bopt=bw_mu,npoly=npoly,dataType=optns$dataType,nder=nder) - # get the geometric mean between the minimum bandwidth and GCV bandwidth to estimnate the mean function (below) - if ( methodBwMu == 'GMeanAndGCV') { - minbw = Minb( unlist(t),2) - bw_mu = sqrt(minbw*bw_mu); - } - } else { - # get the bandwidth using CV to estimnate the mean function (below) - bw_mu = CVLwls1D(y, t, kernel= kernel, npoly=npoly, nder=nder, dataType= optns$dataType, kFolds = optns$kFoldMuCov, - useBW1SE = optns$useBW1SE); - } - } - # Get the mean function using the bandwith estimated above: - xin = unlist(t); - yin = unlist(y)[order(xin)]; - xin = sort(xin); - win = rep(1, length(xin)); - mu = Lwls1D(bw_mu, kernel_type = kernel, npoly = npoly, nder = nder, xin = xin, yin= yin, xout = obsGrid, win = win) - muDense = Lwls1D(bw_mu, kernel_type = kernel, npoly = npoly, nder = nder, xin = xin, yin= yin, xout = regGrid, win = win) - } - - result <- list( 'mu' = mu, 'muDense'= muDense, 'bw_mu' = bw_mu); - class(result) <- "SMC" - return(result) -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserCov.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserCov.R deleted file mode 100644 index 57d0c759..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserCov.R +++ /dev/null @@ -1,35 +0,0 @@ -GetUserCov <- function(optns, obsGrid, cutRegGrid, buff, ymat) { -# If covariance function is provided - - - rangeUser <- range(optns$userCov$t) - rangeCut <- range(cutRegGrid) - if( rangeUser[1] > rangeCut[1] + buff || - rangeUser[2] < rangeCut[2] - buff ) { - stop('The range defined by the user provided covariance does not cover the support of the data.') - } - - bwCov = NULL - smoothCov = ConvertSupport(fromGrid = optns$userCov$t, cutRegGrid, Cov = optns$userCov$cov) - - if (optns$error) { # error == TRUE - if (!is.null(optns[['userSigma2']])) { - sigma2 <- optns[['userSigma2']] - } else if (optns$dataType %in% c('Dense', 'DenseWithMV')) { - ord <- 2 - sigma2 <- mean(diff(t(ymat), differences=ord)^2, na.rm=TRUE) / choose(2 * ord, ord) - } else { - stop('Use GetSmoothedCovarSurface instead!') - } - } else { # error == FALSE - sigma2 <- NULL - } - - res <- list(rawCov = NULL, - smoothCov = (smoothCov + t(smoothCov)) / 2, - bwCov = NULL, - sigma2 = sigma2, - outGrid = cutRegGrid) - class(res) <- "SmoothCov" - return(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserMeanCurve.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserMeanCurve.R deleted file mode 100644 index b6201fe3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/GetUserMeanCurve.R +++ /dev/null @@ -1,19 +0,0 @@ -GetUserMeanCurve <- function (optns, obsGrid, regGrid, buff) { - # If the user provided a mean function use it - - userMu = optns$userMu - rangeUser <- range(optns$userMu$t) - rangeObs <- range(obsGrid) - if( rangeUser[1] > rangeObs[1] + buff || - rangeUser[2] < rangeObs[2] - buff ) { - stop('The range defined by the user provided mean does not cover the support of the data.') - } - - mu = spline(userMu$t, userMu$mu, xout= obsGrid)$y - muDense = spline(obsGrid,mu, xout=regGrid)$y - bw_mu = NULL - - result <- list( 'mu' = mu, 'muDense'= muDense, 'bw_mu' = bw_mu) - class(result) <- "SMC" - return(result) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/HandleNumericsAndNAN.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/HandleNumericsAndNAN.R deleted file mode 100644 index fb171a83..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/HandleNumericsAndNAN.R +++ /dev/null @@ -1,38 +0,0 @@ -# #' Check if NaN are present in the data and if yes remove them -# #' -# #' Check if there are problems cause by missing values with the form and basic structure of the functional data 'Ly' and the recorded times 'Lt'. -# #' -# #' @param Ly is a n-by-1 list of vectors -# #' @param Lt is a n-by-1 list of vectors - -HandleNumericsAndNAN <- function(Ly,Lt){ - - # Check for the presense of NA and remove them (if they exist) from the two lists in a pairwise manner - if( any(is.na(unlist(Lt))) || any(is.na(unlist(Ly))) ){ - - helperF <- function(x) which(!is.na(unlist(x))) - L <- list(); for(j in 1:length(Ly)) L[[j]] = list(Ly[[j]],Lt[[j]]) - validIndexes = lapply(L, function(x) intersect(helperF(x[1]), helperF(x[2]) )) - - Ly = lapply(1:length(Ly), function(i) Ly[[i]][validIndexes[[i]]]) - Lt = lapply(1:length(Ly), function(i) Lt[[i]][validIndexes[[i]]]) - - if( any(unlist(lapply(Ly, function(x) length(x) == 0))) ){ - stop('Subjects with only NA values are not allowed.\n') - } - - ni_y = unlist(lapply(Ly,function(x) sum(!is.na(x)))) - if(all(ni_y == 1)){ - stop("FPCA is aborted because the data do not contain repeated measurements after removing NA values.\n"); - } - } - - - - # Force the data to be list of numeric members - Ly <- lapply(Ly, as.numeric) - Lt <- lapply(Lt, as.numeric) - Lt <- lapply(Lt, signif, 14) - return( inputData <- list(Ly=Ly, Lt=Lt)); - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/IsRegular.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/IsRegular.R deleted file mode 100644 index fbd15e68..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/IsRegular.R +++ /dev/null @@ -1,15 +0,0 @@ -IsRegular = function(t){ - - # Check the if we have dense (2), or dataType data with missing values (1) or sparse (0) data - # t : n-by-1 list of vectors - - tt = unlist(t); - f = length(tt)/length(unique(tt))/length(t); - if (f == 1){ - return('Dense'); # for either regular and irregular data - } else if(f > 0.80){ - return('DenseWithMV'); - } else { - return('Sparse'); - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/List2Mat.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/List2Mat.R deleted file mode 100644 index a21f69f8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/List2Mat.R +++ /dev/null @@ -1,18 +0,0 @@ -# This function converts dense regular functional input list -# to a matrix for easier dense case implementation -########################################################################## -# Input: - y: list of n dense regular observed p-dim functional objects -########################################################################## -# Output: - ymat: n by p matrix containing all functional data -########################################################################## - -List2Mat <- function(y,t){ - n = length(y) - obsGrid = sort(unique(unlist(t))) - ymat = matrix( rep(NA, n * length(obsGrid)), nrow = n, byrow = TRUE) - - for (i in 1:n){ - ymat[i, is.element(obsGrid, t[[i]])] = y[[i]] - } - return(ymat) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls1D.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls1D.R deleted file mode 100644 index fd1089d3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls1D.R +++ /dev/null @@ -1,44 +0,0 @@ -#' One dimensional local linear kernel smoother -#' -#' One dimensional local linear kernel smoother for longitudinal data. -#' -#' @param bw Scalar holding the bandwidth -#' @param kernel_type Character holding the kernel type (see ?FPCA for supported kernels) -#' @param win Vector of length N with weights -#' @param xin Vector of length N with measurement points -#' @param yin Vector of length N with measurement values -#' @param xout Vector of length M with output measurement points -#' @param npoly Scalar (integer) degree of polynomial fitted (default 1) -#' @param nder Scalar (integer) degree of derivative fitted (default 0) -#' -#' @return Vector of length M with measurement values at the the point speficied by 'xout' -#' -#' @export - - -Lwls1D <- function( bw, kernel_type, win=rep(1L, length(xin)), xin, yin, xout, npoly = 1L, nder = 0L){ - - if(is.unsorted(xin)){ - stop('`xin` needs to be sorted in increasing order') - } - - if(is.unsorted(xout)){ - stop('`xout` needs to be sorted in increasing order') - } - - if(all(is.na(win)) || all(is.na(xin)) || all(is.na(yin))){ - stop(' win, xin or yin contain only NAs!') - } - - # Deal with NA/NaN measurement values - NAinY = is.na(xin) | is.na(yin) | is.na(win) - if(any(NAinY)){ - win = win[!NAinY] - xin = xin[!NAinY] - yin = yin[!NAinY] - } - - return( CPPlwls1d(bw= as.numeric(bw), kernel_type = kernel_type, npoly= as.integer(npoly), nder= as.integer(nder), - xin = as.numeric(xin), yin= as.numeric(yin), xout= as.numeric(xout), win = as.numeric(win))) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2D.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2D.R deleted file mode 100644 index e317da5c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2D.R +++ /dev/null @@ -1,93 +0,0 @@ -#' Two dimensional local linear kernel smoother. -#' -#' Two dimensional local weighted least squares smoother. Only local linear smoother for estimating the original curve is available (no higher order, no derivative). -#' @param bw A scalar or a vector of length 2 specifying the bandwidth. -#' @param kern Kernel used: 'gauss', 'rect', 'gausvar', 'epan' (default), 'quar'. -#' @param xin An n by 2 data frame or matrix of x-coordinate. -#' @param yin A vector of y-coordinate. -#' @param win A vector of weights on the observations. -#' @param xout1 a p1-vector of first output coordinate grid. Defaults to the input gridpoints if left unspecified. -#' @param xout2 a p2-vector of second output coordinate grid. Defaults to the input gridpoints if left unspecified. -#' @param xout alternative to xout1 and xout2. A matrix of p by 2 specifying the output points (may be inefficient if the size of \code{xout} is small). -#' @param crosscov using function for cross-covariance estimation (Default: FALSE) -#' @param subset a vector with the indices of x-/y-/w-in to be used (Default: NULL) -#' @param method should one try to sort the values xin and yin before using the lwls smoother? if yes ('sort2' - default for non-Gaussian kernels), if no ('plain' - fully stable; de) -#' @return a p1 by p2 matrix of fitted values if xout is not specified. Otherwise a vector of length p corresponding to the rows of xout. -#' @export - -Lwls2D <- function(bw, kern='epan', xin, yin, win=NULL, xout1=NULL, xout2=NULL, xout=NULL, subset=NULL, crosscov = FALSE, method = ifelse(kern == 'gauss', 'plain', 'sort2')) { - - # only support epan kernel now. - # stopifnot(kern == 'epan') - - if (length(bw) == 1){ - bw <- c(bw, bw) - } - if (!is.matrix(xin) || (dim(xin)[2] != 2) ){ - stop('xin needs to be a n by 2 matrix') - } - # xin <- matrix(xin, ncol=2) # This causes unexcepted/wrong results. - - if (is.null(win)){ - win <- rep(1, nrow(xin)) - } - if (!(nrow(xin) == length(yin) && nrow(xin) == length(win))) { - stop('The length of xin, yin, and win (if specified) must be the same') - } - if (!is.null(subset)) { - xin <- xin[subset, ] - yin <- yin[subset] - win <- win[subset] - } - - if (!is.null(xout1) && !is.null(xout2) && !is.null(xout)) { - stop('Either xout1/xout2 or xout should be specified, but not both.') - } - - if (is.null(xout1)) - xout1 <- sort(unique(xin[, 1])) - - if (is.null(xout2)) - xout2 <- sort(unique(xin[, 2])) - - # For passing numerics into the cpp smoother. - storage.mode(bw) <- 'numeric' - storage.mode(xin) <- 'numeric' - storage.mode(yin) <- 'numeric' - storage.mode(win) <- 'numeric' - storage.mode(xout1) <- 'numeric' - storage.mode(xout2) <- 'numeric' - if (!is.null(xout)) - storage.mode(xout) <- 'numeric' - if (crosscov == TRUE){ - if (method == 'sort2') { - ord <- order(xin[, 1]) - xin <- xin[ord, ] - yin <- yin[ord] - win <- win[ord] - # browser() - #ret <- RmullwlskCCsort2(bw, kern, t(xin), yin, win, xout1, xout2, FALSE) - ret <- RmullwlskUniversal(bw, kern, t(xin), yin, win, xout1, xout2, FALSE, autoCov = FALSE) - } else if (method == 'plain') { - ret <- RmullwlskCC(bw, kern, t(xin), yin, win, xout1, xout2, FALSE) - } - } else { - #browser() - if(method == 'plain'){ - ret <- Rmullwlsk(bw, kern, t(xin), yin, win, xout1, xout2, FALSE) - } else if (method == 'sort2'){ - ord <- order(xin[, 1]) - xin <- xin[ord, ] - yin <- yin[ord] - win <- win[ord] - # browser() - ret <- RmullwlskUniversal(bw, kern, t(xin), yin, win, xout1, xout2, FALSE, autoCov = TRUE) - } - } - - if (!is.null(xout)) { - ret <- interp2lin(xout1, xout2, ret, xout[, 1], xout[, 2]) - } - - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2DDeriv.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2DDeriv.R deleted file mode 100644 index 6a4b30a3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Lwls2DDeriv.R +++ /dev/null @@ -1,90 +0,0 @@ -#' Two dimensional local linear kernel smoother with derivatives. -#' -#' Two dimensional local weighted least squares smoother. Only local linear smoother for estimating the original curve is available (no higher order, no derivative). -#' @param bw A scalar or a vector of length 2 specifying the bandwidth. -#' @param kern Kernel used: 'gauss', 'rect', 'gausvar', 'epan' (default), 'quar'. -#' @param xin An n by 2 data frame or matrix of x-coordinate. -#' @param yin A vector of y-coordinate. -#' @param win A vector of weights on the observations. -#' @param xout1 a p1-vector of first output coordinate grid. Defaults to the input gridpoints if left unspecified. -#' @param xout2 a p2-vector of second output coordinate grid. Defaults to the input gridpoints if left unspecified. -#' @param xout alternative to xout1 and xout2. A matrix of p by 2 specifying the output points (may be inefficient if the size of \code{xout} is small). -#' @param npoly The degree of polynomials (include all \eqn{x^a y^b} terms where \eqn{a + b <= npoly}) -#' @param nder1 Order of derivative in the first direction -#' @param nder2 Order of derivative in the second direction -#' @param crosscov using function for cross-covariance estimation (Default: TRUE) -#' @param subset a vector with the indices of x-/y-/w-in to be used (Default: NULL) -#' @param method should one try to sort the values xin and yin before using the lwls smoother? if yes ('sort2' - default for non-Gaussian kernels), if no ('plain' - fully stable; de) -#' @return a p1 by p2 matrix of fitted values if xout is not specified. Otherwise a vector of length p corresponding to the rows of xout. -#' @export - -Lwls2DDeriv <- function( - bw, kern='epan', xin, yin, win=NULL, xout1=NULL, xout2=NULL, xout=NULL, - npoly=1L, nder1=0L, nder2=0L, subset=NULL, - crosscov = TRUE, method = 'sort2' -) { - - # only support epan kernel now. - # stopifnot(kern == 'epan') - - if (length(bw) == 1){ - bw <- c(bw, bw) - } - if (is.data.frame(xin)) { - xin <- as.matrix(xin) - } - if (!is.matrix(xin) || (dim(xin)[2] != 2) ){ - stop('xin needs to be a n by 2 matrix') - } - # xin <- matrix(xin, ncol=2) # This causes unexcepted/wrong results. - - if (is.null(win)){ - win <- rep(1, nrow(xin)) - } - if (!is.null(subset)) { - xin <- xin[subset, ] - yin <- yin[subset] - win <- win[subset] - } - - if (!is.null(xout1) && !is.null(xout2) && !is.null(xout)) { - stop('Either xout1/xout2 or xout should be specified, but not both.') - } - - if (is.null(xout1)) - xout1 <- sort(unique(xin[, 1])) - - if (is.null(xout2)) - xout2 <- sort(unique(xin[, 2])) - - # For passing numerics into the cpp smoother. - storage.mode(bw) <- 'numeric' - storage.mode(xin) <- 'numeric' - storage.mode(yin) <- 'numeric' - storage.mode(win) <- 'numeric' - storage.mode(xout1) <- 'numeric' - storage.mode(xout2) <- 'numeric' - if (!is.null(xout)) - storage.mode(xout) <- 'numeric' - storage.mode(npoly) <- 'integer' - storage.mode(nder1) <- 'integer' - storage.mode(nder2) <- 'integer' - - if (method == 'sort2') { - ord <- order(xin[, 1]) - xin <- xin[ord, ] - yin <- yin[ord] - win <- win[ord] - # browser() - ret <- RmullwlskUniversalDeriv(bw, kern, t(xin), yin, win, - xout1, xout2, npoly, nder1, nder2, FALSE, !crosscov) - } else if (method == 'plain') { # MAYBE IMPROVE THIS - ret <- RmullwlskCC(bw, kern, t(xin), yin, win, xout1, xout2, FALSE) - } - - if (!is.null(xout)) { - ret <- interp2lin(xout1, xout2, ret, xout[, 1], xout[, 2]) - } - - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MCVOptRidge.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MCVOptRidge.R deleted file mode 100644 index 8004dea1..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MCVOptRidge.R +++ /dev/null @@ -1,188 +0,0 @@ -### Functional Optimal Designs: modified cross validation for ridge parameter selection -MCVOptRidge <- function(y, t, Resp, p, RidgeCand, isDense = FALSE, - isRegression = FALSE, isSequential = TRUE){ - # Modified CV approach for ridge parameter selection - n <- length(y) - ridgecrit <- matrix(NA,ncol=2,nrow=length(RidgeCand)) - for(cviter in 1:length(RidgeCand)){ # cv loop - ngrouping = 10 - if(isDense){ngrouping = 2} - crittemp <- matrix(NA, ncol=2, nrow=ngrouping) - for(ii in 1:ngrouping){ - idxA <- sort(sample(1:n, round(n/4))) # for FPCA and model component est - idxB <- sort((1:n)[-idxA]) # for evaluation of optimal design - yA <- y[idxA]; tA <- t[idxA] - yB <- y[idxB]; tB <- t[idxB] - - obsGridA = signif(sort(unique(c(unlist(tA)))),8); - - nRegGridA = as.integer(1+diff(range(obsGridA))/min(diff(obsGridA))); - - optnsA <- SetOptions(y = yA, t = tA, optns = list(nRegGrid = nRegGridA)) - CheckOptions(t = tA, optns = optnsA, n = length(yA)) - - FPCAA <- FPCA(yA, tA, optnsA) - CovA <- FPCAA$fittedCov; muA <- FPCAA$mu - workGridA <- signif(FPCAA$workGrid,8); - - DesPoolB <- matrix(NA, ncol = 0, nrow = p) - n_DesB <- length(idxB) - if(isDense){n_DesB <- 1} - for(j in 1:n_DesB){ - if(length(tB[[j]]) >= p){ - subidxj <- which(workGridA %in% tB[[j]]) - if(length(subidxj) < p){cat(subidxj,"\n")} - DesPoolB <- cbind(DesPoolB, utils::combn(subidxj,p)) - } - } - DesPoolB <- t(unique(t(DesPoolB))) # take only unique designs - if(isRegression == TRUE){ - # Get CCovA - RespA <- Resp[idxA]; RespB <- Resp[idxB] - yA1 <- list() - for(l in 1:length(idxA)){yA1[[l]] <- yA[[l]] * RespA[l]} - FPCAAcross <- FPCA(yA1, tA, optnsA) - CCovAtemp <- FPCAAcross$mu - muA*mean(RespA) - CCovA = CCovAtemp - #CCovA <- ConvertSupport(fromGrid = signif(FPCAAcross$obsGrid,8), toGrid = workGridA, - # mu = CCovAtemp) - # then find optdes for SR - optdesii <- BestDes_SR_CV(p = p, ridge = RidgeCand[cviter], DesPool = DesPoolB, - workGrid = workGridA, Cov = CovA, - CCov = CCovA, isDense = isDense, isSequential = isSequential) - # check out the subjects that has measurements at selected designs - idxB2Prd <- rep(0, length(idxB)) - for(ll in 1:length(idxB)){ - if(sum(workGridA[optdesii] %in% tB[[ll]]) == p) idxB2Prd[ll] <- 1 - } - #if(!isDense){ - #cat(paste("idxB2Prd is", length(which(idxB2Prd==1)),"...\n")) - #} - yB2Prd <- yB[which(idxB2Prd == 1)] - tB2Prd <- tB[which(idxB2Prd == 1)] - RespB2Prd <- RespB[which(idxB2Prd == 1)] - # make predictions - FittedB <- RespPrd_CV(design = optdesii, ylist2Prd = yB2Prd, tlist2Prd = tB2Prd, - mu = FPCAA$mu, RespTrain = RespA, - obsGrid = obsGridA, workGrid = workGridA, - ridge = RidgeCand[cviter], Cov = CovA, CCov = CCovA) - # calculate performance criterion - crittemp[ii,] <- APE_CV(RespB2Prd, FittedB$yres) - } else { # for TR - optdesii <- BestDes_TR_CV(p = p, ridge = RidgeCand[cviter], DesPool = DesPoolB, - workGrid = workGridA, Cov = CovA, isDense = isDense, - isSequential = isSequential) - # check out the subjects that has measurements at selected designs - idxB2Prd <- rep(0, length(idxB)) - for(ll in 1:length(idxB)){ - if(sum(workGridA[optdesii] %in% tB[[ll]]) == p) idxB2Prd[ll] <- 1 - } - #if(!isDense){ - #cat(paste("idxB2Prd is", length(which(idxB2Prd==1)),"...\n")) - #} - yB2Prd <- yB[which(idxB2Prd == 1)] - tB2Prd <- tB[which(idxB2Prd == 1)] - FittedB <- TrajRec_CV(design = optdesii, ylist2Prd = yB2Prd, tlist2Prd = tB2Prd, - mu = FPCAA$mu, obsGrid = obsGridA, workGrid = workGridA, - ridge = RidgeCand[cviter], Cov = CovA) - # returns the fitted list at observed time points - # calculate performance criterion - yB2PrdAdj <- list() - for(rr in 1:length(yB2Prd)){ - ttemp <- which( ( signif(tB2Prd[[rr]],8) %in% signif(workGridA,8) ) == TRUE) - yB2PrdAdj[[rr]] <- yB2Prd[[rr]][ttemp] - } - crittemp[ii,] <- ARE_CV(yB2PrdAdj, FittedB$yres) - } - } - ridgecrit[cviter,] <- colMeans(crittemp, na.rm = TRUE) - cat(paste("CV for",cviter,"out of",length(RidgeCand), "ridge parameters complete!\n")) - } - optridge = RidgeCand[which(ridgecrit[,1] == min(ridgecrit[,1]))] - return(list(optridge = optridge, RidgeError = cbind(RidgeCand,ridgecrit))) -} - -BestDes_TR_CV <- function(p, ridge, DesPool, workGrid, Cov, isDense = TRUE, isSequential = FALSE){ - # select the optimal designs for trajectory recovery case in cv - if(isDense){ - best <- BestDes_TR(p, ridge, workGrid, Cov, isSequential=isSequential)$best - } - else { # sparse case - comblist = DesPool - temps <- rep(0,ncol(comblist)) - for(i in 1:ncol(comblist)){ temps[i] <- TRCri(comblist[,i], ridge, Cov, workGrid) } - best <- sort(comblist[,min(which(temps==max(temps)))]) - return(best) - # sequential method not used for sparse case - } -} - -BestDes_SR_CV <- function(p, ridge, DesPool, workGrid, Cov, CCov, isDense = TRUE, isSequential = FALSE){ - # select the optimal designs for regression case in cv - if(isDense){ - best <- BestDes_SR(p, ridge, workGrid, Cov, CCov, isSequential=isSequential)$best - } else { - comblist <- DesPool - temps <- rep(0,ncol(comblist)) - for(i in 1:ncol(comblist)){ temps[i] <- SRCri(comblist[,i], ridge, Cov, CCov) } - best <- sort(comblist[,min(which(temps==max(temps)))]) - return(best) - # sequential method not used for sparse case - } -} - -TrajRec_CV <- function(design, ylist2Prd, tlist2Prd, mu, obsGrid, workGrid, ridge, Cov){ - # recover the trajectories based on a given design vector (for cv) - if(length(ylist2Prd) == 0){ return(list(yres = list(), tres = list()))} - ridgeCov <- Cov + diag(ridge, nrow(Cov)) - if(length(mu) != length(workGrid)){ - mu <- ConvertSupport(fromGrid = obsGrid, toGrid = workGrid, mu = mu) - } - yres <- list() - for(i in 1:length(ylist2Prd)){ - obsidx <- which((signif(workGrid,digits=8) %in% signif(tlist2Prd[[i]],8)) == TRUE) - obsdesidx <- which( (signif(tlist2Prd[[i]],8) %in% signif(workGrid[design],8) ) == TRUE ) - yres[[i]] <- mu[obsidx] + Cov[obsidx,design] %*% solve(ridgeCov[design,design]) %*% - ((ylist2Prd[[i]][obsdesidx]) - mu[design]) - } - return(list(yres = yres, tres = tlist2Prd)) -} - -RespPrd_CV <- function(design, ylist2Prd, tlist2Prd, mu, RespTrain, obsGrid, - workGrid, ridge, Cov, CCov){ - # predict the response based on a given design vector (for cv) - if(length(ylist2Prd) == 0){ return(list(yres = c(), tres = list()))} - ridgeCov <- Cov + diag(ridge,nrow(Cov)) - if(length(mu) != length(workGrid) || length(CCov) != length(workGrid)){ - mu <- ConvertSupport(fromGrid = obsGrid, toGrid = workGrid, mu = mu) - CCov <- ConvertSupport(fromGrid = obsGrid, toGrid = workGrid, mu = CCov) - } - Ybar <- mean(RespTrain) - res <- rep(NA, length(ylist2Prd)) - for(i in 1:length(ylist2Prd)){ - obsdesidx <- which( ( signif(tlist2Prd[[i]],8) %in% signif(workGrid[design],8)) == TRUE) - res[i] <- Ybar + CCov[design] %*% solve(ridgeCov[design,design]) %*% - (ylist2Prd[[i]][obsdesidx] - mu[design]) - } - return(list(yres = res, tres = tlist2Prd)) -} - -ARE_CV <- function(ObsTraj, RecTraj){ - # error cirterion: MISE for trajectory recovery - if(length(RecTraj) == 0){return(c(NA,NA))} - nn <- length(ObsTraj) - addi <- rep(NA, nn) - denom <- rep(NA,nn) - for(i in 1:nn){ - addi[i] <- sqrt(mean((ObsTraj[[i]]-RecTraj[[i]])^2)) - denom[i] <- sqrt(mean(ObsTraj[[i]]^2)) - } - return(c(mean(addi),mean(addi)/mean(denom))) -} - -APE_CV <- function(ObsResp, PredResp){ - # error criterion: MSE for regression case - if(length(PredResp)==0){return(c(NA,NA))} - return(c(sqrt(mean((ObsResp - PredResp)^2)), - sqrt(mean((ObsResp - PredResp)^2))/sqrt(mean(ObsResp^2)))) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeBWtoZscore02y.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeBWtoZscore02y.R deleted file mode 100644 index 619cca99..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeBWtoZscore02y.R +++ /dev/null @@ -1,49 +0,0 @@ -#' Z-score body-weight for age 0 to 24 months based on WHO standards -#' -#' Make vector of age and body-weight to z-scores based on WHO standards using LMS -#' -#' @param sex A character 'M' or 'F' indicating the sex of the child. -#' @param age A vector of time points of size Q. -#' @param bw A vector of body-weight readings of size Q. -#' -#' @return A vector of Z-scores of size Q. -#' @export -MakeBWtoZscore02y <- function(sex, age, bw){ - time = 0:24 - if(length(age) != length(bw)){ - stop('Number of readings for age and body-weight are not the same.') - } - if(!all( (age <= time[24]) && (time[1] <= age))){ - stop('Age requested is outside the [0,24] months.') - } - - if(sex == 'F'){ - # http://www.who.int/childgrowth/standards/tab_wfa_girls_p_0_5.txt - sGbw = c( 0.14171, 0.13724, 0.13000, 0.12619, 0.12402, 0.12274, 0.12204, 0.12178, 0.12181, 0.12199, 0.12223, - 0.12247, 0.12268, 0.12283, 0.12294, 0.12299, 0.12303, 0.12306, 0.12309, 0.12315, 0.12323, 0.12335, - 0.12350, 0.12369, 0.12390) - mGbw = c( 3.2322, 4.1873, 5.1282, 5.8458, 6.4237, 6.8985, 7.2970, 7.6422, 7.9487, 8.2254, 8.4800, - 8.7192, 8.9481, 9.1699, 9.3870, 9.6008, 9.8124, 10.0226, 10.2315, 10.4393, 10.6464, 10.8534, - 11.0608, 11.2688, 11.4775 ) - lGbw = c( 0.3809, 0.1714, 0.0962, 0.0402, -0.0050, -0.0430, -0.0756, -0.1039, -0.1288, -0.1507, -0.1700, - -0.1872, -0.2024, -0.2158, -0.2278, -0.2384, -0.2478, -0.2562, -0.2637, -0.2703, -0.2762, -0.2815, - -0.2862, -0.2903, -0.2941) - return( ( ((bw/spline(x=time, y = mGbw, xout = age)$y)^(spline(x=time, y = lGbw, xout = age)$y)) -1 ) / - (spline(x=time, y = sGbw, xout = age)$y * spline(x=time, y = lGbw, xout = age)$y) ) - } else if(sex == 'M'){ - # http://www.who.int/childgrowth/standards/tab_wfa_boys_p_0_5.txt - sBbw = c(0.14602, 0.13395, 0.12385, 0.11727, 0.11316, 0.11080, 0.10958, 0.10902, 0.10882, 0.10881, 0.10891, - 0.10906, 0.10925, 0.10949, 0.10976, 0.11007, 0.11041, 0.11079, 0.11119, 0.11164, 0.11211, 0.11261, - 0.11314, 0.11369,0.11426) - mBbw = c(3.3464, 4.4709, 5.5675, 6.3762, 7.0023, 7.5105, 7.9340, 8.2970, 8.6151, 8.9014, 9.1649, - 9.4122, 9.6479, 9.8749, 10.0953, 10.3108, 10.5228, 10.7319, 10.9385, 11.1430, 11.3462, 11.5486, - 11.7504, 11.9514, 12.1515) - lBbw = c(0.3487, 0.2297, 0.1970, 0.1738, 0.1553, 0.1395, 0.1257, 0.1134, 0.1021, 0.0917, 0.0820, - 0.0730, 0.0644, 0.0563, 0.0487, 0.0413, 0.0343, 0.0275, 0.0211, 0.0148, 0.0087, 0.0029, - -0.0028, -0.0083,-0.0137) - return( ( ((bw/spline(x=time, y = mBbw, xout = age)$y)^(spline(x=time, y = lBbw, xout = age)$y)) -1 ) / - (spline(x=time, y = sBbw, xout = age)$y * spline(x=time, y = lBbw, xout = age)$y) ) - } else{ - stop("Sex type undefined.") - } -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeFPCAInputs.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeFPCAInputs.R deleted file mode 100644 index c77a474b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeFPCAInputs.R +++ /dev/null @@ -1,52 +0,0 @@ -#' Format FPCA input -#' -#' Turn vector inputs to the list so they can be used in FPCA -#' -#' @param IDs n-by-1 vector of subject IDs (Default: NULL) -#' @param tVec Either an n-by-1 vector of measurement times, or a p-by-1 vector corresponding to the common time support -#' @param yVec n-by-1 vector of measurements from the variable of interest, or a n-by-p matrix with each row corresponding to the dense observations. -#' @param na.rm logical indicating if NA should be omitted (Default: FALSE) -#' @param sort logical indicating if the returned lists Lt and Ly should be ensured to be sorted (Default: FALSE) -#' @return L list containing 3 lists each of length 'm', 'm' being the number of unique subject IDs -#' @export - -MakeFPCAInputs <- function(IDs = NULL, tVec, yVec, na.rm=FALSE, sort = FALSE){ - - if ((!is.null(IDs) && any(is.na(IDs)) || any(is.na(tVec))) && - na.rm == FALSE) { - stop('NAs exist in the IDs or tVec. Use na.rm=TRUE') - } - - if( !is.null(IDs) ){ - if (na.rm) { - dat <- na.omit(data.frame(IDs, tVec, yVec)) - IDs <- dat[, 'IDs'] - tVec <- dat[, 'tVec'] - yVec <- dat[, 'yVec'] - } - uniqueIDs <- unique(IDs) - # Lt <- lapply( uniqueIDs, function(x) tVec[ which(IDs == x)]) - # Ly <- lapply( uniqueIDs, function(x) yVec[ which(IDs == x)]) - Lid <- as.list(uniqueIDs) - Lt <- split(tVec, IDs, drop=TRUE) - Lt <- Lt[match(as.character(uniqueIDs), names(Lt))] - Ly <- split(yVec, IDs, drop=TRUE) - Ly <- Ly[match(as.character(uniqueIDs), names(Ly))] - } else if ( is.matrix(yVec) && is.null(IDs) && is.vector(tVec) ){ - if (ncol(yVec) != length(tVec)) { - stop('columns of yVec does not correspond to tVec.') - } - Ly <- lapply( seq_len(nrow(yVec)), function(i) yVec[i,]) - Lt <- rep( list(tVec), dim(yVec)[1] ) - Lid <- as.list( 1:dim(yVec)[1]) - } - if(sort){ - Ly = mapply( FUN = function(u1,u2) { ifelse(is.unsorted(u1), return( u2[order(u1)]), return(u2) ) }, u1 = Lt, u2 = Ly, SIMPLIFY = FALSE) - Lt = lapply( Lt, function(u) { ifelse(is.unsorted(u), return( sort(u) ), return(u) ) } ) - } - - L <- list( Lid = Lid, Ly = Ly, Lt = Lt) - return(L) - -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeGPFunctionalData.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeGPFunctionalData.R deleted file mode 100644 index 6589e422..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeGPFunctionalData.R +++ /dev/null @@ -1,56 +0,0 @@ -#' Make Gaussian Process Dense Functional Data sample -#' -#' Make a Gaussian process dense functional data sample of size n over a [0,1] support. -#' -#' @param n number of samples to generate -#' @param M number of equidistant readings per sample (default: 100) -#' @param mu vector of size M specifying the mean (default: rep(0,M)) -#' @param K scalar specifying the number of basis to be used (default: 2) -#' @param lambda vector of size K specifying the variance of each components (default: rep(1,K)) -#' @param sigma The standard deviation of the Gaussian noise added to each observation points. -#' @param basisType string specifiying the basis type used; possible options are: 'sin', 'cos' and 'fourier' (default: 'cos') (See code of 'CreateBasis' for implementation details.) -#' -#' @return Y: X(t_{j}), Yn: noisy observations -#' @export - -MakeGPFunctionalData <-function(n, M = 100, mu=rep(0,M), K = 2, lambda = rep(1,K), sigma=0, basisType='cos'){ - - if(n <2){ - stop("Samples of size 1 are irrelevant.") - } - if(M <20){ - stop("Dense samples with less than 20 observations per subject are irrelevant.") - } - if (!is.numeric(sigma) || sigma < 0) { - stop("'sigma' needs to be a nonnegative number") - } - s <- seq(0,1,length.out = M) - - if(length(mu) != M){ - stop("Make sure that 'M' and the number of points over which 'mu' is evaluated is the same.") - } - # if(is.null(lambda)){ - # lambda = seq(K,1,-1) - # } - if(K != length(lambda)){ - stop("Make sure you provide 'lambda's for all 'K' modes of variation.") - } - # if( !(basisType %in% c('cos','sin','fourier'))){ - # stop("Make sure you provide a valid parametric basis.") - # } - - Ksi <- apply(matrix(rnorm(n*K), ncol=K), 2, scale) %*% diag(sqrt(lambda)) - Phi <- CreateBasis(pts= s, type= basisType, K = K) - - yTrue <- t(matrix(rep(mu,n), nrow=M)) + Ksi %*% t(Phi) - - res <- list(Y = yTrue, Phi = Phi, xi=Ksi, pts=s) - - if (sigma > 0) { - yNoisy <- yTrue + rnorm(n * M, sd=sigma) - res <- c(res, list(Yn = yNoisy)) - } - - return(res) - } - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeHCtoZscore02y.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeHCtoZscore02y.R deleted file mode 100644 index 06a37f9e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeHCtoZscore02y.R +++ /dev/null @@ -1,41 +0,0 @@ -#' Z-score head-circumference for age 0 to 24 months based on WHO standards -#' -#' Make vector of age and height measurement to z-scores based on WHO standards using mu and sigma (not LMS) -#' -#' @param sex A character 'M' or 'F' indicating the sex of the child. -#' @param age A vector of time points of size Q. -#' @param hc A vector of head circumference readings of size Q (in cm). -#' -#' @return A vector of Z-scores of size Q. -#' @export -MakeHCtoZscore02y <- function(sex, age, hc){ - time = 0:24 - - if(length(age) != length(hc)){ - stop('Number of readings for age and head circ. are not the same.') - } - if(!all( (age <= time[24]) && (time[1] <= age))){ - stop('Age requested is outside the [0,24] months.') - } - if(sex == 'F'){ - # http://www.who.int/childgrowth/standards/second_set/tab_hcfa_girls_p_0_5.txt - muGhc = c(33.8787, 36.5463, 38.2521, 39.5328, 40.5817, 41.4590, 42.1995, 42.8290, 43.3671, - 43.8300, 44.2319, 44.5844, 44.8965, 45.1752, 45.4265, 45.6551, 45.8650, 46.0598, - 46.2424, 46.4152, 46.5801, 46.7384, 46.8913, 47.0391, 47.1822) - sdGhc = c(1.18440, 1.17314, 1.21183, 1.24133, 1.26574, 1.28606, 1.30270, 1.31699, 1.32833, - 1.33813, 1.34642, 1.35314, 1.35902, 1.36384, 1.36825, 1.37239, 1.37549, 1.37857, - 1.38126, 1.38410, 1.38669, 1.38907, 1.39126, 1.39330, 1.39518); - return( (hc - spline(x=time, y = muGhc, xout = age)$y) / spline(x=time, y = sdGhc, xout = age)$y) - } else if(sex == 'M'){ - # http://www.who.int/childgrowth/standards/second_set/tab_hcfa_boys_p_0_5.txt - muBhc = c(34.4618, 37.2759, 39.1285, 40.5135, 41.6317, 42.5576, 43.3306, 43.9803, 44.5300, - 44.9998, 45.4051, 45.7573, 46.0661, 46.3395, 46.5844, 46.8060, 47.0088, 47.1962, - 47.3711, 47.5357, 47.6919, 47.8408, 47.9833, 48.1201, 48.2515) - sdBhc = c(1.27026, 1.16785, 1.17268, 1.18218, 1.19400, 1.20736, 1.22062, 1.23321, 1.24506, - 1.25639, 1.26680, 1.27617, 1.28478, 1.29241, 1.30017, 1.30682, 1.31390, 1.32008, - 1.32639, 1.33243, 1.33823, 1.34433, 1.34977, 1.35554, 1.36667) - return( (hc - spline(x=time, y = muBhc, xout = age)$y) / spline(x=time, y = sdBhc, xout = age)$y) - } else{ - stop("Sex type undefined.") - } -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeLNtoZscore02y.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeLNtoZscore02y.R deleted file mode 100644 index 1bc70d65..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeLNtoZscore02y.R +++ /dev/null @@ -1,45 +0,0 @@ -#' Z-score height for age 0 to 24 months based on WHO standards -#' -#' Make vector of age and height measurement to z-scores based on WHO standards using mu and sigma (not LMS) -#' -#' @param sex A character 'M' or 'F' indicating the sex of the child. -#' @param age A vector of time points of size Q. -#' @param ln A vector of body-length readings of size Q (in cm). -#' -#' @return A vector of Z-scores of size Q. -#' @export -MakeLNtoZscore02y <- function(sex, age, ln){ - time = 0:24 - - if(length(age) != length(ln)){ - stop('Number of readings for age and length are not the same.') - } - if(!all( (age <= time[24]) && (time[1] <= age))){ - stop('Age requested is outside the [0,24] months.') - } - if(sex == 'F'){ - #http://www.who.int/childgrowth/standards/tab_lhfa_girls_p_0_2.txt - muGln = c(49.1477, 53.6872, 57.0673, 59.8029, 62.0899, 64.0301, - 65.7311, 67.2873, 68.7498, 70.1435, 71.4818, 72.771, - 74.015, 75.2176, 76.3817, 77.5099, 78.6055, 79.671, - 80.7079, 81.7182, 82.7036, 83.6654, 84.604, 85.5202, 86.4153) - sdGln = c(1.8627, 1.9542, 2.0362, 2.1051, 2.1645, 2.2174, - 2.2664, 2.3154, 2.365, 2.4157, 2.4676, 2.5208, - 2.575, 2.6296, 2.6841, 2.7392, 2.7944, 2.849, - 2.9039, 2.9582, 3.0129, 3.0672, 3.1202, 3.1737, 3.2267); - return( (ln - spline(x=time, y = muGln, xout = age)$y) / spline(x=time, y = sdGln, xout = age)$y) - } else if(sex == 'M'){ - #http://www.who.int/childgrowth/standards/tab_lhfa_boys_p_0_2.txt - muBln = c(49.8842, 54.7244, 58.4249, 61.4292, 63.886, 65.9026, - 67.6236, 69.1645, 70.5994, 71.9687, 73.281, 74.5388, - 75.7488, 76.9186, 78.0497, 79.1458, 80.211, 81.2487, - 82.2587, 83.2418, 84.1996, 85.1348, 6.0477, 86.941, 87.8161) - sdBln = c(1.8931, 1.9465, 2.0005, 2.0444, 2.0808, 2.1115, - 2.1403, 2.1711, 2.2055, 2.2433, 2.2849, 2.3293, - 2.3762, 2.426, 2.4773, 2.5303, 2.5844, 2.6406, - 2.6973, 2.7553, 2.814, 2.8742, 2.9342, 2.9951, 3.0551) - return( (ln - spline(x=time, y = muBln, xout = age)$y) / spline(x=time, y = sdBln, xout = age)$y) - } else{ - stop("Sex type undefined.") - } -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeResultFPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeResultFPCA.R deleted file mode 100644 index 612fc529..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeResultFPCA.R +++ /dev/null @@ -1,85 +0,0 @@ -# This function makes the output object for function FPCA - -###### -# Input: -###### -# optns: options for FPCA function -# smcObj: smooth mean curve object -# scsObj: smooth cov surface object -# eigObj: eigen analysis object -# scoresObj: FPC scores object -# obsGrid: observed time grid -# workGrid: time grid for smoothed covariance surface -# rho: regularization parameter for sigma2 -# fitLambda: eigenvalues by least squares fit method -# timestamps: time-stamps on how much time specific parts of FPCA needed -# inputData: input data to return (if lean: FALSE) -###### -# Output: -###### -# ret: FPCA output object -########################################################################## - -MakeResultFPCA <- function(optns, smcObj, mu, scsObj, eigObj, - scoresObj, obsGrid, workGrid, rho=NULL, fitLambda=NULL, inputData, timestamps = NULL){ - - if (optns$methodXi == 'CE') { - xiEst <- t(do.call(cbind, scoresObj[1, ])) - xiVar <- scoresObj[2, ] - } else if (optns$methodXi == 'IN') { - xiEst <- scoresObj$xiEst - xiVar <- scoresObj$xiVar - } - - ret <- list(sigma2 = scsObj$sigma2, - lambda = eigObj$lambda, - phi = eigObj$phi, - xiEst = xiEst, - xiVar = xiVar, - obsGrid = obsGrid, - workGrid = workGrid, - mu = spline(x= obsGrid, y= mu, xout= workGrid)$y, - smoothedCov = scsObj$smoothCov, - FVE = eigObj$cumFVE[eigObj$kChoosen], - cumFVE = eigObj$cumFVE, - fittedCov = eigObj$fittedCov, - optns = optns, - bwMu = smcObj$bw_mu, - bwCov = scsObj$bwCov) - - if (optns$methodXi == 'CE') { - ret$rho <- rho - } - - if (optns$fitEigenValues) { - ret$fitLambda <- fitLambda - } - - ret$inputData <- inputData; # This will be potentially be NULL if `lean` - class(ret) <- 'FPCA' - - # select number of components based on specified criterion # This should be move within MakeResultFPCA - selectedK <- SelectK(fpcaObj = ret, criterion = optns$methodSelectK, FVEthreshold = optns$FVEthreshold) - - if(!optns$lean){ - ret$inputData <- inputData; - } else { - ret$inputData <- NULL - } - - ret <- append(ret, list(selectK = selectedK$K, criterionValue = selectedK$criterion)) - class(ret) <- 'FPCA' - - ret <- SubsetFPCA(fpcaObj = ret, K = ret$selectK) - - if(is.null(timestamps)) { - timings = NULL; - } else { - timestamps = c(Sys.time(), timestamps) - timings = round(digits=3, timestamps[1:4]-timestamps[5:8]); - names(timings) <- c('total','mu','cov','pace') - } - ret$timings = timings; - - return(ret) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeSparseGP.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeSparseGP.R deleted file mode 100644 index 5e8d40a6..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MakeSparseGP.R +++ /dev/null @@ -1,105 +0,0 @@ -#' Make Gaussian Process Sparse Functional Data sample -#' -#' Make a Gaussian process sparse functional data sample of size n -#' -#' @param n number of samples to generate. -#' @param rdist a sampler for generating the random design time points within [0, 1]. -#' @param sparsity A vector of integers. The number of observation per sample is chosen to be one of the elements in sparsity with equal chance. -#' @param muFun a function that takes a vector input and output a vector of the corresponding mean (default: zero function). -#' @param K scalar specifying the number of basis to be used (default: 2). -#' @param lambda vector of size K specifying the variance of each components (default: rep(1,K)). -#' @param sigma The standard deviation of the Gaussian noise added to each observation points. -#' @param basisType string specifiying the basis type used; possible options are: 'sin', 'cos' and 'fourier' (default: 'cos') (See code of 'CreateBasis' for implementation details.) -#' @param CovFun an alternative specification of the covariance structure. -#' -#' @return TODO -#' @export - -MakeSparseGP <- function(n, rdist=runif, sparsity=2:9, - muFun=function(x) rep(0, length(x)), - K = 2, lambda = rep(1, K), sigma=0, - basisType='cos', CovFun=NULL) { - - if(n < 2){ - stop("Samples of size 1 are irrelevant.") - } - if(!is.function(rdist)){ - stop("'rdist' needs to be a function.") - } - if(!is.function(muFun)){ - stop("'muFun' needs to be a function.") - } - if (!is.numeric(sigma) || sigma < 0) { - stop("'sigma' needs to be a nonnegative number") - } - if (!is.null(CovFun) && - (!missing(lambda) || !missing(basisType) || !missing(K))) { - stop('Specify the covariance structure either with CovFun or with K, lambda, and basisType') - } - if (missing(K) && !missing(lambda) && is.null(CovFun)) { - K <- length(lambda) - } - if(is.null(CovFun) && K != length(lambda)){ - stop("Make sure you provide 'lambda's for all 'K' modes of variation.") - } - # if( !(basisType %in% c('cos','sin','fourier'))) { - # stop("Make sure you provide a valid parametric basis.") - # } - if (length(sparsity) == 1) { - sparsity <- c(sparsity, sparsity) # avoid scalar case for sample() - } - - Ni <- sample(sparsity, n, replace=TRUE) - if (is.null(CovFun)) { - Ksi <- apply(matrix(rnorm(n*K), ncol=K), 2, scale) %*% - diag(sqrt(lambda), length(lambda)) - - samp <- lapply(seq_len(n), function(i) { - ni <- Ni[i] - ti <- sort(rdist(ni)) - Phii <- CreateBasis(K, ti, basisType) - yi <- muFun(ti) + as.numeric(tcrossprod(Ksi[i, ], Phii)) - - list(ti = ti, yi=yi) - }) - } else { # !is.null(CovFun) - - if (!requireNamespace('MASS', quietly=TRUE)) { - stop('{MASS} is needed if CovFun is specified') - } - - M <- 51 - pts <- seq(0, 1, length.out=M) # For generating the true curves - - samp <- lapply(seq_len(n), function(i) { - ni <- Ni[i] - ti <- sort(rdist(ni)) - ti <- c(ti, pts) - yi <- MASS::mvrnorm(1, muFun(ti), CovFun(ti)) - - list(ti = ti[seq_len(ni)], yi=yi[seq_len(ni)], yCurve=yi[-seq_len(ni)]) - }) - } - - Lt <- lapply(samp, `[[`, 'ti') - Ly <- lapply(samp, `[[`, 'yi') - - - if (sigma > 0) { - LyTrue <- Ly - Ly <- lapply(LyTrue, function(x) x + rnorm(length(x), sd=sigma)) - } - - if (is.null(CovFun)) { - res <- list(Ly=Ly, Lt=Lt, xi=Ksi, Ni=Ni) - } else { - res <- list(Ly=Ly, Lt=Lt, yCurve=lapply(samp, `[[`, 'yCurve'), Ni=Ni) - } - - if (sigma > 0) { - res <- append(res, list(LyTrue=LyTrue)) - } - - return(res) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MapX1D.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MapX1D.R deleted file mode 100644 index 932d0374..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MapX1D.R +++ /dev/null @@ -1,35 +0,0 @@ -# Map (x,y) to (newx,newy) -# x : a vector of 1 * n -# y : a vector of 1 * n or a n * p matrix -# newx : vector of 1 * m -# newy : vector of 1 * m or a matrix of m * optns$ - - # if( is.vector(y) ){ - # return(y[is.element(x,newx)]) - # }else if(is.matrix(y)){ - # return(y[is.element(x,newx),]) - # }else{ - # warning('y cannot be empty!\n') - # return(NaN) - # } -# } - -MapX1D <- function(x, y, newx) { - # if (!all(newx %in% x)) - # warning('Interpolation occured: you might want to increase the obsGrid coverage') - - # if (min(newx) + 100 * .Machine$double.eps < min(x) || max(newx) > max(x) + 100 * .Machine$double.eps) - # warning('Extrapolation occured') - if (is.vector(y)){ - # newy <- approxExtrap(x, y, newx, method='linear')$y - newy <- approx(x, y, newx, method='linear')$y - } else { - # newy <- apply(y, 2, function(yy) approxExtrap(x, yy, newx, method='linear')$y) - newy <- apply(y, 2, function(yy) approx(x, yy, newx, method='linear')$y) - } - if (any(is.nan(newy))){ - stop('NA \'s during the mapping from(x,y) to (newx,newy)') - } - - return(newy) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MgnJntDensity.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MgnJntDensity.R deleted file mode 100644 index 5ae0407e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MgnJntDensity.R +++ /dev/null @@ -1,143 +0,0 @@ -##### -##### marginal and 2-dim. joint kernel densities estimators -##### - -##### input variables: -##### j: index of kernel estimation for marginal density (scalar) -##### kj: index of kernel estimation for 2-dim. joint density (2-dim. vector) -##### x: estimation grid (N*d matrix) -##### X: covariate observation grid (n*d matrix) -##### h: bandwidths (d-dim. vector) -##### K: kernel function (function object, default is the Epanechnikov kernel) -##### supp: supports of estimation interested (d*2 matrix) - -##### output: -##### margianl densities at estimation points near observation points (N*d matrix) -##### 2-dim. joint densities at estimation grid near observation grid (N*N*d*d array) - - -### propertion of non-truncated observation -P0 <- function(X, supp=NULL){ - - n <- nrow(X) - d <- ncol(X) - - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - - tmp <- rep(1,n) - for(j in 1:d){ - tmp <- tmp*dunif(X[,j],supp[j,1],supp[j,2])*(supp[j,2]-supp[j,1]) - } - - return(mean(tmp)) -} - -# marginal density estimation -Pj <- function(j, x, X, h=NULL, K='epan', supp=NULL){ - - N <- nrow(x) - d <- ncol(x) - n <- nrow(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - - tmpIndex <- rep(1,n) - for(l in 1:d){ - tmpIndex <- tmpIndex*dunif(X[,l],supp[l,1],supp[l,2])*(supp[l,2]-supp[l,1]) - } - index <- which(tmpIndex==1) - pHat <- apply(NormKernel(x[,j],X[,j],h[j],K,c(supp[j,1],supp[j,2]))[,index],1,'sum')/n - - pHat <- pHat/trapzRcpp(sort(x[,j]),pHat[order(x[,j])]) - - return(pHat/P0(X,supp)) -} - -# 2-dimensional joint density estimation -Pkj <- function(kj, x, X, h=NULL, K='epan', supp=NULL){ - - N <- nrow(x) - d <- ncol(x) - n <- nrow(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - - k <- kj[1] - pHatk <- NormKernel(x[,k],X[,k],h[k],K,c(supp[k,1],supp[k,2])) - - j <- kj[2] - pHatj <- NormKernel(x[,j],X[,j],h[j],K,c(supp[j,1],supp[j,2])) - - tmpIndex <- rep(1,n) - for(l in 1:d){ - tmpIndex <- tmpIndex*dunif(X[,l],supp[l,1],supp[l,2])*(supp[l,2]-supp[l,1]) - } - index <- which(tmpIndex==1) - pHat <- pHatk[,index]%*%t(pHatj[,index])/n - - pHat <- pHat/trapzRcpp(sort(x[,j]),Pj(j,x,X,h,K,supp)[order(x[,j])])/trapzRcpp(sort(x[,k]),Pj(k,x,X,h,K,supp)[order(x[,k])]) - - return(pHat/P0(X,supp)) -} - -# construction of evaluation matrices for marginal and joint densities estimators -MgnJntDensity <- function(x, X, h=NULL, K='epan', supp=NULL){ - - N <- nrow(x) - d <- ncol(x) - n <- nrow(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - - pMatMgn <- matrix(0,nrow=N,ncol=d) - pArrJnt <- array(0,dim=c(N,N,d,d)) - #cat(paste('Computing all pairs of 1-/2-dim.l marginal/joint density estimators...','\n',sep='')) - for (j in 1:d) { - #cat(paste(' ',round(j/d,3),'\n',sep='')) - #cat('\n') - pMatMgn[,j] <- Pj(j,x,X,h,K,supp) - - for (k in j:d) { - #print(k) - if (k==j) { - #pArrJnt[,,k,j] <- diag(Pj(j,x,X,h,K,supp)) - pArrJnt[,,k,j] <- diag(pMatMgn[,j]) - } else { - pArrJnt[,,k,j] <- Pkj(c(k,j),x,X,h,K,supp) - pArrJnt[,,j,k] <- t(pArrJnt[,,k,j]) - } - } - } - - return(list(pArrJnt=pArrJnt, pMatMgn=pMatMgn)) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Minb.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Minb.R deleted file mode 100644 index e9652d26..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Minb.R +++ /dev/null @@ -1,30 +0,0 @@ -# This function is used to find the minimum bandwidth choice -# where local window contains at least "numPoints" points -# Input x : n x 1 vector -# Input numPoints: an integer specifying the number of points in a local window -# for local weighted constant, numPoints is at least 1 -# for local weighted linear, numPoints is at least 2 -# Output b: the minimum bandwidth choice for vector x - -Minb <- function(x, numPoints){ - - n = length(x); - if( (numPoints<1) || (numPoints > n) ){ - warning("Invalid number of minimum points specified\n") - return(NaN) - } - - if('legacyCode' == TRUE){ - x = sort(unique(x)); # Unique is added to ensure that we do not have a degenerate design - if(numPoints > 1){ - return( max(x[numPoints:n]-x[1:(n-numPoints+1)]) ) - }else{ - return( max( (x[2:n]-x[1:(n-1)])/2) ) - } - } - - gridPts <- sort(unique(x)) - distNN1 <- max(diff(gridPts, lag=numPoints)) - - return(distNN1) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/MultiFAM.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/MultiFAM.R deleted file mode 100644 index 04826741..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/MultiFAM.R +++ /dev/null @@ -1,249 +0,0 @@ -#' Functional Additive Models with Multiple Predictor Processes -#' -#' Smooth backfitting procedure for functional additive models with multiple predictor processes -#' -#' @param Y An \emph{n}-dimensional vector whose elements consist of scalar responses. -#' @param X A \emph{d}-dimensional list whose components consist of two lists of \emph{Ly} and \emph{Lt} containing obervation times and functional covariate values for each predictor component, respectively. For details of \emph{Ly} and \emph{Lt}, see \code{FPCA} for detail. -#' @param ker A \code{function} object representing the base kernel to be used in the smooth backfitting algorithm (default is 'epan' which is the only option supported currently). -#' @param nEval The number of evaluation grid points for kernel smoothing (default is 51. If it is specified as 0, then estimated FPC scores in the training set are used for evaluation grid instead of equal grid). -#' @param XTest A \emph{d}-dimensional list for test set of functional predictors (default is NULL). If \code{XTest} is specified, then estimated FPC scores in the test set are used for evalution grid. -#' @param bwMethod The method of initial bandwidth selection for kernel smoothing, a positive value for designating K-fold cross-validtaion and zero for GCV (default is 0) -#' @param alpha The shrinkage factor (positive number) for bandwidth selection. See Han et al. (2016) (default is 0.7). -#' @param supp The lower and upper limits of kernel smoothing domain for studentized FPC scores, which FPC scores are divided by the square roots of eigenvalues (default is [-2,2]). -#' @param optnsList A \emph{d}-dimensional list whose components consist of \code{optns} for each predictor component, respectively. (default is NULL which assigns the same default \code{optns} for all components as in \code{FPCA}). -#' -#' @details \code{MultiFAM} fits functional additive models for a scalar response and multiple predictor processes based on the smooth backfitting algorithm proposed by Han et al. (2016) that \deqn{E(Y | \mathbf{X}) = \sum_{j=1}^d \sum_{k=1}^{K_j} g_{jk}(\xi_{jk}),} where \eqn{\xi_{jk}} stand for the k-th FPC score of the j-th predictor process. \code{MultiFAM} only focuses on mutiple predictor processes case. In fact, the case of univariate predictor is the same with functional additive model proposed by Mueller and Yao (2008). Especially in this development, one can designate an estimation support of additive models when the additive modeling is only allowed over restricted intervals or one is interested in the modeling over the support (see Han et al., 2016). -#' -#' @return A list containing the following fields: -#' \item{mu}{A scalar of centered part of the regression model.} -#' \item{SBFit}{An \emph{N} by \eqn{(K_1 + ... + K_d)} matrix whose column vectors consist of the smooth backfitting component function estimators at the given \emph{N} estimation points.} -#' \item{xi}{An \emph{N} by \eqn{(K_1 + ... + K_d)} matrix whose column vectors consist of FPC score grid vectors that each additive component functional is evluated.} -#' \item{bw}{A \eqn{(K_1 + ... + K_d)}-dimensional bandwidth vector.} -#' \item{lambda}{A \eqn{(K_1 + ... + K_d)}-dimensional vector containing eigenvalues.} -#' \item{phi}{A \emph{d}-dimensional list whose components consist of an \emph{nWorkGrid} by \emph{K_j} matrix containing eigenfunctions, supported by \code{WorkGrid}. See \code{FPCA}.} -#' \item{workGrid}{A \emph{d}-dimensional list whose components consist of an \emph{nWorkGrid} by \emph{K_j} working grid, the internal regular grid on which the eigen analysis is carried on. See \code{FPCA}.} -#' @examples -#' set.seed(1000) -#' -#' library(MASS) -#' -#' f11 <- function(t) t -#' f12 <- function(t) 2*cos(2*pi*t/4) -#' f21 <- function(t) 1.5*sin(2*pi*t/4) -#' f22 <- function(t) 1.5*atan(2*pi*t/4) -#' -#' n<-100 -#' N<-200 -#' -#' sig <- matrix(c(2.0, 0.0, 0.5, -.2, -#' 0.0, 1.2, -.2, 0.3, -#' 0.5, -.2, 1.7, 0.0, -#' -.2, 0.3, 0.0, 1.0), -#' nrow=4,ncol=4) -#' -#' scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -#' scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) -#' -#' Y <- f11(scoreX[,1]) + f12(scoreX[,2]) + f21(scoreX[,3]) + f22(scoreX[,4]) + rnorm(n,0,0.5) -#' YTest <- f11(scoreXTest[,1]) + f12(scoreXTest[,2]) + -#' f21(scoreXTest[,3]) + f22(scoreXTest[,4]) + rnorm(N,0,0.5) -#' -#' phi11 <- function(t) sqrt(2)*sin(2*pi*t) -#' phi12 <- function(t) sqrt(2)*sin(4*pi*t) -#' phi21 <- function(t) sqrt(2)*cos(2*pi*t) -#' phi22 <- function(t) sqrt(2)*cos(4*pi*t) -#' -#' grid <- seq(0,1,length.out=21) -#' Lt <- Lx1 <- Lx2 <- list() -#' for (i in 1:n) { -#' Lt[[i]] <- grid -#' Lx1[[i]] <- scoreX[i,1]*phi11(grid) + scoreX[i,2]*phi12(grid) + rnorm(1,0,0.01) -#' Lx2[[i]] <- scoreX[i,3]*phi21(grid) + scoreX[i,4]*phi22(grid) + rnorm(1,0,0.01) -#' } -#' -#' LtTest <- Lx1Test <- Lx2Test <- list() -#' for (i in 1:N) { -#' LtTest[[i]] <- grid -#' Lx1Test[[i]] <- scoreXTest[i,1]*phi11(grid) + scoreXTest[i,2]*phi12(grid) + rnorm(1,0,0.01) -#' Lx2Test[[i]] <- scoreXTest[i,3]*phi21(grid) + scoreXTest[i,4]*phi22(grid) + rnorm(1,0,0.01) -#' } -#' -#' X1 <- list(Ly=Lx1, Lt=Lt) -#' X2 <- list(Ly=Lx2, Lt=Lt) -#' -#' X1Test <- list(Ly=Lx1Test, Lt=LtTest) -#' X2Test <- list(Ly=Lx2Test, Lt=LtTest) -#' -#' X <- list(X1, X2) -#' XTest <- list(X1Test, X2Test) -#' -#' # estimation -#' sbf <- MultiFAM(Y=Y,X=X) -#' -#' xi <- sbf$xi -#' -#' par(mfrow=c(2,2)) -#' j <- 1 -#' p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -#' g11 <- f11(sort(xi[,j])) - -#' trapzRcpp(sort(xi[,j]),f11(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -#' tmpSgn <- sign(sum(g11*sbf$SBFit[,j])) -#' plot(sort(xi[,j]),g11,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi11') -#' points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -#' legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) -#' -#' j <- 2 -#' p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -#' g12 <- f12(sort(xi[,j])) - -#' trapzRcpp(sort(xi[,j]),f12(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -#' tmpSgn <- sign(sum(g12*sbf$SBFit[,j])) -#' plot(sort(xi[,j]),g12,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi12') -#' points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -#' legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) -#' -#' j <- 3 -#' p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -#' g21 <- f21(sort(xi[,j])) - -#' trapzRcpp(sort(xi[,j]),f21(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -#' tmpSgn <- sign(sum(g21*sbf$SBFit[,j])) -#' plot(sort(xi[,j]),g21,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi21') -#' points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -#' legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) -#' -#' j <- 4 -#' p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -#' g22 <- f22(sort(xi[,j])) - -#' trapzRcpp(sort(xi[,j]),f22(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -#' tmpSgn <- sign(sum(g22*sbf$SBFit[,j])) -#' plot(sort(xi[,j]),g22,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi22') -#' points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -#' legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) -#' -#' \dontrun{ -#' # fitting -#' sbf <- MultiFAM(Y=Y,X=X,nEval=0) -#' yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -#' par(mfrow=c(1,1)) -#' plot(yHat,Y) -#' abline(coef=c(0,1),col=2) -#' -#' -#' # R^2 -#' R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -#' R2 -#' -#' -#' # prediction -#' sbf <- MultiFAM(Y=Y,X=X,XTest=XTest) -#' yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -#' par(mfrow=c(1,1)) -#' plot(yHat,YTest) -#' abline(coef=c(0,1),col=2) -#' } -#' @references -#' \cite{Mammen, E., Linton, O. and Nielsen, J. (1999), "The existence and asymptotic properties of a backfitting projection algorithm under weak conditions", Annals of Statistics, Vol.27, No.5, p.1443-1490.} -#' -#' \cite{Mammen, E. and Park, B. U. (2006), "A simple smooth backfitting method for additive models", Annals of Statistics, Vol.34, No.5, p.2252-2271.} -#' -#' \cite{Mueller, H.-G. and Yao, F. (2008), "Functional additive models", Journal of the Americal Statistical Association, Vol.103, No.484, p.1534-1544.} -#' -#' \cite{Han, K., Mueller, H.-G. and Park, B. U. (2016), "Smooth backfitting for additive modeling with small errors-in-variables, with an application to additive functional regression for multiple predictor functions", Bernoulli (accepted).} -#' @export - -MultiFAM <- function(Y,X,ker='epan',nEval=51,XTest=NULL,bwMethod=0,alpha=0.7,supp=c(-2,2),optnsList=NULL){ - - n <- length(Y) - d0 <- length(X) - - if (is.null(optnsList)==TRUE) { - for (j in 1:d0) { - optnsList[[j]] <- list() - } - } - - if (length(optnsList)==1) { - - for (j in 1:d0) { - optnsList <- rep(optnsList,d0) - } - } - - N <- c() - dj <- c() - XiStd <- xiStdGrid <- c() - estLambda <- c() - estEigen <- list() - workGrid <- list() - for (j in 1:d0) { - tmpLy <- X[[j]]$Ly - tmpLt <- X[[j]]$Lt - - tmpFPCA <- FPCA(tmpLy, tmpLt, optns = optnsList[j]) - - XijStd <- t(t(tmpFPCA$xiEst)/sqrt(tmpFPCA$lambda)) - dj[j] <- length(tmpFPCA$lambda) - - estLambda <- c(estLambda,tmpFPCA$lambda) - - estEigen[[j]] <- tmpFPCA$phi - workGrid[[j]] <- tmpFPCA$workGrid - - XiStd <- cbind(XiStd,XijStd) - - if (is.null(XTest)==TRUE) { - - if (nEval==0) { - N <- nrow(XiStd) - xiStdGrid <- XiStd - } else { - N <- nEval - xiStdGrid <- cbind(xiStdGrid,matrix(rep(seq(supp[1],supp[2],length.out=N),dj[j]),nrow=N,ncol=dj[j])) - } - - } else { - XijStdTest <- predict.FPCA(tmpFPCA,newLy=XTest[[j]]$Ly,newLt=XTest[[j]]$Lt,K=dj[j])%*%diag(1/sqrt(tmpFPCA$lambda)) - - N <- nrow(XijStdTest) - xiStdGrid <- cbind(xiStdGrid,XijStdTest) - } - - } - d <- sum(dj) - - if (d > n) { - stop('Too many FPC scores in the model. Try first two FPC scores by imposing optnsList=list(maxK=2)') - } - - if (ker!='epan') { - stop('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - } - - h <- c() - for (j in 1:d) { - if (bwMethod>0) { - options(warn = -1) - h0 <- CVLwls1D(y=Y,t=XiStd[,j],kernel='epan',npoly=0,nder=0,dataType='Sparse',kFolds=bwMethod) - options(warn = 0) - } else { - options(warn = -1) - h0 <- GCVLwls1D1(yy=Y,tt=XiStd[,j],kernel='epan',npoly=0,nder=0,dataType='Sparse')$bOpt - options(warn = 0) - } - h[j] <- alpha*h0 - } - - supp <- matrix(rep(supp,c(d,d)),nrow=d,ncol=2) - - sbf <- SBFitting(Y,xiStdGrid,XiStd,h,K=ker,supp=supp) - - xiGrid <- xiStdGrid%*%diag(sqrt(estLambda)) - bw <- h*sqrt(estLambda) - phi <- estEigen - - sbf <- list(mu=sbf$mY,SBFit=sbf$SBFit,xi=xiGrid,bw=bw,lambda=estLambda,phi=phi,workGrid=workGrid) - - return(sbf) - -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/NWMgnReg.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/NWMgnReg.R deleted file mode 100644 index b7848dc1..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/NWMgnReg.R +++ /dev/null @@ -1,55 +0,0 @@ -##### -##### Nadaraya-Watson marginal regression estimation -##### - -##### input variables: -##### Y: response observation points (n-dim. vector) -##### kj: index of conditional projection for the k-th component function on the j-th component function space (2-dim. vector) -##### x: estimation grid (N*d matrix) -##### X: covariate observation grid (n*d matrix) -##### h: bandwidths (d-dim. vector) -##### K: kernel function (function object, default is the Epanechnikov kernel) -##### supp: supports of estimation interested (d*2 matrix) - -##### output: -##### NW marginal regression function kernel estimators at each estimation points (N*d matrix) - -NWMgnReg <- function(Y, x, X, h=NULL, K='epan', supp=NULL){ - - N <- nrow(x) - d <- ncol(x) - n <- nrow(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - - fNW <- matrix(0,nrow=N,ncol=d) - - tmpIndex <- rep(1,n) - for (j in 1:d) { - tmpIndex <- tmpIndex*dunif(X[,j],supp[j,1],supp[j,2])*(supp[j,2]-supp[j,1]) - } - tmpIndex <- which(tmpIndex==1) - - for (j in 1:d) { - pHatj <- NormKernel(x[,j],X[,j],h[j],K,c(supp[j,1],supp[j,2])) - rHatj <- c(pHatj[,tmpIndex]%*%Y[tmpIndex])/length(Y) - - pHatj <- apply(pHatj[,tmpIndex],1,'sum')/length(Y) - - tmpInd <- which(pHatj!=0) - - fNW[tmpInd,j] <- rHatj[tmpInd]/pHatj[tmpInd] - } - - return(fNW) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/NormCurveToArea.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/NormCurveToArea.R deleted file mode 100644 index b5fbc346..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/NormCurveToArea.R +++ /dev/null @@ -1,23 +0,0 @@ -#' Normalise a curve to a particular area. -#' -#' Normalise a curve such that \\int{yNew}dx = area (according to trapezoid integration) -#' -#' @param y values of curve at time-points x -#' @param x design time-points (default: seq(0,1, length.out=length(y))) -#' @param area value to normalise the curve onto (default: 1) -#' -#' @return yNew values of curve at times x such that [\\int{yNew}dx = area] -#' @export - -NormCurvToArea <- function(y, x = seq(0, 1, length.out = length(y)), area = 1){ - - if( length(x) != length(y)){ - stop("'x' and 'y' must have the same length.") - } - if( length(y) < 2 ){ - stop("No area is defined for a single measurement.") - } - yNew = area * y / trapzRcpp(X = x, Y = y); - return(yNew) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/NormKernel.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/NormKernel.R deleted file mode 100644 index cb4c9af0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/NormKernel.R +++ /dev/null @@ -1,56 +0,0 @@ -##### -##### normalization of compactly supported kernel (Mammen et al., 1999) -##### - -##### input variables -##### x: estimation points (N-dim. vector) -##### X: covariate observation points (n-dim. vector) -##### h: bandwidth (scalar) -##### K: kernel function (function object, default is the Epanechnikov kernel) -##### supp: support of stimation interested (2-dim. vector, default is a closed interval [0,1]) - -##### output variable: -##### evaluated values of normalized kernel at estimation points near observation points (N by n matrix) - - - -### normalized kernel -NormKernel <- function(x, X, h=NULL, K='epan', supp=NULL){ - - N <- length(x) - n <- length(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- c(0,1) - } - if (is.null(h)==TRUE) { - h <- 0.25*n^(-1/5)*(supp[2]-supp[1]) - } - - numer <- ScaleKernel(x,X,h,K=K,supp=supp) - - ind1 <- which(dunif(X,supp[1],supp[2])==0) - numer[,ind1] <- 0 - - denom <- c() - for (i in 1:n) { - denom[i] <- trapzRcpp(sort(x),numer[order(x),i]) - } - #denom <- apply(numer[x_order,],2,FUN='trapzRcpp',X=sort(x)) - - ind2 <- which(denom==0) - - NormKernelTmp <- numer/matrix(rep(denom,N),nrow=N,byrow=TRUE) - NormKernelTmp[,ind2] <- 0 - - if (min(nrow(NormKernelTmp),ncol(NormKernelTmp))==1) { - return(c(NormKernelTmp)) - } else { - return(NormKernelTmp) - } -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/PC_CovE.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/PC_CovE.R deleted file mode 100644 index 29e72631..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/PC_CovE.R +++ /dev/null @@ -1,83 +0,0 @@ -# This function outputs the smoothed covariance function -# along the diagonal with and without measurement error, -# together with the estimated variance of measurement error - -###### -# Input: -###### -# obsGrid: vector of all observed time/measurement points in increasing order -# regGrid: vector of output time-point-grid -# bw_userCov: 2-d vector, bandwidths along 2 directions for covariance surface smoothing -# rotationCut: 2-element vector in [0,1] indicating the percent of data truncated during -# sigma^2 estimation (default c(1/4,3/4)) -# kernel: kernel function used for 2d smoothing, default is 'epan' -# rcov: a struct/list from function GetRawCov - -###### -# Output: a list/struct of -###### -# sigma2: estimated variance of measurement error -# xvar: smoothed cov along diagonal without measurement error -# yvar: smoothed cov along diagonal with measurement error - -PC_CovE = function(obsGrid, regGrid, bw_userCov, rotationCut=c(0, 1), kernel = 'epan', rcov){ - buff <- .Machine$double.eps * max(abs(obsGrid)) * 10 - a0 = min(obsGrid) - b0 = max(obsGrid) - lint = b0 - a0 - - rcutprop = rotationCut[2] - rotationCut[1] - if(rcutprop <= 0 || rcutprop > 1){ - warning("Invalid option: rotationCut.") - } - rcutGrid = regGrid[regGrid > a0 + lint * rotationCut[1] - buff & - regGrid < a0 + lint * rotationCut[2] + buff] - - tPairs = rcov$tPairs # time points pairs for raw covariance - rcovdiag = rcov$diag # get raw covariance along diagonal direction - - # get smoothed covariance surface for x(t) using Lwls2D - - cxxn = rcov$cxxn # off-diagonal terms - - if(length(rcov$count) != 0 && class(rcov)[1] != 'BinnedRawCov'){ - # for dataType="RegularwithMV" case, the raw covariance - # matrix needs to be divided by the number of - # individual sums for each element in the matrix. - # for dataType="Dense" case, the divider is n for - # each subject. - cxxn = cxxn / rcov$count - } - - if (class(rcov)[1] == 'BinnedRawCov') - win1 <- rcov$count - else - win1 = rep(1, length(cxxn)) - - # get smoothed variance function for y(t) (observed) using Lwls1D - if (class(rcov)[1] == 'BinnedRawCov') { - rcovdiag <- cbind(rcov$tDiag, rcov$diagMeans) - win2 <- rcov$diagCount - cxxn <- rcov$meanVals - } else - win2 = rep(1, nrow(rcovdiag)) - - # yvar is the smoothed variance function along the diagonal line - # yvar = Lwls1D(bw = bw_userCov[1], kern = kernel, xin = rcovdiag[,1], - # yin = rcovdiag[,2], win = win2, xout = rcutGrid, returnFit = FALSE) - xorder = order(rcovdiag[,1]); - yvar = Lwls1D(bw = bw_userCov[1], kernel_type = kernel, xin = rcovdiag[xorder,1], - yin = rcovdiag[xorder,2], win = win2, xout = rcutGrid) - - - - - # Estimate variance of measurement error term - # use quadratic form on diagonal to estimate Var(x(t)) - # xvar = RotateLwls2DV2(bw = bw_userCov[1], kern = kernel, xin = tPairs, yin = cxxn, win = win1, xout = cbind(rcutGrid, out22)) - xvar = RotateLwls2DV2(bw = bw_userCov[1], kern = kernel, xin = tPairs, yin = cxxn, win = win1, xout = rcutGrid) - sigma2 = trapzRcpp(rcutGrid, (yvar - xvar)) / (lint * rcutprop) - - - return(list('sigma2' = sigma2, 'xvar' = xvar, 'yvar' = yvar)) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/RcppExports.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/RcppExports.R deleted file mode 100644 index f6310050..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/RcppExports.R +++ /dev/null @@ -1,83 +0,0 @@ -# Generated by using Rcpp::compileAttributes() -> do not edit by hand -# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 - -CPPlwls1d <- function(bw, kernel_type, win, xin, yin, xout, npoly = 1L, nder = 0L) { - .Call('_fdapace_CPPlwls1d', PACKAGE = 'fdapace', bw, kernel_type, win, xin, yin, xout, npoly, nder) -} - -GetIndCEScoresCPP <- function(yVec, muVec, lamVec, phiMat, SigmaYi) { - .Call('_fdapace_GetIndCEScoresCPP', PACKAGE = 'fdapace', yVec, muVec, lamVec, phiMat, SigmaYi) -} - -GetIndCEScoresCPPnewInd <- function(yVec, muVec, lamVec, phiMat, SigmaYi, newPhi, newMu) { - .Call('_fdapace_GetIndCEScoresCPPnewInd', PACKAGE = 'fdapace', yVec, muVec, lamVec, phiMat, SigmaYi, newPhi, newMu) -} - -RCPPmean <- function(X) { - .Call('_fdapace_RCPPmean', PACKAGE = 'fdapace', X) -} - -RCPPvar <- function(X) { - .Call('_fdapace_RCPPvar', PACKAGE = 'fdapace', X) -} - -RcppPseudoApprox <- function(X, Y, X_target) { - .Call('_fdapace_RcppPseudoApprox', PACKAGE = 'fdapace', X, Y, X_target) -} - -Rcppsort <- function(v) { - .Call('_fdapace_Rcppsort', PACKAGE = 'fdapace', v) -} - -Rmullwlsk <- function(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, transp = TRUE) { - .Call('_fdapace_Rmullwlsk', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, transp) -} - -RmullwlskCC <- function(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck) { - .Call('_fdapace_RmullwlskCC', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck) -} - -RmullwlskCCsort2 <- function(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck) { - .Call('_fdapace_RmullwlskCCsort2', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck) -} - -RmullwlskUniversal <- function(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, autoCov) { - .Call('_fdapace_RmullwlskUniversal', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, autoCov) -} - -RmullwlskUniversalDeriv <- function(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, npoly, nder1, nder2, bwCheck, autoCov) { - .Call('_fdapace_RmullwlskUniversalDeriv', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, npoly, nder1, nder2, bwCheck, autoCov) -} - -Rrotatedmullwlsk <- function(bw, kernel_type, tPairs, cxxn, win, xygrid, npoly, bwCheck) { - .Call('_fdapace_Rrotatedmullwlsk', PACKAGE = 'fdapace', bw, kernel_type, tPairs, cxxn, win, xygrid, npoly, bwCheck) -} - -#' Cumulative Trapezoid Rule Numerical Integration -#' -#' Cumulative Trapezoid Rule Numerical Integration using Rcpp -#' @param X Sorted vector of X values -#' @param Y Vector of Y values. -#' @export -cumtrapzRcpp <- function(X, Y) { - .Call('_fdapace_cumtrapzRcpp', PACKAGE = 'fdapace', X, Y) -} - -dropZeroElementsXYWin <- function(win, xin, yin) { - .Call('_fdapace_dropZeroElementsXYWin', PACKAGE = 'fdapace', win, xin, yin) -} - -interp2lin <- function(xin, yin, zin, xou, you) { - .Call('_fdapace_interp2lin', PACKAGE = 'fdapace', xin, yin, zin, xou, you) -} - -#' Trapezoid Rule Numerical Integration -#' -#' Trapezoid Rule Numerical Integration using Rcpp -#' @param X Sorted vector of X values -#' @param Y Vector of Y values. -#' @export -trapzRcpp <- function(X, Y) { - .Call('_fdapace_trapzRcpp', PACKAGE = 'fdapace', X, Y) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/RotateLwls2DV2.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/RotateLwls2DV2.R deleted file mode 100644 index 352b76ed..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/RotateLwls2DV2.R +++ /dev/null @@ -1,24 +0,0 @@ -# Rotate the data and then smooth the diagonal elements. We use quadratic terms on either direction, rather than only orthogonal to the diagonal. -# xout: a matrix of two columns containing the diagonal elements. - -RotateLwls2DV2 <- function(bw, kern='epan', xin, yin, win=NULL, xout) { - - if (length(bw) == 1){ - bw <- c(bw, bw) - } - - if (missing(win) || is.null(win)){ - win <- rep(1, length(xin)) - } - - if ( is.vector(xout)){ - xout = matrix(c(xout,xout),ncol= 2) - } - - fit <- Rrotatedmullwlsk(bw, kern, t(xin), yin, win, t(xout), npoly=1, bwCheck=FALSE) - - if (any(is.nan(fit))) - stop('Something wrong with the rotate smoothed results') - - return(fit) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SBFCompUpdate.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SBFCompUpdate.R deleted file mode 100644 index 3a3bc7b6..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SBFCompUpdate.R +++ /dev/null @@ -1,78 +0,0 @@ -##### -##### smooth backfitting for a component function -##### - -##### input variables: -##### f: current SBF estimator of component functions at each estimation points (N*d matrix) -##### ind: index of updating component during SBF algorithm (scalar) -##### fNW: marginal regression function kernel estimators at each estimation points (N*d matrix) -##### Y: response observation points (n-dim. vector) -##### x: estimation grid (N*d matrix) -##### X: covariate observation grid (n*d matrix) -##### h: bandwidths (d-dim. vector) -##### K: kernel function (function object, default is the Epanechnikov kernel) -##### supp: supports of estimation interested (d*2 matrix) -##### MgnJntDensity: evaluated values of marginal and 2-dim. joint densities (2-dim. list, referred to the output of 'MgnJntDensity') - -##### output: -##### updated smooth backfitting component functions for a designated component (N*d matrix) - -SBFCompUpdate<-function(f,ind,fNW,Y,X,x,h=NULL,K='epan',supp=NULL,MgnJntDens){ - - N<-nrow(x) - d<-ncol(x) - n<-nrow(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - - #f_nw<-NWMgnReg(Y,x,X,h,Kh,supp) - - #tmp <- X >= matrix(supp[, 1], nrow=n, byrow=TRUE) & X <= matrix(supp[, 2], nrow=n, byrow=TRUE) - # tmp_ind <- apply(tmp, 1, all) - - tmpIndex <- rep(1,n) - for (l in 1:d) { - tmpIndex <- tmpIndex*dunif(X[,l],supp[l,1],supp[l,2])*(supp[l,2]-supp[l,1]) - } - tmpIndex <- which(tmpIndex==1) - - yMean <- sum(Y[tmpIndex])/length(Y)/P0(X,supp) - - j <- ind - - tmp1<-tmp2<-0 - if (j==1) { - for (k in (j+1):d) { - tmp2 <- tmp2+CondProjection(f,c(k,j),x,X,MgnJntDens) - } - - f[,j]<-fNW[,j]-yMean-tmp2 - } else if (j>1 && jcritEps) { - - epsTmp <- eps - f0 <- f - - for (j in 1:d) { - f[,j] <- SBFCompUpdate(f,j,fNW,Y,X,x,h,K,supp,MgnJntDens)[,j] - - if (sum(is.nan(f[,j])==TRUE)>0) { - f[which(is.nan(f[,j])==TRUE),j] <- 0 - } - - - if (sum(f[,j]*f0[,j])<0) { - f[,j] <- -f[,j] - } - } - - #eps <- max(abs(f-f0)) - eps <- max(sqrt(apply(abs(f-f0)^2,2,'mean'))) - - if (abs(epsTmp-eps)critIter) { - message('The algorithm may not converge (SBF iteration > stopping criterion). Try another choice of bandwidths.') - return(list( - SBFit=f, - mY=yMean, - NW=fNW, - mgnDens=MgnJntDens$pMatMgn, - jntDens=MgnJntDens$pArrJnt, - iterNum=iter, - iterErr=eps, - iterErrDiff=abs(epsTmp-eps), - critNum=critIter, - critErr=critEps, - critErrDiff=critEpsDiff - ) - ) - } - - iter <- iter+1 - } - - return(list( - SBFit=f, - mY=yMean, - NW=fNW, - mgnDens=MgnJntDens$pMatMgn, - jntDens=MgnJntDens$pArrJnt, - iterNum=iter, - iterErr=eps, - iterErrDiff=abs(epsTmp-eps), - critNum=critIter, - critErr=critEps, - critErrDiff=critEpsDiff - ) - ) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/ScaleKernel.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/ScaleKernel.R deleted file mode 100644 index 35ac84a0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/ScaleKernel.R +++ /dev/null @@ -1,40 +0,0 @@ -##### -##### scaling of compactly supported kernel -##### - -##### input variables -##### x: estimation points (N-dim. vector) -##### X: covariate observation points (n-dim. vector) -##### h: bandwidth (scalar) -##### K: kernel function (function object, default is the Epanechnikov kernel) -##### supp: support of stimation interested (2-dim. vector, default is a closed interval [0,1]) - -##### output variable: -##### evaluated values of scaled kernel at estimation points near observation points (N by n matrix) - - -### scaled kernel -ScaleKernel <- function(x, X, h=NULL, K='epan',supp=NULL){ - - N <- length(x) - n <- length(X) - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - } - if (is.null(supp)==TRUE) { - supp <- c(0,1) - } - if (is.null(h)==TRUE) { - h <- 0.25*n^(-1/5)*(supp[2]-supp[1]) - } - - xTmp <- matrix(rep(x,n),nrow=N) - XTmp <- matrix(rep(X,N),ncol=n,byrow=TRUE) - - Tmp <- xTmp-XTmp - - KhTmp <- (3/4)*(1-(Tmp/h)^2)*dunif(Tmp/h,-1,1)*2/h - - return(KhTmp) -} \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SelectK.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SelectK.R deleted file mode 100644 index db1eb1e9..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SelectK.R +++ /dev/null @@ -1,87 +0,0 @@ -#' Selects number of functional principal components for -#' given FPCA output and selection criteria -#' -#' @param fpcaObj A list containing FPCA related subjects returned by MakeFPCAResults(). -#' @param criterion A string or positive integer specifying selection criterion for number of functional principal components, available options: 'FVE', 'AIC', 'BIC', or the specified number of components - default: 'FVE' -#' @param FVEthreshold A threshold percentage specified by user when using "FVE" as selection criterion: (0,1] - default: NULL -#' @param Ly A list of \emph{n} vectors containing the observed values for each individual - default: NULL -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual corresponding to Ly - default: NULL -#' -#' @return A list including the following two fields: -#' \item{K}{An integer indicating the selected number of components based on given criterion.} -#' \item{criterion}{The calculated criterion value for the selected number of components, i.e. FVE, AIC or BIC value, NULL for fixedK criterion.} -#' -#' @export - -SelectK = function(fpcaObj, criterion = 'FVE', FVEthreshold = 0.95, Ly = NULL, Lt = NULL){ - if(!'FPCA' %in% class(fpcaObj)) { - stop('Invalid Input: not a FPCA object!') - } - if(is.null(criterion)){ - stop('Invalid selection criterion. Selection criterion must not be NULL!') - } - if (length(criterion) != 1) { - stop('The length of criterion needs to be 1') - } - if(!(criterion %in% c('FVE', 'AIC', 'BIC'))){ - if(is.numeric(criterion)){ - if(as.integer(criterion) != criterion || criterion <= 0){ - stop('Invalid selection criterion. To select fixed number of component, criterion needs to be a positive integer.') - } - } else { - stop('Invalid selection criterion. Need to be one of "FVE", "AIC", "BIC" or a positive integer!') - } - } - - if(criterion %in% c('AIC','BIC')) { - if(fpcaObj$optns$lean == TRUE && (is.null(Ly) || is.null(Lt))){ - stop("Option lean is TRUE, need input data Ly and measurement time list Lt to calculate log-likelihood.") - } - if(fpcaObj$optns$lean == FALSE){ - Ly <- fpcaObj$inputData$Ly - Lt <- fpcaObj$inputData$Lt - } - C = ifelse( criterion == 'AIC' , 2 , log(length(Ly)) ) - # FVE is not the selection criterion - IC = rep(Inf, length(fpcaObj$lambda)) - for(i in 1:length(fpcaObj$lambda)){ - logliktemp = GetLogLik(fpcaObj, i, Ly = Ly, Lt = Lt) - if(is.null(logliktemp)){ - stop('The covariance matrix of the estimated function is nearly singular! AIC or BIC is not applicable.') - } - IC[i] = logliktemp + C * i - if(i > 1 && IC[i] > IC[i-1]){ - # cease whenever AIC/BIC stops decreasing - K <- i-1; - criterion <- IC[i-1]; - break; - } else if(i == length(fpcaObj$lambda)){ - K <- i - criterion <- IC[i] - } - } - #if(criterion != 'FVE'){ - # return(K = length(fpcaObj$lambda)) - #} - } else if(criterion == 'FVE'){ - # select FVE based on cumFVE in fpcaObj and specified FVEthreshold - if(is.null(FVEthreshold)){stop('Need to specify FVEthreshold to choose number of components via FVE.')} - cumFVE = fpcaObj$cumFVE - buff <- .Machine[['double.eps']] * 100 - K <- min( which(cumFVE > FVEthreshold * 100 - buff) ) - criterion <- cumFVE[min(which(cumFVE > FVEthreshold * 100 - buff))] - } else if (is.numeric(criterion) && criterion > 0) { # fixed K is specified. - if(criterion > length(fpcaObj$lambda)){ - stop("Specified number of components is more than available components.") - } - K <- criterion - criterion <- NULL - } else { - stop('Unknown criterion!') - } - - # For compatibility reason, k is also returned. - # return(list(K=K, criterion=criterion, k=K)) - return(list(K=K, criterion=criterion)) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetDerOptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SetDerOptions.R deleted file mode 100644 index 8e9362ae..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetDerOptions.R +++ /dev/null @@ -1,31 +0,0 @@ -SetDerOptions <- function(fpcaObject = NULL, derOptns = list()) { - if (is.null(derOptns)) { - derOptns <- list() - } - # These are relevant for fitted.FPCA - derOptns$method <- ifelse (is.null(derOptns$method), 'FPC', - derOptns$method) - #derOptns$k <- ifelse (is.null(derOptns$k), length(fpcaObject$lambda), derOptns$k) - # derOptns$GCV <- ifelse (is.null(derOptns$GCV), FALSE, TRUE) - - derOptns$p <- ifelse (is.null(derOptns$p), 1, derOptns$p) - derOptns$kernelType <- ifelse(is.null(derOptns$kernelType), 'gauss', - derOptns$kernelType) - if (is.null(derOptns$bwMu) && is.null(derOptns$bwCov)) { - if (is.null(derOptns$bw)) { - derOptns$bw <- - if (!is.null(fpcaObject[['sigma2']]) && (fpcaObject$sigma2 / sum(fpcaObject$lambda)) >= 0.01) { - derOptns$p * 0.10 * diff(range(fpcaObject$workGrid)) - } else { - derOptns$p * 0.05 * diff(range(fpcaObject$workGrid)) - } - } - derOptns$bwCov <- derOptns$bwMu <- derOptns$bw - } else if (!is.null(derOptns$bwMu) && !is.null(derOptns$bwCov)) { - # OK - } else { - stop('need to specify neither or both bwMu and bwCov') - } - - return(derOptns) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetOptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SetOptions.R deleted file mode 100644 index 354d62a8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetOptions.R +++ /dev/null @@ -1,262 +0,0 @@ -#' Set the PCA option list -#' -#' @param y A list of \emph{n} vectors containing the observed values for each individual. -#' @param t A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. -#' @param optns A list of options control parameters specified by \code{list(name=value)}. See `Details'. -#' -#' See '?FPCAfor more details. Usually users are not supposed to use this function directly. -#' @export - - -SetOptions = function(y, t, optns){ - - methodMuCovEst = optns[['methodMuCovEst']] - userBwMu =optns[['userBwMu']]; - methodBwMu =optns[['methodBwMu']]; - userBwCov =optns[['userBwCov']]; - methodBwCov =optns[['methodBwCov']]; - kFoldMuCov = optns[['kFoldMuCov']] - methodSelectK =optns[['methodSelectK']]; - FVEthreshold =optns[['FVEthreshold']]; - fitEigenValues <- optns[['fitEigenValues']]; - maxK =optns[['maxK']]; - dataType =optns[['dataType']]; - error =optns[['error']]; - nRegGrid =optns[['nRegGrid']]; - methodXi =optns[['methodXi']]; - shrink =optns[['shrink']] - kernel =optns[['kernel']]; - numBins =optns[['numBins']]; - yname =optns[['yname']]; - rho =optns[['rho']]; - userRho = optns[['userRho']]; - diagnosticsPlot =optns[['diagnosticsPlot']]; - plot =optns[['plot']] - if (!is.null(diagnosticsPlot)) { - warning("The option 'diagnosticsPlot' is deprecated. Use 'plot' instead") - plot = diagnosticsPlot - } - verbose =optns[['verbose']]; - userMu =optns[['userMu']]; - #methodMu =optns[['methodMu']]; - outPercent =optns[['outPercent']]; - userCov =optns[['userCov']]; - userSigma2 = optns[['userSigma2']] - rotationCut =optns[['rotationCut']]; - useBinnedData =optns[['useBinnedData']]; - useBinnedCov = optns[['useBinnedCov']] - lean = optns[['lean']] - useBW1SE =optns[['useBW1SE']]; - - if(is.null(methodBwMu)){ # bandwidth choice for mean function is GCV if userBwMu = 0 - #methodBwMu = 'GMeanAndGCV'; - methodBwMu = 'Default' - } - if(is.null(userBwMu) && methodBwMu == 'Default'){ # bandwidth choice for mean function is using CV or GCV - userBwMu = 0.05 * diff(range(unlist(t))); - } - if(is.null(userBwMu) && methodBwMu != 'Default'){ - userBwMu = 0.0; - } - if(is.null(methodBwCov)){ # bandwidth choice for covariance function is GCV if userBwCov = c(0,0) - #methodBwCov = 'GMeanAndGCV'; - methodBwCov = 'Default'; - } - if(is.null(userBwCov) && methodBwCov == 'Default'){ # bandwidth choice for covariance function is CV or GCV - userBwCov = 0.10 * diff(range(unlist(t))); - } - if(is.null(userBwCov) && methodBwCov != 'Default'){ - userBwCov = 0.0; - } - #if(is.null(ngrid1)){ # number of support points for the covariance surface - # ngrid1 = 30; - #} - if (is.null(kFoldMuCov)) { # CV fold for covariance smoothing - kFoldMuCov <- 10L - } else { - kFoldMuCov <- as.integer(kFoldMuCov) - } - if(is.null(methodSelectK)){ # the method of choosing the number of principal components K - # TODO : Possibly have user-defined selection methods for the # of FPCs and we keep - # an internal FVE-based method for us - methodSelectK = "FVE"; - } - if(is.null(FVEthreshold)){ # Default Value for the Fraction-of-Variance-Explained - FVEthreshold = 0.9999; - } - if(is.null(dataType)){ #do we have dataType or sparse functional data - dataType = IsRegular(t); - } - if (is.null(fitEigenValues)) { - fitEigenValues <- FALSE - } - if(is.null(methodMuCovEst)){ - if (dataType == 'Sparse'){ - methodMuCovEst = 'smooth'; #In the odd case that somehow we use this... - } else { - methodMuCovEst = 'cross-sectional'; - } - } - if (fitEigenValues && dataType == 'Dense') { - stop('Fit method only apply to sparse data') - } - if(is.null(error)){ # error assumption with measurement error - error = TRUE; - } - if(is.null(nRegGrid)){ # number of support points in each direction of covariance surface - if(dataType == 'Dense' || dataType == 'DenseWithMV'){ - tt = unlist(t) - nRegGrid = length(unique(signif(tt[!is.na(tt)],6))); - } else { # for Sparse and p>>n - nRegGrid = 51; - } - } - if(is.null(maxK)){ # maximum number of principal components to consider - maxK = min( nRegGrid-2, length(y)-2 ); - if(methodMuCovEst == 'smooth'){ - maxK = min( maxK, 20) - } - if(maxK < 1){ - message("Automatically defined maxK cannot be less than 1. Reset to maxK = 1 now!\n") - maxK = 1 - } - if( length(y) <= 3 ){ - message("The sample size is less or equal to 3 curves. Be cautious!\n") - } - } - methodNames = c("IN", "CE"); - if(!is.null(methodXi) && !(methodXi %in% methodNames)){ - message(paste('methodXi', methodXi, 'is unrecognizable! Reset to automatic selection now!\n')); - methodXi = NULL; - } - if(is.null(methodXi)){ # method to estimate the PC scores - if(dataType == 'Dense'){ - methodXi = "IN"; - } else if(dataType == 'Sparse'){ - methodXi = "CE"; - } else if(dataType == 'DenseWithMV'){ - methodXi = "CE"; # We will see how IN can work here - } else { # for dataType = p>>n - methodXi = "IN"; - } - } - if(is.null(shrink)){ - # apply shrinkage to estimates of random coefficients (dataType data - # only) - shrink = FALSE; - } - if(shrink == TRUE && (error != TRUE || methodXi != "IN")){ - # Check for valid shrinkage choice - message('shrinkage method only has effects when methodXi = "IN" and error = TRUE! Reset to shrink = FALSE now!\n'); - shrink = FALSE - } - if(is.null(kernel)){ # smoothing kernel choice - if(dataType == "Dense"){ - kernel = "epan"; # kernel: Epanechnikov - }else{ - kernel = "gauss"; # kernel: Gaussian - } - } - kernNames = c("rect", "gauss", "epan", "gausvar", "quar"); - if(!(kernel %in% kernNames)){ # Check suitability of kernel - message(paste('kernel', kernel, 'is unrecognizable! Reset to automatic selection now!\n')); - kernel = NULL; - } - if(is.null(kernel)){ # smoothing kernel choice - if(dataType %in% c( "Dense", "DenseWithMV")){ - kernel = "epan"; # kernel: Epanechnikov - }else{ - kernel = "gauss"; # kernel: Gaussian - } - } - if(is.null(yname)){ # name of the variable analysed - yname = as.character(substitute(y)) - } - if(maxK > (nRegGrid-2)){ # check if a reasonable number of eigenfunctions is requested - message(paste("maxK can only be less than or equal to", nRegGrid-2,"! Reset to be", nRegGrid-2, "now!\n")); - maxK = nRegGrid -2; - } - if(is.numeric(methodSelectK)){ - FVEthreshold <- 1 # disable FVE selection. - if(methodSelectK > (nRegGrid-2)){ # check if a reasonable number of eigenfunctions is requested - message(paste("maxK can only be less than or equal to", nRegGrid-2,"! Reset to be", nRegGrid-2, "now!\n")); - maxK = nRegGrid -2; - }else if(methodSelectK <= 0){ # check if a positive number of eigenfunctions is requested - message("methodSelectK must be a positive integer! Reset to BIC now!\n"); - methodSelectK = "BIC" - FVEthreshold = 0.95; - } - } - if(is.null(plot)){ # make corrplot - plot = FALSE; - } - if(is.null(rho)){ # truncation threshold for the iterative residual that is used - # no regularization if sigma2 is specified or assume no measurement error. - if (!is.null(userSigma2) || error == FALSE) { - rho <- 'no' - } else { - rho <- 'cv' - } - } - if(is.null(userRho)){ - userRho = NULL - } - if(is.null(verbose)){ # display diagnostic messages - verbose = FALSE; - } - if(is.null(userMu)){ # user-defined mean functions valued at distinct input time points - userMu <- NULL - } - if(is.null(userCov)){ - userCov <- NULL - } - if(is.null(outPercent)){ - outPercent <- c(0,1) - } - if(is.null(rotationCut)){ - rotationCut <- c(0.25,.75) - } - # if(error == FALSE && (methodSelectK == "AIC" || methodSelectK == "BIC")){ # Check suitability of information criterion - # message(paste0('When assume no measurement error, cannot use "AIC" or "BIC". Reset to "BIC" now!\n')) - # methodSelectK = "BIC" - #} - if(!is.null(numBins)){ - if(numBins < 10){ # Check suitability of number of bins - message("Number of bins must be at least +10!!\n"); - numBins = NULL; - } - } - if(is.null(useBinnedData)){ - useBinnedData = 'AUTO'; - } - if (is.null(useBinnedCov)) { - useBinnedCov <- TRUE - if ( ( 128 > length(y) ) && ( 3 > mean ( unlist( lapply( y, length) ) ) )){ - useBinnedCov <- FALSE - } - } - if(is.null(lean)){ - lean = FALSE; - } - if(is.null(useBW1SE)){ - useBW1SE = FALSE; - } - # if (!all.equal(outPercent, c(0, 1)) && methodMuCovEst == 'cross-sectional') { - # stop('outPercent not supported for cross-sectional covariance estimate') - # } - - retOptns <- list(userBwMu = userBwMu, methodBwMu = methodBwMu, userBwCov = userBwCov, methodBwCov = methodBwCov, - kFoldMuCov = kFoldMuCov, methodSelectK = methodSelectK, FVEthreshold = FVEthreshold, - fitEigenValues = fitEigenValues, maxK = maxK, dataType = dataType, error = error, shrink = shrink, - nRegGrid = nRegGrid, rotationCut = rotationCut, methodXi = methodXi, kernel = kernel, - lean = lean, diagnosticsPlot = diagnosticsPlot, plot=plot, numBins = numBins, useBinnedCov = useBinnedCov, - yname = yname, rho = rho, verbose = verbose, userMu = userMu, userCov = userCov, methodMuCovEst = methodMuCovEst, - userRho = userRho, userSigma2 = userSigma2, outPercent = outPercent, useBinnedData = useBinnedData, useBW1SE = useBW1SE) - - invalidNames <- !names(optns) %in% names(retOptns) - if (any(invalidNames)) { - stop(sprintf('Invalid option names: %s', - paste0(names(optns)[invalidNames], collapse=', '))) - } - return( retOptns ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetSVDOptions.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SetSVDOptions.R deleted file mode 100644 index af91a750..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SetSVDOptions.R +++ /dev/null @@ -1,98 +0,0 @@ -### SetSVDOptions - -SetSVDOptions <- function(Ly1, Lt1, Ly2, Lt2, SVDoptns){ - dataType1 = SVDoptns[['dataType1']] - dataType2 = SVDoptns[['dataType2']] - bw1 = SVDoptns[['bw1']] - bw2 = SVDoptns[['bw2']] - userMu1 = SVDoptns[['userMu1']] - userMu2 = SVDoptns[['userMu2']] - useGAM = SVDoptns[['useGAM']] - methodSelectK = SVDoptns[['methodSelectK']] - FVEthreshold = SVDoptns[['FVEthreshold']] - maxK = SVDoptns[['maxK']] - kernel = SVDoptns[['kernel']] - nRegGrid1 = SVDoptns[['nRegGrid1']] - nRegGrid2 = SVDoptns[['nRegGrid2']] - bwRoutine = SVDoptns[['bwRoutine']] - rmDiag = SVDoptns[['rmDiag']] - noScores = SVDoptns[['noScores']] - regulRS = SVDoptns[['regulRS']] - flip = SVDoptns[['flip']] - - if(is.null(dataType1)){# do we have dataType or sparse functional data for the first sample - dataType1 = IsRegular(Lt1); - } - if(is.null(dataType2)){# do we have dataType or sparse functional data for the first sample - dataType2 = IsRegular(Lt2); - } - if(is.null(maxK)){ # maximum number of singular components to consider - maxK = min(20, length(Ly1)-2) - } - if(is.null(kernel)){ # only gauss is avaiable for CrCov smoothing now - kernel = "gauss" - } - if(is.null(nRegGrid1)){ - nRegGrid1 = 51 # currently only 51, since it is the case for GetCrCovXY() - } - if(is.null(nRegGrid2)){ - nRegGrid2 = 51 # currently only 51, since it is the case for GetCrCovXY() - } - if(is.null(userMu1)){ - userMu1 = NULL - } - if(is.null(userMu2)){ - userMu2 = NULL - } - if(is.null(bwRoutine)){ - bwRoutine = 'l-bfgs-b' - } - if(is.null(useGAM)){ - useGAM = FALSE - } - if(is.null(rmDiag)){ # whether to remove diagonal raw cov for cross cov estimation - rmDiag = FALSE - } - if(is.null(FVEthreshold)){ # Default Value for the Fraction-of-Variance-Explained - FVEthreshold = 0.9999; - } - if(is.null(methodSelectK)){ # the method of choosing the number of singular components K - methodSelectK = "FVE"; - } - if(is.numeric(methodSelectK)){ - FVEthreshold <- 1 # disable FVE selection. - if(methodSelectK > maxK){ # check if a reasonable number of singular functions is requested - message(paste("maxK can only be less than or equal to", maxK,"! Reset to be", maxK, "now!\n")); - }else if(methodSelectK <= 0 || as.integer(methodSelectK)!=methodSelectK){ # check if a positive number of eigenfunctions is requested - message("methodSelectK must be a positive integer! Reset to FVE now!\n"); - methodSelectK = "FVE" - FVEthreshold = 0.95; - } - } - - if(is.null(noScores)){ # the method of choosing the number of singular components K - noScores = FALSE; - } - if(is.null(regulRS)){ # the method of choosing the number of singular components K - regulRS = 'sigma2'; - } - if(is.null(flip)){ # the method of choosing the number of singular components K - flip = FALSE; - } - - - retSVDOptns <- list(dataType1 = dataType1, dataType2 = dataType2, - bw1 = bw1, bw2 = bw2, userMu1 = userMu1, userMu2 = userMu2, - useGAM = useGAM, methodSelectK = methodSelectK, - FVEthreshold = FVEthreshold, maxK = maxK, flip = flip, - kernel = kernel, nRegGrid1 = nRegGrid1, nRegGrid2 = nRegGrid2, - bwRoutine = bwRoutine, rmDiag = rmDiag, noScores = noScores, regulRS = regulRS) - - invalidNames <- !names(SVDoptns) %in% names(retSVDOptns) - if (any(invalidNames)) { - stop(sprintf('Invalid option names: %s', - paste0(names(SVDoptns)[invalidNames], collapse=', '))) - } - return(retSVDOptns) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Sparsify.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Sparsify.R deleted file mode 100644 index 45b49d45..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Sparsify.R +++ /dev/null @@ -1,71 +0,0 @@ -#' Sparsify densely observed functional data -#' -#' Given a matrix of densely observed functional data, make a sparsified sample. -#' -#' @param samp A matrix of densely observed functional data, with each row containing one sample. -#' @param pts A vector of grid points corresponding to the columns of \code{samp}. -#' @param sparsity A vector of integers. The number of observation per sample is chosen to be one of the elements in sparsity with equal chance. -#' @param aggressive Sparsify in an "aggressive" manner making sure that near-by readings are excluded. -#' @param fragment Sparsify the observations into fragments, which are (almost) uniformly distributed in the time domain. Default to FALSE as not fragmenting. Otherwise a positive number specifying the approximate length of each fragment. -#' -#' @return A list of length 2, containing the following fields: -#' \item{Lt}{A list of observation time points for each sample.} -#' \item{Ly}{A list of values for each sample, corresponding to the time points.} -#' @export -Sparsify <- function(samp, pts, sparsity, aggressive = FALSE, fragment=FALSE) { - - if (!is.matrix(samp)) { - stop('samp needs to be a matrix') - } - if (ncol(samp) != length(pts)) { - stop('The number of columns in samp needs to be equal to the length of pts') - } - if (length(sparsity) == 1) { - sparsity <- c(sparsity, sparsity) # avoid scalar case - } - - if (aggressive && fragment) { - stop('Specify one of `aggressive` or `fragment` only') - } - - if (aggressive) { - indEach <- lapply(1:nrow(samp), function(x) - remotesampling(ncol(samp), sparsity) ) - } else if (fragment != FALSE) { - nptsEach <- fragment / mean(diff(pts)) - indEach <- lapply(1:nrow(samp), function(x) { - ranPts <- range(pts) - mid <- runif(1, ranPts[1], ranPts[2]) - usePts <- which(pts >= mid - 1/2 * diff(ranPts) * fragment & - pts <= mid + 1/2 * diff(ranPts) * fragment) - nSampPts <- sample(sparsity, 1) - if (nSampPts >= length(usePts)) usePts else sort(sample(usePts, nSampPts)) - }) - } else { - indEach <- lapply(1:nrow(samp), function(x) - sort(sample(ncol(samp), sample(sparsity, 1)))) - } - - Lt <- lapply(indEach, function(x) pts[x]) - Ly <- lapply(1:length(indEach), function(x) { - ind <- indEach[[x]] - y <- samp[x, ind] - return(y) - }) - - return(list(Lt=Lt, Ly=Ly)) -} - - - -remotesampling <- function(N,s){ - onesamp = sort( sample( N, sample( s, 1))) - threshold = (1/length(onesamp))^(1.5) * N - while( min(diff(onesamp)) < threshold ){ - onesamp = sort( sample( N, length(onesamp))) - } - return(onesamp) -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Stringing.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Stringing.R deleted file mode 100644 index cc541128..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Stringing.R +++ /dev/null @@ -1,129 +0,0 @@ -#' Stringing for High-Dimensional data -#' -#' @param X A matrix (n by p) of data, where X[i,] is the row vector of measurements for the ith subject. -#' @param Y A vector (n by 1), where Y[i] is the reponse associated with X[i,] -#' @param standardize A logical variable indicating whether standardization of the input data matrix is required, with default: FALSE. -#' @param disOptns A distance metric to be used, one of the following: "euclidean" (default), "maximum", "manhattan", "canberra", "binary", "minkowski", "correlation", "spearman", "hamming", "xycor", or "user". If specified as "xycor", the absolute difference of correlation between predictor and response is used. If specified as "user", a dissimilarity matrix for the argument "disMat" must be provided. -#' @param disMat A user-specified dissimilarity matrix, only necessary when "disOptns" is "user". -#' -#' @return A list containing the following fields: -#' \item{Ly}{A list of n vectors, which are the random trajectories for all subjects identified by the Stringing method.} -#' \item{Lt}{A list of n time points vectors, at which corresponding measurements Ly are taken.} -#' \item{StringingOrder}{A vector representing the order of the stringing, s.t. using as column index on \code{X} yields recovery of the underlying process.} -#' \item{Xin}{A matrix, corresponding to the input data matrix.} -#' \item{Xstd}{A matrix, corresponding to the standardized input data matrix. It is NULL if standardize is FALSE.} -#' @examples -#' set.seed(1) -#' n <- 50 -#' wiener = Wiener(n = n)[,-1] -#' p = ncol(wiener) -#' rdmorder = sample(size = p, x=1:p, replace = FALSE) -#' stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -#' diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -#' diff_rev = sum(abs(rdmorder[stringingfit$StringedOrder] - p:1)) -#' if(diff_rev <= diff_norev){ -#' stringingfit$StringingOrder = rev(stringingfit$StringingOrder) -#' stringingfit$Ly = lapply(stringingfit$Ly, rev) -#' } -#' plot(1:p, rdmorder[stringingfit$StringingOrder], pch=18); abline(a=0,b=1) -#' -#' @references -#' \cite{Chen, K., Chen, K., Mueller, H. G., and Wang, J. L. (2011). "Stringing high-dimensional data for functional analysis." Journal of the American Statistical Association, 106(493), 275-284.} -#' @export - -Stringing = function(X, Y = NULL, standardize = FALSE, disOptns = "euclidean", disMat = NA){ - # input check - if(!(is.numeric(X) && is.matrix(X))){ - stop('Incorrect format for input data matrix X! Check if it is a matrix.') - } - if(!(disOptns %in% c("euclidean", "maximum", "manhattan", "canberra", "binary", "minkowski", - "correlation", "spearman", "hamming", "xycor", "user"))){ - stop('Invalid distance option specified! Need to be one of "euclidean", "correlation", "spearman", "hamming" and "user".') - } - if(disOptns == "user" && is.na(disMat)){ - stop('User specified dissimilarity matrix is missing, which is required for distance option "User".') - } - if(disOptns == "xycor"){ - if(is.null(Y)){ - stop('Missing response vector Y, required when disMat is "xycor".') - } - if(!(is.numeric(Y) && is.vector(Y))){ - stop('Incorrect format for input response vector Y! Check if it is a vector.') - } - if(length(Y) != nrow(X)){ - stop('Incosistent sample size based on input design matrix X and response vector Y.') - } - } - # Standardization of the input data X - Xin = X - if(standardize){ - Xstd = t(t(X) - colMeans(X)) %*% diag((1/sqrt(diag(cov(X)))), nrow = ncol(X)) - X = Xstd - } else { - Xstd = NULL - X = Xin - } - - # Calculate dissimilarity matrix - n = nrow(X); p = ncol(X); - if(disOptns != "user"){ - disMat = GetDisMatrix(X, disOptns, Y) - } else { # check if the user-specified dissimilarity matrix is a well-defined - if(!(isSymmetric(disMat) && sum(disMat > 0) == p*(p-1) && sum(abs(diag(disMat))) == 0)){ - stop("User-specified dissimilarity matrix is not valid!") - } - } - - # UDS - uds = MASS::isoMDS(d = disMat, k = 1, trace = FALSE) - pts = uds$points - StringingOrder = order( (pts - min(pts))/diff(range(pts)) ) - - # obtain stringed data - stringedX = X[,StringingOrder] - stringedTime = 1:p - fpcainput = MakeFPCAInputs(IDs = rep(seq_len(n),times=p), tVec = rep(stringedTime, each=n), - yVec = c(stringedX)) - Ly = fpcainput$Ly - Lt = fpcainput$Lt - stringingObj <- list(Ly = Ly, Lt = Lt, StringingOrder = StringingOrder, Xin = Xin, Xstd = Xstd) - class(stringingObj) <- "Stringing" - return(stringingObj) -} - - -# function to get dissimilarity matrix for given data matrix -GetDisMatrix = function(X, disOptns = "euclidean", Y){ - p = ncol(X); n = nrow(X); - if(disOptns %in% c("euclidean","maximum","manhattan","canberra","binary","minkowski")){ - disMat = dist(x = t(X), method = disOptns) - } else if(disOptns == "correlation"){ - disMat = sqrt(2*(1 - cor(X))) - } else if(disOptns == "spearman"){ - rankX = X - for(i in 1:p){ - rankX[,i] = rank(X[,i]) - } - disMat = 1 - cor(rankX) - } else if(disOptns == "hamming"){ - disMat = matrix(NA, nrow = p, ncol = p) - for(i in 1:p){ - for(j in i:p){ - disMat[i,j] = sum(X[,i] != X[,j])/n - if(j > i){ - disMat[j,i] = disMat[i,j] - } - } - } - } else { # xy correlation - disMat = matrix(NA, nrow = p, ncol = p) - XYcor = cor(cbind(Y,X))[-1,1] # the correlation vector of Xj's and Y, j=1,...,p - for(i in 1:p){ - for(j in i:p){ - disMat[i,j] = abs(XYcor[i] - XYcor[j]); - disMat[j,i] = disMat[i,j]; - } - } - } - return(disMat) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/SubsetFPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/SubsetFPCA.R deleted file mode 100644 index b8564c38..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/SubsetFPCA.R +++ /dev/null @@ -1,11 +0,0 @@ -### subset the FPCA object with specified number of components K -### and return the subsetted fpcaObj - -SubsetFPCA <- function(fpcaObj, K){ - fpcaObj$lambda <- fpcaObj$lambda[1:K] - fpcaObj$phi <- fpcaObj$phi[,1:K, drop=FALSE] - fpcaObj$xiEst <- fpcaObj$xiEst[,1:K, drop=FALSE] - fpcaObj$FVE <- fpcaObj$cumFVE[K] - fpcaObj$cumFVE <- fpcaObj$cumFVE[1:K] - return(fpcaObj) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/TVAM.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/TVAM.R deleted file mode 100644 index a316972f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/TVAM.R +++ /dev/null @@ -1,178 +0,0 @@ -#' Iterative Smooth Backfitting Algorithm -#' -#' Smooth backfitting procedure for time-varying additive models -#' -#' @param Lt An \emph{n}-dimensional list of \emph{N_i}-dimensional vector whose elements consist of longitudial time points for each \emph{i}-th subject. -#' @param Ly An \emph{n}-dimensional list of \emph{N_i}-dimensional vector whose elements consist of longitudial response observations of each \emph{i}-subject corresponding to \emph{Lt}. -#' @param LLx A tuple of \emph{d}-lists, where each list respresents longitudinal covariate observations of the \emph{j}-th component corresponding to \emph{Lt} and \emph{Ly}. -#' @param gridT An \emph{M}-dimensional sequence of evaluation time points for additive surface estimators. (Must be sorted in increasing orders.) -#' @param x An \emph{N} by \emph{d} matrix whose column vectors consist of \emph{N} vectors of evaluation points for additive surface component estimators at each covariate value. -#' @param ht A bandwidth for kernel smoothing in time component. -#' @param hx A \emph{d} vector of bandwidths for kernel smoothing covariate components, respectively. -#' @param K A \code{function} object representing the kernel to be used in the smooth backfitting (default is 'epan', the the Epanechnikov kernel.). -#' @param suppT A 2-dimensional vector consists of the lower and upper limits of estimation intervals for time component (default is \emph{[0,1]}). -#' @param suppX A \emph{d} by 2 matrix whose row vectors consist of the lower and upper limits of estimation intervals for each component function (default is the \emph{d}-dimensional unit rectangle of \emph{[0,1]}). -#' -#' @details \code{TVAM} estimates component surfaces of time-varying additive models for londitudinal observations based on the smooth backfitting algorithm proposed by Zhang et al. (2013). \code{TVAM} only focuses on the local constant smooth backfitting in contrast to the original development as in Zhang et al. (2013). However, the local polynomial version can be extended similarly, so that those are omitted in the development. Especially in this development, one can designate an estimation support of additive surfaces when the additive modeling is only allowed over restricted intervals or one is interested in the modeling over the support (see Han et al., 2016). -#' -#' @return A list containing the following fields: -#' \item{tvamComp}{A tuple of \emph{d}-lists, where each list is given by \emph{M} by \emph{N} matrix whose elements represents the smooth backfitting surface estimator of the \emph{j}-component evaluated at \code{gridT} and the \emph{j}-th column of \code{x}.} -#' \item{tvamMean}{An \emph{M}-dimensional vector whose elelments consist of the marginal time regression function estimated at \code{gridT}.} -#' @examples -#' -#' set.seed(1000) -#' -#' n <- 100 -#' Lt <- list() -#' Ly <- list() -#' Lx1 <- list() -#' Lx2 <- list() -#' -#' for (i in 1:n) { -#' Ni <- sample(10:15,1) -#' -#' Lt[[i]] <- sort(runif(Ni,0,1)) -#' Lx1[[i]] <- runif(Ni,0,1) -#' Lx2[[i]] <- runif(Ni,0,1) -#' Ly[[i]] <- Lt[[i]]*(cos(2*pi*Lx1[[i]]) + sin(2*pi*Lx2[[i]])) + rnorm(Ni,0,0.1) -#' -#' } -#' -#' LLx <- list(Lx1,Lx2) -#' -#' gridT <- seq(0,1,length.out=41) -#' x0 <- seq(0,1,length.out=51) -#' x <- cbind(x0,x0) -#' -#' ht <- 0.1 -#' hx <- c(0.1,0.1) -#' -#' tvam <- TVAM(Lt,Ly,LLx,gridT=gridT,x=x,ht=ht,hx=hx,K='epan') -#' -#' g0Sbf <- tvam$tvamMean -#' gjSbf <- tvam$tvamComp -#' -#' par(mfrow=c(1,2)) -#' par(mar=c(1,1,1,1)+0.1) -#' persp(gridT,x0,gjSbf[[1]],theta=60,phi=30, -#' xlab='time',ylab='x1',zlab='g1(t, x1)') -#' persp(gridT,x0,gjSbf[[2]],theta=60,phi=30, -#' xlab='time',ylab='x2',zlab='g1(t, x2)') -#' -#' @references -#' \cite{Zhang, X., Park, B. U. and Wang, J.-L. (2013), "Time-varying additive models for longitudinal data", Journal of the American Statistical Association, Vol.108, No.503, p.983-998.} -#' -#' \cite{Han, K., Mueller, H.-G. and Park, B. U. (2018), "Smooth backfitting for additive modeling with small errors-in-variables, with an application to additive functional regression for multiple predictor functions", Bernoulli, Vol.24, No.2, p.1233-1265.} -#' -#' @export - -TVAM <- function(Lt,Ly,LLx,gridT=NULL,x=NULL,ht=NULL,hx=NULL,K='epan',suppT=NULL,suppX=NULL){ - - supp0 <- suppT - supp <- suppX - - if (is.null(ncol(x))==TRUE) { - return(message('Evaluation grid must be multi-dimensional.')) - } - - M <- length(gridT) - N <- nrow(x) - n <- length(Lt) - d <- ncol(x) - - h0 <- ht - h <- hx - - if (K!='epan') { - message('Epanechnikov kernel is only supported currently. It uses Epanechnikov kernel automatically') - K<-'epan' - } - if (is.null(supp0)==TRUE) { - supp0 <-c(0,1) - } - if (is.null(supp)==TRUE) { - supp <- matrix(rep(c(0,1),d),ncol=2,byrow=TRUE) - } - if (is.null(h0)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - if (is.null(h)==TRUE) { - h <- rep(0.25*n^(-1/5),d)*(supp[,2]-supp[,1]) - } - if (length(h0)>1) { - return(message('Bandwidth for time component must be univariate.')) - } - if (length(h)<2) { - return(message('Bandwidths for covariate components must be multi-dimensional.')) - } - - Ni <- c() - for (i in 1:n) { - Ni[i] <- length(Lt[[i]]) - } - - sumNi <- sum(Ni) - - obsT <- c() - Y <- c() - X <- c() - for (i in 1:n) { - obsT <- c(obsT,Lt[[i]]) - Y <- c(Y,Ly[[i]]) - - tmpX <- matrix(nrow=Ni[i],ncol=d) - for (j in 1:d) { - tmpX[,j] <- (LLx[[j]])[[i]] - } - X <- rbind(X,tmpX) - } - - g0Sbf <- c() - gjSbf <- list() - for (j in 1:d) { - gjSbf[[j]] <- matrix(nrow=M,ncol=N) - } - for (m in 1:M) { - # print(m) - - tmpInd <- which(abs(obsT - gridT[m])= min(obsGrid) - buff & tVec <= max(obsGrid) + buff) - return(ind) - }, Ly, Lt, SIMPLIFY=FALSE) - Ly <- mapply(function(yVec, ind) yVec[ind], Ly, tmpInd, SIMPLIFY = FALSE) - Lt <- mapply(function(tVec, ind) tVec[ind], Lt, tmpInd, SIMPLIFY = FALSE) - - return(list(Ly=Ly, Lt=Lt)) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/VCAM.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/VCAM.R deleted file mode 100644 index 586159b0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/VCAM.R +++ /dev/null @@ -1,346 +0,0 @@ -#' Sieve estimation -#' -#' B-spline based estimation procedure for time-varying additive models. -#' -#' @param Lt An \emph{n}-dimensional list of \emph{N_i}-dimensional vectors whose elements consist of longitudial time points for each \emph{i}-th subject. -#' @param Ly An \emph{n}-dimensional list of \emph{N_i}-dimensional vectors whose elements consist of longitudial response observations of each \emph{i}-subject corresponding to \emph{Lt}. -#' @param X An \emph{n} by \emph{d} matrix whose row vectors consist of covariate vector of additive components for each subject. -#' @param optnAdd A list of options controls B-spline parameters for additive components, specified by list(name=value). See 'Details'. -#' @param optnVc A list of options controls B-spline parameters for varying-coefficient components, specified by list(name=value). See 'Details'. -#' -#' @details \code{VCAM} provides a simple algorithm based on B-spline basis to estimate its nonparametric additive and varying-coefficient components. -#' -#' Available control options for \emph{optnAdd} are -#' \describe{ -#' \item{nKnot}{A \emph{d}-dimensional vector which designates the number of knots for each additive component function estimation (default=10).} -#' \item{order}{A \emph{d}-dimensional vector which designates the order of B-spline basis for each additive component function estimation (default=3).} -#' \item{grid}{A \emph{N} by \emph{d} matrix whose column vector consist of evaluation grid points for each component function estimation.} -#' } -#' and control options for \emph{optnVc} are -#' \describe{ -#' \item{nKnot}{A \emph{(d+1)}-dimensional vector which designates the number of knots for overall mean function and each varying-coefficient component function estimation (default=10).} -#' \item{order}{A \emph{(d+1)}-dimensional vector which designates the order of B-spline basis for overall mean function and each varying-coefficient component function estimation (default=3).} -#' \item{grid}{A \emph{M} by \emph{(d+1)} matrix whose column vectors consist of evaluation grid points for overall mean function and each varying-coefficient component function estimation.} -#' } -#' -#' @return A list containing the following fields: -#' \item{Lt}{The same with input given by \emph{Lt}} -#' \item{LyHat}{Fitted values corresponding to \emph{Ly}} -#' \item{phiEst}{An \emph{N} by \emph{d} matrix whose column vectors consist of esimates for each additive component function evaluated at \emph{gridX}.} -#' \item{beta0Est}{An \emph{M}-dimensional vector for overall mean function estimates evalueated at \emph{gridT}.} -#' \item{betaEst}{An \emph{M} by \emph{d} matrix whose column vectors consist of esimates for each varying-coefficient components evalueated at \emph{gridT}.} -#' \item{gridX}{The same with input given by \emph{optnAdd$grid}} -#' \item{gridT}{The same with input given by \emph{optnVc$grid}} -#' @examples -#' -#' library(MASS) -#' -#' set.seed(100) -#' -#' n <- 100 -#' d <- 2 -#' -#' Lt <- list() -#' Ly <- list() -#' -#' m <- rep(0,2) -#' S <- matrix(c(1,0.5,0.5,1),nrow=2,ncol=2) -#' X <- pnorm(mvrnorm(n,m,S)) -#' -#' beta0 <- function(t) 1.5*sin(3*pi*(t+0.5)) -#' beta1 <- function(t) 3*(1-t)^2 -#' beta2 <- function(t) 4*t^3 -#' -#' phi1 <- function(x) sin(2*pi*x) -#' phi2 <- function(x) 4*x^3-1 -#' -#' for (i in 1:n) { -#' Ni <- sample(10:20,1) -#' -#' Lt[[i]] <- sort(runif(Ni,0,1)) -#' Ly[[i]] <- beta0(Lt[[i]]) + beta1(Lt[[i]])*phi1(X[i,1]) + beta2(Lt[[i]])*phi2(X[i,2]) + rnorm(Ni,0,0.1) -#' -#' } -#' -#' -#' vcam <- VCAM(Lt,Ly,X) -#' -#' par(mfrow=c(1,1)) -#' plot(unlist(vcam$LyHat),unlist(Ly),xlab='observed Y',ylab='fitted Y') -#' abline(coef=c(0,1),col=8) -#' -#' par(mfrow=c(1,2)) -#' plot(vcam$gridX[,1],vcam$phiEst[,1],type='l',ylim=c(-1,1),xlab='x1',ylab='phi1') -#' points(vcam$gridX[,1],phi1(vcam$gridX[,1]),col=2,type='l',lty=2,lwd=2) -#' legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) -#' -#' plot(vcam$gridX[,2],vcam$phiEst[,2],type='l',ylim=c(-1,3),xlab='x2',ylab='phi2') -#' points(vcam$gridX[,2],phi2(vcam$gridX[,2]),col=2,type='l',lty=2,lwd=2) -#' legend('topleft',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) -#' -#' par(mfrow=c(1,3)) -#' plot(vcam$gridT,vcam$beta0Est,type='l',xlab='t',ylab='beta0') -#' points(vcam$gridT,beta0(vcam$gridT),col=2,type='l',lty=2,lwd=2) -#' legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) -#' -#' plot(vcam$gridT,vcam$betaEst[,1],type='l',xlab='t',ylab='beta1') -#' points(vcam$gridT,beta1(vcam$gridT),col=2,type='l',lty=2,lwd=2) -#' legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) -#' -#' plot(vcam$gridT,vcam$betaEst[,2],type='l',xlab='t',ylab='beta2') -#' points(vcam$gridT,beta2(vcam$gridT),col=2,type='l',lty=2,lwd=2) -#' legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) -#' -#' @references -#' \cite{Zhang, X. and Wang, J.-L. (2015), "Varying-coefficient additive models for functional data", Biometrika, Vol.102, No.1, p.15-32.} -#' -#' @export - -VCAM <- function(Lt,Ly,X,optnAdd=list(),optnVc=list()) { - - n <- length(Lt) - d <- ncol(X) - - if (is.null(optnAdd$order)==TRUE) { - optnAdd$order <- 3 - } - if (is.null(optnAdd$nKnot)==TRUE) { - optnAdd$nKnot <- min(10,ceiling(n/d-optnAdd$order-1)) - } - - if (length(optnAdd$order)==1) { - optnAdd$order <- rep(optnAdd$order,d) - } - if (length(optnAdd$nKnot)==1) { - optnAdd$nKnot <- rep(optnAdd$nKnot,d) - } - - if (is.null(optnVc$order)==TRUE) { - optnVc$order <- 3 - } - if (is.null(optnVc$nKnot)==TRUE) { - optnVc$nKnot <- min(10,ceiling(n/(d+1)-optnVc$order-1)) - } - - if (length(optnVc$order)==1) { - optnVc$order <- rep(optnVc$order,d+1) - } - if (length(optnVc$nKnot)==1) { - optnVc$nKnot <- rep(optnVc$nKnot,d+1) - } - - if (is.null(d)==TRUE) { - X <- matrix(X,nrow=n,ncol=d) - } - - Ni <- c() - for (i in 1:n) { - Ni[i] <- length(Lt[[i]]) - } - - maxT <- max(unlist(Lt)) - minT <- min(unlist(Lt)) - - - if (is.null(optnAdd$grid)==TRUE) { - tmp <- matrix(nrow=51,ncol=d) - for (j in 1:d) { - tmp[,j] <- seq(min(X[,j]),max(X[,j]),length.out=51) - } - optnAdd$grid <- tmp - } - - if (is.null(optnVc$grid)==TRUE) { - optnVc$grid <- seq(minT,maxT,length.out=51) - } - - - # B-spline estimation for additive function - intY <- c() - for (i in 1:n) { - ind <- order(Lt[[i]]) - Ti <- (Lt[[i]][ind]-minT)/(maxT-minT) - Yi <- Ly[[i]][ind] - - intY[i] <- trapzRcpp(Ti,Yi) - } - - BSplineX <- c() - nBasisX <- c() - for (j in 1:d) { - stdXj <- (X[,j]-min(X[,j]))/(max(X[,j])-min(X[,j])) - - nIntKnot <- optnAdd$nKnot[j] - optnAdd$order[j] - 1 - - tmp <- GenBSpline(stdXj,nIntKnot,optnAdd$order[j]) - nBasisX[j] <- ncol(tmp) - - BSplineX <- cbind(BSplineX,tmp) - - } - - if (n <= ncol(BSplineX)) { - stop('Try smaller number of knots or lower order of B-spline basis.') - } - - fitAdd <- lm(intY~BSplineX) - - fHat <- fitAdd$coefficients[-1] - indNa <- is.na(fHat) - fHat[which(indNa==TRUE)] <- 0 - - phiHat <- matrix(nrow=n,ncol=d) - phiHat[,1] <- BSplineX[,1:nBasisX[1]]%*%fHat[1:nBasisX[1]] - if (d > 1) { - for (j in 2:d) { - phiHat[,j] <- BSplineX[,(sum(nBasisX[1:(j-1)])+1):sum(nBasisX[1:j])]%*%fHat[(sum(nBasisX[1:(j-1)])+1):sum(nBasisX[1:j])] - } - } - - for (j in 1:d) { - phiHat[,j] <- phiHat[,j] - mean(phiHat[,j]) - } - - - # B-spline estimation for varying-coefficient function - Y <- unlist(Ly) - stdT <- (unlist(Lt)-minT)/(maxT-minT) - - BSplineT <- c() - nBasisT <- c() - for (j in 1:(d+1)) { - nIntKnot <- optnVc$nKnot[j] - optnVc$order[j] - 1 - - tmp <- GenBSpline(stdT,nIntKnot,optnVc$order[j]) - nBasisT[j] <- ncol(tmp) - - BSplineT <- cbind(BSplineT,tmp) - } - - phiHatRe <- c() - for (j in 1:d) { - phiHatRe <- cbind(phiHatRe,rep(phiHat[,j],Ni)) - } - - BSplineTX <- BSplineT[,1:nBasisT[1]] - for (j in 1:d) { - BSplineTX <- cbind(BSplineTX,BSplineT[,(sum(nBasisT[1:j])+1):sum(nBasisT[1:(j+1)])]*phiHatRe[,j]) - } - - fitVc <- lm(Y~0+BSplineTX) - - gHat <- fitVc$coefficients - indNa <- is.na(gHat) - gHat[which(indNa==TRUE)] <- 0 - - betaHat <- matrix(nrow=sum(Ni),ncol=(d+1)) - betaHat[,1] <- BSplineT[,1:nBasisT[1]]%*%gHat[1:nBasisT[1]] - if (d > 1) { - for (j in 1:d) { - betaHat[,j+1] <- BSplineT[,(sum(nBasisT[1:j])+1):sum(nBasisT[1:(j+1)])]%*%gHat[(sum(nBasisT[1:j])+1):sum(nBasisT[1:(j+1)])] - } - } - - for (j in 2:(d+1)) { - betaHat[,j] <- betaHat[,j]/trapzRcpp(sort(stdT),betaHat[order(stdT),j]) - } - - - # fitted values for responses - yHat <- fitVc$fitted.values - - LyHat <- list() - LyHat[[1]] <- yHat[1:Ni[1]] - for (i in 2:n) { - LyHat[[i]] <- yHat[(sum(Ni[1:(i-1)])+1):sum(Ni[1:i])] - } - - - # additive function estimation - X0 <- optnAdd$grid - - BSplineX0 <- c() - nBasisX0 <- c() - for (j in 1:d) { - - nIntKnot <- optnAdd$nKnot[j] - optnAdd$order[j] - 1 - - tmp <- GenBSpline(X0[,j],nIntKnot,optnAdd$order[j]) - nBasisX0[j] <- ncol(tmp) - - BSplineX0 <- cbind(BSplineX0,tmp) - - } - - phiEst <- matrix(nrow=nrow(X0),ncol=d) - phiEst[,1] <- BSplineX0[,1:nBasisX0[1]]%*%fHat[1:nBasisX0[1]] - if (d > 1) { - for (j in 2:d) { - phiEst[,j] <- BSplineX0[,(sum(nBasisX0[1:(j-1)])+1):sum(nBasisX0[1:j])]%*%fHat[(sum(nBasisX0[1:(j-1)])+1):sum(nBasisX0[1:j])] - } - } - - for (j in 1:d) { - phiEst[,j] <- phiEst[,j] - mean(phiEst[,j]) - } - - par(mfrow=c(1,2)) - plot(sort(X0[,1]),phiEst[order(X0[,1]),1],type='l',ylim=c(-1,1)) - points(sort(X[,1]),phi1(sort(X[,1])),col=2,type='l',lty=2,lwd=2) - plot(sort(X0[,2]),phiEst[order(X0[,2]),2],type='l',ylim=c(-1,3)) - points(sort(X[,2]),phi2(sort(X[,2])),col=2,type='l',lty=2,lwd=2) - - - # varying-coefficient function esimation - T0 <- optnVc$grid - - BSplineT0 <- c() - nBasisT0 <- c() - for (j in 1:(d+1)) { - nIntKnot <- optnVc$nKnot[j] - optnVc$order[j] - 1 - - tmp <- GenBSpline(T0,nIntKnot,optnVc$order[j]) - nBasisT0[j] <- ncol(tmp) - - BSplineT0 <- cbind(BSplineT0,tmp) - } - - betaEst <- matrix(nrow=length(T0),ncol=(d+1)) - betaEst[,1] <- BSplineT0[,1:nBasisT0[1]]%*%gHat[1:nBasisT0[1]] - if (d > 1) { - for (j in 1:d) { - betaEst[,j+1] <- BSplineT0[,(sum(nBasisT0[1:j])+1):sum(nBasisT0[1:(j+1)])]%*%gHat[(sum(nBasisT0[1:j])+1):sum(nBasisT0[1:(j+1)])] - } - } - - for (j in 2:(d+1)) { - betaEst[,j] <- betaEst[,j]/trapzRcpp(T0,betaEst[,j]) - } - - par(mfrow=c(1,3)) - plot(T0,betaEst[,1],type='l') - points(sort(stdT),beta0(sort(stdT)),col=2,type='l',lty=2,lwd=2) - plot(T0,betaEst[,2],type='l') - points(sort(stdT),beta1(sort(stdT)),col=2,type='l',lty=2,lwd=2) - plot(T0,betaEst[,3],type='l') - points(sort(stdT),beta2(sort(stdT)),col=2,type='l',lty=2,lwd=2) - - return(list(Lt=Lt, LyHat=LyHat, phiEst=phiEst, beta0Est=betaEst[,1], betaEst=betaEst[,-1], gridT=T0, gridX=X0)) - -} - - - - - - - - - - - - - - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/WFDA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/WFDA.R deleted file mode 100644 index 2648afc8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/WFDA.R +++ /dev/null @@ -1,242 +0,0 @@ -#' Warped Functional Data Analysis -#' -#' Pairwise curve synchronization for functional data -#' -#' @param Ly A list of \emph{n} vectors containing the observed values for each individual. -#' @param Lt A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order. -#' @param optns A list of options control parameters specified by \code{list(name=value)}. See 'Details'. -#' -#' @details WFDA uses a pairwise warping method to obtain the desired alignment (registration) of the random trajectories. -#' The data has to be regular. The routine returns the aligned curves and the associated warping function. -#' -#' Available control options are -#' \describe{ -#' \item{choice}{Choice of estimating the warping functions ('weighted' or 'truncated'). If 'weighted' then weighted averages of pairwise warping functions are computed; the weighting is based on the inverse pairwise distances. If 'truncated' the pairs with the top 10\% largest distances are truncated and the simple average of the remaining pairwise distances are used - default: 'truncated'} -#' \item{subsetProp}{Pairwise warping functions are determined by using a subset of the whole sample; numeric (0,1] - default: 0.50} -#' \item{lambda}{Penalty parameter used for estimating pairwise warping functions; numeric - default : V*10^-4, where V is the average L2 norm of y-mean(y).} -#' \item{nknots}{Number of knots used for estimating the piece-wise linear pairwise warping functions; numeric - default: 2} -#' \item{isPWL}{Indicator if the resulting warping functions should piece-wise linear, if FALSE 'nknots' is ignored and the resulting warping functions are simply monotonic; logical - default: TRUE (significantly larger computation time.)} -#' \item{seed}{Random seed for the selection of the subset of warping functions; numeric - default: 666} -#' \item{verbose}{Indicator if the progress of the pairwise warping procedure should be displayed; logical - default: FALSE} -#' } -#' @return A list containing the following fields: -#' \item{optns}{Control options used.} -#' \item{lambda}{Penalty parameter used.} -#' \item{aligned}{Aligned curves evaluated at time 't'} -#' \item{h}{Warping functions for 't'} -#' \item{hInv}{Inverse warping functions evaluated at 't'} -#' \item{costs}{The mean cost associated with each curve} -#' \item{timing}{The time required by time-warping.} -#' @examples -#' N = 44; -#' eps = 0.123; -#' M = 41; -#' set.seed(123) -#' Tfinal = 3 -#' me <- function(t) exp(-Tfinal*(((t/Tfinal^2)-0.5))^2); -#' T = seq(0,Tfinal,length.out = M) -#' recondingTimesMat = matrix(nrow = N, ncol = M) -#' yMat = matrix(nrow = N, ncol = M) -#' -#' for (i in 1:N){ -#' peak = runif(min = 0.2,max = 0.8,1) * Tfinal -#' recondingTimesMat[i,] = sort( unique(c( seq(0.0 , peak, length.out = round((M+1)/2)), -#' seq( peak, Tfinal, length.out = round((M+1)/2))))) * Tfinal -#' yMat[i,] = me(recondingTimesMat[i,]) * rnorm(1, mean=4.0, sd= eps) -#' + rnorm(M, mean=0.0, sd= eps) -#' } -#' -#' Y = as.list(as.data.frame(t(yMat))) -#' X = rep(list(T),N) -#' -#' sss = WFDA(Ly = Y, Lt = X, list( choice = 'weighted' )) -#' par(mfrow=c(1,2)) -#' matplot(x= T, t(yMat), t='l', main = 'Raw', ylab = 'Y'); grid() -#' matplot(x= T, t(sss$aligned), t='l', main = 'Aligned', ylab='Y'); grid() -#' @references -#' \cite{Tang, R. and Mueller, H.G. (2008). "Pairwise curve synchronization for functional data." Biometrika 95, 875-889} -#' -#' \cite{Tang, R. and Mueller, H.G. (2009) "Time-synchronized clustering of gene expression trajectories." Biostatistics 10, 32-45} -#' @export - -WFDA = function(Ly, Lt, optns = list()){ - - if(is.null(optns$isPWL)){ - optns$isPWL = TRUE - } - - if(is.null(optns$verbose)){ - optns$verbose = FALSE - } - - if(optns$isPWL){ - # Knot related checks - if(is.null(optns$nknots)){ - optns$nknots = 2; - } - if( !(optns$nknots %in% 1:7) ){ - stop("Number of knots should be between 1 and 7.") - } - } - - # Subsettig related checks - if(is.null(optns$subsetProp)){ - optns$subsetProp = 0.50; - } - if(findInterval(optns$subsetProp - .Machine$double.eps, c(0,1)) != 1){ - stop("Number of proportion used should be above 0 and at most 1.") - } - - # Averaging related checks - if(is.null(optns$choice)){ - optns$choice = 'truncated'; - } - if( !(optns$choice %in% c('truncated','weighted') )){ - stop("The estimation of warping functions can only be done by 'truncated' or 'weighted' average.") - } - - theCurrentRandomSeed <- .Random.seed #Store the current random seed to restore in the end of the function. - #Restore the current random seed to the state it had in the beginning of the function. - on.exit( .Random.seed <- theCurrentRandomSeed ) - - # Seed related checks - if(is.null(optns$seed)){ - optns$seed = 666; - } - if(!(is.numeric(optns$seed))) { - stop("The seed has to be numeric.") - } - - # Check the data validity for further analysis - CheckData(Ly,Lt) - inputData <- HandleNumericsAndNAN(Ly,Lt); - Ly <- inputData$Ly; - Lt <- inputData$Lt; - - # Set the options structure members that are still NULL - optnsFPCA = SetOptions(Ly, Lt, list()); - - if(optnsFPCA$dataType != 'Dense'){ - stop(paste0("The data has to be 'Dense' for WFDA to be relevant; the current dataType is : '", optnsFPCA$dataType,"'!") ) - } - - # Check the options validity for the PCA function. - numOfCurves = length(Ly); - CheckOptions(Lt, optnsFPCA,numOfCurves) - - ymat <- List2Mat(Ly, Lt) - N = nrow(ymat) - - obsGrid = sort(unique( c(unlist(Lt)))); - workGrid = (obsGrid - min(obsGrid))/ max(obsGrid - min(obsGrid)) # Same grid on [0,1] - M = length(workGrid) - - ## Super-norm normalization - maxAtTimeT = apply(ymat,1, function(u) max(abs(u))); - - ymatNormalised <- ymat / rep(maxAtTimeT, times = M) - - ## Mean function - smcObj = GetMeanDense(ymatNormalised, obsGrid, optnsFPCA) - - # mu: the smoothed mean curve evaluated at times 'obsGrid' - mu <- smcObj$mu - - if (is.null(optns$lambda)){ - Vy = sqrt(sum( apply(ymatNormalised,1, function(u) trapzRcpp(obsGrid, (u - mu)^2 ) ) )/(N-1)) - lambda = Vy*10^-4 - } else { - lambda <- optns$lambda - } - - numOfKcurves = min(round(optns$subsetProp * (N-1))) - hikMat <- array(dim = c(numOfKcurves,M,N) ) - distMat <- matrix( nrow = N, ncol = numOfKcurves) - hMat <- array(dim = c(N,M) ) - hInvMat <- array(dim = c(N,M) ) - alignedMat <- array(dim = c(N,M) ) - - getcurveJ <- function(tj, curvej){ - # approx(x = obsGrid, y = curvej, xout = tj)$y - RcppPseudoApprox(X = workGrid, Y = curvej, X_target = tj) - } - - theCost <- function(curvei, curvek,lambda,ti,tk){ - sum((getcurveJ(tk, curvek)-curvei)^2) + lambda * sum((tk-ti)^2) - } - - getHikRS <- function(curvei, curvek, lambda){ - myCosts <- sapply(1:numOfKcurves^2, function(u){ set.seed(u); - theCost(curvei, curvek, lambda, workGrid, c(0,Rcppsort(runif(M-2)) ,1)) }) - set.seed( which.min( myCosts ) ) - minCost <- min(myCosts) - return( c(0,Rcppsort(runif(M-2)),1) ) - } - - getSol <- function(x){ - #approx(x = seq(0,1, length.out = (2+ optns$nknots)), y = c(0, Rcppsort(x),1) ,n = M)$y - RcppPseudoApprox(X = seq(0,1, length.out = (2+ optns$nknots)), Y = c(0, Rcppsort(x),1), X_target = seq(0,1, length.out = M)) - } - - theCostOptim <- function(x , curvei, curvek,lambda,ti){ - tk = getSol(x); - sum((getcurveJ(tk, curvek)-curvei)^2) + lambda * sum((tk-ti)^2) - } - - getHikOptim <- function(curvei, curvek, lambda, minqaAvail ){ - s0 <- seq(0,1,length.out = (2+ optns$nknots))[2:(1+optns$nknots)] - if( !minqaAvail ) { - optimRes <- optim( par = s0, fn = theCostOptim, method = 'L-BFGS-B', - lower = rep(1e-6, optns$nknots), upper = rep(1 - 1e-6, optns$nknots), - curvei = curvei, curvek = curvek, lambda = lambda, ti =workGrid) - } else { - optimRes <- minqa::bobyqa( par = s0, fn = theCostOptim, - lower = rep(1e-6, optns$nknots), upper = rep(1 - 1e-6, optns$nknots), - curvei = curvei, curvek = curvek, lambda = lambda, ti =workGrid) - } - bestSol <- getSol(optimRes$par) - return( bestSol ) - } - - start <- Sys.time () - if( !is.element('minqa', installed.packages()[,1]) && optns$isPWL){ - warning("Cannot use 'minqa::bobyqa' to find the optimal knot locations as 'minqa' is not installed. We will do an 'L-BFGS-B' search.") - minqaAvail = FALSE - } else { - minqaAvail = TRUE - } - - for(i in seq_len(N)){ # For each curve - if(optns$verbose){ - cat('Computing pairwise warping for curve #:', i, ' out of', N, 'curves.\n') - } - set.seed( i + optns$seed ); - curvei = ymatNormalised[i,]; - candidateKcurves = sample(seq_len(N)[-i], numOfKcurves) - - for(k in seq_len(numOfKcurves)){ # For each of the candidate curves - if(!optns$isPWL){ - hikMat[k, ,i] = getHikRS(curvei, ymatNormalised[candidateKcurves[k],], lambda) - } else { - hikMat[k, ,i] = getHikOptim(curvei, ymatNormalised[candidateKcurves[k],], lambda, minqaAvail) - } - distMat[i,k] = mean( ( getcurveJ(tj =hikMat[k, ,i], curvei) - ymatNormalised[candidateKcurves[k]])^2 ) - } - - if(optns$choice == 'weighted'){ - hInvMat[i,] = apply(hikMat[, ,i] , 2, weighted.mean, 1/distMat[i,]) - } else { - hInvMat[i,] = apply(hikMat[ (distMat[i,] <= quantile( distMat[i,], p=0.90) ), ,i] , 2, mean) - } - - hMat[i,] = approx(y = workGrid, x = hInvMat[i,], xout = workGrid)$y - alignedMat[i,] = approx(x = workGrid, y = ymat[i,], xout = hMat[i,])$y - - } - - timing = Sys.time () - start - ret <- list(optns = optns, lambda = lambda, h = hMat, hInv = hInvMat, aligned = alignedMat, costs = rowMeans(distMat), timing = timing) - class(ret) <- 'WFDA' - - return(ret); -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/Wiener.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/Wiener.R deleted file mode 100644 index 6683cd26..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/Wiener.R +++ /dev/null @@ -1,53 +0,0 @@ -#' Simulate standard Wiener processes (Brownian motions) -#' -#' Simulate \code{n} standard Wiener processes on [0, 1], possibly -#' sparsifying the results. -#' -#' The algorithm is based on Karhunen-Loeve expansion. -#' -#' @param n Sample size. -#' @param pts A vector of points in [0, 1] specifying the support of the processes. -#' @param sparsify A vector of integers. The number of observations per curve will be uniform distribution on sparsify. -#' @param K The number of components. -#' -#' @return If \code{sparsify} is not specified, a matrix with \code{n} rows corresponding to the samples are returned. Otherwise the sparsified sample is returned. -#' -#' @seealso Sparsify -#' @export - -Wiener <- function(n=1, pts=seq(0, 1, length=50), sparsify=NULL, K=50) { - pts <- as.matrix(pts) - if (dim(pts)[1] < dim(pts)[2]) - pts <- t(pts) - - basis <- sqrt(2) * sin( pts %*% matrix(1:K - 1/2, 1, K) * pi ) - samp <- t(basis %*% diag(1 / (1:K - 1/2) / pi, K) %*% matrix(rnorm(K * n), K, n)) - - if (!is.null(sparsify)) { - samp <- Sparsify(samp, pts, sparsify) - } - - return(samp) - -} - -## sparsify samp -## samp: a matrix of samples, with rows containing the samples -## pts: a vector of grid points, should be from 0 to 1 -## sparsity: a vector of integers. The number of observation will be uniform distribution on sparsify. -#Sparsify <- function(samp, pts, sparsity) { -# if (length(sparsity) == 1) -# sparsity <- c(sparsity, sparsity) # avoid scalar case -# -# indEach <- lapply(1:nrow(samp), function(x) -# sort(sample(ncol(samp), sample(sparsity, 1)))) -# Lt <- lapply(indEach, function(x) pts[x]) -# Ly <- lapply(1:length(indEach), function(x) { -# ind <- indEach[[x]] -# y <- samp[x, ind] -# return(y) -# }) -# -# return(list(Lt=Lt, Ly=Ly)) -#} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCA.R deleted file mode 100644 index f3d43005..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCA.R +++ /dev/null @@ -1,250 +0,0 @@ -#' Fitted functional sample from FPCA object -#' -#' Combine the zero-meaned fitted values and the interpolated mean to get the fitted values for the trajectories or the derivatives of these trajectories. -#' Estimates are given on the work-grid, not on the observation grid. Use ConvertSupport to map the estimates to your desired domain. \code{100*(1-alpha)}-percentage coverage intervals, or bands, for trajectory estimates (not derivatives) are provided. See details in example. -#' -#' @param object A object of class FPCA returned by the function FPCA(). -#' @param K The integer number of the first K components used for the representation. (default: length(fpcaObj$lambda )) -#' @param derOptns A list of options to control the derivation parameters specified by \code{list(name=value)}. See `Details'. (default = NULL) -#' @param ciOptns A list of options to control the confidence interval/band specified by \code{list(name=value)}. See `Details'. (default = NULL) -#' -#' @return If \code{alpha} is \code{NULL}, \code{p>1} or functional observations are dense, an \code{n} by \code{length(workGrid)} matrix, each row of which contains a sample. Otherwise, it returns a list which consists of the following items: -#' \item{workGrid}{An evaluation grid for fitted values.} -#' \item{fitted}{An n by length(workGrid) matrix, each row of which contains a sample.} -#' \item{cvgUpper}{An n by length(workGrid) matrix, each row of which contains the upper \code{alpha}-coverage limit} -#' \item{cvgLower}{An n by length(workGrid) matrix, each row of which contains the lower \code{alpha}-coverage limit} -#' @details Available derivation control options are -#' \describe{ -#' \item{p}{The order of the derivatives returned (default: 0, max: 2)} -#' \item{method}{The method used to produce the sample of derivatives ('FPC' (default) or 'QUO'). See Liu and Mueller (2009) for more details} -#' \item{bw}{Bandwidth for smoothing the derivatives (default: p * 0.10 * S)} -#' \item{kernelType}{Smoothing kernel choice; same available types are FPCA(). default('epan')} -#' } -#' @details Available confidence interval/band control options are -#' \describe{ -#' \item{alpha}{Significant level for confidence interval/band for trajectory coverage. default=0.05 (currently only work when p=0)} -#' \item{cvgMethod}{Option for trajectory coverage method beween 'interval' and 'band'. default='band'} -#' } -#' @param ... Additional arguments -#' -#' @examples -#' set.seed(1) -#' n <- 100 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 5:10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -#' fittedY <- fitted(res, ciOptns = list(alpha=0.05)) -#' -#' workGrid <- res$workGrid -#' cvgUpper <- fittedY$cvgUpper -#' cvgLower <- fittedY$cvgLower -#' -#' par(mfrow=c(2,3)) -#' ind <- sample(1:n,6) -#' for (i in 1:6) { -#' j <- ind[i] -#' plot(workGrid,cvgUpper[j,],type='l',ylim=c(min(cvgLower[j,]),max(cvgUpper[j,])),col=4,lty=2, -#' xlab='t', ylab='X(t)', main=paste(j,'-th subject',sep='')) -#' points(workGrid,cvgLower[j,],type='l',col=4,lty=2) -#' points(res$inputData$Lt[[j]],res$inputData$Ly[[j]]) -#' } -#' -#' @references -#' \cite{Yao, F., Mueller, H.-G. and Wang, J.-L. "Functional data analysis for sparse longitudinal data", Journal of the American Statistical Association, vol.100, No. 470 (2005): 577-590.} -#' -#' \cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} -#' @export - -fitted.FPCA <-function (object, K = NULL, derOptns = list(p=0), ciOptns = list(alpha=NULL, cvgMethod=NULL), ...) { - ddd <- list(...) - if (!is.null(ddd[['k']])) { - K <- ddd[['k']] - warning("specifying 'k' is deprecated. Use 'K' instead!") - } - - derOptns <- SetDerOptions(fpcaObject = object, derOptns) - p <- derOptns[['p']] - method <- derOptns[['method']] - bw <- derOptns[['bw']] # - kernelType <- derOptns[['kernelType']] - - alpha <- ciOptns[['alpha']] - if (is.null(alpha)==FALSE) { - if (alpha <= 0 || alpha >= 1) { - stop("'fitted.FPCA()' is requested to use a significant level between 0 and 1.") - } - } - - cvgMethod <- ciOptns[['cvgMethod']] - if (is.null(cvgMethod)==TRUE) { - cvgMethod <- 'band' - } - - fpcaObj <- object - # if (class(fpcaObj) != 'FPCA'){ - # stop("fitted.FPCA() requires an FPCA class object as basic input") - # } - - if( is.null(K) ){ - K = length( fpcaObj$lambda ) - } else { - if( ( round(K)>=0) && ( round(K) <= length( fpcaObj$lambda ) ) ){ - K = round(K); - } else { - stop("'fitted.FPCA()' is requested to use more components than it currently has available. (or 'K' is smaller than 0)") - } - } - - if( ! (p %in% c(0,1,2))){ - stop("'fitted.FPCA()' is requested to use a derivative order other than p = {0,1,2}!") - } - - if( p < 1 ){ - - ZMFV = fpcaObj$xiEst[, seq_len(K), drop = FALSE] %*% t(fpcaObj$phi[, seq_len(K), drop = FALSE]); - IM = fpcaObj$mu - - if (is.null(alpha)==TRUE || fpcaObj$optns$dataType=='Dense') { - return( t(apply( ZMFV, 1, function(x) x + IM))) - } else { - - bwMu <- fpcaObj$bwMu - mu = fpcaObj$mu - phi = fpcaObj$phi - obsGrid = fpcaObj$obsGrid - workGrid = fpcaObj$workGrid - lambda = fpcaObj$lambda - # covSmooth <- fpcaObj$smoothedCov - - cvgUpper <- cvgLower <- matrix(nrow=nrow(fpcaObj$xiEst), ncol=length(workGrid)) - for (i in 1:nrow(fpcaObj$xiEst)) { - xHat <- mu + ZMFV[i,] - - muObs <- Lwls1D(bw = bwMu, kernelType, win = rep(1,length(workGrid)), - xin = workGrid, yin = mu, xout = (fpcaObj$inputData)$Lt[[i]]) - - phiObs <- apply(phi, 2, function(phiI) Lwls1D(bw = bwMu, kernelType, win = rep(1, length(workGrid)), - xin = workGrid, yin = phiI, xout = (fpcaObj$inputData)$Lt[[i]])) - # HI <- diag(lambda)%*%t(phiObs) - # - # indI <- match(fpcaObj$inputData$Lt[[i]],obsGrid) - # covObsI <- covSmooth[indI,indI] - # - # if (is.null(fpcaObj$sigma2)==TRUE || fpcaObj$sigma2==0) { - # tmpSigma2 <- max(c(0.01,abs(min(diag(covObsI))))) - # covObsI <- covObsI + tmpSigma2*diag(1,nrow=nrow(covObsI),ncol=ncol(covObsI)) - # } else { - # covObsI <- covObsI + fpcaObj$sigma2*diag(1,nrow=nrow(covObsI),ncol=ncol(covObsI)) - # } - # - # omegaI <- diag(lambda) - HI%*%solve(covObsI)%*%t(HI) - - omegaI <- fpcaObj$xiVar[[i]] - - tmp <- eigen(omegaI) - tmpA <- Re(tmp$vectors) - tmpB <- Re(tmp$values) - tmpB[which(tmpB<0)] <- 0 - - if (length(tmpB)==1) { - omegaI <- tmpA*tmpB*t(tmpA) - } else { - omegaI <- tmpA%*%diag(tmpB)%*%t(tmpA) - } - - - if (cvgMethod=='interval') { - cvgUpper[i,] <- xHat + stats::qnorm(1-alpha/2)*sqrt(diag(phi%*%omegaI%*%t(phi))) - cvgLower[i,] <- xHat + stats::qnorm(alpha/2)*sqrt(diag(phi%*%omegaI%*%t(phi))) - } else { - cvgUpper[i,] <- xHat + sqrt(stats::qchisq(1-alpha,K)*diag(phi%*%omegaI%*%t(phi))) - cvgLower[i,] <- xHat - sqrt(stats::qchisq(1-alpha,K)*diag(phi%*%omegaI%*%t(phi))) - } - } - - return(list( - workGrid = workGrid, - fitted = t(apply( ZMFV, 1, function(x) x + IM)), - cvgUpper = cvgUpper, - cvgLower = cvgLower - ) - ) - - } - } else { #Derivative is not zero - - if( K > SelectK( fpcaObj, FVEthreshold=0.95, criterion='FVE')$K ){ - warning("Potentially you use too many components to estimate derivatives. \n Consider using SelectK() to find a more informed estimate for 'K'."); - } - - if( is.null(method) ){ - method = 'FPC' - } - - mu = fpcaObj$mu - phi = fpcaObj$phi - obsGrid = fpcaObj$obsGrid - workGrid = fpcaObj$workGrid - - if ( method == 'FPC'){ - phi = apply(phi, 2, function(phiI) Lwls1D(bw = bw, kernelType, win = rep(1, length(workGrid)), - xin = workGrid, yin = phiI, xout = workGrid, npoly = p, nder = p)) - mu = Lwls1D(bw = bw, kernelType, win = rep(1, length(workGrid)), xin = workGrid, yin = mu, xout = workGrid, npoly = p, nder = p) - ZMFV = fpcaObj$xiEst[, seq_len(K), drop = FALSE] %*% t(phi[, seq_len(K), drop = FALSE]); - IM = mu - return( t(apply( ZMFV, 1, function(x) x + IM) )) - } - - if( method == 'QUO'){ - impSample <- fitted(fpcaObj, K = K); # Look ma! I do recursion! - return( t(apply(impSample, 1, function(curve) Lwls1D(bw = bw, kernelType, win = rep(1, length(workGrid)), - xin = workGrid, yin = curve, xout = workGrid, npoly = p, nder = p)))) - } else if (method == 'DPC') { - if (K > ncol(fpcaObj[['xiDer']])) { - stop('fpcaObj does not contain K columns!') - } - return(tcrossprod(fpcaObj[['xiDer']][, seq_len(K), drop=FALSE], - fpcaObj[['phiDer']][, seq_len(K), drop=FALSE])) - }else { - stop('You asked for a derivation scheme that is not implemented.') - } - } - -} - -getEnlargedGrid <- function(x){ - N <- length(x) - return ( c( x[1] - 0.1 * diff(x[1:2]), x, x[N] + 0.1 * diff(x[(N-1):N])) ) -} - -getDerivative <- function(y, t, ord=1){ # Consider using the smoother to get the derivatives - if( length(y) != length(t) ){ - stop("getDerivative y/t lengths are unequal.") - } - newt = getEnlargedGrid(t) # This is a trick to get first derivatives everywhere - newy = Hmisc::approxExtrap(x=t, y=y, xout= newt)$y - - if (ord == 1) { - der <- numDeriv::grad( stats::splinefun(newt, newy) , x = t ) - } else if (ord == 2) { - der <- sapply(t, function(t0) - numDeriv::hessian( stats::splinefun(newt, newy) , x = t0 ) - ) - } - - return(der) -} - -getSmoothCurve <- function(t, ft, GCV = FALSE, kernelType = 'epan', mult = 1){ - myBw = ifelse( GCV, GCVLwls1D1( yy= ft, tt =t, npoly=1, nder=0, dataType='Sparse', kernel=kernelType)[['bOpt']] , - CVLwls1D( y= ft, t = t, npoly=1, nder=0, dataType='Sparse', kernel=kernelType, kFolds = 10)) - myBw <- myBw * mult - smoothCurve = Lwls1D(bw = myBw, kernel_type= kernelType, win = rep(1, length(t)), yin = ft, xout = t, xin= t) - return(smoothCurve) -} - - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCAder.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCAder.R deleted file mode 100644 index 723e624c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/fitted.FPCAder.R +++ /dev/null @@ -1,63 +0,0 @@ -#' Fitted functional sample from FPCAder object -#' -#' Combine the zero-meaned fitted values and the mean derivative to get the fitted values for the derivatives trajectories -#' Estimates are given on the work-grid, not on the observation grid. Use ConvertSupport to map the estimates to your desired domain. -#' -#' @param object A object of class FPCA returned by the function FPCA(). -#' @param K The integer number of the first K components used for the representation. (default: length(derObj$lambda )) -#' @param ... Additional arguments -#' -#' @return An \code{n} by \code{length(workGrid)} matrix, each row of which contains a sample. -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -# #' res <- FPCA(sampWiener$Ly, sampWiener$Lt, -# #' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -# #' fittedY <- fitted(res) -#' @references -#' \cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} -#' @export - - -fitted.FPCAder <- function (object, K = NULL, ...) { - ddd <- list(...) - if (!is.null(ddd[['k']])) { - K <- ddd[['k']] - warning("specifying 'k' is deprecated. Use 'K' instead!") - } - - derObj <- object - # if (class(derObj) != 'FPCA'){ - # stop("fitted.FPCA() requires an FPCA class object as basic input") - # } - method <- derObj[['derOptns']][['method']] - - if (substr(method, 1, 3) == 'DPC') { - maxK <- length(derObj[['lambdaDer']]) - } else { - maxK <- length(derObj[['lambda']]) - } - - if( is.null(K)) { - K <- maxK - } else if (abs(K - round(K)) > 1e-5 || K <= 0) { - stop("'K' needs to be a positive integer") - } else if (K > maxK) { - stop("'fitted.FPCAder()' is requested to use more components than it currently has available.") - } - - if (substr(method, 1, 3) == 'DPC') { - fit <- tcrossprod(derObj[['xiDer']][, seq_len(K), drop=FALSE], - derObj[['phiDer']][, seq_len(K), drop=FALSE]) - } else if (substr(method, 1, 3) == 'FPC') { - fit <- tcrossprod(derObj[['xiEst']][, seq_len(K), drop=FALSE], - derObj[['phiDer']][, seq_len(K), drop=FALSE]) - } - fit <- fit + matrix(derObj[['muDer']], nrow(fit), ncol(fit), byrow=TRUE) - - return(fit) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/kCFC.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/kCFC.R deleted file mode 100644 index 5bdd2b79..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/kCFC.R +++ /dev/null @@ -1,113 +0,0 @@ -#' Functional clustering and identifying substructures of longitudinal data using kCFC. -#' -#' @param y A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}). -#' @param t A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. -#' @param k A scalar defining the number of clusters to define; default 3. Values that define very small clusters (eg.cluster size <=3) will potentiall err. -#' @param kSeed A scalar valid seed number to ensure replication; default: 123 -#' @param maxIter A scalar defining the maximum number of iterations allowed; default 20, common for both the simple kmeans initially and the subsequent k-centres -#' @param optnsSW A list of options control parameters specified by \code{list(name=value)} to be used for sample-wide FPCA; by default: "list( methodMuCovEst ='smooth', FVEthreshold= 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'. -#' @param optnsCS A list of options control parameters specified by \code{list(name=value)} to be used for cluster-specific FPCA; by default: "list( methodMuCovEst ='smooth', FVEthreshold= 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'. -#' -#' @return A list containing the following fields: -#' \item{cluster}{A vector of levels 1:k, indicating the cluster to which each curve is allocated.} -#' \item{fpcaList}{A list with the fpcaObj for each separate cluster.} -#' \item{iterToConv}{A number indicating how many iterations where required until convergence.} -#' -#' @examples -#' data(medfly25) -#' Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -#' kcfcObj <- kCFC(Flies$Ly[1:250], Flies$Lt[1:250], # using only 250 for speed consideration -#' optnsSW = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), -#' optnsCS = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.70)) -#' @references -#' \cite{Jeng-Min Chiou, Pai-Ling Li, "Functional clustering and identifying substructures of longitudinal data." Journal of the Royal Statistical Society 69 (2007): 679-699} -#' @export - -kCFC = function(y, t, k = 3, kSeed = 123, maxIter = 125, - optnsSW = list( methodMuCovEst = 'smooth', FVEthreshold = 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV'), - optnsCS = list( methodMuCovEst = 'smooth', FVEthreshold = 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV')){ - - if( (k <2) || (floor(length(y)*0.5) < k) ){ - warning("The value of 'k' is outside [2, 0.5*N]; reseting to 3.") - } - if(maxIter <1){ - stop("Please allow at least 1 iteration.") - } - - ## First FPCA - fpcaObjY <- FPCA(y, t, optnsSW) - N <- length(y) - if( fpcaObjY$optns$dataType == 'Sparse' ){ - stop(paste0("The data has to be 'Dense' for kCFC to be relevant; the current dataType is : '", fpcaObjY$optns$dataType,"'!") ) - } - - ## Initial clustering and cluster-associated FPCAs - if(!is.null(kSeed)){ - set.seed(kSeed) - } - initialClustering <- kmeans( fpcaObjY$xiEst, centers = k, algorithm = "MacQueen", iter.max = maxIter) - clustConf0 <- as.factor(initialClustering$cluster) - indClustIds <- lapply(levels(clustConf0), function(u) which(clustConf0 == u) ) - if( any( min( sapply( indClustIds, length)) <= c(3)) ){ - stop(paste0("kCFC stopped during the initial k-means step. The smallest cluster has three (or less) curves. " , - "Consider using a smaller number of clusters (k) or a different random seed (kSeed).")) - } - listOfFPCAobjs <- lapply(indClustIds, function(u) FPCA(y[u], t[u], optnsCS) ) - - ## Iterative clustering - ymat <- List2Mat(y,t); - convInfo <- "None" - clustConf <- list() - - for(j in seq_len(maxIter)){ - - # Get new costs and relevant cluster configuration - iseCosts <- sapply(listOfFPCAobjs, function(u) GetISEfromFPCA(u, ymat)) - clustConf[[j]] <- as.factor(apply(iseCosts, 1, which.min)) - - # Check that clustering progressed reasonably - #ie. Still having k clster AND the minimum cluster size is reasonable - if( (length(unique(clustConf[[j]])) < k) || any( min(summary(clustConf[[j]])) <= c(0.01 * N,3))){ - convInfo <- ifelse( length(unique(clustConf[[j]])) < k , "LostCluster", "TinyCluster") - break; - } - # Check if algorithm converged - if( (j>1) && any(sapply(clustConf[1:(j-1)], function(u) all(u == clustConf[[j]]))) ){ - convInfo <- "WeMadeIt!" - break; - } - - indClustIds <- lapply(levels(clustConf[[j]]), function(u) which(clustConf[[j]] == u) ) - listOfFPCAobjs <- lapply(indClustIds, function(u) FPCA(y[u], t[u], optnsCS) ) - curvesThatChanged <- ifelse(j > 1, sum(!( as.numeric(clustConf[[j]]) == as.numeric(clustConf[[j-1]] ))), - sum(!( as.numeric(clustConf[[j]]) == as.numeric(clustConf0)))) - } - - if(convInfo == 'None'){ - warning(paste0( 'FkC did not converge after maxIter = ', maxIter, ' iterations. ', curvesThatChanged, ' curve(s) are undecided.')) - } - if(convInfo == 'TinyCluster'){ - warning(paste0("kCFC did not fully converge. It stopped because the smallest cluster has ", - "less than 1% of the samples' curves. Consider using a smaller number of clusters.")) - } - if(convInfo == 'LostCluster'){ - warning(paste0("kCFC did not fully converge. It stopped because it 'lost a cluster'. Consider using a smaller number of clusters.")) - } - - kCFCobj <- list(cluster = clustConf[[j]], fpcaList = listOfFPCAobjs, iterToConv = j-1, prevConf = clustConf, clustConf0 = clustConf0) - class(kCFCobj) <- 'kCFCobj' - return( kCFCobj ) -} - -GetISEfromFPCA = function(fpcaObj,ymat){ - # First get the fitted curves for all the sample based on the mu/phi/lambda/sigma2 - # of 'fpcaObj' and then calculate their associated ISE; 'iseCost' is a n-dim vector. - phiObs <- ConvertSupport(fpcaObj$workGrid, fpcaObj$obsGrid, phi=fpcaObj$phi) - muObs <- ConvertSupport(fpcaObj$workGrid, fpcaObj$obsGrid, mu=fpcaObj$mu) - - numIntResults <- GetINScores(ymat = ymat, t = fpcaObj$obsGrid, optns = fpcaObj$optns, mu = muObs, - lambda = fpcaObj$lambda, phi = phiObs, sigma2 = fpcaObj$sigma2) - - iseCost <- apply((numIntResults[['fittedY']] - ymat)^2, 1, function(y) {notNA <- !is.na(y); trapzRcpp(X = fpcaObj$obsGrid[notNA], Y = y[notNA])}) - return( iseCost ) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/medfly25.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/medfly25.R deleted file mode 100644 index a01decc7..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/medfly25.R +++ /dev/null @@ -1,20 +0,0 @@ -#' Number of eggs laid daily from medflies -#' -#' A dataset containing the eggs laid from 789 medflies (Mediterranean fruit flies, -#' Ceratitis capitata) during the first 25 days of their lives. This is a subset of -#' the dataset used by Carey at al. (1998); only flies having lived at least 25 days -#' are shown. At the end of the recording period all flies were still alive. -#' -#' @name medfly25 -#' @docType data -#' @format A data frame with 19725 rows and 3 variables: -#' \describe{ -#' \item{ID}{: Medfly ID according to the orignal dataset} -#' \item{Days}{: Day of measurement} -#' \item{nEggs}{: Number of eggs laid at that particular day} -#' \item{nEggsRemain}{: Remaining total number of eggs laid} -#' } -#' @source \url{http://anson.ucdavis.edu/~mueller/data/medfly1000.html} -#' @references -#' {Carey, J.R., Liedo, P., Mueller, H.G., Wang, J.L., Chiou, J.M. (1998). Relationship of age patterns of fecundity to mortality, longevity, and lifetime reproduction in a large cohort of Mediterranean fruit fly females. J. of Gerontology --Biological Sciences 53, 245-251. } -NULL diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/pkgname.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/pkgname.R deleted file mode 100644 index 0118d05d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/pkgname.R +++ /dev/null @@ -1,42 +0,0 @@ -#' PACE: Principal Analysis by Conditional Expectation -#' -#' PACE package for Functional Data Analysis and Empirical Dynamics. -#' -#' PACE is a versatile package that provides implementation of various methods -#' of Functional Data Analysis (FDA) and Empirical Dynamics. The core of this -#' package is Functional Principal Component Analysis (FPCA), a key technique -#' for functional data analysis, for sparsely or densely sampled random -#' trajectories and time courses, via the Principal Analysis by Conditional -#' Estimation (PACE) algorithm. PACE is useful for the analysis of data that -#' have been generated by a sample of underlying (but usually not fully -#' observed) random trajectories. It does not rely on pre-smoothing of -#' trajectories, which is problematic if functional data are sparsely sampled. -#' PACE provides options for functional regression and correlation, for -#' Longitudinal Data Analysis, the analysis of stochastic processes from -#' samples of realized trajectories, and for the analysis of underlying -#' dynamics. -#' -#' -#' @author -#' Xiongtao Dai \email{dai@@ucdavis.edu}, -#' Pantelis Z. Hadjipantelis \email{pantelis@@ucdavis.edu}, -#' Hao Ji \email{haoji@@ucdavis.edu} -#' Hans-Georg Mueller \email{hgmueller@@ucdavis.edu} -#' Jane-Ling Wang \email{janelwang@@ucdavis.edu} -#' -#' Maintainer: Pantelis Z. Hadjipantelis \email{pantelis@@ucdavis.edu} -#' -#' @docType package -#' @name fdapace -#' @useDynLib fdapace -#' @import Rcpp -#' @importFrom Matrix Matrix -#' @importFrom Hmisc approxExtrap -#' @importFrom pracma meshgrid midpoint mod ones uniq -#' @importFrom numDeriv grad hessian -#' @importFrom grDevices colorRampPalette dev.new palette -#' @importFrom graphics abline barplot boxplot grid legend lines matlines matplot par plot points polygon -#' @importFrom stats aggregate approx approxfun cov dist fitted kmeans lm median na.omit optim predict quantile rnorm runif spline var sd poly weighted.mean cor dunif -#' @importFrom utils installed.packages -#' @importFrom MASS isoMDS mvrnorm -NULL diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/plot.FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/plot.FPCA.R deleted file mode 100644 index 2ae892bf..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/plot.FPCA.R +++ /dev/null @@ -1,121 +0,0 @@ -#' Plot an FPCA object. -#' -#' This function plot the results for an FPCA. It prints the design plot, mean function, scree-plot -#' and the first three eigenfunctions of a sample. If provided with a derivative options object (?FPCAder) it will return the -#' differentiated mean and first two principal modes of variations for 50\%, 75\%, 100\%, 125\% and 150\% of the defined bandwidth choice. -#' -#' @param x An FPCA class object returned by FPCA(). -#' @param openNewDev A logical specifying if a new device should be opened - default: FALSE -#' @param addLegend A logical specifying whether to add legend. -#' -#' @details The black, red, and green curves stand for the first, second, and third eigenfunctions, respectively. -#' \code{plot.FPCA} is currently implemented only for the original function, but not a derivative FPCA object. - -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, -#' list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -#' plot(res1) -#' @export -plot.FPCA <- function(x, openNewDev = FALSE, addLegend=TRUE, ...){ - - fpcaObj <- x - - oldPar <- par(no.readonly=TRUE) - if (any(oldPar[['pin']] < 0)) { - stop('Figure margin too large') - } else { - on.exit(par(oldPar)) - } - - if(!'FPCA' %in% class(fpcaObj)) { - stop("Input class is incorrect; plot.FPCA() is only usable for FPCA objects.") - } else { - - #if(is.null(derOptns) || !is.list(derOptns)){ - t = fpcaObj$inputData$Lt - if(openNewDev){ - dev.new(width=6.2, height=6.2, noRStudioGD=TRUE) ; - } - fves = fpcaObj$cumFVE - mu = fpcaObj$mu - obsGrid = fpcaObj$obsGrid - workGrid = fpcaObj$workGrid - - par(mfrow=c(2,2)) - - ## Make Design plot - CreateDesignPlot(t, addLegend=addLegend, noDiagonal=fpcaObj$optns$error) - - ## Make Mean trajectory plot - plot( workGrid, mu, type='l', xlab='s',ylab='', main='Mean Function', panel.first = grid(), axes = TRUE) - - ## Make Scree plot - CreateScreePlot(fpcaObj); - - ## Make Phi plot - K = ncol(fpcaObj$phi); - k =1; - if(K>3){ - k = 3; - } else { - k = K; - } # paste(c("First ", as.character(3), " eigenfunctions"),collapse= '') - if (addLegend) { - ## pin does not work for Rstudio - # newpin <- par()[['pin']] - # newpin[1] <- newpin[1] * 0.8 - # par(pin = newpin) - newplt <- par()[['plt']] - newplt[2] <- newplt[1] + 0.85 * (newplt[2] - newplt[1]) - par(plt=newplt) - } - matplot(workGrid, fpcaObj$phi[,1:k], type='n', - main=paste(collapse='', c("First ", as.character(k), " Eigenfunctions")) , xlab='s', ylab='') - abline(h=0, col='gray9') - grid() - matlines(workGrid, fpcaObj$phi[,1:k] ) - pars <- par() - if (addLegend) { - legend("right", col=1:k, lty=1:k, legend = do.call(expression, sapply(1:k, function(u) return(bquote(phi[ .(u) ])))), border = FALSE, xpd=TRUE, inset=-pars[['mai']][4] / pars[['pin']][1] * 1.8, seg.len=1.2) - } - # } else { - # - # derOptns <- SetDerOptions(fpcaObj,derOptns = derOptns) - # p <- derOptns[['p']] - # method <- derOptns[['method']] - # bw <- derOptns[['bw']] - # kernelType <- derOptns[['kernelType']] - # k <- derOptns[['k']] - # if(p==0){ - # stop("Derivative diagnostics are inapplicable when p = 0") - # } - # - # bwMultipliers = seq(0.50,1.5,by=0.25) - # yy = lapply( bwMultipliers * bw, function(x) FPCAder(fpcaObj, list(p=p, method = method, kernelType = kernelType, k = k, bw = x))) - # - # par(mfrow=c(1,3)) - # - # Z = rbind(sapply(1:5, function(x) yy[[x]]$muDer)); - # matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', mu, "/ds")), - # main= substitute(paste("Derivatives of order ", p, " of ", mu)), xlab = 's') - # grid(); legend('topright', lty = 1, col=1:5, legend = apply( rbind( rep('bw: ',5), bwMultipliers * bw), 2, paste, collapse = '')) - # - # Z = rbind(sapply(1:5, function(x) yy[[x]]$phiDer[,1])); - # matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', phi[1], "/ds")), - # main= substitute(paste("Derivatives of order ", p, " of ", phi[1])), xlab = 's') - # grid(); legend('topright', lty = 1, col=1:5, legend = apply( rbind( rep('bw: ',5), bwMultipliers * bw), 2, paste, collapse = '')) - # - # Z = rbind(sapply(1:5, function(x) yy[[x]]$phiDer[,2])); - # matplot(x = fpcaObj$workGrid, lty= 1, type='l', Z, ylab= expression(paste(collapse = '', 'd', phi[2], "/ds")), - # main= substitute(paste("Derivatives of order ", p, " of ", phi[2])), xlab = 's') - # grid(); legend('topleft', lty = 1, col=1:5, legend = apply( rbind( rep('bw: ',5), bwMultipliers * bw), 2, paste, collapse = '')) - - } -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/predict.FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/predict.FPCA.R deleted file mode 100644 index 7b91a51a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/predict.FPCA.R +++ /dev/null @@ -1,96 +0,0 @@ -#' Predict FPC scores for a new sample given an FPCA object -#' -#' Return a matrix with the first K FPC scores according to conditional expectation or numerical integration. -#' -#' @param object An FPCA object. -#' @param newLy A list of \emph{n} vectors containing the observed values for each individual. -#' @param newLt A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. -#' @param sigma2 The user-defined measurement error variance. A positive scalar. (default: rho if applicable, otherwise sigma2 if applicable, otherwise 0 if no error. ) -#' @param K The scalar defining the number of clusters to define; (default: 1). -#' @param xiMethod The integration method used to calculate the functional principal component scores ( standard numerical integration 'IN' or conditional expectation 'CE'); default: 'CE'. -#' @param ... Not used. -#' -#' @return A matrix of size n-by-K -#' -#' @examples -#' set.seed(1) -#' n <- 50 -#' pts <- seq(0, 1, by=0.05) -#' # The first n samples are for training and the rest testing -#' sampWiener <- Wiener(2 * n, pts) -#' sparsity <- 2:5 -#' train <- Sparsify(sampWiener[seq_len(n), , drop=FALSE], pts, sparsity) -#' test <- Sparsify(sampWiener[seq(n + 1, 2 * n), , drop=FALSE], pts, sparsity) -#' res <- FPCA(train$Ly, train$Lt) -#' pred <- predict(res, test$Ly, test$Lt, K=5) -#' plot(pred[, 1], pred[, 2]) -#' -#' @method predict FPCA -#' @export - -predict.FPCA <- function(object, newLy, newLt, sigma2 = NULL, K = 1, xiMethod = 'CE', ...){ - fpcaObj = object; - - if(class(fpcaObj) != "FPCA"){ - stop('Please provide a valid FPCA object.') - } - - if(! all.equal( sapply(newLt, length), sapply(newLy, length) ) ){ - stop('The size of the vectors in newLt and newLy differ. They must be equal.') - } - - # Standard data checks/massasing as in FPCA() - CheckData(newLy, newLt) - inputData <- HandleNumericsAndNAN(Lt = newLt, Ly = newLy); - newLy <- inputData$Ly; - newLt <- inputData$Lt; - - if(is.null(sigma2)){ - sigma2 <- ifelse( !is.null(fpcaObj$rho), fpcaObj$rho, - ifelse( !is.null(fpcaObj$sigma2), fpcaObj$sigma2, - ifelse( !fpcaObj$optns$error, 0, stop('sigma2 cannot be determined.')))) - } else { - if(!is.numeric(sigma2) ){ - stop('sigma2 is not numeric, we sure about this? :D') - } - } - - if(K > fpcaObj$selectK){ - stop( paste0( collapse = '', 'You cannot get FPC scores for more components than what is already available. (', fpcaObj$selectK ,').' )) - } - - if( !(xiMethod %in% c('CE','IN')) ){ - stop( paste0( collapse = '', 'Unrecognised method to calculate the FPC scores.')) - } - if( (fpcaObj$optns$dataType == 'Sparse') && (xiMethod == 'IN')){ - stop( 'Trapezoid Numerical intergration (IN) is invalid for sparse data.') - } - - rangeOfOrigData <- range(unlist(fpcaObj$workGrid)) - rangeOfNewData <- range(unlist(newLt)) - - if(rangeOfNewData[1] < rangeOfOrigData[1]){ - stop("The new data's lower range is below the original data's lower range.") - } else{ - if(rangeOfNewData[2] > rangeOfOrigData[2]){ - stop("The new data's upper range is above the original data's upper range.") - } - } - - MuObs = ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = fpcaObj$obsGrid, mu = fpcaObj$mu) - CovObs = ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = fpcaObj$obsGrid, Cov = fpcaObj$fittedCov) - PhiObs = ConvertSupport(fromGrid = fpcaObj$workGrid, toGrid = fpcaObj$obsGrid, phi = fpcaObj$phi) - - # Get scores - if ( xiMethod == 'CE') { - scoresObj <- GetCEScores(y = newLy, t = newLt, optns = fpcaObj$optns, mu = MuObs, obsGrid = fpcaObj$obsGrid, sigma2 = sigma2, - fittedCov = CovObs, lambda = fpcaObj$lambda, phi = PhiObs) - finalXiEst <- t(do.call(cbind, scoresObj['xiEst', ]))[, seq_len(K), drop=FALSE] - } else if (xiMethod == 'IN') { - ymat = List2Mat(newLy,newLt) - scoresObj <- GetINScores(ymat = ymat, t = newLt,optns = fpcaObj$optns,mu = MuObs,lambda =fpcaObj$lambda ,phi = PhiObs,sigma2 = sigma2) - finalXiEst <- scoresObj$xiEst[, seq_len(K), drop=FALSE] - } - - return(finalXiEst) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FPCA.R deleted file mode 100644 index 29e0487b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FPCA.R +++ /dev/null @@ -1,31 +0,0 @@ -#' Print an FPCA object -#' -#' Print a simple description of an FPCA object -#' -#' @param x An FPCA object. -#' @param ... Not used. -#' -#' @examples -#' set.seed(1) -#' n <- 20 -#' pts <- seq(0, 1, by=0.05) -#' sampWiener <- Wiener(n, pts) -#' sampWiener <- Sparsify(sampWiener, pts, 10) -#' res <- FPCA(sampWiener$Ly, sampWiener$Lt) -#' res -#' -#' @method print FPCA -#' @export -print.FPCA <- function(x, ...){ - obj = x; - cat(paste0("Functional Principal Components Object for ", tolower(obj$optns$dataType), " data.\n\n")) - cat(paste0("The optimal number of components selected is: ", length(obj$lambda), ", and \nthe first K (<=3) eigenvalues are: ")) - if ( length(obj$lambda) < 4) { - cat(paste0( round(obj$lambda,3) ,"\n")) - } else { - cat(paste0( round(obj$lambda[1:3],3) ,"\n")) - } -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FSVD.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FSVD.R deleted file mode 100644 index b01de9a4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.FSVD.R +++ /dev/null @@ -1,32 +0,0 @@ -#' Print an FSVD object -#' -#' Print a simple description of an FSVD object -#' -#' @param x An FSVD object. -#' @param ... Not used. -#' -#' @method print FSVD -#' @export -print.FSVD <- function(x, ...){ - obj = x; - thisDataType <- NULL - if(obj$optns$SVDopts$dataType1 == 'Dense' && obj$optns$SVDopts$dataType2 == 'Dense'){ - thisDataType <- 'Dense' - } else { - thisDataType <- 'Sparse' - } - if(obj$optns$SVDopts$dataType1 == 'DenseWithMV' && obj$optns$SVDopts$dataType2 == 'DenseWithMV'){ - thisDataType <- 'DenseWithMV' - } - - cat(paste0("Functional Singular Value Decomposition object for ", tolower(thisDataType), " data.\n\n")) - cat(paste0("The optimal number of components selected is: ", length(obj$sValues)," and \nthe first K (<=3) singular values are: ")) - if ( length(obj$sValues) < 4) { - cat(paste0( round(obj$sValues,3) ,"\n")) - } else { - cat(paste0(round(obj$sValues[1:3],3) ,"\n")) - } -} - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.WFDA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/print.WFDA.R deleted file mode 100644 index d4d9c461..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/print.WFDA.R +++ /dev/null @@ -1,18 +0,0 @@ -#' Print a WFDA object -#' -#' Print a simple description of a WFDA object -#' -#' @param x A WFDA object. -#' @param ... Not used. -#' -#' @method print WFDA -#' @export -print.WFDA <- function(x, ...){ - obj = x; - - cat(paste0("Warped Functional Data Analysis object for ", length(obj$costs), " curves.\n\n")) - cat(paste0("The penalty parameter used was: ", signif(obj$lambda,6), ", the warping functions ", - ifelse(obj$optns$isPWL,"are ", "are not"), "piece-wise linear \n", - "and the pairwise warping was done using the ", obj$optns$choice, " averages of the warped curves.\n" )) -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/R/str.FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/R/str.FPCA.R deleted file mode 100644 index 339b0e6f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/R/str.FPCA.R +++ /dev/null @@ -1,10 +0,0 @@ -#' Compactly display the structure of an FPCA object -#' -#' @param object An FPCA object -#' @param ... Not used -#' -#' @export -str.FPCA <- function(object, ...) { - fpcaObj <- object - NextMethod(max.level=1) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/README.md b/fdapace.Rcheck/00_pkg_src/fdapace/README.md deleted file mode 100644 index aca1c48d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/README.md +++ /dev/null @@ -1,26 +0,0 @@ - -PACE package for Functional Data Analysis and Empirical Dynamics -==== - -[![Build Status](https://travis-ci.org/functionaldata/tPACE.svg?branch=master)](https://travis-ci.org/functionaldata/tPACE) -[![cran version](http://www.r-pkg.org/badges/version/fdapace)](https://cran.r-project.org/web/packages/fdapace) -[![downloads](http://cranlogs.r-pkg.org/badges/fdapace)](http://cranlogs.r-pkg.org/badges/fdapace) -[![total downloads](http://cranlogs.r-pkg.org/badges/grand-total/fdapace)](http://cranlogs.r-pkg.org/badges/grand-total/fdapace) - -## Installation of the current development version -You can install the development version of the package in R using: -``` -devtools::install_github("functionaldata/tPACE") -``` - -## Installation of the latest CRAN release -You can install the package in R using: -``` -install.packages("fdapace") -``` - -## Load Package and Data -Once installed you can load the package with: -``` -library(fdapace) -``` diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/build/vignette.rds b/fdapace.Rcheck/00_pkg_src/fdapace/build/vignette.rds deleted file mode 100644 index 63da3e5a0e1074e2f09ff6b860f05fb8de45cc3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmV;|04V<-iwFP!000001B>8dU|?WkU}j}vU}6R`nT3G_8xRWsF(U&D11FH?OG`;C zNK8%*%S_h`%1uF&75B_5DaubNO)kmI&r>MLSAeQUQ^t>ENJdF+4w^I%vK>Gt34`Sz zYJh-+2}vz$USe))F`5DFE~y2nc_|>_f7tai{zuco;hkDpo?ishgQA8Fs)ofaGba^h zZ%AedoWmU8;s#|h2BEtF!+aF?a~9>7>%siM3yOdSAn_jv&^?-*lUR)IQLdE4l0?0< RBA|Ydy8&q=+(E(t0012rR;mC1 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/data/medfly25.RData b/fdapace.Rcheck/00_pkg_src/fdapace/data/medfly25.RData deleted file mode 100644 index c0c1f8c8f023ede48371b6acff2e13a358a4ae44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23336 zcmeFY`6HX__wJv>Oi@)qO{KflmKbW+JQP)X@3wS!o0Xs%t(lrdf?~HxX?F+IT)Wj> zLt>tZA)%vdo2y4PBd21*?8UoWBc zPO%p6-y@B^jofz6doSre{p#}i%G~*^$_Aa#XAO^~|GqPMr?(C(oc;-ler!BR5EzOc znM6vTNil{RpAiBJDT-f-?>r3 zVl2c6VB7bApu4rd8ct9K)Ser8*&$< zdlXs*Knc6+;*J4dOJMDguRvADppAfFVWs2HYQU&OZz<`H1=IUG@n83IhPMJ|goy@5U_aZ)1O(?B0xoW2xO2ekJQpf5)w3v*+D z0vlk8J(7Bywgl?1LsE~?TtFS3NU}JS0@}+4U=(OEpbj4-Re{D4j!y@KAE$9d;$Hy5 z!88b{!v)za!HfmYp2M{Zb58+hA-E)AZUAsr2geuY$^&Qhabm*UQh)}S<}AWB0t&p5 z-A8GsK*|3?b|0q&fc9PiG!$v_pyXRfX9*@knA-p-k)vTmxGF$v9UN7HnE({{AoazW z4nTn|^6kcAdj@i!&j>E(oq$k{J%#YX=-?;^Kt4HGqS2 zID`b#3Yc;dcOcHR2d4aj%NZ-b2O1atAVtzXq~(mb!A<1vple|06Tm*`ngX;9U?i+` z6#5=eFPwJ@=MAJwU@svvK)T1EwScR_?q_gOz!RXVqtJJNN?~^h?gUU aqx4xEs} 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 H1Y!RNF93JS diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/deleted_files b/fdapace.Rcheck/00_pkg_src/fdapace/deleted_files deleted file mode 100644 index 5e04bf78..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/deleted_files +++ /dev/null @@ -1,15 +0,0 @@ -M DESCRIPTION -M R/CreateDesignPlot.R -A R/DynCorr.R -A R/Dyn_test.R -D R/TVAM.R -M R/WFDA.R -M man/CreateDesignPlot.Rd -A man/DynCorr.Rd -A man/Dyn_test.Rd -D man/TVAM.Rd -M man/WFDA.Rd -A tests/testthat/test_DynCorr.R -A tests/testthat/test_Dyn_test.R -D tests/testthat/test_TVAM.R -M tests/testthat/test_WFDA.R diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/file_history b/fdapace.Rcheck/00_pkg_src/fdapace/file_history deleted file mode 100644 index 39a2cf17..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/file_history +++ /dev/null @@ -1,11961 +0,0 @@ -commit 96ec47d15e807d745ea0553ee3d423123d45f114 -Merge: 84cdaac c941c4e -Author: yqgchen -Date: Wed Mar 20 23:36:03 2019 -0700 - - Merge pull request #43 from functionaldata/tv-additive - - merge TVAM - -commit 84cdaac531df4823cb67470c485a0ee18e106be7 -Merge: fefad3f 838a363 -Author: yqgchen -Date: Wed Mar 20 22:30:07 2019 -0700 - - Merge pull request #44 from functionaldata/revert-tvam - - revert tvam on the master - -commit 838a36358de4aa07c152d7735f3cad9bee222115 -Author: yqgchen -Date: Wed Mar 20 21:55:06 2019 -0700 - - revert tvam on the master - -M NAMESPACE -M man/FPCquantile.Rd -D tests/testthat/test_TVAM.R - -commit c941c4e7c73fa310c349864d176f8587d692f714 -Author: yqgchen -Date: Wed Mar 20 18:27:10 2019 -0700 - - add back TVAM R and Rd files - -A R/TVAM.R -A man/TVAM.Rd - -commit 9619813b3f923ee9e379808b122ec97d44b42d20 -Author: yqgchen -Date: Wed Mar 20 18:25:38 2019 -0700 - - rm TVAM R and Rd files - -D R/TVAM.R -D man/TVAM.Rd - -commit fefad3f4ff64996f72ba7f4a61f795e267e64aa1 -Merge: 0d984c6 0bf4f2f -Author: yqgchen -Date: Wed Mar 20 18:16:10 2019 -0700 - - solve conflicts on TVAM merging - -commit 0bf4f2f556feafd3f7b54124895cfd643fe76972 -Author: hadjipantelis -Date: Wed Mar 20 08:47:32 2019 +0000 - - Minor changes and ver bump - -M DESCRIPTION -M NAMESPACE -M R/CreateBWPlot.R -M R/FPCA.R -M R/TVAM.R -M man/CreateBWPlot.Rd -M man/TVAM.Rd - -commit 610ff066b4c59959f6c51e86e08420ffa0aa7e28 -Author: Cody Carroll -Date: Tue Mar 5 17:01:00 2019 -0800 - - tvam unit test fix - -M tests/testthat/test_TVAM.R - -commit 8bb30b5e9b66a4a705d296bff4737e2bbf079849 -Merge: b95fa5e bf6ef49 -Author: Cody Carroll -Date: Tue Mar 5 16:18:40 2019 -0800 - - Merge branch 'tv-additive' of https://github.com/functionaldata/tPACE into tv-additive - e - -commit b95fa5e1fbe3eb25ecc640d6881c19a882acb708 -Author: Cody Carroll -Date: Tue Mar 5 16:18:11 2019 -0800 - - checking issues with unit test - -M tests/testthat/test_TVAM.R - -commit bf6ef4929e6adf2963d673be9869a68d8dca90b1 -Author: yqgchen -Date: Tue Mar 5 16:14:35 2019 -0800 - - add two lines as suggested in travis checks - - importFrom("stats", "binomial", "glm") - importFrom("utils", "head", "tail") - -M NAMESPACE - -commit 1293648df1ae4e9bb58fa301188dba0a63864c3a -Author: yqgchen -Date: Tue Mar 5 11:24:00 2019 -0800 - - ran document() - -M DESCRIPTION -M man/FAM.Rd -M man/FOptDes.Rd -M man/GetCrCovYX.Rd -M man/GetNormalisedSample.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeSparseGP.Rd -M man/MultiFAM.Rd -M man/Wiener.Rd -M man/kCFC.Rd - -commit 227d12143581e370d1ad3ae6e1cb83b113715b77 -Author: Cody Carroll -Date: Mon Mar 4 23:01:20 2019 -0800 - - TVAM unit test fix - -M tests/testthat/test_TVAM.R - -commit 03c2327894690fca25cfaa9d1e52f803145744f8 -Author: Cody Carroll -Date: Mon Mar 4 19:51:02 2019 -0800 - - TVAM unit tests - -M R/RcppExports.R -M src/RcppExports.cpp -A tests/testthat/test_TVAM.R - -commit 0d984c6d2975c0f18aa33efcab71aca8d542b20c -Merge: 596bf33 f9c23c1 -Author: yqgchen -Date: Fri Mar 1 21:27:05 2019 -0800 - - Merge pull request #41 from functionaldata/trajectCvg - - add prediction band for individual prediction - -commit 596bf33634b26bca22b7073c7a132cda58891637 -Merge: ad03d13 ecdbd2f -Author: yqgchen -Date: Fri Mar 1 20:11:44 2019 -0800 - - Merge pull request #40 from functionaldata/quantileregression - - merge Quantile Regression to the master - -commit ecdbd2f57bc5ab5a646532daf6c68a05be58ff53 -Merge: d692a6d ad03d13 -Author: yqgchen -Date: Fri Mar 1 19:23:58 2019 -0800 - - Merge branch 'master' into quantileregression - -commit d692a6df7b1cd5c10f63f4a8d899f49816601372 -Author: yqgchen -Date: Fri Mar 1 19:18:11 2019 -0800 - - update namespace - -M NAMESPACE - -commit dd8f7f7e929da225024e43c3b39131e409f70c2c -Author: yqgchen -Date: Fri Mar 1 17:47:58 2019 -0800 - - update equantion in the documentation - -M man/FPCquantile.Rd - -commit 649ee5c056064d7312294fe91f097f5a50929db8 -Author: yqgchen -Date: Fri Mar 1 17:46:11 2019 -0800 - - update equations in the documentation - -M R/FPCquantile.R - -commit 1bd8b150068840c5610fffabb93dcd6fce810c49 -Author: yqgchen -Date: Fri Mar 1 17:27:50 2019 -0800 - - update FPCquantile.Rd - -A man/FPCquantile.Rd - -commit ec7d1421139189bb7e817d9535c0d99876039fe7 -Author: yqgchen -Date: Fri Mar 1 17:27:14 2019 -0800 - - Delete FPCquantile.Rd - -D man/FPCquantile.Rd - -commit 42ac3cb23fb2f00f57c756fb977169b5c9b0ec18 -Author: yqgchen -Date: Fri Mar 1 17:26:31 2019 -0800 - - bug fix in the example - -M R/FPCquantile.R - -commit ad03d138d58d43b99691ca57ade9b2535dff22d9 -Merge: 899ad7d f1ccad2 -Author: yqgchen -Date: Fri Mar 1 10:00:17 2019 -0800 - - Merge pull request #31 from schoonees/patch-1 - - Typo fdapaceVig.Rmd - -commit 899ad7ddb86be60ff031454cef391dd7501739cb -Merge: 2aec1c3 b209d0f -Author: yqgchen -Date: Fri Mar 1 09:59:27 2019 -0800 - - Merge pull request #39 from functionaldata/descFix - - fix DESCRIPTION - -commit b209d0fe3e101983493f9422735ac0e627dff67b -Author: yqgchen -Date: Thu Feb 28 23:56:11 2019 -0800 - - other fix - -D man/FPCRegS.Rd -M man/WFDA.Rd - -commit cc18590ca43ac25b37f2553b8e679e4a5592cb74 -Author: yqgchen -Date: Thu Feb 28 22:40:45 2019 -0800 - - fix DESCRIPTION - -M DESCRIPTION - -commit 2aec1c38debaa474c9ec57dc901e34f2d9962f98 -Merge: a81eb19 5559860 -Author: yqgchen -Date: Thu Feb 28 21:43:47 2019 -0800 - - Merge pull request #38 from functionaldata/revert-35-tv-additive - - Revert "New implementation for TVAM" - -commit 5559860df1e49d700543b2f31296bc2888421cc6 -Author: yqgchen -Date: Thu Feb 28 21:43:28 2019 -0800 - - Revert "New implementation for TVAM" - -M NAMESPACE -D R/TVAM.R -D man/TVAM.Rd - -commit a81eb19b35f228f2f729d70b94c3ee81a88d716d -Merge: d34ac47 5b26551 -Author: yqgchen -Date: Thu Feb 28 21:43:10 2019 -0800 - - Merge pull request #37 from functionaldata/revert-36-vc-additive - - Revert "Varying-coefficient additive models" - -commit 5b26551112b0388cc631cbdf89ec4df4d04f1e19 -Author: yqgchen -Date: Thu Feb 28 21:25:02 2019 -0800 - - Revert "Varying-coefficient additive models" - -M NAMESPACE -D R/GenBSpline.R -D R/VCAM.R -D man/VCAM.Rd - -commit d34ac47f6f05dcc6e61b2d28a893a68460b2fae3 -Merge: 2a60006 9552ec9 -Author: yqgchen -Date: Thu Feb 28 21:21:14 2019 -0800 - - Merge pull request #36 from functionaldata/vc-additive - - Varying-coefficient additive models - -commit 9552ec9d6f77c04576502cd4abc1df4a559ed299 -Merge: a561b1a 2a60006 -Author: yqgchen -Date: Thu Feb 28 19:51:56 2019 -0800 - - Merge branch 'master' into vc-additive - -commit 2a6000677b88a684c68dcfcae6e02cc23e3b339e -Merge: b7f5c7c 55327b5 -Author: yqgchen -Date: Thu Feb 28 19:39:56 2019 -0800 - - Merge pull request #35 from functionaldata/tv-additive - - New implementation for TVAM - -commit b7f5c7cf140198ecea4e770e9f9b85af16c51dbf -Merge: b57accb f8914ee -Author: yqgchen -Date: Thu Feb 28 19:37:48 2019 -0800 - - Merge pull request #34 from functionaldata/WFDAfix2 - - pair warp fix2 - -commit b57accb77594aa573bd391e46edee3dc5a4defec -Merge: 2760030 35b0aec -Author: yqgchen -Date: Tue Feb 26 21:42:09 2019 -0800 - - resolve conflicts - -commit 35b0aec2ddea9e8de2f03f20e0f0cfb1c89a2465 -Author: yqgchen -Date: Tue Feb 26 21:24:06 2019 -0800 - - namespace update - -M DESCRIPTION -M NAMESPACE -M R/RcppExports.R -M man/DynCorr.Rd -M man/Dyn_test.Rd -M man/FAM.Rd -M man/FOptDes.Rd -M man/FPCRegS.Rd -M man/GetCrCovYX.Rd -M man/GetNormalisedSample.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeSparseGP.Rd -M man/MultiFAM.Rd -M man/Wiener.Rd -M man/kCFC.Rd -M src/RcppExports.cpp - -commit 55eddcd5a48d295a005a38c60d751fad4dc90c41 -Author: yqgchen -Date: Tue Feb 12 15:23:57 2019 -0800 - - add spaces - -M R/Dyn_test.R - -commit 454a7b4721ebe63038aec0f4648d3ea56962276e -Author: yqgchen -Date: Tue Feb 12 15:00:59 2019 -0800 - - add spaces - -M R/DynCorr.R - -commit 1b5246672c84f373f991294f8c0db670c5bd4ff2 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Feb 12 11:11:10 2019 -0800 - - Add files via upload - -A man/DynCorr.Rd - -commit a9f9cbb0cbeddbfddc01dc2670daf5810d4ab533 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Feb 12 11:10:29 2019 -0800 - - Delete DynCorr.Rd - -D man/DynCorr.Rd - -commit 8ee3b7beff615ad014d4d5e6a6495b4e60376b02 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Feb 12 11:09:53 2019 -0800 - - update the example - -A R/DynCorr.R - -commit bbeb76ffc0faf99784fdf3ac7ded3b1468dca2a4 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Feb 12 11:09:12 2019 -0800 - - Delete DynCorr.R - -D R/DynCorr.R - -commit 4c1a58692073b5dd9a90e9e8870e7f4c3b3125b6 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 22:14:08 2019 -0800 - - Add files via upload - -A tests/testthat/test_DynCorr.R - -commit 5901ee47ab4395b97bee001a15920081a888fcae -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 22:13:46 2019 -0800 - - Delete test_Dyncorr.R - -D tests/testthat/test_Dyncorr.R - -commit c3a847b26606ca73f9ff3175fc7ecc70f30c510a -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:57:45 2019 -0800 - - Add files via upload - -A man/Dyn_test.Rd - -commit fcfaa19d2c8fc66c6355136afb538bfad6d963f3 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:57:03 2019 -0800 - - Delete Dyn_test.Rd - -D man/Dyn_test.Rd - -commit 48f5f26a84f1733fa3ae238c3fd9655787e4f541 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:56:49 2019 -0800 - - update the example - -A R/Dyn_test.R - -commit b86e3c4e3179d550c02d5492d214a44970051897 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:56:20 2019 -0800 - - Delete Dyn_test.R - -D R/Dyn_test.R - -commit c0750bf8a95f17bb69a17645d3d1a9305562e9c5 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:52:23 2019 -0800 - - update example - -A R/DynCorr.R - -commit 8213995fdb62b5173a1df8073981df8e1a96afb9 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:51:52 2019 -0800 - - Delete DynCorr.R - -D R/DynCorr.R - -commit f3fa62c6c91eb2b50bad46db0cae324adba5f2d0 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:51:36 2019 -0800 - - Add files via upload - -A man/DynCorr.Rd - -commit e730a2eee0bdc8eb553fe56742c22253533d65b4 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Mon Feb 11 17:51:06 2019 -0800 - - Delete DynCorr.Rd - -D man/DynCorr.Rd - -commit 62caf8a8db411832eb810dbbe0857db2cbda45ef -Merge: bb69ba7 ea7458d -Author: yqgchen -Date: Sat Feb 2 14:28:43 2019 -0800 - - Merge pull request #33 from functionaldata/hadjipantelis-patch-1 - - Hadjipantelis patch 1 - -commit ea7458d2150e0cbc92b87355afc88000c3de2e39 -Author: hadjipantelis -Date: Thu Jan 31 22:38:07 2019 +0000 - - Update .travis.yml - -M .travis.yml - -commit b2277ee086d7be560ba58b252d055253b9cd97bd -Author: hadjipantelis -Date: Thu Jan 31 22:11:27 2019 +0000 - - Update .travis.yml - -M .travis.yml - -commit bb69ba7d12e53af80cd0d33c11e38699431e9bcb -Author: yqgchen -Date: Tue Jan 29 16:35:58 2019 -0800 - - Update DynCorr.R - - add set.seed(1) - -M R/DynCorr.R - -commit ddcf6db88a5daea31cd66912b6810f9ed3f50d14 -Author: yqgchen -Date: Mon Jan 28 13:43:46 2019 -0800 - - Update test_FPCquantile.R - - use expect_error() for negative tests - -M tests/testthat/test_FPCquantile.R - -commit 7d5f0b12f052c385a5a960099b7e49f2317af9e6 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:26:41 2018 -0800 - - unit test of dyncorr and dyn_test - -A tests/testthat/test_Dyn_test.R -A tests/testthat/test_Dyncorr.R - -commit e22ee34e0f5245a4d29bd3fa5f13c8b2a1c828fb -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:26:03 2018 -0800 - - Add files via upload - -A man/DynCorr.Rd -A man/Dyn_test.Rd - -commit 13c4644a5496c3aab162ce482706856321991c71 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:25:38 2018 -0800 - - add a reference - -A R/DynCorr.R - -commit 30b9a9dcb52864bfbd16702c27640464822864ab -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:25:18 2018 -0800 - - Delete DynCorr.R - -D DynCorr.R - -commit 0d48610d8d721422fe295ddd69368243ec71b0e7 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:25:03 2018 -0800 - - add a reference - -A DynCorr.R - -commit 3fe67a7bc41027e95b6789a5abbe93f1a3e742bd -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:24:41 2018 -0800 - - fix a bug and add a reference - -A R/Dyn_test.R - -commit 69e19e2d0e505eaae01237d3d1a0a79ceccb5833 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:24:15 2018 -0800 - - Delete Dyn_test.R - -D R/Dyn_test.R - -commit a975c1c2980ad47b456c3ddd3a35bda80b05dbcc -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 22:24:07 2018 -0800 - - Delete DynCorr.R - -D R/DynCorr.R - -commit d3d629fed8313494276432e5b6976dc05978c800 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:43:46 2018 -0800 - - add example and reference - -A R/Dyn_test.R - -commit 6b6a0a39dc98a5b37f1002583c55f6031f1930a4 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:43:22 2018 -0800 - - Delete Dyn_test.R - -D Dyn_test.R - -commit 79fe10a974cbcf6abe9e900b794c097b6f7cd15e -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:42:42 2018 -0800 - - add example and reference - -A Dyn_test.R - -commit 329ecb7f55110f69aec5e582a39773d93feaf600 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:42:20 2018 -0800 - - add example and reference - -A R/DynCorr.R - -commit 2045e6d029b73b8a1dc39eca2a715e7d2edf1827 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:41:34 2018 -0800 - - Delete Dyn_test.R - -D R/Dyn_test.R - -commit 2d7f98bbfc3a0ba6adb238914cd86245a9f09625 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Sat Dec 22 16:41:19 2018 -0800 - - Delete DynCorr.R - -D R/DynCorr.R - -commit b0b63f6f55b3445a9a87305e3de20011162cc1dd -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Dec 4 13:03:41 2018 -0800 - - Add files via upload - -A tests/testthat/test_FPCquantile.R - -commit 0698d0633378dcf291d7a4725e08facb085292bc -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Dec 4 13:02:53 2018 -0800 - - Add files via upload - -A man/FPCquantile.Rd - -commit 8687912aa93945309bad02fd66e7068edfb89f26 -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Dec 4 12:58:46 2018 -0800 - - Add files via upload - -A R/FPCquantile.R - -commit 2bc0bbc2aed02a451beb18250bdee7d46642375d -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Dec 4 12:58:23 2018 -0800 - - Delete FPCquantile.R - -D R/FPCquantile.R - -commit 17a43194d84c5ee553f0118bcfdf1e8f89ff1d2d -Author: Jianing Fan <31675015+fjn919@users.noreply.github.com> -Date: Tue Dec 4 12:58:09 2018 -0800 - - Delete FPCAPred.R - -D R/FPCAPred.R - -commit f1ccad2b61a9f0f5efdd8d68b0d7e7b0c4a866a1 -Author: Pieter Schoonees -Date: Thu Nov 29 17:19:07 2018 +0100 - - Update fdapaceVig.Rmd - - typo - -M vignettes/fdapaceVig.Rmd - -commit 27600303d397cf5f9bf6c102f3bb240c2450cc5c -Merge: 227dd46 4ff42b9 -Author: Xiongtao Dai -Date: Sat Nov 10 19:54:26 2018 -0600 - - Merge pull request #30 from functionaldata/fixHelperFuncs - - add doc for CreateDesignPlot; fix example for predict - -commit 4ff42b9acf2f1c5cf4bea70799c7019283f37fa6 -Author: Dai -Date: Wed Oct 31 23:56:31 2018 -0500 - - add doc for CreateDesignPlot; fix example for predict - -M R/CreateDesignPlot.R -M R/predict.FPCA.R -M man/CreateDesignPlot.Rd -M man/predict.FPCA.Rd - -commit 227dd46610871dc4bc360e2d25f9c45554d11c43 -Merge: 4768cd2 3719851 -Author: hadjipantelis -Date: Thu Oct 18 23:09:36 2018 +0100 - - Merge pull request #29 from functionaldata/ModVarAddition - - Mod var addition - -commit 37198517819ea3ad12d8727a1c9941d56b5ad2cc -Author: hadjipantelis -Date: Thu Oct 18 22:36:32 2018 +0100 - - Necessary rm - -D man/FPCRegS.Rd - -commit 229c26ee7378035144ff536bae5766b1b2d8f273 -Author: hadjipantelis -Date: Thu Oct 18 22:27:30 2018 +0100 - - ModeOfVarPlot update - -M DESCRIPTION -M R/CreateModeOfVarPlot.R -M man/CreateModeOfVarPlot.Rd -M man/FAM.Rd -M man/FOptDes.Rd -M man/FPCRegS.Rd -M man/GetCrCovYX.Rd -M man/GetNormalisedSample.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeSparseGP.Rd -M man/MultiFAM.Rd -M man/Wiener.Rd -M man/kCFC.Rd - -commit 4768cd279713fffd2d817f9434c77f70040a4903 -Author: Pantelis Hadjipantelis -Date: Thu Oct 18 14:32:44 2018 +0100 - - Reverting - -M NAMESPACE -D R/FPCRegS.R -D R/MultiNorm.R -D R/demeanFuc.R -D R/supportfunctions.R -D man/FPCRegS.Rd -D tests/testthat/test_FPCRegS.R - -commit a65ba00e3f652d2828746197ef47ab52a5ca4dc5 -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 15:20:38 2018 -0700 - - Update FPCquantile.R - -M R/FPCquantile.R - -commit a2e1a602d335c50d1044f0a337c6d564df7ca66a -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 15:18:41 2018 -0700 - - Update FPCAPred.R - -M R/FPCAPred.R - -commit f96b73c5c2d6477f3bd3791b903d3f8a2f183c70 -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 15:16:23 2018 -0700 - - Update FPCquantile.R - -M R/FPCquantile.R - -commit 408ad66854d5aed77f34ec9f18603e91b0e6d74a -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:27:59 2018 -0700 - - Perform one or two samples bootstrap test of dynamic correlation - -A R/Dyn_test.R - -commit 040baa8a7dca219e9b5bf3ba8d355af2612b6fba -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:26:49 2018 -0700 - - Calculate individual dynamic correlations - -A R/DynCorr.R - -commit 250216b4bc4ecb5e7688fc2b4b0c2f2e8c2fcfab -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:26:05 2018 -0700 - - Delete Dyn_test.R - -D R/Dyn_test.R - -commit de3d0bc5b7ef21c51fc71c7371309cc84dc85a1e -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:25:48 2018 -0700 - - Delete DynCorr.R - -D R/DynCorr.R - -commit 814b1c98d65b501c13e56aa4f306734f24070d71 -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:25:14 2018 -0700 - - Predict functional principal scores of new observations - -A R/FPCAPred.R - -commit 2d4534611938d4e75e4a0a91e6c8f71f999c680c -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:24:00 2018 -0700 - - Quantile regression with functional predictor and scalar response - -A R/FPCquantile.R - -commit 189a561618eeef2618ced9d4930fa5c3e7988a9d -Author: fjn919 <31675015+fjn919@users.noreply.github.com> -Date: Tue Oct 2 13:20:15 2018 -0700 - - Add files via upload - -A R/DynCorr.R -A R/Dyn_test.R - -commit 2f9313e6ab2f199d892c9ebe56f68febe12a85aa -Author: hadjipantelis -Date: Sun Jul 22 23:51:36 2018 +0100 - - Changes to the auto-title of CreateModeOfVarPlot - -M R/CreateModeOfVarPlot.R - -commit f8914ee7d94be5ee667defd5437361e2460a551e -Author: yqgchen -Date: Mon May 28 20:01:27 2018 -0700 - - Exchange the names of hMat and hInvMat - - Exchange the names of hMat and hInvMat to be consistent with the reference - -M R/WFDA.R - -commit f9946aae09178d519fbfacb51ed95f36003b5db8 -Author: yqgchen -Date: Thu May 24 10:39:20 2018 -0700 - - fix the weight - - fix the weight used when calculating the inverse of the global warping function by averaging the pairwise warping functions - -M R/WFDA.R - -commit a561b1ac5972f07c27e09a743504563f32bf06c4 -Author: Kyunghee Han -Date: Thu May 24 02:18:30 2018 -0700 - - Varying-coefficient additive models - - The initial implementation - -M NAMESPACE -A R/GenBSpline.R -A R/VCAM.R -A man/VCAM.Rd - -commit 55898b1eb42f177863d7b7ccf18dc7f29b8d4e9c -Merge: 56d1ec8 80e7684 -Author: kevinhaofree -Date: Fri May 18 19:11:48 2018 -0700 - - Merge pull request #24 from functionaldata/FRegSDense - - FRegSDense - -commit 80e7684143bad0c36c2f67ddb9fdfdd3ea3617ef -Author: haost -Date: Fri May 18 16:36:22 2018 -0700 - - updating description - -M R/FPCRegS.R -M man/FPCRegS.Rd - -commit c4b423a9e34e20358e80030d289778ef69a2888f -Author: haost -Date: Thu May 17 10:57:23 2018 -0700 - - adding one boundary case - -M tests/testthat/test_FPCRegS.R - -commit 8724e741ab496add62ed788450c483a4f96a5f8b -Author: haost -Date: Thu May 17 10:07:08 2018 -0700 - - bug fix 1.1 - -M R/supportfunctions.R - -commit 22d06ebc54d3eac89a43d4bc5cc6f3f4c3e91f00 -Author: haost -Date: Thu May 17 09:15:58 2018 -0700 - - bug fix - - fix some variable that not use correctly - -M R/FPCRegS.R -M R/supportfunctions.R -M tests/testthat/test_FPCRegS.R - -commit c0e05d22b8a635023b638d021e0a9ae7a924281a -Author: haost -Date: Tue May 8 15:17:46 2018 -0700 - - update 2.5 - - unclear definition cleared - -M R/supportfunctions.R - -commit 6084e027540b90748aad81d3a1dabd7f3e083d2f -Author: haost -Date: Tue May 8 14:09:23 2018 -0700 - - update 2.4 - - bug fixed - -M tests/testthat/test_FPCRegS.R - -commit a830733ad3046775eb514fa964bccc0362a84c70 -Author: haost -Date: Tue May 8 13:35:58 2018 -0700 - - update2.3 - - bug fixes - -M tests/testthat/test_FPCRegS.R - -commit 423c1fdf106de44ca4fc40d2ac6ffc7149005e64 -Author: haost -Date: Tue May 8 11:16:02 2018 -0700 - - fix2.2 - - fix minor bugs here - -M tests/testthat/test_FPCRegS.R - -commit 44f8f9d05ebaa59d24c0326bbe0d4b93808f1d41 -Author: haost -Date: Tue May 8 09:52:58 2018 -0700 - - updateV2.1 - - omit one seed open - -M tests/testthat/test_FPCRegS.R - -commit c65d975ad9c0971c2a1f3819f125f7f2e2962ff2 -Author: haost -Date: Tue May 8 04:03:56 2018 -0700 - - updateV2 - - change the document description and add the test that - -M R/FPCRegS.R -M man/FPCRegS.Rd -A tests/testthat/test_FPCRegS.R - -commit fd44ee2c01590f6861e262adbd67fa9a925980a7 -Author: haost -Date: Mon Apr 30 23:20:35 2018 -0700 - - updating examples 2.0 - -M R/FPCRegS.R -M man/FPCRegS.Rd - -commit b35d979747455618cbe3927e51d60ca8ce62b42e -Author: haost -Date: Mon Apr 30 23:16:32 2018 -0700 - - updating the examples - -M R/FPCRegS.R -M man/FPCRegS.Rd - -commit 56d1ec8900faddd2b08ac849f83dbe7c4d81a782 -Merge: adc8aac 03966a7 -Author: hadjipantelis -Date: Mon Apr 30 12:34:29 2018 +0100 - - Merge pull request #23 from functionaldata/FClustPatch - - F clust patch - -commit 03966a76b9ebd1bbab1ea32f8b854885dccef664 -Author: hadjipantelis -Date: Sat Apr 21 00:29:23 2018 +0100 - - FClust patch 2 - -M R/SetOptions.R -M R/kCFC.R - -commit 2df44ea84acab9f372877a4e3f0f96127f249483 -Author: hadjipantelis -Date: Fri Apr 20 23:31:45 2018 +0100 - - FClust patch - -M R/FClust.R -M R/kCFC.R -M man/FClust.Rd -M man/kCFC.Rd -M tests/testthat/test_FClust.R - -commit f9c23c11c87fdf52e8d30073e7f04b4036b4539f -Author: Kyunghee Han -Date: Tue Apr 17 15:22:24 2018 -0700 - - Debugging, support of constant trajectory cases - -M R/fitted.FPCA.R -M man/fitted.FPCA.Rd - -commit 86177e500f3442e8687a6fe2674eb1fc029e4001 -Author: haost -Date: Tue Apr 10 22:18:51 2018 -0700 - - default setting change - -M R/FPCRegS.R - -commit fc35d0f259f70440c802ce8eae7e23223ba43371 -Author: haost -Date: Tue Apr 10 15:07:21 2018 -0700 - - Fix bugs - -M NAMESPACE -A R/FPCRegS.R -A R/MultiNorm.R -A R/demeanFuc.R -A R/supportfunctions.R -A man/FPCRegS.Rd - -commit 55327b50254a1d10140f2e812c9fd658c51cdfa2 -Author: Kyunghee Han -Date: Mon Apr 9 17:00:57 2018 -0700 - - New implementation for TVAM - - Alpha version - -M NAMESPACE -A R/TVAM.R -A man/TVAM.Rd - -commit c2c344049091f36eaff073b631e33f066d27fe82 -Author: Kyunghee Han -Date: Tue Apr 3 17:32:13 2018 -0700 - - Fixed warning messages from Travis - -M R/fitted.FPCA.R -M man/fitted.FPCA.Rd - -commit 7b5221a512db0c6cd01714296492408612285a6d -Author: Kyunghee Han -Date: Tue Apr 3 17:01:17 2018 -0700 - - Minor update - -M R/fitted.FPCA.R - -commit b3be6962abc3cd75327b1aced8b33f95c8ea3eec -Author: Kyunghee Han -Date: Tue Apr 3 16:26:08 2018 -0700 - - Fixing vignettes problem. - -M R/fitted.FPCA.R -M man/fitted.FPCA.Rd - -commit adc8aac70e857e33411dcf1d2fdb8913bf35ff3e -Author: hadjipantelis -Date: Sat Feb 24 22:09:07 2018 +0000 - - Deleting PDF vignette. - -D vignettes/Sweavel.sty -D vignettes/fdapaceVignetteKnitr.Rnw -D vignettes/framed.sty - -commit 981ac4af99d792c8091f28e494d89c869a74f0f6 -Author: hadjipantelis -Date: Sat Feb 24 21:24:30 2018 +0000 - - FCReg example timing. - -M R/FCReg.R -M man/FCReg.Rd - -commit 19470e067650676547401d6f7c9273c5b925e574 -Author: Pantelis -Date: Fri Feb 23 11:16:56 2018 +0000 - - Example timings - -M R/CreateOutliersPlot.R -M R/FClust.R -M R/FPCReg.R -M R/MultiFAM.R -M man/CreateOutliersPlot.Rd -M man/FClust.Rd -M man/FPCReg.Rd -M man/MultiFAM.Rd - -commit 6c8f6a608e18bea3c24921abd51ade415ddfd420 -Author: hadjipantelis -Date: Thu Feb 22 16:01:08 2018 -0800 - - Vign. fix for R-dev - -M vignettes/fdapaceVig.Rmd - -commit ae4c1acf99e0518f73900a75a89537807e390e46 -Author: Pantelis Hadjipantelis -Date: Thu Feb 22 14:51:43 2018 -0800 - - Rcpp Exports fix. - -M R/RcppExports.R -M src/RcppExports.cpp - -commit 802ba5b0ca1b12ecb3d94777d0ee919355735577 -Author: hadjipantelis -Date: Thu Feb 22 21:35:57 2018 +0000 - - Typo. - -M R/FPCReg.R -M man/FPCReg.Rd - -commit d78107f2ccbef609b1f9231de1de291d6a219637 -Author: hadjipantelis -Date: Thu Feb 22 21:17:59 2018 +0000 - - Fixing line-widths - -M R/FPCReg.R -M R/RcppExports.R -M man/FPCReg.Rd -M src/RcppExports.cpp - -commit 1bd55ac73757a1c6b67b2c6b34f732d912a4925b -Author: Pantelis -Date: Thu Feb 22 15:07:08 2018 +0000 - - str.FPCA fix. - -M R/str.FPCA.R -M man/str.FPCA.Rd -M vignettes/fdapaceVig.Rmd - -commit e793de3b8829469a1d079f34dd0d9f9a61bf94c7 -Author: Pantelis -Date: Thu Feb 22 11:41:29 2018 +0000 - - SelectK fix. - -M R/SelectK.R - -commit 75690ba70f49b6f066278154c933327da9313a1e -Merge: 4e1b3ed b8db3c6 -Author: hadjipantelis -Date: Tue Feb 20 19:13:16 2018 +0000 - - Merge pull request #21 from functionaldata/exportStr - - Export str.FPCA - -commit b8db3c647b95166bef6e3ce9bc7d99baeb8ca6b4 -Author: Xiongtao Dai -Date: Tue Feb 20 00:17:23 2018 -0800 - - export str.FPCA - -M NAMESPACE -M R/Lwls1D.R -M R/str.FPCA.R -A man/str.FPCA.Rd - -commit 4e1b3edf90add713c979fcd1aa1a589b4e4dc72d -Author: hadjipantelis -Date: Mon Feb 19 23:11:34 2018 +0000 - - Update LICENSE - -M LICENSE - -commit 5bb61c1b63c48df6cd709ccc3e9c90d02855b251 -Merge: 4ff1405 2c222f5 -Author: hadjipantelis -Date: Mon Feb 19 23:07:17 2018 +0000 - - Merge pull request #20 from functionaldata/Exporter - - Merging Exporter branch. - -commit 2c222f5398207a8cc8cd02c5444709f693eacc7d -Author: hadjipantelis -Date: Fri Feb 16 23:21:18 2018 +0000 - - Update NEWS - -M NEWS - -commit 3f2b740cd5a3e8f869070f706bf1a175b105de63 -Author: hadjipantelis -Date: Fri Feb 16 22:46:06 2018 +0000 - - Fixing test_FClust - -M tests/testthat/test_FClust.R - -commit 61f03f028e8f217cf06286c9c89f44ae9f49ead0 -Author: hadjipantelis -Date: Fri Feb 16 22:09:38 2018 +0000 - - Exporters - -M NAMESPACE -M R/FAM.R -M R/MultiFAM.R -M R/RcppExports.R -M src/cumtrapzRcpp.cpp -M src/trapzRcpp.cpp -D vignettes/Sweave.sty - -commit d0f5e887d989e4159ecac2a6ab840215cd5dda96 -Author: hadjipantelis -Date: Fri Feb 16 21:35:50 2018 +0000 - - Update NEWS - - Added FPReg in NEWS. - -M NEWS - -commit ff2bf54b0258dd4051f339ab578b2f713105baf8 -Author: hadjipantelis -Date: Fri Feb 16 21:29:38 2018 +0000 - - Minor - -M R/FAM.R -M R/FClust.R -M R/MultiFAM.R -M man/FClust.Rd - -commit dfe7fc43c856312355fd03065580e700e44d2dcc -Author: hadjipantelis -Date: Fri Feb 16 21:06:38 2018 +0000 - - removing ':::' - -M R/FAM.R -M R/MultiFAM.R -M man/MultiFAM.Rd - -commit 97aa68bb16a970528d7fe7e8096f42ee6ff62ae4 -Author: hadjipantelis -Date: Fri Feb 16 20:53:16 2018 +0000 - - Fixing FClust. - -M R/FClust.R -M man/FClust.Rd - -commit 50c63d6fa6e842aedcb282fe9e13c87a25422210 -Author: hadjipantelis -Date: Thu Feb 15 22:51:24 2018 +0000 - - FClust first fix. - -M DESCRIPTION -M R/FClust.R -M man/FClust.Rd -M tests/testthat/test_FClust.R - -commit ee80261c9e4335e9aa578ac97a10e84de8f6d7b0 -Author: hadjipantelis -Date: Thu Feb 15 19:38:05 2018 +0000 - - Authors, vers. and date - -M DESCRIPTION - -commit 4ff14054ea5d4a3bb70263ad732961940631446c -Merge: a152729 e6a0b71 -Author: hadjipantelis -Date: Wed Feb 14 21:58:45 2018 +0000 - - Merge pull request #19 from functionaldata/fResReg - - F res reg - -commit e6a0b71e51e71d944d0b64bd2ecfff4f215fb628 -Author: mathchin -Date: Wed Feb 14 11:37:27 2018 +0800 - - remove rm(). - -M tests/testthat/test_FPCReg.R - -commit f1906c02009571b39e164192eb1eea831fae63b5 -Author: mathchin -Date: Tue Feb 13 12:29:56 2018 +0800 - - Add unit tests for sparse and multipredicts - -M tests/testthat/test_FPCReg.R - -commit 2d7a0c47ce3d74a7e3c00bacf00598a008f5941d -Author: mathchin -Date: Tue Feb 13 09:06:32 2018 +0800 - - further google r style and avoid diag() - -M R/FPCReg.R - -commit 19ba8f20e2d0fd1c4525a97fe55d55688747cf15 -Author: hadjipantelis -Date: Wed Feb 7 21:02:15 2018 +0000 - - First take on exporting rcpp helpers - -M R/RcppExports.R -A man/cumtrapzRcpp.Rd -A man/trapzRcpp.Rd -M src/cumtrapzRcpp.cpp -M src/trapzRcpp.cpp - -commit a152729399d5c7dbe9481602331a9fe81fa0f7e9 -Merge: aefdf6b 8696b4d -Author: hadjipantelis -Date: Mon Jan 29 23:49:30 2018 +0000 - - Merge pull request #18 from functionaldata/plotFix - - Plot fix - -commit 8696b4dd711111814b61d34d4e36daedb1fc2635 -Merge: 23c7ddd 9231f7b -Author: hadjipantelis -Date: Sun Jan 21 00:35:07 2018 +0000 - - Merge pull request #17 from linulysses/plotFix - - Change to GetEigenAnalysisResults and plot.FPCA - -commit 9231f7bd4e7252d0376c071c8670adeac689b246 -Author: linulysses <33917103+linulysses@users.noreply.github.com> -Date: Sat Jan 20 15:19:19 2018 -0800 - - change data generation seed - -M tests/testthat/test_plotFPCA.R - -commit 8fb9aeaa38402627009f467382a9bac4b2acc60c -Author: linulysses <33917103+linulysses@users.noreply.github.com> -Date: Sat Jan 20 09:37:22 2018 -0800 - - Change to GetEigenAnalysisResults and plot.FPCA - - 1. highlighted x-axis on plots in plot.FPCA - 2. switched sign of eigenfunctions if their inner product with the mean is negative in GetEigenAnalysisResults - -A tests/testthat/test_plotFPCA.R - -commit 23c7ddd548b5368df2cda6e8492bb818a536d0f2 -Author: Cody Carroll -Date: Wed Dec 6 15:11:09 2017 -0800 - - fix circular dependency and axes issue - -M R/GetEigenAnalysisResults.R -M R/plot.FPCA.R - -commit 218e015f6f480aedd6330d806cf66ba83c45111b -Author: Cody Carroll -Date: Tue Dec 5 11:23:19 2017 -0800 - - add x axis to plots and change eigenfunction's sign if inner product with mean is negative (instead of covariance as before) - -M R/GetEigenAnalysisResults.R -M R/plot.FPCA.R - -commit aefdf6bac6084ff617041231eb20a99baaa81646 -Author: hadjipantelis -Date: Sat Dec 2 14:00:08 2017 +0000 - - Update NEWS, RccpExports, SelectK - -M NEWS -M R/RcppExports.R -M R/SelectK.R -M man/SelectK.Rd -M src/RcppExports.cpp -M vignettes/fdapaceVig.html - -commit c5e469920d8cee43ed5d0b7503f74bd0bdc097eb -Author: Pantelis -Date: Fri Dec 1 15:36:35 2017 +0000 - - Rmd Vignette HTML - -A vignettes/fdapaceVig.html - -commit 2e30cba63eb54b5006e43cec3fb437a817d52d4f -Author: Pantelis -Date: Fri Dec 1 15:33:59 2017 +0000 - - Rmd Vignette - -A vignettes/fdapaceVig.Rmd - -commit c54be3d5a3d165693a08ec44b3adbd2803105dca -Merge: 855017d efb2513 -Author: Kyunghee Han -Date: Mon Nov 20 21:13:15 2017 -0800 - - Merge pull request #16 from functionaldata/additive - - Additive - -commit efb25135afeaab60622652cda40dc6cbe3219dea -Author: Kyunghee Han <> -Date: Mon Nov 20 18:54:14 2017 -0800 - - final modification after Gary's beta testing - -M R/MultiFAM.R - -commit 855017d2c380ec4d8828160d6c247325eb6dc7c3 -Author: dmchris -Date: Mon Oct 30 23:07:53 2017 -0500 - - Modify FOptDes.R for grid conversion issues - -M R/FOptDes.R - -commit 1362b94e9b81112a17175492324cfdb09e88cfaa -Author: Xiongtao Dai -Date: Sun Oct 29 01:23:39 2017 +0100 - - plot.FPCA use optns$error for the design plot - -M R/plot.FPCA.R - -commit 5a52883ecfb55e753ef9522aa793bbf737db7958 -Author: Xiongtao Dai -Date: Fri Oct 27 20:15:20 2017 +0100 - - fix FSVD - -M R/FSVD.R - -commit 0facf922a3c738da30aab6f55b2a9552356ecb8c -Author: Cody Carroll -Date: Wed Oct 25 15:10:38 2017 -0700 - - remove unnecessary lines - -M tests/testthat/test_WFDA.R - -commit 4cd1a444ced1e3f236baea8c81b0421d3cfe5196 -Author: Kyunghee Han <> -Date: Wed Oct 25 14:35:24 2017 -0700 - - minor change in Rdocument of FAM - -M R/FAM.R -M man/FAM.Rd - -commit d278e86a27f74d4acb288e3d6af9d323311baa22 -Author: Kyunghee Han <> -Date: Wed Oct 25 12:46:13 2017 -0700 - - merging travispass into additive branch - -M tests/AAAtestthat.R -M tests/testthat_slow.R - -commit dbe74c8a710e9d314e86ffab3cddbc76520c50ef -Merge: e56b08f 0b9f2cd -Author: Kyunghee Han -Date: Wed Oct 25 12:07:22 2017 -0700 - - Merge remote-tracking branch 'origin/travispass' into additive - -commit e56b08fdc2c0ab1e94777e6f3f242b5062c2747c -Author: Kyunghee Han <> -Date: Wed Oct 25 04:49:01 2017 -0700 - - removing TVAMSBFitting temporarily (reducing testthat) - -M NAMESPACE -M R/FAM.R -M R/MultiFAM.R -D R/TVAMCompFntCent.R -D R/TVAMCondProjection.R -D R/TVAMLLMgnReg.R -D R/TVAMMgnJntDensity.R -D R/TVAMSBFCompUpdate.R -D R/TVAMSBFitting.R -M man/FAM.Rd -M man/MultiFAM.Rd -D man/TVAMSBFitting.Rd - -commit 51fa8b9fec2797f0c61d65b911e0bfb31ffa23b6 -Author: Cody Carroll -Date: Tue Oct 24 23:02:51 2017 -0700 - - Minor unit test fix - -M tests/testthat/test_WFDA.R - -commit 67805f9a9f765d3431b3a546aad704200a158706 -Author: Kyunghee Han <> -Date: Tue Oct 24 22:34:33 2017 -0700 - - minor debugging 3 - -M R/FAM.R -M R/MultiFAM.R -M man/FAM.Rd -M man/MultiFAM.Rd - -commit 94189fa5651abd1cd5d547f6cf45ff4976f4bc88 -Author: Kyunghee Han <> -Date: Tue Oct 24 21:46:44 2017 -0700 - - minor debugging 2 - -M R/FAM.R -M man/FAM.Rd - -commit 4f07519dfe8671700c38121aaae6b9884999b77d -Author: Kyunghee Han <> -Date: Tue Oct 24 21:20:17 2017 -0700 - - minor debugging - -M R/FAM.R - -commit 6c282e5c5f897f750acbbffd7336d2c9a2ed498d -Author: Kyunghee Han <> -Date: Tue Oct 24 20:12:46 2017 -0700 - - 2nd debugging - -M R/FAM.R -M R/MultiFAM.R -M R/RcppExports.R -M man/FAM.Rd -M man/MultiFAM.Rd -M src/RcppExports.cpp - -commit 16d3f1e1a91d441762bdf7882bd4b2543372016a -Author: Cody Carroll -Date: Tue Oct 24 17:08:14 2017 -0700 - - add more unit tests - -M tests/testthat/test_WFDA.R - -commit 0b9f2cdfab2a4c882d52f479af6a361f51793a09 -Author: hadjipantelis -Date: Tue Oct 24 21:22:20 2017 +0100 - - Update .travis.yml - - Checking if we are OK with no Rcpp specs. - -M .travis.yml - -commit 86cf881a0bc8252882c8d177757b18f156633d73 -Merge: abf2e34 c1c6ef8 -Author: hadjipantelis -Date: Tue Oct 24 21:15:13 2017 +0100 - - Merge pull request #15 from functionaldata/travispass - - Travis pass - -commit 08bc5a5d9b3f7eedda296a179f99b8aca3584338 -Merge: 007033a abf2e34 -Author: Kyunghee Han -Date: Tue Oct 24 13:13:07 2017 -0700 - - Merge branch 'master' into additive - -commit c1c6ef88155e68b86eb49a0eada28b1b948ac94d -Author: hadjipantelis -Date: Tue Oct 24 20:29:07 2017 +0100 - - Making test_FPCA a bit lighter - -M tests/testthat/test_FPCA.R - -commit b09ad1cadcb59b2294af416a294d86915ad8cb56 -Author: hadjipantelis -Date: Tue Oct 24 20:20:03 2017 +0100 - - Near void. - -M tests/testthat_slow.R - -commit 007033a0c011bdc2aa945ae535a162d4c49cb1ac -Author: Kyunghee Han <> -Date: Tue Oct 24 09:33:23 2017 -0700 - - trapzRcpp -> fdapace:::trapzRcpp - -M R/FAM.R -M man/FAM.Rd -M man/MultiFAM.Rd - -commit 3730cc78aa2903d2afaaf990f76312d3c0f1c7ac -Author: Kyunghee Han <> -Date: Tue Oct 24 04:48:00 2017 -0700 - - Rdocument modification - -M R/FAM.R -M R/MultiFAM.R -M man/FAM.Rd -M man/MultiFAM.Rd - -commit 8e899e83256e9d713e5e37d5b7603714738fd441 -Author: Kyunghee Han <> -Date: Tue Oct 24 04:23:10 2017 -0700 - - debugging after 1st beta test - -M R/FAM.R -M R/MultiFAM.R -M man/FAM.Rd -M man/MultiFAM.Rd - -commit abf2e34ca78352352c9e63fdec2c0e4c675ae1eb -Author: hadjipantelis -Date: Mon Oct 23 23:50:27 2017 +0100 - - Breaking slow tests for Travis - -M tests/testthat_slow.R - -commit 2154eaeaa0b17ed89c65aabed60d3fe7c791ce32 -Author: hadjipantelis -Date: Mon Oct 23 22:35:45 2017 +0100 - - Minor MakeResultFPCA fix. - -M R/FPCA.R -M R/MakeResultFPCA.R -M R/RcppExports.R -M src/RcppExports.cpp - -commit 82cd9fc1d964f4aaac1486fc6817d0bdb522f2c4 -Merge: 22925e5 4adb1bc -Author: hadjipantelis -Date: Mon Oct 23 21:18:22 2017 +0100 - - Merge pull request #14 from functionaldata/WFDAfix - - Fixing optns$lambda on WFDA - -commit 4adb1bce0b4a347aca342d5e8712bdba55a4e3b2 -Author: Xiongtao Dai -Date: Sun Oct 22 12:05:23 2017 -0600 - - strange WFDA behavior - -M R/WFDA.R -M src/RcppExports.cpp -M tests/testthat/test_WFDA.R - -commit f6e47148efb4d6e036526db159571879937957bc -Author: Kyunghee Han <> -Date: Fri Oct 20 01:34:25 2017 -0700 - - 2nd maintenance for MultiFAM and FAM - -M R/FAM.R -M R/MultiFAM.R -M man/FAM.Rd -M man/MultiFAM.Rd - -commit 3147781ca779134b306cab7a361fd388eca8fc59 -Author: Kyunghee Han <> -Date: Fri Oct 20 00:58:13 2017 -0700 - - maintenance for MultiFAM and FAM - -M NAMESPACE -A R/FAM.R -M R/MultiFAM.R -M R/SBFitting.R -M R/TVAMSBFitting.R -A man/FAM.Rd -M man/MultiFAM.Rd -M man/TVAMSBFitting.Rd - -commit 22925e5d2a6666ea69253d353e21dd5d87fdf3ff -Author: hadjipantelis -Date: Thu Sep 28 22:40:01 2017 +0100 - - Minor CreateModeOfVarPlot patch. - -M R/CreateModeOfVarPlot.R - -commit dcee098ff17b712c19c490a19cad51ec6f770422 -Author: hadjipantelis -Date: Mon Aug 21 21:17:48 2017 +0100 - - Minor fix - -M tests/testthat/test_useBin.R - -commit 7d3a95f0823fecbd9fb0d0f3bbda27021fce067b -Author: hadjipantelis -Date: Mon Aug 21 20:52:13 2017 +0100 - - Bringing back the roxygen to 6.0.1. - -M DESCRIPTION -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateBasis.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/CreateStringingPlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -M man/SBFitting.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -M man/Stringing.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/predict.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd - -commit 97fed54a7152d287baf65ff52241cdaa3c63ecf5 -Merge: 8b2d461 0ead6c3 -Author: hadjipantelis -Date: Mon Aug 21 20:50:26 2017 +0100 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 8b2d461cccd606b898d2f5bf679d044bb046e546 -Author: hadjipantelis -Date: Mon Aug 21 20:49:47 2017 +0100 - - Timings - -M R/FPCA.R -M R/MakeResultFPCA.R -M man/FPCA.Rd - -commit 0ead6c3ad0b50b216ec778611934a53090a35466 -Merge: 2a3fe79 e7716d1 -Author: hadjipantelis -Date: Sun Aug 20 22:44:01 2017 +0100 - - Merge pull request #13 from functionaldata/Stringing - - add metrics for stringing and modify documentations - -commit 2a3fe795f3c062836e23101cf4abf91f40ede2dc -Author: hadjipantelis -Date: Sun Aug 20 21:44:29 2017 +0100 - - Minor unit-test fix. - -M R/CVLwls1D.R -M tests/testthat/test_gcvlwls2dV2.R - -commit 5c017fe68ddb758a47862b7c0e4de21c121cd2ae -Author: hadjipantelis -Date: Sun Aug 20 20:24:43 2017 +0100 - - useBW1SE option for BW selection - -M DESCRIPTION -M R/CVLwls1D.R -M R/CheckOptions.R -M R/FPCA.R -M R/GCVLwls2DV2.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M man/FPCA.Rd -M tests/testthat/test_FPCA.R - -commit 83e68afdb021feffa3e94e8a9a34fbbb9ae73e4a -Author: Kyunghee Han -Date: Tue Jul 25 12:04:21 2017 -0700 - - minor modification for SBF iteration - -M R/SBFitting.R -M R/TVAMSBFitting.R - -commit 20b8438e08c7aeeb8f0bdba6efd3ddbd92a755f9 -Author: hadjipantelis -Date: Tue Jul 11 00:12:55 2017 +0100 - - Long line corrections. 100+ char. - -M R/FPCAder.R -M man/FPCAder.Rd - -commit ef93c274c2843e28917540e08cbdb390d323b7cb -Author: Xiongtao Dai -Date: Mon Jul 10 11:53:32 2017 -0700 - - restore our modified Sweavel.sty - -M vignettes/Sweavel.sty - -commit 7562b0895e202e0d0e644840402a579b1a8ede49 -Author: Xiongtao Dai -Date: Mon Jul 10 11:24:16 2017 -0700 - - sty files - -M .gitignore -A vignettes/Sweave.sty -M vignettes/Sweavel.sty -A vignettes/framed.sty - -commit b798fcad3fa30726f586f9a8c5e7c5736134935c -Author: mathchin -Date: Wed Jul 5 15:48:25 2017 +0800 - - MASS::mvrnorm. - -M R/FPCReg.R -M man/FPCReg.Rd - -commit abb616173144f68ae2db6ac49323499d147c0c61 -Author: mathchin -Date: Wed Jul 5 10:43:25 2017 +0800 - - Add FPCReg.RD - -M man/FPCReg.Rd - -commit 4c09ebd9d142322fa25545fe3cfadc9e7f28a3db -Author: mathchin -Date: Wed Jul 5 09:27:48 2017 +0800 - - Revised NAMESPACE and DESCRIPTION. - f PleasR enter the commit message for your changes. Lines starting - -M DESCRIPTION -M NAMESPACE - -commit 9723a1458bea43a30e22efc908c6c58523b65af2 -Author: mathchin -Date: Tue Jul 4 18:24:56 2017 +0800 - - Fix R^2 bug and mapply(, SIMPLIFY=FALSE). No outside function. - -M DESCRIPTION -M R/FPCReg.R -M R/pkgname.R - -commit fadc2481e0f12cb18fad37f549653146a8e5d50f -Author: Kyunghee Han -Date: Tue Jun 13 00:02:51 2017 -0700 - - New implementation of Multiple FAM and minor modifications in preivous functions - -M NAMESPACE -M R/MgnJntDensity.R -A R/MultiFAM.R -M R/SBFCompUpdate.R -M R/SBFitting.R -M R/TVAMSBFitting.R -A man/MultiFAM.Rd -M man/SBFitting.Rd -M man/TVAMSBFitting.Rd - -commit e7716d13a4a5856b556654d4bbf1c49e7f250f28 -Author: dmchris -Date: Mon Jun 5 13:10:02 2017 -0700 - - add metrics for stringing and modify documentations - -M DESCRIPTION -M R/CreateStringingPlot.R -M R/Stringing.R -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateBasis.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/CreateStringingPlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -M man/SBFitting.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -M man/Stringing.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/predict.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd -M tests/testthat/test_CreateStringingPlot.R -M tests/testthat/test_Stringing.R - -commit 872104cbcaec64c218fde4193fc1b2333a1f1698 -Author: Kyunghee Han -Date: Tue May 30 19:03:12 2017 -0700 - - minor modification of R document - -M R/TVAMSBFitting.R -M man/TVAMSBFitting.Rd - -commit d21a1bc624b52da7ac86765dbc325a22c8df60ef -Author: Kyunghee Han -Date: Tue May 30 18:25:04 2017 -0700 - - minor modification for SBF and new commit for time-varying additive models - -M NAMESPACE -M R/MgnJntDensity.R -M R/NWMgnReg.R -M R/NormKernel.R -M R/SBFCompUpdate.R -M R/SBFitting.R -M R/ScaleKernel.R -A R/TVAMCompFntCent.R -A R/TVAMCondProjection.R -A R/TVAMLLMgnReg.R -A R/TVAMMgnJntDensity.R -A R/TVAMSBFCompUpdate.R -A R/TVAMSBFitting.R -M man/SBFitting.Rd -A man/TVAMSBFitting.Rd - -commit 420c70c2ed7988ba0eb880267b91a5af8a746db4 -Merge: e105bfc 222ab6b -Author: Xiongtao Dai -Date: Sun May 28 00:26:16 2017 +0100 - - Merge branch 'fixDenseNA' - -commit e105bfc226f241d7c46ea722ec383d3c8864f797 -Merge: e19118e db8838f -Author: Xiongtao Dai -Date: Sun May 28 00:24:10 2017 +0100 - - Merge branch 'FPCAderDoc' - -commit e19118e7ab7ab7d279f7fa03f5fa50ebb0bf970e -Author: Xiongtao Dai -Date: Sat May 27 23:52:41 2017 +0100 - - fix an erronous test for FOptDes - -M tests/testthat/test_FOptDes.R - -commit 226bd746de0466d1dc3e1a89fdc8922d8d753a42 -Author: Xiongtao Dai -Date: Fri May 26 21:40:46 2017 +0100 - - speed up MakeFPCAInputs - - Now is much faster if the number of subjects is large. - -M R/MakeFPCAInputs.R -M tests/testthat/test_MakeFPCAInputs.R - -commit db8838f62698043e786e3e67ec46aabe0febe0dd -Author: Xiongtao Dai -Date: Fri May 12 02:26:56 2017 -0700 - - export CreateBasis; modified FPCAder eg - -M NAMESPACE -M R/CreateBasis.R -M R/FPCAder.R -A man/CreateBasis.Rd -M man/FPCAder.Rd - -commit d2ea78abb1ebc8dd270177afea386e0fa82dd1f6 -Author: Xiongtao Dai -Date: Thu May 11 22:31:20 2017 -0700 - - add example for FPCAder - -M R/FPCAder.R -M man/FPCAder.Rd -M tests/testthat/test_FPCAder.R -M tests/testthat/test_Lwls2DDeriv.R - -commit 222ab6b06cc5500143589ae1b47b9db5ec9b0b70 -Author: Xiongtao Dai -Date: Thu May 11 16:55:15 2017 -0700 - - fix DenseWithNA - - Under the DenseWithNA scheme this scenario will now throw an error - message: At time point t_1 the observations are too sparse to estimate - the covariance cov(X(t_1), X(t_2)) for some t_2 by cross-sectional - method. - -M R/GetCovDense.R -M tests/testthat/test_GetCovDense.R - -commit e68539848414e7dd013349ced66dab635c13273a -Author: mathchin -Date: Wed Apr 19 06:25:00 2017 +0800 - - Add package 'fields' into DESCRIPTION and pkgname.R - -M DESCRIPTION -M R/pkgname.R - -commit 8aab00a48dd2ef5203dc78cbf991108ffe7acfb7 -Merge: 927a5d3 f2e6aa5 -Author: mathchin -Date: Wed Apr 19 06:02:22 2017 +0800 - - Merge branch 'master' into fResReg - -commit 927a5d37ff6c362171d7f1b9050ab11c2f0aba22 -Author: mathchin -Date: Tue Apr 18 14:58:55 2017 +0800 - - Revise trailingcing whitespace. - -M R/FPCReg.R - -commit 53d1a814c8b71d974065c366792affbd30f4896b -Author: mathchin -Date: Tue Apr 18 02:17:09 2017 +0800 - - Add document (NAMESPACE; FPCReg). Revise replicated fun name in FPCReg. - -M NAMESPACE -M R/FPCReg.R -A man/FPCReg.Rd - -commit f2e6aa5c9396ede4cdfa23236198c7db4410ae1c -Author: hadjipantelis -Date: Wed Apr 12 22:01:29 2017 +0100 - - Minor (Bug fix (#9) and renaming recently added arg.) - -M R/CheckData.R -M R/MakeFPCAInputs.R -M man/MakeFPCAInputs.Rd -M tests/testthat/test_CheckData.R -M tests/testthat/test_MakeFPCAInputs.R - -commit c8574e376c200f7945272f767fe926e7b5e781c8 -Author: hadjipantelis -Date: Wed Apr 12 01:44:42 2017 +0100 - - Finalising unit-test - -M tests/testthat/test_MakeFPCAInputs.R - -commit 858705057573084a7de2705edcc7cb896b962bdc -Author: hadjipantelis -Date: Wed Apr 12 01:39:45 2017 +0100 - - Removing duplicate - -D tests/testthat/test_makeFPCAinputs.R - -commit 65782278640df25f3e0d9dc3a83913d469b0a594 -Author: hadjipantelis -Date: Wed Apr 12 01:16:17 2017 +0100 - - Minor enc. to MakeFPCAInput, unit-test, and some typos. - -M R/CheckData.R -M R/MakeFPCAInputs.R -M man/MakeFPCAInputs.Rd -M tests/testthat/test_CheckData.R -A tests/testthat/test_MakeFPCAInputs.R - -commit 1cd2797e6792e25a1a7a08951c78385e731bb025 -Author: mathchin -Date: Tue Apr 11 06:23:35 2017 +0800 - - Rename FPCReg.r to FPCReg.R - -R100 R/FPCReg.r R/FPCReg.R - -commit 7d8f40cfa06949b36ad3b727d8a107bbc263520b -Author: mathchin -Date: Tue Apr 11 06:19:25 2017 +0800 - - Add instruction and unit test. - -M R/FPCReg.r -A tests/testthat/test_FPCReg.R - -commit 92bbcdf8241a90104008dbfef34b4ffad3fc7df5 -Author: Xiongtao Dai -Date: Wed Mar 22 00:12:25 2017 -0700 - - Changed FPCAder documentation and test cases - -M R/FPCAder.R -M man/FPCAder.Rd -M tests/testthat/test_FPCAder.R - -commit 56d2310f11a15836ef23607e5b74549da4ff17a3 -Author: hadjipantelis -Date: Thu Mar 16 12:25:04 2017 +0000 - - Changes to predict() arguments - -M R/predict.FPCA.R -M man/predict.FPCA.Rd -M tests/testthat/test_predictFPCA.R - -commit 4a797793aac7dc5ad7a9aa1cd5242c2b61346242 -Author: Xiongtao Dai -Date: Wed Mar 15 23:05:38 2017 -0700 - - minor legendre basis fix - -M R/CreateBasis.R - -commit 859f364b76b3bfec9cf5ae3f7d76bb373a437e03 -Author: hadjipantelis -Date: Sat Mar 11 19:50:30 2017 +0000 - - Correcting typos in DESCRIPTION - -M DESCRIPTION - -commit 15c8bb78523dd13dd9acd2f61594fb1e7a10f6bd -Author: hadjipantelis -Date: Sat Mar 11 19:45:15 2017 +0000 - - Correcting typos in SBFitting doc and in S3 method - -M R/SBFitting.R -M R/predict.FPCA.R -M man/SBFitting.Rd -M man/predict.FPCA.Rd - -commit dcac1dc6bc84000a3a1b4d855b6c6a164c547a2d -Author: hadjipantelis -Date: Sat Mar 11 19:27:52 2017 +0000 - - predict function - -M NAMESPACE -A R/predict.FPCA.R -M man/SBFitting.Rd -A man/predict.FPCA.Rd -A tests/testthat/test_predictFPCA.R - -commit 8bb99026cffa3f1cace51eb00d5a025608ff43a7 -Author: Kyunghee Han -Date: Fri Mar 10 16:25:38 2017 -0800 - - Modification removing non-ascii characters in document. - -M R/SBFitting.R -M man/SBFitting.Rd - -commit 9ff102943de30f5fc6169b23ddf16610b16d6588 -Author: Xiongtao Dai -Date: Fri Mar 10 15:22:19 2017 -0800 - - rm FPCReg.r - -D R/FPCReg.r - -commit e95acfb6f282ca93234295abef2ed7ccf2fe879d -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:20 2017 -0800 - - Revert "Delete FPCReg.r" - - This reverts commit bdcfb2e36b810ca794ed5b822d6482d24eb956a6. - -A R/FPCReg.r - -commit 3ac8502da1c9d4be7a2e7987bf0c5e25c0eefa9b -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:19 2017 -0800 - - Revert "FPCReg" - - This reverts commit ad1d5eeaba7263de291a0e38e700e3f17644409b. - -D R/FPCReg.r - -commit 362cc6c1db98f4e8f569f5753a55af57fbece0a1 -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:18 2017 -0800 - - Revert "FPCReg" - - This reverts commit 15d255fcea414181a6dbebcb9f11ae43e213c18b. - -M DESCRIPTION -M NAMESPACE -M R/FPCReg.r - -commit e796a2ad3f7acacdef175e6585c0d27bc7006435 -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:17 2017 -0800 - - Revert "FPCReg" - - This reverts commit 9eafa71fa1db3acb6cd1d39326f11b635d31d012. - -M DESCRIPTION -M NAMESPACE - -commit 23a424217ebdf884e4b4a95a19be82c20a91c253 -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:16 2017 -0800 - - Revert "FPCReg" - - This reverts commit 42cffe50970cc73c92396a6122d00a632c69f83c. - -M DESCRIPTION - -commit 936fad17eaeba38cd368900eaa82f3e86c3e8e94 -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:13 2017 -0800 - - Revert "FPCReg" - - This reverts commit a44edd3464f26c74e43c62f011f38005c9156e84. - -M R/pkgname.R - -commit c7986c49b2d5dc6f174d37f124165b8e8a975bf4 -Author: Xiongtao Dai -Date: Fri Mar 10 15:19:04 2017 -0800 - - Revert "FPCReg" - - This reverts commit 91ec89588952f37c164c61d76082d864778cddab. - -M R/FPCReg.r - -commit ac7dd25a3d5f0504d534cf81e0a23b537312c7d5 -Author: Kyunghee Han -Date: Fri Mar 10 14:54:07 2017 -0800 - - fix stopping criterion; update test casefix stopping criterion - -M R/SBFitting.R -M tests/testthat/test_SBFitting.R - -commit 759d03bf32f863510da6a012725a96133db3a87b -Author: mathchin -Date: Sat Mar 11 06:33:14 2017 +0800 - - Revert "Modification of the stopping criterion of iteration of the algorithm." - - Changes of the functional regression function is in the - fResReg branch - - This reverts commit c61cf727a07e1cd833ea985882561f6dbd31c6a8. - -M R/SBFitting.R -M man/SBFitting.Rd - -commit 91ec89588952f37c164c61d76082d864778cddab -Author: mathchin -Date: Fri Mar 10 18:01:41 2017 +0800 - - FPCReg - -M R/FPCReg.r - -commit a44edd3464f26c74e43c62f011f38005c9156e84 -Author: mathchin -Date: Fri Mar 10 17:29:59 2017 +0800 - - FPCReg - -M R/pkgname.R - -commit 42cffe50970cc73c92396a6122d00a632c69f83c -Author: mathchin -Date: Fri Mar 10 17:24:50 2017 +0800 - - FPCReg - -M DESCRIPTION - -commit 9eafa71fa1db3acb6cd1d39326f11b635d31d012 -Author: mathchin -Date: Fri Mar 10 17:20:04 2017 +0800 - - FPCReg - -M DESCRIPTION -M NAMESPACE - -commit 15d255fcea414181a6dbebcb9f11ae43e213c18b -Author: mathchin -Date: Fri Mar 10 16:54:43 2017 +0800 - - FPCReg - -M DESCRIPTION -M NAMESPACE -M R/FPCReg.r - -commit ad1d5eeaba7263de291a0e38e700e3f17644409b -Author: mathchin -Date: Fri Mar 10 15:58:18 2017 +0800 - - FPCReg - -A R/FPCReg.r - -commit bdcfb2e36b810ca794ed5b822d6482d24eb956a6 -Author: mathchin -Date: Fri Mar 10 15:29:19 2017 +0800 - - Delete FPCReg.r - -D R/FPCReg.r - -commit eb2c0b5848244b859f549c9913e82e742f7a54f9 -Author: mathchin -Date: Fri Mar 10 15:21:41 2017 +0800 - - Add files via upload - -A R/FPCReg.r - -commit c61cf727a07e1cd833ea985882561f6dbd31c6a8 -Author: Kyunghee Han -Date: Tue Feb 28 17:10:35 2017 -0800 - - Modification of the stopping criterion of iteration of the algorithm. - -M R/SBFitting.R -M man/SBFitting.Rd - -commit ba992e894bc3c02d6e6a6d190a00181745a366fc -Merge: 6239576 bb49218 -Author: Kyunghee Han -Date: Mon Feb 27 16:47:09 2017 -0800 - - Merge pull request #8 from functionaldata/additive - - Additive - -commit bb49218cbe6b1838e687a10a53a66390a8f4524e -Merge: cb03d3f 6239576 -Author: Kyunghee Han -Date: Mon Feb 27 16:26:20 2017 -0800 - - Merge branch 'master' into additive - -commit cb03d3fd5752bf2094ea40b2538ca05a0422e3b8 -Author: Kyunghee Han -Date: Mon Feb 27 16:04:00 2017 -0800 - - SBFitting with following Google's R style - -M R/CompFntCent.R -M R/CondProjection.R -M R/MgnJntDensity.R -M R/NWMgnReg.R -M R/NormKernel.R -M R/SBFCompUpdate.R -M R/SBFitting.R -A R/ScaleKernel.R -M man/SBFitting.Rd -M tests/testthat/test_SBFitting.R - -commit 182a5cfbd0670aa69524ece3b5f946e90f89a545 -Author: Kyunghee Han -Date: Mon Feb 27 12:06:12 2017 -0800 - - first commit in the new branch - -M DESCRIPTION -M NAMESPACE -M R/NormKernel.R -M R/pkgname.R -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/CreateStringingPlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -D man/GetCrCovYX_old.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -D man/HandleNumericsAndNAN.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -A man/SBFitting.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -M man/Stringing.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd - -commit 6239576f2a3d3aaf69ae85a62bcba4f747536a9b -Author: hadjipantelis -Date: Mon Feb 27 01:03:05 2017 +0000 - - Minor:Fixing run-away int macro - -M DESCRIPTION -M NAMESPACE -M R/NormCurveToArea.R -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/CreateStringingPlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -D man/GetCrCovYX_old.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -D man/HandleNumericsAndNAN.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -A man/SBFitting.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -M man/Stringing.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd - -commit c8cbff80ea7f994b390fb4f5775120ba8c61a91c -Author: Kyunghee Han -Date: Sat Feb 25 12:51:02 2017 -0800 - - Modification of SBFitting.R (3rd) - - Minor modification in description. - -M R/SBFitting.R - -commit de67cd72330cbf75ebb976e451a29aab0a7dc83d -Author: Kyunghee Han -Date: Sat Feb 25 04:35:48 2017 -0800 - - Modification of SBFitting.R (2nd) - - There were mistakes in syntax for description. - -M R/SBFitting.R - -commit 14d7a9c0ce7e5e1c2a1afafb79d912ea2e221195 -Author: Kyunghee Han -Date: Sat Feb 25 04:26:45 2017 -0800 - - Modification of SBFitting.R - - It was my mistake to use #’ instead of #’ on description part. - -M R/SBFitting.R - -commit 49c2160cc3c9e1d3c3d2987f1116ba94b8981cd4 -Author: Kyunghee Han -Date: Sat Feb 25 03:59:34 2017 -0800 - - Modification of test_SBFitting.R - - I just added ‘#’ in the preamble to ignore my own sourcing commend. - -M tests/testthat/test_SBFitting.R - -commit 3df33a0ff1652b1bc69aade9cb24bdfa31aa6467 -Author: Kyunghee Han -Date: Sat Feb 25 03:54:21 2017 -0800 - - A tentative code of smooth backfitting for nonparametric additive models - - I’m committing my tentative R code of SBF which can be applied to - various additive models. It’s supposed to be modified in several times - for synchronizing the tPACE environment. Please refer to the code and - give me comments anytime! - -A R/CompFntCent.R -A R/CondProjection.R -A R/MgnJntDensity.R -A R/NWMgnReg.R -A R/NormKernel.R -A R/SBFCompUpdate.R -A R/SBFitting.R -A tests/testthat/test_SBFitting.R - -commit 7399911a56e17b4a3ff0ae92cf4be3d75d787c2f -Author: dmchris -Date: Tue Feb 21 17:09:57 2017 -0800 - - importing MASS - -M DESCRIPTION - -commit 31f73c9aa31b61e81b0a0d751266a39d93628229 -Author: dmchris -Date: Tue Feb 21 16:35:17 2017 -0800 - - Modified documentation for CreateStringingPlot - -M R/CreateStringingPlot.R -M man/CreateStringingPlot.Rd - -commit 5ab8faaced3d09345e7654251ff5604f2f7a1d38 -Author: dmchris -Date: Tue Feb 21 16:24:20 2017 -0800 - - Updated Documentations - -M NAMESPACE -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -A man/CreateStringingPlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -A man/GetCrCovYX_old.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -A man/HandleNumericsAndNAN.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -A man/Stringing.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd - -commit 77f1d2f694b1aed24d63b8af7587a57b20f7bf54 -Author: dmchris -Date: Tue Feb 21 16:18:35 2017 -0800 - - modifications for stringing - - 1. isStandardize -> standardize in Stringing() - 2. Added descriptions and corrected a typo on the x-label for stringed - order. - 3. modified test cases using up-to-date testthat package. - -M R/CreateStringingPlot.R -M R/Stringing.R -M tests/testthat/test_CreateStringingPlot.R -M tests/testthat/test_Stringing.R - -commit 2af5ac17acb9bb088a2a6abe60268f24aa9ec397 -Author: dmchris -Date: Thu Feb 16 20:31:04 2017 -0800 - - modified stringing, adding an independent plotting function - - modified correlation metric; - import mvrnorm and isoMDS from MASS; - add plotting function for observed & stringed predictors, and stringing - function. - -A R/CreateStringingPlot.R -M R/Stringing.R -M R/pkgname.R -A tests/testthat/test_CreateStringingPlot.R -M tests/testthat/test_Stringing.R - -commit 1a93b0c6a788d802c6252c3af392e84539575582 -Author: dmchris -Date: Tue Feb 14 22:35:24 2017 -0800 - - adding checks for user-specified metric matrix - -M R/Stringing.R - -commit f5a03ebcc8151fa2ccf79ad428f74aca50bab6ad -Author: dmchris -Date: Tue Feb 14 22:20:05 2017 -0800 - - tentative codes for stringing - - Feature various kinds of dissimilarity metrics. Uses UDS via function - MASS::isoMDS. Performance is better than Matlab. Standardization of - input data not yet implemented (could add an option, but Matlab version - doesn’t have this part.) - -A R/Stringing.R -A tests/testthat/test_Stringing.R - -commit cfe71296c149ae7aa5cd38b19f809eb7e4ad4de2 -Author: hadjipantelis -Date: Mon Feb 6 19:13:12 2017 +0000 - - Update DESCRIPTION - -M DESCRIPTION - -commit 9ce741d9c1afd4da6c933120ddcd85dfb59d329b -Author: hadjipantelis -Date: Sat Feb 4 15:18:10 2017 +0000 - - Minor updates and 'userRho' functionality. - -M DESCRIPTION -M R/CheckOptions.R -M R/FPCA.R -M R/NormCurveToArea.R -M R/SetOptions.R -M man/BwNN.Rd -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/ConvertSupport.Rd -M man/CreateBWPlot.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/FCCor.Rd -M man/FCReg.Rd -M man/FClust.Rd -M man/FOptDes.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FSVD.Rd -M man/FVPA.Rd -M man/GetCrCorYX.Rd -M man/GetCrCorYZ.Rd -M man/GetCrCovYX.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -M man/Lwls2DDeriv.Rd -M man/MakeBWtoZscore02y.Rd -M man/MakeFPCAInputs.Rd -M man/MakeGPFunctionalData.Rd -M man/MakeHCtoZscore02y.Rd -M man/MakeLNtoZscore02y.Rd -M man/MakeSparseGP.Rd -M man/NormCurvToArea.Rd -M man/SelectK.Rd -M man/SetOptions.Rd -M man/Sparsify.Rd -M man/WFDA.Rd -M man/Wiener.Rd -M man/fdapace.Rd -M man/fitted.FPCA.Rd -M man/fitted.FPCAder.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/plot.FPCA.Rd -M man/print.FPCA.Rd -M man/print.FSVD.Rd -M man/print.WFDA.Rd -M tests/testthat/test_CheckData.R - -commit 15fc3097153d342db0f6ef3a56dd0de6e10301df -Author: hadjipantelis -Date: Sat Feb 4 14:48:05 2017 +0000 - - Update README.md - -M README.md - -commit dd7cad6145909fb13c76b3c43b6474a5fd027379 -Author: hadjipantelis -Date: Fri Feb 3 23:35:32 2017 +0000 - - Update README.md - -M README.md - -commit b123b8393adce58f74ee13ec37236f6381c32207 -Author: hadjipantelis -Date: Fri Feb 3 23:28:26 2017 +0000 - - Area normalisation convenience func. - -M NAMESPACE -A R/NormCurveToArea.R -A man/NormCurvToArea.Rd - -commit e2266a5cc5ef4a3abc95f123cd92f3eab7586e87 -Author: hadjipantelis -Date: Mon Jan 30 23:24:36 2017 +0000 - - Print function for WFDA - -M NAMESPACE -M R/WFDA.R -A R/print.WFDA.R -M man/WFDA.Rd -A man/print.WFDA.Rd - -commit 815d8453b9689ef50aabccbf3a78cad999aeb460 -Author: hadjipantelis -Date: Sat Jan 28 16:48:42 2017 +0000 - - Update ISSUE_TEMPLATE.md - -M ISSUE_TEMPLATE.md - -commit be293326a1d339d775b6df25d990bdc6ba405a23 -Author: hadjipantelis -Date: Sat Jan 28 16:47:53 2017 +0000 - - Update ISSUE_TEMPLATE.md - -M ISSUE_TEMPLATE.md - -commit b972849ec811dedd6ac09ffe3e1193b9352bb43a -Author: hadjipantelis -Date: Sat Jan 28 16:45:22 2017 +0000 - - Created ISSUE_TEMPLATE - -A ISSUE_TEMPLATE.md - -commit ab9090be5bfc90cf103c6640214fd4f97ab274c5 -Author: hadjipantelis -Date: Tue Jan 24 20:04:27 2017 +0000 - - Updating dates. - -M DESCRIPTION -M LICENSE - -commit 451f1ef508909920a6b0fadeb53212d78d0ee085 -Author: hadjipantelis -Date: Tue Jan 24 19:45:15 2017 +0000 - - Minor changes - -M R/medfly25.R -M data/medfly25.RData -M man/FOptDes.Rd -M man/medfly25.Rd -M tests/testthat/test_FOptDes.R - -commit 6d2de5e8667585f5b2fd5005dba3ac7c0789e8b7 -Author: dmchris -Date: Mon Jan 23 23:19:31 2017 -0800 - - update medfly25.RData, modify test cases correspondingly - -M data/medfly25.RData -D data/medfly25_res.RData -M tests/testthat/test_FOptDes.R - -commit be7a84dcf4d3329634fec8d2eb914fabd9ffa70f -Author: dmchris -Date: Mon Jan 23 22:07:34 2017 -0800 - - Adding medfly25_res.RData, update test cases for FOptDes.R - -M R/FOptDes.R -A data/medfly25_res.RData -M tests/testthat/test_FOptDes.R - -commit 9277f019a26e729a638a329bba0b193b9dd857a8 -Author: hadjipantelis -Date: Mon Jan 23 21:36:49 2017 +0000 - - Adding the Jacques & Preda reference - -M R/FClust.R -M man/FClust.Rd -M man/FOptDes.Rd - -commit 58b4bfde61f7d4f5ed086b8f1b97eb5da8b09eef -Author: hadjipantelis -Date: Sun Jan 22 19:36:45 2017 +0000 - - MATLAB compatibiity WFDA test - -A inst/testdata/YmatFromWFPCAexample_rng123.RData -M tests/testthat/test_WFDA.R - -commit 8d6acffe385ca9045a79e5866e22d61cee416f62 -Merge: e725af9 75f7090 -Author: hadjipantelis -Date: Fri Jan 20 22:14:10 2017 +0000 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit e725af9a6c03392f6b70794873b8d64d968cdbfd -Author: hadjipantelis -Date: Fri Jan 20 22:13:03 2017 +0000 - - Minor update to 'CreateFuncBoxPlot' - -M R/CreateFuncBoxPlot.R - -commit 75f7090ddd9e6d3175f3ca82682ec664c2cd0435 -Author: dmchris -Date: Fri Jan 20 00:08:48 2017 -0800 - - added input checks - -M R/FOptDes.R -M tests/testthat/test_FOptDes.R - -commit 7cdc746984323172667eafe8974ac83bccc06192 -Author: dmchris -Date: Thu Jan 19 23:30:34 2017 -0800 - - small bug fix for FOptDes.R - -M R/FOptDes.R - -commit bb4912c0b8c5c5d90243f36a3385ffd882b65d9b -Author: dmchris -Date: Thu Jan 19 23:28:43 2017 -0800 - - modified documentation and input checks for FOptDes - - Passed the current test. Coming up with example with medfly25 data for - regression. - -M R/FOptDes.R -M tests/testthat/test_FOptDes.R - -commit 53cbfcbd6354e80061d37da1f361e5e34ce6ded8 -Author: hadjipantelis -Date: Sun Jan 15 23:43:14 2017 +0000 - - Making examples faster. - -M R/FOptDes.R -M R/kCFC.R -M man/FOptDes.Rd -M man/kCFC.Rd - -commit c7f6f9c62b421325af477fab78a6c4b56192f210 -Author: dmchris -Date: Fri Jan 13 14:18:11 2017 -0800 - - FOptDes test case bug fix & news update - -M NEWS -M tests/testthat/test_FOptDes.R - -commit a25ecc6380317fcb5e796942bb9db66d0fe6b32a -Author: hadjipantelis -Date: Fri Jan 13 21:41:11 2017 +0000 - - Basic clean-up. - -M NAMESPACE -M R/BestDes_SR.R -M R/BestDes_TR.R -M R/MCVOptRidge.R -A man/FOptDes.Rd - -commit 3f7c8e5ed4cbd36d457d660c72c3ae89786a6421 -Author: dmchris -Date: Fri Jan 13 03:01:00 2017 -0800 - - FOptDes test case - -A tests/testthat/test_FOptDes.R - -commit 7d59bcdb47d427b5dc3950b795d040377bd3546b -Author: dmchris -Date: Fri Jan 13 01:40:24 2017 -0800 - - Modifies FOptDes - -M R/FOptDes.R -M R/MCVOptRidge.R - -commit f926decc0872f2a9f9d2a3e9d130a1f4347d6e3f -Author: dmchris -Date: Fri Jan 13 00:18:31 2017 -0800 - - documentation example change - -M R/FOptDes.R - -commit 1fa62bdd4ecde787052b912a4ef94f40071dd00e -Author: dmchris -Date: Fri Jan 13 00:14:34 2017 -0800 - - Rename Foptdes.R to FOptDes.R - -R100 R/Foptdes.R R/FOptDes.R - -commit 59ab9055ead1075cb5bb061732767a661dfee077 -Author: dmchris -Date: Thu Jan 12 23:52:57 2017 -0800 - - FOptDes revised version - -A R/BestDes_SR.R -A R/BestDes_TR.R -M R/Foptdes.R -A R/MCVOptRidge.R - -commit dec2a13704a516c257197441d389dd945fd96580 -Author: dmchris -Date: Tue Jan 10 21:54:59 2017 -0800 - - optimal designs (tentative) - - Works for trajectory recovery and scalar response prediction for dense - and sparse data. Works for dense data now. - -A R/Foptdes.R - -commit 4818f738ef6dc597f859c32ab12fae79f7b23429 -Author: hadjipantelis -Date: Sat Jan 7 04:25:18 2017 +0200 - - Long line change. - -M R/WFDA.R -M man/WFDA.Rd - -commit f87db151a7e0416d58ff9c8009e5058ef8674955 -Author: hadjipantelis -Date: Fri Jan 6 18:44:25 2017 +0200 - - New version on DESC - -M DESCRIPTION - -commit f99dbe4c885ceb2359319c40fbfc8a5cc79f798d -Author: hadjipantelis -Date: Fri Jan 6 18:34:49 2017 +0200 - - WFDA Unit Test & Example - -M R/WFDA.R -M man/WFDA.Rd -A tests/testthat/test_WFDA.R - -commit 33336f2ac63342b00fda5d0aa6e342fb90ac3f2e -Author: hadjipantelis -Date: Fri Jan 6 03:36:06 2017 +0200 - - Update NEWS - -M NEWS - -commit 1676e49da7c5f39d3a45a2554a86574d762ed9ff -Author: hadjipantelis -Date: Thu Jan 5 16:51:07 2017 +0200 - - Additonal WFDA fixes. - -M R/WFDA.R -M man/WFDA.Rd - -commit 0d8b131f2edc72f6e80da573e4e1a3dc4775bb08 -Author: Xiongtao Dai -Date: Sun Dec 18 23:29:09 2016 +0800 - - rename FuncCorrCent -> FCCor - -M NAMESPACE -M NEWS -R089 R/FuncCorrCent.R R/FCCor.R -R081 man/FuncCorrCent.Rd man/FCCor.Rd -R070 tests/testthat/test_FuncCorrCent.R tests/testthat/test_FCCor.R - -commit 435a388193cbc908040bb71478ff12f95e6509b7 -Author: hadjipantelis -Date: Wed Dec 7 23:35:25 2016 +0000 - - Correcting test. - -M tests/testthat/test_RcppPseudoApprox.R - -commit effd439986138248a50eb812de2abf75f4102b24 -Author: hadjipantelis -Date: Wed Dec 7 23:30:58 2016 +0000 - - Omission! - -M R/WFDA.R - -commit 80f376356e7cce2b135631abbaf177400fe38572 -Author: hadjipantelis -Date: Wed Dec 7 22:48:01 2016 +0000 - - Tests and grid modifications. - -M R/WFDA.R -M src/RcppPseudoApprox.cpp -A tests/testthat/test_RcppPseudoApprox.R - -commit 694131494f0ed2ca3f836c522cc817f304f99aa1 -Author: hadjipantelis -Date: Tue Dec 6 22:28:36 2016 +0000 - - Cleaning up Rcpp file. - -D RcppInterp.cpp - -commit ba17d376af951614d8990e4b8dbcc3fa8bb6b3d9 -Author: hadjipantelis -Date: Tue Dec 6 22:27:39 2016 +0000 - - Further speed-ups. - -M R/WFDA.R - -commit 9c9b6a75b4a844492ebe16ebc6d3d4b625fed704 -Author: hadjipantelis -Date: Mon Dec 5 22:46:37 2016 +0000 - - Faster approx - -M R/RcppExports.R -M R/WFDA.R -M src/RcppExports.cpp -A src/RcppPseudoApprox.cpp - -commit f1c6a1edc3d798d8774ed533882386518f2e94ef -Author: hadjipantelis -Date: Mon Dec 5 22:24:46 2016 +0000 - - Speeding-up WFDA - -M R/RcppExports.R -M R/WFDA.R -M src/RcppExports.cpp -A src/Rcppsort.cpp - -commit c62be51e3bf7bbea81de33f3f40f17f4c69eda70 -Merge: 7b429b8 cb15dad -Author: hadjipantelis -Date: Mon Dec 5 21:13:59 2016 +0000 - - Merge pull request #5 from functionaldata/Rmixmod - - Rmixmod - -commit cb15dad1aba5ad75648d1ea52ae9f811851ab254 -Author: hadjipantelis -Date: Mon Dec 5 21:12:39 2016 +0000 - - Sorting out FClust - -M R/FClust.R -M man/FClust.Rd -M tests/testthat/test_FClust.R - -commit 7b429b8dd58450b76129bc398254413970cdb1e9 -Author: Xiongtao Dai -Date: Sun Dec 4 18:46:39 2016 -0800 - - travis - -M .travis.yml - -commit 808514b81c8b2f6f2353d59cb60e4e1d17b6cec3 -Author: Xiongtao Dai -Date: Sun Dec 4 18:16:10 2016 -0800 - - Rcpp 0.12.8 has a problem; dont use it on travis - -M .travis.yml -M DESCRIPTION - -commit 519413b40ffd10287ba0b2cacbea298019441521 -Author: Xiongtao Dai -Date: Sun Dec 4 18:05:23 2016 -0800 - - use new Rcpp - -M DESCRIPTION - -commit 1c38b78f2dadaccb71dee771af77a9b8374f3789 -Author: Xiongtao Dai -Date: Sun Dec 4 17:08:36 2016 -0800 - - fix WARNINGs and NOTEs - -M NAMESPACE -M R/CreateBasis.R -M R/GetNormalisedSample.R -M R/Lwls2DDeriv.R -M R/RcppExports.R -M R/fitted.FPCA.R -M R/pkgname.R -M R/plot.FPCA.R -M man/GetNormalisedSample.Rd -M man/Lwls2DDeriv.Rd -M man/plot.FPCA.Rd -M src/RcppExports.cpp -M tests/testthat/test_Rrotatemullwlsk.R - -commit 69a7b96a579c80d2525899624d24db1ce8c808eb -Author: hadjipantelis -Date: Mon Dec 5 00:39:03 2016 +0000 - - Dropping 'SEM' - -M R/FClust.R -M tests/testthat/test_FClust.R - -commit 709ccdcf0e6ac3d5b24d0659834c80bcf57114c9 -Author: Xiongtao Dai -Date: Sun Dec 4 16:35:28 2016 -0800 - - travis cache packages - -M .travis.yml - -commit dfe7fc95f108cd6ddb68146f3805683f9b60d50e -Author: Xiongtao Dai -Date: Sun Dec 4 16:23:25 2016 -0800 - - travis - -M .travis.yml - -commit e5e9e7969bc473cb64415a144628564835157f68 -Author: Xiongtao Dai -Date: Sun Dec 4 16:07:52 2016 -0800 - - travis - -M .travis.yml - -commit 9c228ce5dd8bdcaa6be01cd042edea4c1eef3731 -Author: Xiongtao Dai -Date: Sun Dec 4 15:45:20 2016 -0800 - - travis update R package cache - -M .travis.yml - -commit c1ba5b2fc0d1718f7f6c768d81e6a61178e5b562 -Author: Xiongtao Dai -Date: Sun Dec 4 12:58:22 2016 -0800 - - isolated degeneration problem in Rmixmod - -M R/FClust.R -M tests/testthat/test_FClust.R - -commit e595bb9925984fbfc1684b540b40718d81ed33c8 -Author: Xiongtao Dai -Date: Sun Dec 4 12:25:50 2016 -0800 - - Fix GetBinnedCurve.R - - Previously GetBinnedCurve produce binned data that does not cover the - output domain (range(obsGrid) would change), which is highly unexpected. - Now range(obsGrid) of the binned and the original dataset agree. - -M R/GetBinnedCurve.R -M tests/testthat/test_FClust.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_GetBinnedCurve.R -M tests/testthat/test_GetBinnedDataset.R - -commit 5ae78ba5d64355a58d808c130c133c965e073fa1 -Author: hadjipantelis -Date: Sun Nov 27 23:16:27 2016 +0000 - - Typo! - -M R/WFDA.R - -commit 1b184ad35e1e254c1839c92da8b02d052fd6a770 -Author: hadjipantelis -Date: Sun Nov 27 23:10:35 2016 +0000 - - Release candidate. WFDA correct. - -M R/WFDA.R -M man/WFDA.Rd - -commit f9253bb70375decab3de0846034109f1bbf58622 -Author: hadjipantelis -Date: Sat Nov 26 17:40:35 2016 +0000 - - Requesting newer survival package to make sure Hmisc works. - -M DESCRIPTION - -commit 6050cb63cf0283e3a8691d474b3c7d8fbc477225 -Author: hadjipantelis -Date: Sat Nov 26 17:20:08 2016 +0000 - - First working WFDA.R - -M NAMESPACE -M R/RcppExports.R -A R/WFDA.R -A RcppInterp.cpp -A man/WFDA.Rd -M src/RcppExports.cpp - -commit 237b5fe546f96254615b3f81af679f21d45d2027 -Merge: a1c3da1 4b12598 -Author: Xiongtao Dai -Date: Mon Oct 24 06:39:47 2016 +0100 - - Merge branch 'master' of github.com:functionaldata/tPACE - -commit a1c3da1f20fef43c27ae074e65a25cbf79fa0964 -Author: Xiongtao Dai -Date: Mon Oct 24 06:39:29 2016 +0100 - - update docs - -M NEWS -M man/FPCA.Rd -M man/FPCAder.Rd -M man/MakeSparseGP.Rd - -commit b49dda992eba98e02d8d66ba91fd6077420c75bb -Author: Xiongtao Dai -Date: Mon Oct 24 06:26:22 2016 +0100 - - minor fitted.FPCA - -M R/fitted.FPCA.R - -commit 4b12598c58295aeaabcce29f46d0e31e11bde482 -Author: Pantelis -Date: Wed Sep 14 17:04:05 2016 +0100 - - Commenting out unused variables in CPP. - -M R/RcppExports.R -M src/GetIndCEScoresCPP.cpp -M src/GetIndCEScoresCPPnewInd.cpp -M src/RcppExports.cpp - -commit dcc9ce0246ed6f5ca3616762a6c9df175e6b568f -Author: Xiongtao Dai -Date: Sun Sep 11 02:00:57 2016 -0700 - - minor fix in FPCA and MakeFPCAInputs - -M R/FPCA.R -M R/MakeFPCAInputs.R - -commit 004c0a22849d268d87c112edb057bed9ac797c01 -Author: Xiongtao Dai -Date: Tue Sep 6 14:24:22 2016 -0700 - - minor na fix for MakeFPCAInputs - -M R/MakeFPCAInputs.R - -commit 00a31d55d44d08314db362a1faef18b633ca9964 -Author: Xiongtao Dai -Date: Fri Sep 2 00:53:42 2016 -0700 - - minor change to CreatePathPlot FPCAder - -M R/CreatePathPlot.R -M R/FPCAder.R - -commit 72924a1d5c096696dbdd7662ef3e09f97f6e80df -Author: Xiongtao Dai -Date: Wed Aug 31 22:40:14 2016 -0700 - - fix FPC case - -M R/FPCAder.R - -commit 9b49b0576cd00ebacb11d01217bcd4828031a64b -Author: Xiongtao Dai -Date: Wed Aug 31 21:06:38 2016 -0700 - - add user Cov to MakeSparseGP - -M R/MakeSparseGP.R -M tests/testthat/test_MakeSparseGP.R - -commit 24f1302f9c127353f66fa18811f6da4cc1b1abcd -Author: Xiongtao Dai -Date: Wed Aug 31 12:10:33 2016 -0700 - - FPCAder add DPCCE - -M R/FPCAder.R -M R/Sparsify.R - -commit b77522355020ad844170c24b7ba452f22c0f69f4 -Author: Xiongtao Dai -Date: Sun Aug 21 13:37:00 2016 -0700 - - fix basis test - -M tests/testthat/test_CreateBasis.R - -commit bae8204725f9dfe8071fa168263f9abfc6278f6c -Author: Xiongtao Dai -Date: Sun Aug 21 11:17:39 2016 -0700 - - add basis (again) - -A tests/testthat/test_CreateBasis.R - -commit ce4b76fe30f48a276770cb8489095cde242ef89f -Author: Xiongtao Dai -Date: Sun Aug 21 11:11:32 2016 -0700 - - numerical tolerance modified for WSL - -M tests/testthat/test_Rmullwlsk.R - -commit 360451b117fa39cffac7ec5f43860afc380a35e4 -Author: Xiongtao Dai -Date: Sat Aug 20 16:59:03 2016 -0700 - - change back - -M R/FPCAder.R - -commit da012947b19a6cbcd52fc8d11a34fb7ab7321a29 -Author: Xiongtao Dai -Date: Sat Aug 20 15:44:03 2016 -0700 - - minor - -M R/FPCAder.R - -commit a1a41cf9300cf8640e50072bf0fc30c6d1d1bc32 -Author: Xiongtao Dai -Date: Sat Aug 20 15:40:30 2016 -0700 - - minor - -M R/FPCAder.R - -commit 98626e521ab06e34db62a8fac3842d35e24a3819 -Author: Xiongtao Dai -Date: Sat Aug 20 01:20:08 2016 -0700 - - FPCAder add bwMu bwCov; add poly legendre basis - -M R/CreateBasis.R -M R/FPCAder.R -M R/MakeGPFunctionalData.R -M R/MakeSparseGP.R -M R/SetDerOptions.R - -commit 5078a21f750f08a28fcd20c6a693b09651d19230 -Author: Xiongtao Dai -Date: Fri Aug 19 12:33:37 2016 -0700 - - FPCAder: clean up DPC; xiVarDer no smooth and trunc - -M R/FPCAder.R - -commit 0b1600eeb6e08fee5974846cbda267e04c03e76c -Author: Xiongtao Dai -Date: Tue Aug 16 18:29:37 2016 -0700 - - fix fitted.FPCAder.R - -M R/FPCAder.R -M R/fitted.FPCAder.R - -commit 27265ec9791ef0b108ece0aad99704520bc2664b -Author: Xiongtao Dai -Date: Tue Aug 16 02:24:56 2016 -0700 - - add DPC1 FPC1 - -M R/FPCAder.R -M R/MakeGPFunctionalData.R -M R/fitted.FPCAder.R -M man/MakeGPFunctionalData.Rd - -commit b568a3ebdb21175fdd0ae5830ca91c8fac9ad6eb -Author: Xiongtao Dai -Date: Sun Aug 14 18:50:41 2016 -0700 - - make cov11 symmetric - -M R/FPCAder.R - -commit 796080d7556986856721bf6c6f525584950e9c3b -Author: Xiongtao Dai -Date: Sun Aug 14 16:26:05 2016 -0700 - - fix test - -M NAMESPACE -M man/CreatePathPlot.Rd -A man/fitted.FPCAder.Rd -M tests/testthat/test_FPCAder.R -M tests/testthat/test_Lwls2DDeriv.R - -commit 06379cc31f493a652c4bd4ba7ca42c57b9b6c743 -Author: Xiongtao Dai -Date: Sun Aug 14 16:01:49 2016 -0700 - - update deriv; add util functions for der - -M R/CreatePathPlot.R -M R/FPCAder.R -M R/SetDerOptions.R -M R/fitted.FPCA.R -A R/fitted.FPCAder.R -M man/FPCAder.Rd -M man/fitted.FPCA.Rd -M tests/testthat/test_CreatePathPlot.R -M tests/testthat/test_FPCAder.R - -commit a79dae92123e8eb9e9c104f956bda8aa5c654de7 -Author: Xiongtao Dai -Date: Sun Jul 31 17:28:04 2016 -0700 - - 2D GCV criterion modified to prevent undersmoothing - -M NAMESPACE -M R/CreateBasis.R -M R/GCVLwls2DV2.R -A R/MakeSparseGP.R -M R/SetDerOptions.R -M R/fitted.FPCA.R -M man/ConvertSupport.Rd -M man/FPCAder.Rd -M man/Lwls1D.Rd -M man/Lwls2D.Rd -A man/Lwls2DDeriv.Rd -A man/MakeSparseGP.Rd -M man/fitted.FPCA.Rd -A tests/testthat/test_MakeSparseGP.R -M tests/testthat/test_fitted.R - -commit 5353dcac8fb17e4a06cb1ba1dba96336bd95f3ec -Author: Xiongtao Dai -Date: Fri Jul 29 14:41:35 2016 -0700 - - minor fix ConvertSupport - -M R/ConvertSupport.R - -commit 2130675bf88092520561165599c8c69241b5d0ec -Merge: e6f60dd 09a8ebc -Author: Xiongtao Dai -Date: Fri Jul 29 14:37:42 2016 -0700 - - merge master - -commit 09a8ebc8140039ea658d9ab156068cb7c3441244 -Author: Xiongtao Dai -Date: Thu Jul 28 00:02:06 2016 -0700 - - minor fix - -M R/CreatePathPlot.R - -commit 765a6ace3853b835493c68f0430bf77aa8fe6133 -Author: Xiongtao Dai -Date: Wed Jul 27 23:28:16 2016 -0700 - - Modified CreatePathPlot and GetNormalisedSample - -M NAMESPACE -M NEWS -M R/CreatePathPlot.R -M R/GetNormalisedSample.R -M R/MakeGPFunctionalData.R -M man/CreatePathPlot.Rd -M man/GetNormalisedSample.Rd -M tests/testthat/test_CreatePathPlot.R -A tests/testthat/test_GetNormalisedSample.R - -commit c55d525b791323c7413d37ae49184fa53f4d6ec0 -Author: Xiongtao Dai -Date: Tue Jul 19 22:17:06 2016 -0700 - - fix FVPA for very dense data - -M R/FVPA.R -M tests/testthat/test_FVPA.R - -commit 6106383733fb0b4735a3bdd7a92d744afd84fc6d -Author: Xiongtao Dai -Date: Mon Jul 18 18:38:49 2016 -0700 - - forgot to export - -M NAMESPACE -M R/FuncCorrCent.R - -commit 33f495ec3b2578d47437e54ccd1e1559f22ce31c -Merge: b6b6f76 53ead11 -Author: Xiongtao Dai -Date: Mon Jul 18 18:17:47 2016 -0700 - - Merge branch 'master' of github.com:functionaldata/tPACE - -commit b6b6f76a746005133943dcb418334fa05e2ad116 -Author: Xiongtao Dai -Date: Mon Jul 18 18:17:43 2016 -0700 - - add FuncCorrCent - -M R/FCReg.R -M R/FPCA.R -A R/FuncCorrCent.R -M R/GetCrCovYZ.R -M R/Sparsify.R -M R/Wiener.R -M man/FCReg.Rd -M man/FPCA.Rd -A man/FuncCorrCent.Rd -M man/GetCrCovYZ.Rd -D man/Lwls2Dv1.Rd -D man/oldFCReg.Rd -M man/plot.FPCA.Rd -A tests/testthat/test_FuncCorrCent.R - -commit a12ddbb45cfccb92a43a6205b05a11329ac0ebfc -Author: Xiongtao Dai -Date: Mon Jul 18 11:18:14 2016 -0700 - - rm old functions - -D R/Lwls2Dv1.R -D R/oldFCReg.R - -commit 53ead110993420e8784627861de72178cfa311b9 -Author: hadjipantelis -Date: Sat Jul 16 03:07:59 2016 +0300 - - Fixed NEWS - -M NEWS - -commit 156fda792b46767d741f5a8371c425a0609fa9a7 -Author: Xiongtao Dai -Date: Sat Jul 16 00:54:53 2016 +0100 - - add obsOnly to CreatePathPlot; diagnostic plot renaming - -M NEWS -M R/CheckOptions.R -M R/CreateDesignPlot.R -M R/CreateDiagnosticsPlot.R -M R/CreatePathPlot.R -M R/FPCA.R -M R/RcppExports.R -M R/SetOptions.R -M R/plot.FPCA.R -M R/print.FPCA.R -M R/print.FSVD.R -M man/CreateDesignPlot.Rd -M man/CreatePathPlot.Rd -M man/FPCA.Rd -R060 man/CreateDiagnosticsPlot.Rd man/plot.FPCA.Rd -M src/RcppExports.cpp -M tests/testthat/test_CreateDiagnosticPlot.R -M tests/testthat/test_CreatePathPlot.R -M vignettes/fdapaceVignetteKnitr.Rnw - -commit fb3bfffb84c7fbfbe71b50e0c6fe528afdb45e71 -Author: hadjipantelis -Date: Thu Jul 14 22:19:57 2016 +0100 - - Necessary change to avoid non-reproducible error... - -M vignettes/fdapaceVignetteKnitr.Rnw - -commit cea6cb116ee0f964a66af99f2efb93ce43f670d4 -Merge: 0ad3464 42a0d42 -Author: Xiongtao Dai -Date: Wed Jul 13 17:45:28 2016 -0700 - - Merge branch 'master' of github.com:functionaldata/tPACE - -commit 0ad3464c4ba116604795fa5f46e89c621e542de9 -Author: Xiongtao Dai -Date: Wed Jul 13 17:45:23 2016 -0700 - - update NEWS - -M NEWS - -commit 42a0d42da7b5efe33795b1ed5de93e642c68b58d -Author: hadjipantelis -Date: Thu Jul 14 01:38:03 2016 +0100 - - Class-label reversal due to new Rmixmod. - -M tests/testthat/test_FClust.R - -commit 26fbe04e43cb275fd233db795e8d4f8dba47a938 -Author: hadjipantelis -Date: Thu Jul 14 01:00:12 2016 +0100 - - Only DESC changes. - -M DESCRIPTION -M R/RcppExports.R -M src/RcppExports.cpp - -commit c7d5b742b24d64f58532e2ca0f0ebeb868aff4bc -Author: Xiongtao Dai -Date: Fri Jul 8 18:14:53 2016 +0100 - - slightly update MakeGP - -M DESCRIPTION -M NAMESPACE -M R/MakeGPFunctionalData.R -M man/MakeGPFunctionalData.Rd - -commit 3a6f3818bba3c05798f17360f124cd8dd3094b18 -Author: Xiongtao Dai -Date: Wed Jul 6 23:11:58 2016 +0100 - - bug fix in GetCrCovYX; slightly modified SelectK; more tests - -M NEWS -M R/CreateDiagnosticsPlot.R -M R/CreatePathPlot.R -M R/FCReg.R -M R/GetCrCovYX.R -M R/Lwls2D.R -M R/MakeFPCAInputs.R -M R/RcppExports.R -M R/SelectK.R -M R/fitted.FPCA.R -M R/plot.FPCA.R -M README.md -M man/CreateDiagnosticsPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreatePathPlot.Rd -M man/FCReg.Rd -M man/SelectK.Rd -M man/fitted.FPCA.Rd -D man/plot.FPCA.Rd -M src/RcppExports.cpp -M tests/testthat/test_FCReg.R - -commit ad6cb41b48ff6c6a59d31e21bdebc737f6a47e4d -Author: Xiongtao Dai -Date: Mon Jul 4 19:18:12 2016 +0100 - - rm test coverage - -M .travis.yml - -commit e7116dd78046b5a2bed5ba3411629fa5ed404ffc -Author: Xiongtao Dai -Date: Mon Jul 4 01:46:15 2016 -0700 - - try code coverage - -M .gitignore -M .travis.yml -M R/RcppExports.R -M README.md -M src/RcppExports.cpp -M tests/testthat/test_GetCrCovYX.R - -commit 769f01fcb691f48c49f8524272602bea0cfb32eb -Author: Xiongtao Dai -Date: Sun Jul 3 18:56:31 2016 -0700 - - clean up vignette; k->K in CreateFuncBoxPlot - -M .gitignore -M R/CreateFuncBoxPlot.R -D vignettes/DerivativesFlies.pdf -D vignettes/DerivativesFliesInspect.pdf -D vignettes/DiagPlotSparse.pdf -D vignettes/DiagnoFlies.pdf -D vignettes/DiagnoSimu.pdf -D vignettes/DifferentBandwidths.pdf -D vignettes/OutliersFlies.pdf -D vignettes/PathFlies.pdf -D vignettes/fdapaceVignetteKnitr-concordance.tex -D vignettes/fdapaceVignetteKnitr.R -M vignettes/fdapaceVignetteKnitr.Rnw -D vignettes/fdapaceVignetteKnitr.bbl -D vignettes/fdapaceVignetteKnitr.pdf -D vignettes/fdapaceVignetteKnitr.tex - -commit 0666d1b950f374437c115f8bbb4fd47f6bb4a2ea -Merge: c4ccac7 e3593d7 -Author: Xiongtao Dai -Date: Sun Jul 3 18:11:42 2016 -0700 - - speed up crosscov smoothing by binning - -commit e3593d7abd911321c27366703f8ae8d74d4268d7 -Author: Xiongtao Dai -Date: Sun Jul 3 17:54:22 2016 -0700 - - make useGAM work for GetCrCovYX - -M R/GetCrCovYX.R -M R/GetCrCovYX_old.R -R100 tests/testthat/test_funcReg.R tests/testthat/test_FCReg.R -M tests/testthat/test_getCrCovYX.R - -commit c4ccac77740826b158337d66a63df123e7c46498 -Author: Xiongtao Dai -Date: Sun Jul 3 15:18:15 2016 -0700 - - selectK default to FVE; cat -> message; document - -M R/GCVLwls2DV2.R -M R/GetBinNum.R -M R/GetEigenAnalysisResults.R -M R/SelectK.R -M R/SetOptions.R -M R/SetSVDOptions.R -M R/print.FPCA.R -M R/print.FSVD.R -M man/CreatePathPlot.Rd -M man/FPCA.Rd -M man/MakeGPFunctionalData.Rd -M man/SelectK.Rd -M man/fitted.FPCA.Rd - -commit 14d23840e4283eedee311ef17e88e2a47a36aaa8 -Author: Xiongtao Dai -Date: Sun Jul 3 14:56:05 2016 -0700 - - use K as the number of components, instead of k - -M NEWS -M R/CreatePathPlot.R -M R/FPCA.R -M R/GetLogLik.R -M R/MakeGPFunctionalData.R -M R/SelectK.R -M R/SubsetFPCA.R -M R/fitted.FPCA.R -M R/print.FPCA.R -M R/print.FSVD.R -M tests/testthat/test_CreatePathPlot.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_fitted.R -M tests/testthat/test_selectK.R - -commit 81c38bc507b3b0b4908501d32ea072453259e336 -Author: Xiongtao Dai -Date: Sun Jul 3 13:56:40 2016 -0700 - - fix plot: legend aside - -M R/CreateBWPlot.R -M R/CreateDesignPlot.R -M R/CreateDiagnosticsPlot.R -M R/CreateModeOfVarPlot.R -M R/RcppExports.R -M man/CreateDesignPlot.Rd -M man/CreateDiagnosticsPlot.Rd -M man/CreateModeOfVarPlot.Rd -M src/RcppExports.cpp -A tests/testthat/test_CreateDiagnosticPlot.R - -commit 97cb18fcb7be5da46aeb0f4fb08618b87054fd26 -Author: hadjipantelis -Date: Thu Jun 30 02:17:48 2016 -0700 - - Bug-fix in CheckAndCreateCOPoptions.R - -M R/CheckAndCreateCOPoptions.R - -commit 057ec8264813d54ebce7444e65a3a91994c86aed -Author: hadjipantelis -Date: Wed Jun 29 19:40:44 2016 -0700 - - Plots cross-covariances with 'CreateCovPlot' and some minor stuff. - -M R/CreateCovPlot.R -M R/CreateModeOfVarPlot.R -M R/RcppExports.R -M src/RcppExports.cpp - -commit c8f2e28fabf53ca268f942c2b1fad38e7bd169f3 -Author: Xiongtao Dai -Date: Mon Jun 27 18:04:18 2016 -0700 - - remove old file ignored by .gitignore - -M .gitignore -M R/RcppExports.R -M src/RcppExports.cpp - -commit 0062c6d8461ea9fc9325c768cec7b20394e0de2d -Merge: 7eb6c50 a834c77 -Author: Xiongtao Dai -Date: Mon Jun 27 17:21:25 2016 -0700 - - Merge branch 'master' of github.com:functionaldata/tPACE - -commit 7eb6c50e91e1dc820563e191f1bdf2edd860a234 -Author: Xiongtao Dai -Date: Mon Jun 27 17:21:05 2016 -0700 - - documentation change for GetCrCovY* - -M R/GetCrCovYX.R -M R/GetCrCovYZ.R -M R/RcppExports.R -M man/GetCrCovYX.Rd -M man/GetCrCovYZ.Rd -M src/RcppExports.cpp - -commit a834c77e1f56a18ef22cb436155d456bb204c54d -Author: hadjipantelis -Date: Sat Jun 25 22:07:35 2016 -0700 - - Bug/typo in CreateOutliers plot fixed. - -M R/CreateOutliersPlot.R - -commit 47ad9cfd91aa1909a5650ee99d0349e2ac5ac8e3 -Author: hadjipantelis -Date: Thu Jun 23 23:44:47 2016 -0700 - - Update README.md - -M README.md - -commit 75f5f043cf2d51b9780611e9ef6ce4e6dc8f22ff -Author: Xiongtao Dai -Date: Thu Jun 23 23:21:22 2016 -0700 - - Update README.md - -M README.md - -commit fb8d64f2b5ae31d4d62513ff975bfb02338d8e59 -Author: Xiongtao Dai -Date: Fri Jun 24 07:11:23 2016 +0100 - - revert changes - -M NEWS -M README.md - -commit 230014ecde63dc4caa088f0acc703bfdaf9256ae -Author: Xiongtao Dai -Date: Fri Jun 24 07:05:00 2016 +0100 - - Revert "Minor" - - This reverts commit a5724a0263da6e21b7e7953ddcee3b20dc93f4ac. - -M NEWS - -commit 53397c70edcc280edd917d42ea1083d7d5a816c6 -Author: Xiongtao Dai -Date: Thu Jun 23 23:01:17 2016 -0700 - - Update README.md - -M README.md - -commit a5724a0263da6e21b7e7953ddcee3b20dc93f4ac -Author: hadjipantelis -Date: Fri Jun 17 21:44:49 2016 -0700 - - Minor - -M NEWS - -commit 994df965c81156f11448e632bc215cdb8015cd30 -Author: hadjipantelis -Date: Fri Jun 17 21:40:34 2016 -0700 - - NEWS file. - -A NEWS -M man/CreateOutliersPlot.Rd - -commit 2fe1569a035e1febf2b1708acdf2fb2a45c67a48 -Author: hadjipantelis -Date: Fri Jun 17 20:46:16 2016 -0700 - - Commenting out legacy reference code. - -M R/GetCrCovYX.R - -commit 71eac69ecfb047d63ad3a4d0208b6514261a6640 -Author: hadjipantelis -Date: Fri Jun 17 20:31:50 2016 -0700 - - Sorting out expensive unit-tests. - -M R/GetCrCovYX.R -M tests/AAAtestthat.R -M tests/testthat/test_FSVD.R -M tests/testthat/test_funcReg.R -M tests/testthat/test_getCrCovYX.R - -commit 516d20e72c7f07a98ca4e8d7d7eabec8a1b976e3 -Merge: 3d48ea5 0f3c3e8 -Author: hadjipantelis -Date: Fri Jun 17 18:44:32 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 3d48ea5942b65cff617df1e79e5ab1b1ec8f1707 -Author: hadjipantelis -Date: Fri Jun 17 18:44:08 2016 -0700 - - Updating the bandwidth selection for CrCov. - -M R/GetCrCovYX.R - -commit 258f2ded3b4f433c0caa2d9b24ad5388df77ccf1 -Author: Xiongtao Dai -Date: Fri Jun 17 16:07:12 2016 -0700 - - speed up crosscov smoothing by binning - -M R/BinRawCov.R -M R/GetCrCovYX.R -A R/GetCrCovYX_old.R -M R/GetRawCrCovFuncFunc.R -M R/RcppExports.R -M man/CreateOutliersPlot.Rd -M src/RcppExports.cpp -M tests/AAAtestthat.R -M tests/testthat/test_GetRawCrCovFuncFunc.R -M tests/testthat/test_getCrCovYX.R -M tests/testthat_slow.R - -commit 0f3c3e856d3611b9af94b6ffb180ea4eac6233a8 -Author: Xiongtao Dai -Date: Fri Jun 17 00:22:41 2016 -0700 - - travis test - -M tests/AAAtestthat.R - -commit e8dbd1fbaf47a550116f9eb6ef41252c6ea8c093 -Author: Xiongtao Dai -Date: Thu Jun 16 23:33:09 2016 -0700 - - fix test - -R100 tests/test_FClust.R tests/testthat/test_FClust.R -R100 tests/test_FPCA.R tests/testthat/test_FPCA.R -R100 tests/test_FSVD.R tests/testthat/test_FSVD.R -R100 tests/test_FVPA.R tests/testthat/test_FVPA.R -R100 tests/test_funcReg.R tests/testthat/test_funcReg.R -M tests/testthat_slow.R - -commit 82148e98cd72c43110847b8096f3c698210653cb -Author: Xiongtao Dai -Date: Thu Jun 16 23:01:51 2016 -0700 - - run on travis - -R100 tests/testthat.R tests/AAAtestthat.R -M tests/test_FClust.R -M tests/test_FSVD.R -M tests/test_FVPA.R - -commit aa2b3ebb2709aac97184bc5f7f19d1882556b76d -Author: Xiongtao Dai -Date: Thu Jun 16 22:48:24 2016 -0700 - - Do not run test_FSVD which is too slow - -M tests/test_FSVD.R - -commit 51370bc2d45be486eefeebdbadb9f75efb57fbda -Author: Xiongtao Dai -Date: Thu Jun 16 22:46:03 2016 -0700 - - split tests - -R100 tests/testthat/test_FClust.R tests/test_FClust.R -R100 tests/testthat/test_FPCA.R tests/test_FPCA.R -R100 tests/testthat/test_FSVD.R tests/test_FSVD.R -R100 tests/testthat/test_FVPA.R tests/test_FVPA.R -R100 tests/testthat/test_funcReg.R tests/test_funcReg.R -M tests/testthat.R -A tests/testthat_slow.R - -commit 9392f53e73a4f9a39cc496a1ebf529fd73bd370d -Author: Xiongtao Dai -Date: Thu Jun 16 19:12:39 2016 -0700 - - upload RData - -A inst/testdata/200curvesByExampleSeed123.RData -A inst/testdata/InputForRotatedMllwlskInCpp.RData -A inst/testdata/InputFormMllwlskInCpp.RData -A inst/testdata/dataForGcvLwls.RData -A inst/testdata/dataForGcvLwlsTest.RData -A inst/testdata/dataForGetRawCov.RData -A inst/testdata/dataGeneratedByExampleSeed123.RData -A inst/testdata/datasetToTestRrotatedSmoother.RData -A inst/testdata/xcovForGetEigens1.csv - -commit 6b80a8379a79737c5ae8ebd317715e17141fdf1e -Author: Xiongtao Dai -Date: Thu Jun 16 18:38:07 2016 -0700 - - minor - -M tests/testthat/test_funcReg.R - -commit 6bf20c28a49a56e42ca2c231741eac037edb4885 -Author: Xiongtao Dai -Date: Thu Jun 16 18:27:35 2016 -0700 - - load file - -A inst/testdata/gene.dat -A inst/testdata/growth.dat -M tests/testthat/test_FClust.R -M tests/testthat/test_GetRawCov.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedMeanCurve.R -M tests/testthat/test_Lwls2D.R -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_RmullwlskUniversal.R -M tests/testthat/test_Rrotatemullwlsk.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_gcvlwls1d1.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getMinb.R - -commit c45ed206698d0216e08953d5a6131ec30ca5edeb -Author: Xiongtao Dai -Date: Thu Jun 16 16:55:51 2016 -0700 - - move test dataset - -D data/200curvesByExampleSeed123.RData -D data/InputForRotatedMllwlskInCpp.RData -D data/InputFormMllwlskInCpp.RData -D data/dataForGcvLwls.RData -D data/dataForGcvLwlsTest.RData -D data/dataForGetRawCov.RData -D data/dataGeneratedByExampleSeed123.RData -D data/datasetToTestRrotatedSmoother.RData -D data/gene.dat -D data/growth.dat -D data/xcovForGetEigens1.csv -M tests/testthat/test_GetRho.R -M tests/testthat/test_Lwls2D.R -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_Rrotatemullwlsk.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_gcvlwls1d1.R -M tests/testthat/test_gcvlwls2dV2.R - -commit abf89ae17a8b3a55baa474be1d500b11fc6f9f60 -Author: Xiongtao Dai -Date: Thu Jun 16 02:06:46 2016 +0100 - - fix test cases - -M tests/testthat/test_CreateFolds.R -M tests/testthat/test_funcReg.R -M tests/testthat/test_gcvlwls2dV2.R - -commit 0fcfdc413c80239fe1944364a3a3c74d9beb8aeb -Author: Xiongtao Dai -Date: Thu Jun 16 00:45:18 2016 +0100 - - remove devtools from tests - -M tests/testthat/test_BinRawCov.R -M tests/testthat/test_BwNN.R -M tests/testthat/test_ConvertSupport.R -M tests/testthat/test_CreatePathPlot.R -M tests/testthat/test_FClust.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_FSVD.R -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_FVPA.R -M tests/testthat/test_FitEigenValues.R -M tests/testthat/test_GetBinnedCurve.R -M tests/testthat/test_GetBinnedDataset.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetCovDense.R -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_Lwls2D.R -M tests/testthat/test_createDesignPlot.R -M tests/testthat/test_cumtrapzRcpp.R -M tests/testthat/test_funcReg.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getCrCovYX.R -M tests/testthat/test_getCrCovYZ.R -M tests/testthat/test_getMinb.R -M tests/testthat/test_pc_covE.R -M tests/testthat/test_rotateLwls2dV2.R -M tests/testthat/test_selectK.R -M tests/testthat/test_trapzRcpp.R -M tests/testthat/test_useBin.R - -commit 5c6bb452f72c0b2b674a2badb7ee329731d0ce30 -Author: hadjipantelis -Date: Tue Jun 14 23:57:01 2016 -0700 - - Addtions to CreateOutliersPlot - -M DESCRIPTION -M R/CheckAndCreateCOPoptions.R -M R/CreateOutliersPlot.R - -commit 3d128bd5068249e62e47fdad656863a2c1a1c4ca -Merge: cb6cacc 6ac2b05 -Author: hadjipantelis -Date: Tue Jun 14 19:47:46 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit cb6cacc0687bbd5defb3846b3b9a867fafed5ee2 -Author: hadjipantelis -Date: Tue Jun 14 19:47:21 2016 -0700 - - Weed out non-ASCII character - -M R/FClust.R -M man/FClust.Rd - -commit 6ac2b05536c195900b35798a19be8df3316e0343 -Author: hadjipantelis -Date: Tue Jun 14 14:02:05 2016 -0700 - - Minor (Suggests: testthat) - -M DESCRIPTION - -commit 78b08d6dc1f35e6a6e51cfe3f31864a41426b43e -Author: hadjipantelis -Date: Tue Jun 14 13:47:10 2016 -0700 - - Trying to run all the unitests on Travis.. - -M tests/testthat.R - -commit 85a05736836ed68f2a0df15b782363f6ad4ce0f0 -Merge: 2d48374 1f6b8e2 -Author: hadjipantelis -Date: Tue Jun 14 13:32:46 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 2d48374738c872f3fd6e9fc764c788d69e44f1ba -Author: hadjipantelis -Date: Tue Jun 14 13:32:30 2016 -0700 - - Elementary RmullwlskUniversal Rmullwlsk Equivalence test. - -A tests/testthat/test_RmullwlskUniversal.R - -commit 1f6b8e2557cc2f4bb92dfd7f33eb2611c6f8fbab -Author: hadjipantelis -Date: Tue Jun 14 08:57:07 2016 -0700 - - Update .travis.yml - -M .travis.yml - -commit 05525972664a5cb89435c0769ce63cfd95b8d94a -Author: hadjipantelis -Date: Tue Jun 14 02:45:53 2016 -0700 - - Deleted print.FSVD example. - -M R/print.FSVD.R -M man/print.FSVD.Rd - -commit 207b80c38781c3327f51c106863039f7dd7c1e44 -Author: hadjipantelis -Date: Tue Jun 14 02:20:40 2016 -0700 - - Unit-tests and simplifying slices code. - -M R/CreateOutliersPlot.R -M tests/testthat/test_FSVD.R - -commit fa7696ed47fc73341c551d5ca114864a7108bc26 -Merge: a6cf75d 26144e6 -Author: hadjipantelis -Date: Tue Jun 14 00:28:45 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit a6cf75d08396d21f87c4fbc707e8f8c8bf068456 -Author: hadjipantelis -Date: Tue Jun 14 00:28:41 2016 -0700 - - Fixing flip - -M R/FSVD.R - -commit 26144e6ee019351281d569c906338833259d76cd -Author: Xiongtao Dai -Date: Mon Jun 13 23:32:40 2016 -0700 - - travis - -M NAMESPACE -M man/CreateOutliersPlot.Rd -M man/FPCA.Rd -M man/FSVD.Rd - -commit 40370a2a0815cdc8f6983a282cc6222a1e863e8d -Author: Xiongtao Dai -Date: Mon Jun 13 23:14:10 2016 -0700 - - fix minor bugs for packaging - -M R/FSVD.R -M R/pkgname.R - -commit e13c8af99936acf5662a21521e9d7af8915d95a2 -Author: Xiongtao Dai -Date: Mon Jun 13 22:02:38 2016 -0700 - - travis - -D vignettes/fdapaceVignette.Rnw - -commit 5a5f9eda35905bab18c150c47c38e567fc10c97c -Author: Xiongtao Dai -Date: Mon Jun 13 21:41:13 2016 -0700 - - minor bug fix - -M R/SetSVDOptions.R - -commit a99deefcd0c5fff6b05cb0213100343cb0eb7fdf -Merge: d5ca605 7ddd9ab -Author: Xiongtao Dai -Date: Mon Jun 13 17:11:17 2016 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit d5ca605cb679462a6db227c617114c4281c2812f -Author: Xiongtao Dai -Date: Mon Jun 13 17:11:07 2016 -0700 - - travis - -M vignettes/fdapaceVignetteKnitr.Rnw -M vignettes/fdapaceVignetteKnitr.pdf -M vignettes/fdapaceVignetteKnitr.tex - -commit 7ddd9ab5b72c24cbdc2a9b298ebafd86bcf48997 -Merge: 52e79ee 753aef1 -Author: hadjipantelis -Date: Mon Jun 13 16:50:43 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 52e79ee3dd60a9ac11341e7e491bd50af90fbb06 -Author: hadjipantelis -Date: Mon Jun 13 16:50:22 2016 -0700 - - Changes to FSVD, CreateOutlierPlot, FPCA docs, CheckAndCreateCOPoptions - -A R/CheckAndCreateCOPoptions.R -M R/CreateOutliersPlot.R -M R/FPCA.R -M R/FSVD.R -M R/SetSVDOptions.R - -commit 753aef1a22a1c5f0c49e56c217047142fe3bccc4 -Author: Xiongtao Dai -Date: Mon Jun 13 15:01:22 2016 -0700 - - travis - -M .travis.yml - -commit 8ed71d2de3ba7327e06a4f6b47dd9fc72c2f310e -Author: Xiongtao Dai -Date: Mon Jun 13 14:54:55 2016 -0700 - - travis - -M .travis.yml - -commit 3594ab081148a068e062abd4daad65712435efd9 -Author: Xiongtao Dai -Date: Mon Jun 13 14:35:51 2016 -0700 - - latex package -tikz - -M vignettes/fdapaceVignetteKnitr-concordance.tex -M vignettes/fdapaceVignetteKnitr.Rnw -M vignettes/fdapaceVignetteKnitr.bbl -M vignettes/fdapaceVignetteKnitr.pdf -M vignettes/fdapaceVignetteKnitr.tex - -commit f975ad3210a0d4c9d46dc2fa1088bad229fbc80b -Author: Xiongtao Dai -Date: Mon Jun 13 13:25:51 2016 -0700 - - travis - -M .travis.yml - -commit 3b0ca2d93abb3d76e91ee55a0307cf79e209a348 -Author: Xiongtao Dai -Date: Mon Jun 13 12:57:57 2016 -0700 - - travis - -M .travis.yml - -commit 86c0acbbe7b72bbdaa15d95381161098413a7255 -Author: Xiongtao Dai -Date: Mon Jun 13 12:45:52 2016 -0700 - - travis - -M .travis.yml - -commit aa0a361f9495f7fdb174762a9dc1a33bf3127329 -Author: hadjipantelis -Date: Fri Jun 10 19:42:07 2016 -0700 - - Regularisation options - -M R/CheckSVDOptions.R -M R/FSVD.R -M R/SetSVDOptions.R - -commit fc4dd6e8e1e844061ea410ef320e3c36187942bb -Author: hadjipantelis -Date: Fri Jun 10 16:00:00 2016 -0700 - - Basic .Rd and further exports - -M NAMESPACE -A man/FSVD.Rd -M man/GetCrCovYX.Rd -A man/print.FSVD.Rd -M tests/testthat/test_getCrCovYX.R - -commit ebf87f74fae8c82578dc1f4e2dedee8b32a67a8b -Author: hadjipantelis -Date: Fri Jun 10 15:32:00 2016 -0700 - - Adding correct unit-tests, speed-ups to FSVD and minor fixes. - -M R/FSVD.R -M R/GetCrCovYX.R -M R/SetSVDOptions.R -M R/print.FSVD.R -M tests/testthat/test_FClust.R -M tests/testthat/test_FSVD.R -M tests/testthat/test_FVPA.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_funcReg.R - -commit 715feba9e7fae12984b9a4d7ce0d683e79965247 -Author: hadjipantelis -Date: Fri Jun 10 13:47:33 2016 -0700 - - Update test_FSVD.R - -M tests/testthat/test_FSVD.R - -commit c32d290c5c08f30ac579ef788ca8b33aac40c3e9 -Author: dmchris -Date: Fri Jun 10 08:44:16 2016 -0700 - - modified unit test - - Added bw for sparse case: bw1=bw2=1.2. - Modified comparison only on singular correlation (rho1). - -M tests/testthat/test_FSVD.R - -commit b422acbc3d2a4c2be1f09ae5b81a459f8e4c89a1 -Author: hadjipantelis -Date: Wed Jun 8 22:08:12 2016 -0700 - - Update fdapaceVignetteKnitr.Rnw - -M vignettes/fdapaceVignetteKnitr.Rnw - -commit 388aeaecdaee4946e654cf68db7320e880fe13cb -Author: hadjipantelis -Date: Wed Jun 8 21:57:42 2016 -0700 - - Update .travis.yml - -M .travis.yml - -commit 2fcff7cb180b2ceba3c721d3ef749f8106886997 -Author: hadjipantelis -Date: Wed Jun 8 17:55:25 2016 -0700 - - Update .travis.yml - -M .travis.yml - -commit f72bc4eb2673bb79f2286b8b6ebe3a02f02da95d -Author: hadjipantelis -Date: Wed Jun 8 17:41:11 2016 -0700 - - Update README.md - -M README.md - -commit 6796430157d7fa4d9b6a1b4776a579ff8f35ca6d -Author: hadjipantelis -Date: Wed Jun 8 17:40:37 2016 -0700 - - Update README.md - -M README.md - -commit 054c1423f472e5d800de73c626be26db4b066180 -Author: hadjipantelis -Date: Wed Jun 8 17:38:20 2016 -0700 - - .org to .md - -R100 README.org README.md - -commit ad08e900631c2acba1dfc96daff02d8244c8e869 -Author: hadjipantelis -Date: Wed Jun 8 17:35:00 2016 -0700 - - Minor tags changes. - -M README.org - -commit 5e16750e5870b00d6d8dd3f3249404104c1dba6f -Author: hadjipantelis -Date: Wed Jun 8 17:28:56 2016 -0700 - - Minor. - -M R/FSVD.R -M README.org - -commit e7f9766e1f8bac261d7e383e3dc1d31b82f0a388 -Author: hadjipantelis -Date: Tue Jun 7 18:41:50 2016 -0700 - - Update .travis.yml - -M .travis.yml - -commit 4b59a8b0ed704050149905ec9a5a85e532806e3e -Author: dmchris -Date: Tue Jun 7 16:54:41 2016 -0700 - - FSVD output rho -> canCorr, add unit test - -M R/FSVD.R -A tests/testthat/test_FSVD.R - -commit ffca5073e355d7899cf791d00e050f4038370b8d -Author: hadjipantelis -Date: Tue Jun 7 15:04:11 2016 -0700 - - Fixing output name. - -M R/FSVD.R -M R/SetSVDOptions.R - -commit b9624ec65c9467015e060c6e4d609f45964fa132 -Author: hadjipantelis -Date: Tue Jun 7 14:02:28 2016 -0700 - - Create .travis.yml - -A .travis.yml - -commit 795414378ab3e9143050248a13a941d964112db5 -Author: hadjipantelis -Date: Tue Jun 7 01:02:23 2016 -0700 - - Starting ROxygen2 on FSVD. - -M R/FSVD.R - -commit b371f7149f54ec0c0909933fc4b7e477de6197c4 -Author: hadjipantelis -Date: Mon Jun 6 20:13:04 2016 -0700 - - Cosmetic change to FSVD (print.FSVD function)/Dropping AdjustBW1.R - -D R/AdjustBW1.R -M R/FSVD.R -M R/GetSmoothedMeanCurve.R -A R/print.FSVD.R - -commit e7ab6a71942ee4a097d6e27d5188aa23174c8adc -Merge: 1fa7744 ba1ead8 -Author: Xiongtao Dai -Date: Sun Jun 5 23:45:35 2016 -0700 - - Merge branch 'inputData' - -commit 1fa7744c42d7e275d33279fac148aff2758221be -Author: dmchris -Date: Sun Jun 5 17:53:34 2016 -0700 - - tentative FSVD codes - - works for simulation setting in the paper for both dense and sparse - case. Featuring estimation of canonical correlations as well as the - singular scores. - -A R/CheckSVDOptions.R -A R/FSVD.R -A R/SetSVDOptions.R - -commit 152c9346d3b7a18cacaa05150b542a72c096ed30 -Author: hadjipantelis -Date: Fri Jun 3 14:30:36 2016 -0700 - - Example & doc fixes, new minor CreateModeOfVarPlot update. - -M R/CreateModeOfVarPlot.R -M R/FClust.R -M R/kCFC.R -M R/print.FPCA.R -M man/FClust.Rd -M man/FVPA.Rd -M man/kCFC.Rd -M man/medfly25.Rd -M man/print.FPCA.Rd -D run_tests.R -D vignettes/Rplots.pdf - -commit 7275bae41d195553160f86c0ec3dc09922517877 -Author: hadjipantelis -Date: Thu Jun 2 20:01:22 2016 -0700 - - Fixed FVPA example. - -M R/FVPA.R - -commit ce03a8a80e6fb6b4cf66919e8f4c2da96bc0bc2d -Author: hadjipantelis -Date: Thu Jun 2 19:51:08 2016 -0700 - - New FClust example that doesn't use Berk. growth data. - -M R/FClust.R -M R/medfly25.R - -commit c6ccce47354338a1858b8b91a821b9a705c6f7b8 -Author: hadjipantelis -Date: Thu Jun 2 08:16:12 2016 -0700 - - Fixing NAMESPACE2 - -M NAMESPACE -M R/pkgname.R - -commit 1da60fbba4013eedd7dc82ae22daabc2bfecd24a -Author: hadjipantelis -Date: Thu Jun 2 01:33:11 2016 -0700 - - Fixing a bit of NAMESPACE - -M NAMESPACE -M R/GetCrCovYZ.R -M R/pkgname.R -M man/GetCrCovYZ.Rd - -commit 5be2382f431e53a13737f5b5ccc42c58c41097a1 -Author: hadjipantelis -Date: Thu Jun 2 00:39:10 2016 -0700 - - Minor2. - -M R/CreateOutliersPlot.R -M R/pkgname.R - -commit 7aeb7976a0a99745d94a277c672cc6d611067477 -Author: hadjipantelis -Date: Thu Jun 2 00:02:34 2016 -0700 - - Minor - -M R/medfly25.R -M man/CreateModeOfVarPlot.Rd -M man/FClust.Rd -M man/medfly25.Rd - -commit ba1ead841205237c0eec69f3073b804d183aac48 -Author: Xiongtao Dai -Date: Wed Jun 1 17:02:44 2016 -0700 - - return binned data as inputData - -M R/FPCA.R -M tests/testthat/test_FPCA.R - -commit 12a21372dedef889f3331b74e6313400d4786184 -Merge: 1159c1a 65f49d4 -Author: Xiongtao Dai -Date: Wed Jun 1 16:56:35 2016 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 1159c1ac66e98ecf3d7f5c0d70fb2dd9343cfcee -Author: Xiongtao Dai -Date: Wed Jun 1 16:56:27 2016 -0700 - - suggests plot3D - -M DESCRIPTION -M R/CreateCovPlot.R - -commit 65f49d4f6894655fde4bba5c7cdec9dcf982c830 -Merge: 688ef5a d06f164 -Author: hadjipantelis -Date: Wed Jun 1 16:46:05 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 688ef5a61ac8ab07c71aceb9c7cc1e50a952a587 -Author: hadjipantelis -Date: Wed Jun 1 16:45:46 2016 -0700 - - test for cumtrapzRcpp and checks for Rmixmod/minqa. - -M DESCRIPTION -M R/FClust.R -M R/GetCrCovYX.R -A tests/testthat/test_cumtrapzRcpp.R - -commit d06f1641e0fec8a38f5b4f4683cc45890ac7be1e -Author: hadjipantelis -Date: Tue May 31 18:51:14 2016 -0700 - - Minor (fig height) - -M vignettes/fdapaceVignetteKnitr.Rnw - -commit 951557c736d45b6fb977eb25f8e36920cc5dc76d -Author: hadjipantelis -Date: Tue May 31 18:38:19 2016 -0700 - - FCluster in the vignette. - -M vignettes/fdapaceVignetteKnitr.Rnw -M vignettes/roxygen.bib - -commit 7ee932076d943a4271cffefd8a474d1de40e8414 -Author: hadjipantelis -Date: Tue May 31 17:36:03 2016 -0700 - - Rainbow plot and fast cumtrapz - -M R/CreateModeOfVarPlot.R -M R/RcppExports.R -M src/RcppExports.cpp -A src/cumtrapzRcpp.cpp - -commit 24cd37351e5be9d06a24a266cf1c86bfe61bf031 -Author: hadjipantelis -Date: Sat May 28 16:46:09 2016 -0700 - - Change argument names 'y/t' to 'Ly/Lt' - -M R/FClust.R - -commit 1fa9a79aa422196acd982cc128a6272be29f4361 -Author: hadjipantelis -Date: Fri May 27 16:12:24 2016 -0700 - - Legend in DiagnosticsPlot for Phi - -M R/CreateDiagnosticsPlot.R - -commit e6f60dd61d3af9095ecf278be1d907c4c9d726f1 -Author: Xiongtao Dai -Date: Fri May 27 01:35:46 2016 -0700 - - dense DPC OK; diag() bug fix - -M R/ConvertSupport.R -M R/CreatePathPlot.R -M R/FPCAder.R -M R/GenerateFunctionalData.R -M R/GetLogLik.R -M R/Lwls1D.R -M R/MakeGPFunctionalData.R -M R/SelectK.R -R100 R/SetDerOption.R R/SetDerOptions.R -M R/Wiener.R -M R/fitted.FPCA.R -A R/str.FPCA.R -M tests/testthat/test_FPCAder.R - -commit a5e98a13323fe9b186cdc24db2196befe05f3288 -Author: hadjipantelis -Date: Thu May 26 23:29:12 2016 -0700 - - Adding Rmixmod to the Suggested - -M DESCRIPTION - -commit 8cf285cdc477fe12d81d563af5ec13857f981463 -Author: hadjipantelis -Date: Thu May 26 23:25:08 2016 -0700 - - FClust unit-test commit - -A tests/testthat/test_FClust.R -M tests/testthat/test_FVPA.R - -commit d2a9c9dffe3b94462b6cc094b3dcc98007d79f49 -Author: hadjipantelis -Date: Thu May 26 23:13:40 2016 -0700 - - FClust commit - -M NAMESPACE -A R/FClust.R -M R/GetSmoothedCovarSurface.R -M R/kCFC.R -A man/FClust.Rd -M man/kCFC.Rd - -commit 7616f4b2a5fcf17468b9651306acf1e1661ae5b4 -Author: Xiongtao Dai -Date: Thu May 26 17:06:09 2016 -0700 - - fix DenseWithMV methodXi=\'IN\' - -M R/CheckOptions.R -M tests/testthat/test_FPCA.R - -commit b382709f77ff4c6001e62ba34eea4707d9c390da -Author: hadjipantelis -Date: Thu May 26 12:36:36 2016 -0700 - - Minor stuff on kCFC and change for DenseWithMV - -M R/CheckOptions.R -M R/GetRawCov.R -M R/IsRegular.R -M R/RcppExports.R -M R/kCFC.R -M src/RcppExports.cpp - -commit 2ab31c3e7697b5b83db5a7d17c6fa76d074408ba -Author: Xiongtao Dai -Date: Wed May 25 15:34:01 2016 -0700 - - mu regGrid documentation - -M R/FPCA.R -M R/RcppExports.R -M man/FPCA.Rd -M src/RcppExports.cpp - -commit 6798ed937f38252623bc8552edc809e915580125 -Author: Xiongtao Dai -Date: Mon May 23 21:30:43 2016 -0700 - - fix minor bugs - -M R/GCVLwls2DV2.R -M R/GetCovDense.R -M R/GetEigenAnalysisResults.R -M tests/testthat/test_GetCovDense.R -M tests/testthat/test_gcvlwls2dV2.R - -commit a1698e3ea8470f0d89379283423d0ad11735878b -Author: Xiongtao Dai -Date: Mon May 23 16:07:28 2016 -0700 - - 2D smoother derivatives - -M R/Lwls2D.R -A R/Lwls2DDeriv.R -M R/RcppExports.R -M src/RcppExports.cpp -A src/RmullwlskUniversalDeriv.cpp -A tests/testthat/test_Lwls2DDeriv.R - -commit 271603dd3b51350d4a01983c6cc840418cf13833 -Author: hadjipantelis -Date: Mon May 23 15:52:02 2016 -0700 - - Minor unit-test fix. - -M R/GetCovDense.R -M tests/testthat/test_GetCovDense.R - -commit 0558c55d0227c6177a4c68abba09a9c173b98ffa -Author: hadjipantelis -Date: Mon May 23 15:22:07 2016 -0700 - - Minor patches to getGCVscoresV2. - -M R/GCVLwls2DV2.R -M tests/testthat/test_gcvlwls2dV2.R - -commit 83731fa1f428b482d3c97fcdac23c7b7d9a5272b -Author: hadjipantelis -Date: Mon May 23 14:31:44 2016 -0700 - - Convert support export. - -M NAMESPACE -M R/ConvertSupport.R -M R/fitted.FPCA.R -A man/ConvertSupport.Rd -M man/fitted.FPCA.Rd - -commit 237648a314a3d34bdcfa89dffd9caf94071f918c -Author: Xiongtao Dai -Date: Mon May 23 00:58:51 2016 +0100 - - minor - -M .gitignore -M R/CheckOptions.R - -commit c92aafd7ba58649afc8cb5c383de81736f716efc -Author: hadjipantelis -Date: Sat May 21 13:00:00 2016 -0700 - - Minor fixes to kCFC - -M R/fitted.FPCA.R -M R/kCFC.R -M man/fitted.FPCA.Rd -M man/kCFC.Rd - -commit d8219c925e0b50ea387c61058ffbce8b8dc649be -Author: Xiongtao Dai -Date: Sat May 21 08:50:33 2016 +0100 - - bug fix; improve plotting functions - -M R/CreateBWPlot.R -M R/CreateDesignPlot.R -M R/CreatePathPlot.R -M R/GetCovDense.R - -commit e21e7e33e3f2ce17687bf69952452ee86c1e479e -Author: Xiongtao Dai -Date: Wed May 18 22:01:38 2016 -0700 - - for R CMD BUILD - -M DESCRIPTION -A vignettes/fdapaceVignetteKnitr.R -M vignettes/fdapaceVignetteKnitr.Rnw -M vignettes/fdapaceVignetteKnitr.pdf -M vignettes/fdapaceVignetteKnitr.tex - -commit 244c505b7beff16bd778ac39af98f8964b02e1ca -Author: Xiongtao Dai -Date: Wed May 18 21:14:14 2016 -0700 - - format knitr vignette - -M .gitignore -M vignettes/Sweavel.sty -M vignettes/fdapaceVignetteKnitr-concordance.tex -M vignettes/fdapaceVignetteKnitr.Rnw -M vignettes/fdapaceVignetteKnitr.pdf -M vignettes/fdapaceVignetteKnitr.tex - -commit 05ee40391857fddc4e830a07199286059e204c98 -Author: Xiongtao Dai -Date: Sun May 15 22:12:37 2016 -0700 - - add FCReg example - -M R/FCReg.R -M man/FCReg.Rd - -commit 2d706fb2b24a407d78062e15d7568faa3fbc1e31 -Author: hadjipantelis -Date: Sun May 15 03:00:38 2016 -0700 - - Fixing error in the vignette. - -A vignettes/Rplots.pdf -A vignettes/fdapaceVignetteKnitr-concordance.tex -M vignettes/fdapaceVignetteKnitr.Rnw -A vignettes/fdapaceVignetteKnitr.bbl -A vignettes/fdapaceVignetteKnitr.pdf -A vignettes/fdapaceVignetteKnitr.tex - -commit ba8c6266dc0eff6dfb43267d523d52fda82e71ff -Author: Xiongtao Dai -Date: Sun May 15 01:02:39 2016 -0700 - - knitr vignette - -A vignettes/Sweavel.sty -A vignettes/fdapaceVignetteKnitr.Rnw - -commit abfe5433a39fb1e284dd1b7d8cf6b1d90e8f38e2 -Author: Xiongtao Dai -Date: Sat May 14 23:17:27 2016 -0700 - - speed up dense case; fix CreatePathPlot bug - -M R/CheckData.R -M R/CreatePathPlot.R -M R/FPCA.R -M R/GetBinnedDataset.R -M R/GetCovDense.R -M R/GetMeanDense.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M tests/testthat/test_FPCA.R - -commit ea1555a57f3dcec431d3d614e2a60ca5905d2ab8 -Author: Xiongtao Dai -Date: Sat May 14 14:17:06 2016 -0700 - - fix bug in FCReg - -M R/FCReg.R -D R/funcReg.R -D R/oldfuncReg.R - -commit 84e682d4406667d85d6ba1024a89a2d2a14ee69a -Author: hadjipantelis -Date: Tue May 10 19:30:22 2016 -0700 - - kCFC additions. - -M R/kCFC.R -A data/gene.dat -A data/growth.dat - -commit 3cfa8279822af122400630c7e15bafc020322454 -Author: hadjipantelis -Date: Tue May 10 13:37:56 2016 -0700 - - Minor bug fix. - -M R/kCFC.R - -commit d2d46c591ebe49531c337f9c5c52d36e668eb389 -Author: hadjipantelis -Date: Tue May 10 13:24:12 2016 -0700 - - Fixing doc. - -M NAMESPACE -R083 man/FkC.Rd man/kCFC.Rd - -commit a7570d2c362da8fd02f2fd65fa5f89a7b0b0545c -Merge: f3d9862 300d5da -Author: hadjipantelis -Date: Tue May 10 13:21:47 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit f3d9862ea6cfc383154fd2bf3bd83507c54e634e -Author: hadjipantelis -Date: Tue May 10 13:21:10 2016 -0700 - - Updated kCFC - -M NAMESPACE -M R/CheckData.R -M R/FPCA.R -D R/FkC.R -M R/RcppExports.R -A R/kCFC.R -M man/FPCA.Rd -M man/FkC.Rd -M src/RcppExports.cpp - -commit 300d5dabf987826378c3d1b1ccb7d603eb165fe4 -Author: Xiongtao Dai -Date: Tue May 10 20:14:46 2016 +0100 - - minor - -M NAMESPACE -M R/CheckData.R -M R/FPCA.R -M man/FPCA.Rd -M man/FkC.Rd - -commit c5b982620181e9286c6692bd91c6a9f82df64b9f -Author: hadjipantelis -Date: Mon May 9 23:21:14 2016 -0700 - - JMC Func Clustering - -A R/FkC.R -A man/FkC.Rd -A man/Lwls2Dv1.Rd - -commit 88abf5b71825eb98cb4a22e91da9b03fb1a5bb0a -Author: Xiongtao Dai -Date: Mon May 9 18:12:14 2016 +0100 - - fix sigma2 estimate (2nd diff) for dense case - -M R/GetCovDense.R -M R/RcppExports.R -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/Lwls2D.Rd -M src/RcppExports.cpp -M src/RmullwlskUniversal.cpp - -commit bf53d6d0b228fdbd7082ce9365fe0974f4074185 -Author: hadjipantelis -Date: Sat May 7 17:27:09 2016 -0700 - - Partial fix - -M R/CreateOutliersPlot.R - -commit 1424aaeb086f2e946136631b86e634b39f900d4f -Merge: b572ade 329fe36 -Author: hadjipantelis -Date: Sat May 7 13:55:20 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit b572ade7505812d537108a15830aa6b6a7c4b40b -Author: hadjipantelis -Date: Sat May 7 13:54:57 2016 -0700 - - Minor. - -M R/CreateOutliersPlot.R - -commit 329fe3612ac812ada2e6eca158e03e85c5e57acd -Author: Xiongtao Dai -Date: Fri May 6 16:56:46 2016 -0700 - - add test for CreatePathPlot; minor - -M R/GCVLwls2DV2.R -A tests/testthat/test_CreatePathPlot.R -D tests/testthat/test_createPathPlot.R - -commit cf97b1d9975d2add55bda83a3207f42fb320800c -Author: hadjipantelis -Date: Fri May 6 11:57:50 2016 -0700 - - Changes based on feedback. - -M R/CreateCovPlot.R -M R/CreateDesignPlot.R -M R/CreateOutliersPlot.R -M R/CreateScreePlot.R - -commit 847123685932f864863e66568900c5bd7af18590 -Author: Xiongtao Dai -Date: Wed May 4 23:28:18 2016 -0700 - - revert change. The user should set showObs - -M R/CreatePathPlot.R - -commit afc513e2b0241f87211205ea04a46970738e6f87 -Author: Xiongtao Dai -Date: Wed May 4 23:19:27 2016 -0700 - - Update CreatePathPlot.R - -M R/CreatePathPlot.R - -commit 93f9dd4b0bea068916b9e89693389d14e922fee7 -Author: hadjipantelis -Date: Wed May 4 20:23:16 2016 -0700 - - Minor fixes on SetOptions and Lwls2D - -M R/Lwls2D.R -M R/SetOptions.R - -commit db749cabd250bbfe30981937340943d451d1daf0 -Author: dmchris -Date: Tue May 3 12:14:08 2016 -0700 - - Modify GetLogLik - - To speedup calculation for dense case. - -M R/GetLogLik.R - -commit 1f53d6d3855a8178018f38d7530076ae2d3740da -Author: hadjipantelis -Date: Sat Apr 30 23:30:02 2016 -0700 - - Making 'plain' smoother the default for Gaussian kernels - -M R/Lwls2D.R - -commit 44e5720b77b5cc7f4a2630bbd572412b4c7098c0 -Author: hadjipantelis -Date: Sat Apr 30 00:34:27 2016 -0700 - - Universal smoother - -M R/Lwls2D.R -M R/RcppExports.R -M src/RcppExports.cpp -M src/Rmullwlsk.cpp -M src/RmullwlskCCsort2.cpp -A src/RmullwlskUniversal.cpp -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_Lwls2D.R - -commit 00c3bf5a605db072909d6e5ae9df97af5c1ca464 -Author: hadjipantelis -Date: Fri Apr 29 18:48:20 2016 -0700 - - Removing test dataset - -D ProblematicLwls2D.RData - -commit 6cfe339f60e8dd9843049d95524217034a32cadb -Author: hadjipantelis -Date: Fri Apr 29 18:46:06 2016 -0700 - - Ironing out the new smoother - -A ProblematicLwls2D.RData -M R/GetCrCovYX.R -M R/Lwls2D.R -R058 R/Lwls2D2.R R/Lwls2Dv1.R -M R/RcppExports.R -M man/Lwls2D.Rd -M src/RcppExports.cpp -M src/RmullwlskCC.cpp -M src/RmullwlskCCsort2.cpp - -commit adc98b85d7c71b2f672f664095b489844ed0bcba -Author: hadjipantelis -Date: Fri Apr 29 16:01:35 2016 -0700 - - Clearing up the new smoother. - -M R/Lwls2D2.R - -commit 2e4ec003bac26e9151174e058be99dcaae0619ad -Author: hadjipantelis -Date: Fri Apr 29 15:55:13 2016 -0700 - - Merging Lwls2D2.R into master - -A R/Lwls2D2.R - -commit 6b2d8eb3d3430e6917a070d62bc4050a05eaedd7 -Author: hadjipantelis -Date: Fri Apr 29 15:51:10 2016 -0700 - - Merging RmullwlskCCsort2.cpp into master - -A src/RmullwlskCCsort2.cpp - -commit c88eb27ca752a9b9c2d793d2386c477b4cefbb48 -Author: hadjipantelis -Date: Fri Apr 29 13:44:59 2016 -0700 - - Minor renaming. - -M R/GetNormalisedSample.R - -commit ff9e288485ae1ed504f6baaec8db9210d4a22090 -Author: hadjipantelis -Date: Thu Apr 28 21:59:11 2016 -0700 - - Updating/upgrading CreateOutliersPlot - -M R/CreateOutliersPlot.R -M man/CreateOutliersPlot.Rd - -commit 46e5765f33f38574a8c9a3cab7a853ee5042983b -Author: Xiongtao Dai -Date: Tue Apr 26 05:24:51 2016 +0100 - - modified default rho - -M R/FPCA.R -M R/SetOptions.R -M man/FPCA.Rd -M tests/testthat/test_FPCA.R - -commit 2808d1a93eb887489a51e2e9f2c067a308c56702 -Author: hadjipantelis -Date: Mon Apr 25 20:27:13 2016 -0700 - - Fixing degenerate cov.matrix case. - -M R/GetCEScores.R -M src/GetIndCEScoresCPP.cpp -M tests/testthat/test_GetCEScores.R - -commit f85d0a3dba08acae4bba8eda1d95216e15fd6b4d -Merge: 380c5b8 9f20444 -Author: hadjipantelis -Date: Mon Apr 25 15:29:56 2016 -0700 - - Merge pull request #3 from hadjipantelis/fixYT - - Merging fixes on default argument names and unit-tests. - -commit 9f20444bae9584adb8754156640bcee597e37a69 -Author: hadjipantelis -Date: Mon Apr 25 15:25:55 2016 -0700 - - Checks to pass all unit tests. - -M R/BwNN.R -M R/GetCrCovYX.R -M R/GetCrCovYZ.R -M R/GetMinb.R -M R/Minb.R -M R/RcppExports.R -M src/RcppExports.cpp -M tests/testthat/test_BwNN.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_FVPA.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_GetSmoothedMeanCurve.R -M tests/testthat/test_SetOptions.R -M tests/testthat/test_createPathPlot.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_funSim.R -M tests/testthat/test_gcvlwls1d1.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getCrCovYX.R -M tests/testthat/test_getCrCovYZ.R -M tests/testthat/test_getMinb.R -M tests/testthat/test_minb.R - -commit 251c71dbad9269a2500e68d97ade65c6c4ad0b62 -Author: Xiongtao Dai -Date: Sun Apr 24 18:30:12 2016 -0700 - - update documentation also - -M man/CreateBWPlot.Rd -M man/CreateCovPlot.Rd -M man/CreateDesignPlot.Rd -M man/CreateDiagnosticsPlot.Rd -M man/CreateFuncBoxPlot.Rd -M man/CreateModeOfVarPlot.Rd -M man/CreateOutliersPlot.Rd -M man/CreatePathPlot.Rd -M man/CreateScreePlot.Rd -M man/FCReg.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FVPA.Rd -M man/GetCrCovYZ.Rd -M man/SelectK.Rd -M man/Sparsify.Rd -M man/fitted.FPCA.Rd -M man/print.FPCA.Rd - -commit 9e5bd2d8dfdf2ecb131f87dd2e924e539ba51143 -Author: Xiongtao Dai -Date: Sun Apr 24 18:24:39 2016 -0700 - - y t yList tList to Ly Lt - -M R/CreateBWPlot.R -M R/CreateCovPlot.R -M R/CreateDesignPlot.R -M R/CreateDiagnosticsPlot.R -M R/CreateFuncBoxPlot.R -M R/CreateModeOfVarPlot.R -M R/CreateOutliersPlot.R -M R/CreatePathPlot.R -M R/CreateScreePlot.R -M R/FCReg.R -M R/FPCA.R -M R/FPCAder.R -M R/FVPA.R -M R/GetCrCovYZ.R -M R/GetLogLik.R -M R/GetNormalisedSample.R -M R/HandleNumericsAndNAN.R -M R/RcppExports.R -M R/SelectK.R -M R/Sparsify.R -M R/TruncateObs.R -M R/Wiener.R -M R/fitted.FPCA.R -M R/funcReg.R -M R/oldFCReg.R -M R/oldfuncReg.R -M R/print.FPCA.R -M src/RcppExports.cpp -M tests/testthat/test_BinRawCov.R -M tests/testthat/test_BwNN.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_FitEigenValues.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_Lwls2D.R -M tests/testthat/test_createDesignPlot.R -M tests/testthat/test_createPathPlot.R -M tests/testthat/test_fitted.R -M tests/testthat/test_funSim.R -M tests/testthat/test_funcReg.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getCrCovYX.R -M tests/testthat/test_getCrCovYZ.R -M tests/testthat/test_getMinb.R -M tests/testthat/test_pc_covE.R -M tests/testthat/test_rotateLwls2dV2.R -M tests/testthat/test_selectK.R -M tests/testthat/test_useBin.R -M tests/testthat/test_wiener.R - -commit 380c5b8cc6f26b1843619c9e30dc0d0053640154 -Author: Xiongtao Dai -Date: Sun Apr 24 15:25:05 2016 -0700 - - modified MakeGPFunctionalData, export/unexport funcs - -M NAMESPACE -M R/CheckData.R -M R/CheckOptions.R -M R/FCReg.R -M R/FVPA.R -M R/GetBinnedDataset.R -M R/HandleNumericsAndNAN.R -M R/MakeFPCAInputs.R -M R/MakeGPFunctionalData.R -M R/SetOptions.R -D man/HandleNumericsAndNAN.Rd -M man/MakeFPCAInputs.Rd -A man/MakeGPFunctionalData.Rd - -commit a79c5d4dcbaa8047ca03ee4d8ef18af981c2c41c -Author: hadjipantelis -Date: Wed Apr 20 14:50:06 2016 -0700 - - Add random GP data maker. - -A R/MakeGPFunctionalData.R - -commit 11c1b33db39d8c71cd93a0ce4a08ee6a35c7cb5d -Author: hadjipantelis -Date: Mon Apr 18 19:36:56 2016 -0700 - - Update CreatePathPlot.R - -M R/CreatePathPlot.R - -commit ca7b7aca5a691b9db0111f79c1de535b3d1cf770 -Author: hadjipantelis -Date: Fri Apr 15 21:08:25 2016 -0700 - - Change so FCReg receives sep. mean and cov bandwidths. - -M R/FCReg.R -M man/FCReg.Rd -M tests/testthat/test_funcReg.R - -commit 5c3e124cc89d1e35ebd15911fa3362a37bb3d69b -Author: hadjipantelis -Date: Wed Apr 13 23:50:47 2016 -0700 - - Fixing the way colours are used in the CreatePathPlot. - -M R/CreateOutliersPlot.R -M R/CreatePathPlot.R - -commit 3069fd43b659a98efe9b67630806db981ed498b5 -Author: hadjipantelis -Date: Mon Apr 11 17:26:42 2016 -0700 - - FindNN/BwNN added to Minb/GetMinb.R - -M NAMESPACE -A R/BwNN.R -M R/GetMinb.R -M R/GetSmoothedMeanCurve.R -M R/Minb.R -A man/BwNN.Rd -A tests/testthat/test_BwNN.R - -commit 7e9ecb5534c206c6aff081f897dc846aa308232a -Author: hadjipantelis -Date: Mon Apr 11 15:22:24 2016 -0700 - - Changing default smoothing options + minor other - -M R/CheckOptions.R -M R/FPCA.R -M R/GCVLwls2DV2.R -A R/GenerateFunctionalData.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M man/FPCA.Rd -M man/GetNormalisedSample.Rd -M tests/testthat/test_FPCA.R - -commit 187e99842431732352d00b0c30c9441d259f0b1e -Author: hadjipantelis -Date: Wed Apr 6 16:32:33 2016 -0700 - - 1D bandwidth adjustment commented out. - -M R/GetSmoothedMeanCurve.R - -commit 9e1af06f73ae821ab9f49020f13ef529c22192a4 -Author: hadjipantelis -Date: Wed Apr 6 16:02:51 2016 -0700 - - Adding error option for normalisation - -M R/GetNormalisedSample.R - -commit 53d871718ffd21829a6b5da97c54b26b5c6d1576 -Author: hadjipantelis -Date: Tue Apr 5 15:47:40 2016 -0700 - - FVPA unit-tests, minor FVPA() changes. - -M man/FVPA.Rd - -commit 9efda1917d3f7ab2656a09d66b4d9df2fb783f34 -Author: hadjipantelis -Date: Tue Apr 5 15:47:04 2016 -0700 - - FVPA unit-tests, minor FVPA() changes. - -M R/FVPA.R -A tests/testthat/test_FVPA.R - -commit 32393ffd9796a4731189e3f222eaea811082decd -Author: hadjipantelis -Date: Mon Apr 4 11:47:37 2016 -0700 - - Minor FVPA changes - -M R/FVPA.R -M R/SetOptions.R - -commit f4641ea7193698d8f4ec5cb7e9e4a3cb4e7b2da3 -Author: hadjipantelis -Date: Mon Apr 4 09:40:45 2016 -0700 - - Updating FCReg - -M NAMESPACE -M R/FCReg.R -A R/oldFCReg.R -A R/oldfuncReg.R -M man/FCReg.Rd -M man/GetCrCovYX.Rd -M man/GetCrCovYZ.Rd -M man/GetNormalisedSample.Rd -A man/oldFCReg.Rd -M tests/testthat/test_funcReg.R - -commit f17a524d6c1b13a7cd62ae1eab44e5095d7830fd -Merge: ada618e 0ce405a -Author: hadjipantelis -Date: Fri Apr 1 19:46:00 2016 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit ada618ecffc0a088ad4d35cdb61376be70b7f947 -Author: hadjipantelis -Date: Fri Apr 1 19:45:35 2016 -0700 - - Changes at CE step and bw selection. - -M R/GetCrCovYX.R -M src/GetIndCEScoresCPPnewInd.cpp - -commit 0ce405a5fc62e3cdfd8a4b9e149dc466cbbfc6d6 -Author: hadjipantelis -Date: Fri Apr 1 14:12:52 2016 -0700 - - Minor fix - -M R/GetCrCovYX.R - -commit f8a20be907257dc2ecdf2f0d58605e957a01119b -Author: hadjipantelis -Date: Fri Apr 1 14:11:52 2016 -0700 - - Minor fix - -M R/GetCrCovYX.R - -commit 69839787325e986f636b7d6cb4fd4f545a79ec6c -Author: hadjipantelis -Date: Fri Apr 1 13:51:28 2016 -0700 - - Minor - -M R/GetCrCovYX.R - -commit 5f70495d500097511cf457ff2e25fd2311798e07 -Author: hadjipantelis -Date: Fri Apr 1 10:22:49 2016 -0700 - - Minor + adding BOBYQA to GCV CC solver. - -M R/GetCrCovYX.R -M R/funcReg.R -M tests/testthat/test_funcReg.R - -commit b8af6e7f74fda2517e34586b8e989b472c1d90f7 -Author: hadjipantelis -Date: Thu Mar 31 21:58:49 2016 -0700 - - Minor checks and additional tests for the concReg. - -M R/funcReg.R -M tests/testthat/test_funcReg.R - -commit 04f358d6102284dd9f4ef00f2df549cf30c88500 -Author: Xiongtao Dai -Date: Tue Mar 29 17:24:41 2016 -0700 - - new functional concurrent regression - -M R/funcReg.R -M tests/testthat/test_funcReg.R - -commit bcdba64425edae2b907390bf374b77a937913081 -Merge: cea7cd6 8cdd272 -Author: Xiongtao Dai -Date: Tue Mar 29 16:45:04 2016 -0700 - - Merge branch 'master' into conReg - -commit cea7cd6012163819e5e2a3dde90166634a9966ac -Author: Xiongtao Dai -Date: Tue Mar 29 16:45:01 2016 -0700 - - add funcReg test - -A tests/testthat/test_funcReg.R - -commit 8cdd272b35783e146c2990fbbe153dbbc0559328 -Author: hadjipantelis -Date: Fri Mar 18 12:44:36 2016 -0700 - - Fix at GetMinb to avoid outliers. - -M R/GetMinb.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_getMinb.R - -commit e66f24a94cd26a2f6063f398156022e35ed8bbe1 -Author: Xiongtao Dai -Date: Fri Mar 18 09:09:01 2016 -0700 - - functions for concurrent regression - -M R/GetCrCovYX.R -M R/GetCrCovYZ.R -M R/GetRawCrCovFuncFunc.R -A R/funcReg.R - -commit b823b33f700aa4a2eea3d1b3c1468d5c99796d55 -Author: hadjipantelis -Date: Thu Mar 17 23:09:35 2016 -0700 - - Tidying up GCVLwls2DV2; spline cost heuristic - -M R/GCVLwls2DV2.R - -commit 721a499a912ac9ac59ee2f7092ce1a5ad8f0a350 -Author: hadjipantelis -Date: Mon Mar 14 19:51:15 2016 -0700 - - Normalisation reference added. - -M DESCRIPTION -M R/GetNormalisedSample.R - -commit 9f912350d3cf655a82c43e2af4cc7077630b9c10 -Author: hadjipantelis -Date: Mon Mar 14 14:27:09 2016 -0700 - - pow() namespace - -M src/CPPlwls1d.cpp - -commit 7d0724cc5e6caf5a5ba43f457cee053b027532c0 -Author: hadjipantelis -Date: Mon Mar 14 12:49:56 2016 -0700 - - pow(double(10),-6) to 1.0e-6 - -M src/Rmullwlsk.cpp -M src/RmullwlskCC.cpp - -commit e0abd11ce95ac1df083c76b3e068d5d49043a9ef -Author: hadjipantelis -Date: Mon Mar 14 10:33:03 2016 -0700 - - further pow() issue - -M DESCRIPTION -M src/CPPlwls1d.cpp - -commit 2eeb1ff3bff76717c2a849420d2cb3533b5feaad -Author: hadjipantelis -Date: Mon Mar 14 09:32:23 2016 -0700 - - Minor clarification in doc. - -M R/GetCrCovYX.R -M man/GetCrCovYX.Rd - -commit 4630e34b0546cd7ba8310ed2e0109ecd128cc809 -Author: hadjipantelis -Date: Mon Mar 14 09:22:31 2016 -0700 - - Minor fix on DESCRIPTION and to a unit-test - -M DESCRIPTION -M src/RmullwlskCC.cpp -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_getCrCovYX.R - -commit df403029a7a45ebb7687f61be36eef72b618449e -Author: hadjipantelis -Date: Mon Mar 14 08:56:36 2016 -0700 - - adding bufSmall to NN check - -M src/Rmullwlsk.cpp -M src/RmullwlskCC.cpp - -commit e5b48631e6ffa960f92c80d31df7a78d14104f55 -Author: hadjipantelis -Date: Mon Mar 14 08:46:51 2016 -0700 - - Solaris 'pow' fix - -M src/Rmullwlsk.cpp -M src/RmullwlskCC.cpp - -commit 94870785f10d116a2b2d0addcfdca38fd09f9549 -Author: hadjipantelis -Date: Sat Mar 12 11:30:52 2016 -0800 - - Removing redundant 'Package for' after KH's comment - -M DESCRIPTION - -commit 0a5d1de3712398a38b374d55b577273851384628 -Author: hadjipantelis -Date: Sat Mar 12 11:27:21 2016 -0800 - - NAMESPACE changes for R-dev. - -M NAMESPACE - -commit 3ebccca1ce7ec6acb737559770f8f3de2e0313ce -Author: hadjipantelis -Date: Sat Mar 12 00:59:32 2016 -0800 - - Final fix - -M vignettes/fdapaceVignette.Rnw - -commit bf4d86595c5f43d38fd6725b47db2cf9f3850bab -Author: hadjipantelis -Date: Fri Mar 11 21:11:43 2016 -0800 - - Changes for vignettes (pending) - -M DESCRIPTION -M NAMESPACE -M R/FCReg.R -M R/FVPA.R -M data/medfly25.RData -A man/FVPA.Rd -A vignettes/DerivativesFlies.pdf -A vignettes/DerivativesFliesInspect.pdf -A vignettes/DiagPlotSparse.pdf -A vignettes/DiagnoFlies.pdf -A vignettes/DiagnoSimu.pdf -A vignettes/DifferentBandwidths.pdf -A vignettes/OutliersFlies.pdf -A vignettes/PathFlies.pdf -A vignettes/fdapaceVignette.Rnw -A vignettes/roxygen.bib - -commit bb345ed9b87d2ed53d4a11e4577400f482571f93 -Author: hadjipantelis -Date: Tue Mar 8 17:09:23 2016 -0800 - - minor - -M R/FCReg.R -M man/FCReg.Rd - -commit f2740d0c70bec355a5a3dcece0d9c44d75af1d9a -Author: hadjipantelis -Date: Tue Mar 8 16:53:58 2016 -0800 - - Removed FVPA.Rd - -D man/FVPA.Rd - -commit 15ef287dcf8d80309071c85ff10040bcf34cfdd0 -Author: hadjipantelis -Date: Tue Mar 8 16:45:40 2016 -0800 - - Minor things - -M NAMESPACE -M R/CreateBWPlot.R -M R/FCReg.R -M R/FVPA.R -D data/.swo -D data/.swp -M man/CreateBWPlot.Rd - -commit 855d8294dc61e778a8c7fa5f6cff2f9472dd6f80 -Merge: 6e6afd6 b05383a -Author: hadjipantelis -Date: Tue Mar 8 16:35:26 2016 -0800 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 6e6afd677a90385a4fc5164b2e7a7c4353d5b62d -Author: hadjipantelis -Date: Tue Mar 8 16:34:58 2016 -0800 - - Minor - -M R/GetCrCovYX.R -M man/GetCrCovYX.Rd -M src/RmullwlskCC.cpp - -commit b05383ac075fe8029203b051074375e077c06f5d -Author: Xiongtao Dai -Date: Mon Mar 7 17:32:52 2016 -0800 - - test for getCrCovY[ZX].R - -M tests/testthat/test_getCrCovYX.R -M tests/testthat/test_getCrCovYZ.R - -commit 08be8df92f8611872236b6af44cb2fa09c37fda7 -Author: hadjipantelis -Date: Sat Mar 5 01:15:00 2016 -0800 - - Basic documentation fixes. - -M NAMESPACE -M R/CreateFuncBoxPlot.R -M R/CreateOutliersPlot.R -M man/CreateFuncBoxPlot.Rd -M man/CreateOutliersPlot.Rd -M man/GetCrCorYX.Rd -A man/GetCrCorYZ.Rd - -commit 47c619441da7baed3d5d2c756c3c18b116f2a20b -Author: hadjipantelis -Date: Fri Mar 4 12:14:40 2016 -0800 - - GetCrCorYZ - -M R/GetCrCorYX.R -A R/GetCrCorYZ.R - -commit c09b9d59a3d714fa01dfc2351032e13cd9e268f9 -Author: hadjipantelis -Date: Fri Mar 4 09:59:29 2016 -0800 - - Minor - -M R/GetCrCorYX.R - -commit 45feb1e214c777c5aab2a9f55b5c7918563813fa -Author: hadjipantelis -Date: Wed Mar 2 22:39:51 2016 -0800 - - Rewriting CVLwls1D + minor stuff. - -M R/CVLwls1D.R -M R/CheckOptions.R -M R/CreateBWPlot.R -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M R/fitted.FPCA.R -M man/CreateBWPlot.Rd -M man/CreateDiagnosticsPlot.Rd -M man/FPCA.Rd -M tests/testthat/test_cvlwls1d.R - -commit 0c90242044df18537c58fc4ee0817fac18f6c8f3 -Author: hadjipantelis -Date: Wed Mar 2 14:18:36 2016 -0800 - - Minor things/ Comment out CreateDiagnsticsPlot deriv. - -M R/CreateBWPlot.R -M R/CreateDiagnosticsPlot.R - -commit be06d07d5d455fa06a8828da03e3c8772a59da9f -Author: hadjipantelis -Date: Wed Mar 2 10:43:00 2016 -0800 - - CreateBWPlot.R and minor stuff. - -M NAMESPACE -A R/CreateBWPlot.R -M R/FPCA.R -A man/CreateBWPlot.Rd -M man/FPCA.Rd - -commit 8b5873496a492b26da27ef82703a4690eef1c2a2 -Author: Xiongtao Dai -Date: Wed Mar 2 07:17:49 2016 +0000 - - plot.FPCA -> CreateDiagnosticsPlot - -M NAMESPACE -A R/plot.FPCA.R -A man/plot.FPCA.Rd - -commit 129fc7ff4f04e35251ae7a22dd6fd13d50ff54d1 -Author: hadjipantelis -Date: Tue Mar 1 16:39:39 2016 -0800 - - WHO z-score functions and dataset renaming. - -M NAMESPACE -A R/MakeBWtoZscore02y.R -A R/MakeHCtoZscore02y.R -A R/MakeLNtoZscore02y.R -M R/medfly25.R -M data/medfly25.RData -A man/MakeBWtoZscore02y.Rd -A man/MakeHCtoZscore02y.Rd -A man/MakeLNtoZscore02y.Rd -M man/medfly25.Rd - -commit 6f43c44b0a6504296849aa2cb6ca472f32a16997 -Author: hadjipantelis -Date: Mon Feb 29 07:32:27 2016 -0800 - - Minor - -M R/GetNormalisedSample.R -M R/RcppExports.R -M src/RcppExports.cpp - -commit b87733ebaf2fdeda810f8c4efe40909f53cf86b2 -Author: Xiongtao Dai -Date: Sun Feb 28 01:00:54 2016 +0000 - - minor change plotting functions - -M R/CreateDiagnosticsPlot.R -M R/CreatePathPlot.R -M R/RcppExports.R -M src/RcppExports.cpp -D src/symbols.rds - -commit ea24dcf9d3fdb886555229bccdc1b99953ff07fb -Author: hadjipantelis -Date: Fri Feb 26 11:56:13 2016 -0800 - - Minor changes; all.equal -> identical, screeplot -> scree-plot - -M R/CreateDesignPlot.R -M R/CreateScreePlot.R - -commit eca40dcd79502f217f0683733d40f760f5c4b1e5 -Author: hadjipantelis -Date: Wed Feb 24 21:28:17 2016 -0800 - - Minor change to CreateDesignPlot for very dense samples. - -M R/CreateDesignPlot.R - -commit 0c38376fd944e425f16c54ab44ee0ef94125b584 -Author: hadjipantelis -Date: Wed Feb 24 17:00:38 2016 -0800 - - NaN in the smoother for derivatives - -M R/Lwls1D.R -M src/CPPlwls1d.cpp - -commit 25d519803b0d6a58e8099753fdaacc3ac863f1f1 -Author: hadjipantelis -Date: Tue Feb 23 16:37:24 2016 -0800 - - Warnings corrected. - -M R/CreateDiagnosticsPlot.R -M R/CreateModeOfVarPlot.R -R098 R/Medfly25.R R/medfly25.R -R093 man/Medfly25.Rd man/medfly25.Rd - -commit fb1d89882b7654c7e265fe0fccd36dc624f10ae1 -Author: hadjipantelis -Date: Tue Feb 23 16:17:49 2016 -0800 - - Ensuring new mu grid is fine. - -M R/CreateDiagnosticsPlot.R -M R/FPCAder.R -M R/GetLogLik.R -M R/MakeResultFPCA.R -M R/fitted.FPCA.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_selectK.R - -commit d7125c7a913f3a6da523987484a807012d565cf1 -Author: hadjipantelis -Date: Mon Feb 22 21:05:33 2016 -0800 - - Updating docs. - -M man/CreateFuncBoxPlot.Rd -M man/CreatePathPlot.Rd - -commit 0e73055e520cf0925a7d7ac9006fb88cc8169818 -Author: hadjipantelis -Date: Mon Feb 22 21:04:47 2016 -0800 - - Fixes in plotting functions. - -M R/CreateFuncBoxPlot.R -M R/CreateOutliersPlot.R -M R/CreatePathPlot.R - -commit 4be75a3a4cd65a93cf77decb0bb085157207eabd -Author: hadjipantelis -Date: Fri Feb 19 23:34:08 2016 -0800 - - Changes in the default bandwidths. - -M R/CreateDiagnosticsPlot.R -M R/SetDerOption.R -M man/CreateDiagnosticsPlot.Rd - -commit 3d786e630f27635b380ff9d78f506f9abec27c57 -Author: hadjipantelis -Date: Fri Feb 19 22:33:30 2016 -0800 - - Refining CreateDiagnosticsPlot for derivatives. - -M R/CreateDiagnosticsPlot.R - -commit e68edebee7b0d5d560636aa128b3ab5aa0967609 -Merge: 5a870bd c8f8508 -Author: hadjipantelis -Date: Thu Feb 18 17:21:10 2016 -0800 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 5a870bdfec8c54e157017604cfdeaa8c5e3dedd4 -Author: hadjipantelis -Date: Thu Feb 18 17:17:47 2016 -0800 - - Some basic derivative diagnostics. - -D medfly25.png - -commit 5538373379d13a0720170a150e0599935d5ad6b3 -Author: hadjipantelis -Date: Thu Feb 18 17:16:58 2016 -0800 - - Some basic derivative diagnostics. - -M R/CreateDiagnosticsPlot.R -M R/FPCAder.R -M R/SetDerOption.R -M README.org -M man/CreateDiagnosticsPlot.Rd -A medfly25.png - -commit c8f8508fc0b84fdc4bf6e307c89431e6f5baa48b -Author: hadjipantelis -Date: Wed Feb 17 10:44:11 2016 -0800 - - Update README.org - -M README.org - -commit 40c894261de480d07099de6a6647d5ec5e62c932 -Author: hadjipantelis -Date: Tue Feb 16 17:34:11 2016 -0800 - - Fixing the dyn. library loading issue. - -M NAMESPACE -M R/RcppExports.R -M R/pkgname.R -R096 man/tPACE.Rd man/fdapace.Rd -M src/RcppExports.cpp - -commit fc7f9ab41224d4f151aac406fbe86fc0e037c9e8 -Author: hadjipantelis -Date: Tue Feb 16 17:19:00 2016 -0800 - - Renaming - -M NAMESPACE -M R/CheckOptions.R -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M man/CreateFuncBoxPlot.Rd -M man/FPCA.Rd -M tests/testthat/test_FPCA.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_selectK.R - -commit 78636839033378e84a017b15d38edd7fa8fc33d8 -Author: hadjipantelis -Date: Tue Feb 16 16:15:13 2016 -0800 - - Minor changes - -M DESCRIPTION -M R/CreateFuncBoxPlot.R -M R/GetCovDense.R - -commit 5d231eeb2c8a335d1704fbc4088e048449c102e2 -Author: hadjipantelis -Date: Mon Feb 15 16:48:54 2016 -0800 - - Clean up - -M .gitignore -M NAMESPACE -D src/Rmullwlsk_old.cpp -D testingAllAround.R - -commit 4229c01eb8dab984491d50bd4c5fb47501a6c166 -Author: hadjipantelis -Date: Mon Feb 15 16:06:40 2016 -0800 - - Tests and renames - -M .gitignore -M NAMESPACE -M R/FPCAder.R -M R/RcppExports.R -M R/SetDerOption.R -M R/fitted.FPCA.R -R077 man/createCovPlot.Rd man/CreateCovPlot.Rd -R072 man/createDesignPlot.Rd man/CreateDesignPlot.Rd -R067 man/createDiagnosticsPlot.Rd man/CreateDiagnosticsPlot.Rd -R082 man/createFuncBoxPlot.Rd man/CreateFuncBoxPlot.Rd -R076 man/createModeOfVarPlot.Rd man/CreateModeOfVarPlot.Rd -R088 man/createOutliersPlot.Rd man/CreateOutliersPlot.Rd -R082 man/createPathPlot.Rd man/CreatePathPlot.Rd -R070 man/createScreePlot.Rd man/CreateScreePlot.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FVPA.Rd -R080 man/getCrCorYX.Rd man/GetCrCorYX.Rd -R090 man/getCrCovYX.Rd man/GetCrCovYX.Rd -R089 man/getCrCovYZ.Rd man/GetCrCovYZ.Rd -R067 man/getNormalisedSample.Rd man/GetNormalisedSample.Rd -R085 man/lwls1d.Rd man/Lwls1D.Rd -R090 man/lwls2d.Rd man/Lwls2D.Rd -R077 man/makeFPCAinputs.Rd man/MakeFPCAInputs.Rd -R093 man/medfly25.Rd man/Medfly25.Rd -R090 man/selectK.Rd man/SelectK.Rd -R088 man/sparsify.Rd man/Sparsify.Rd -R083 man/wiener.Rd man/Wiener.Rd -M man/fitted.FPCA.Rd -M man/print.FPCA.Rd -M src/RcppExports.cpp -A testingAllAround.R -M tests/testthat/test_CreateTrueMean.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_SetOptions.R -A tests/testthat/test_fitted.R - -commit c0e8749e14cf2e14a0b8c86b64dda5456fcd8339 -Author: dmchris -Date: Thu Feb 11 21:11:32 2016 -0800 - - Rename wiener.R to Wiener.R - -R100 R/wiener.R R/Wiener.R - -commit 39d1becede6e21337e2a65ce5bffba2e20029700 -Author: dmchris -Date: Thu Feb 11 21:11:18 2016 -0800 - - Rename subsetFPCA.R to SubsetFPCA.R - -R099 R/subsetFPCA.R R/SubsetFPCA.R - -commit bb10acfca604f7506840b72f094838f47ac6274a -Author: dmchris -Date: Thu Feb 11 21:11:03 2016 -0800 - - Rename sparsify.R to Sparsify.R - -R100 R/sparsify.R R/Sparsify.R - -commit bf77bcc60f8470cfb88bb61373333f97d03820c7 -Author: dmchris -Date: Thu Feb 11 21:10:51 2016 -0800 - - Rename selectK.R to SelectK.R - -R100 R/selectK.R R/SelectK.R - -commit ec13ba4c43c952da56c2ce17d1a631ff409366df -Author: dmchris -Date: Thu Feb 11 21:10:39 2016 -0800 - - Rename rotateLwls2dV2.R to RotateLwls2DV2.R - -R100 R/rotateLwls2dV2.R R/RotateLwls2DV2.R - -commit 1d012ed937a56863025dde22a00df3a982472c3c -Author: dmchris -Date: Thu Feb 11 21:10:09 2016 -0800 - - Rename pc_covE.R to PC_CovE.R - -R100 R/pc_covE.R R/PC_CovE.R - -commit 4e120bb65c7d043bd0d74dcbf49b2e1acfcc7b8c -Author: dmchris -Date: Thu Feb 11 21:09:55 2016 -0800 - - Rename minb.R to Minb.R - -R100 R/minb.R R/Minb.R - -commit ec4fc0f965a970c42ae56dd39cfa21a22b151bdc -Author: dmchris -Date: Thu Feb 11 21:09:40 2016 -0800 - - Rename medfly25.R to Medfly25.R - -R100 R/medfly25.R R/Medfly25.R - -commit 33f12c0a6b679028b088e0025e6f73f83e2e3576 -Author: dmchris -Date: Thu Feb 11 21:09:23 2016 -0800 - - Rename mapX1d.R to MapX1D.R - -R100 R/mapX1d.R R/MapX1D.R - -commit 41437087b26950c27cbb5522189cfc284667156d -Author: dmchris -Date: Thu Feb 11 21:09:04 2016 -0800 - - Rename lwls1d.R to Lwls1D.R - -R100 R/lwls1d.R R/Lwls1D.R - -commit 23155e28f4b5c2e885e9cfb1f5a9c4792ab8f8e9 -Author: dmchris -Date: Thu Feb 11 21:08:49 2016 -0800 - - Rename getNormalisedSample.R to GetNormalisedSample.R - -R100 R/getNormalisedSample.R R/GetNormalisedSample.R - -commit e4b95e972330d6a33c68281e38256d52dfb9c282 -Author: dmchris -Date: Thu Feb 11 21:08:38 2016 -0800 - - Rename getMinb.R to GetMinb.R - -R100 R/getMinb.R R/GetMinb.R - -commit 6e7cc89bdd33a759e2fd705c8a47ce77fd45e2e1 -Author: dmchris -Date: Thu Feb 11 21:08:28 2016 -0800 - - Rename getLogLik.R to GetLogLik.R - -R100 R/getLogLik.R R/GetLogLik.R - -commit 2d9f5f4a852c02671d1fce0689397b5a277679ea -Author: dmchris -Date: Thu Feb 11 21:08:16 2016 -0800 - - Rename getCrCovYZ.R to GetCrCovYZ.R - -R100 R/getCrCovYZ.R R/GetCrCovYZ.R - -commit bc2c0c9c956cd9a0757635eedbac81783887aec3 -Author: dmchris -Date: Thu Feb 11 21:08:05 2016 -0800 - - Rename getCrCovYX.R to GetCrCovYX.R - -R100 R/getCrCovYX.R R/GetCrCovYX.R - -commit 79b2c4ade809b69bf93e43e43da40e40200004ed -Author: dmchris -Date: Thu Feb 11 21:07:53 2016 -0800 - - Rename getCrCorYX.R to GetCrCorYX.R - -R099 R/getCrCorYX.R R/GetCrCorYX.R - -commit 81ccf82da5b1c42df5a31fcb0a0cb9a0024ab028 -Author: dmchris -Date: Thu Feb 11 21:07:37 2016 -0800 - - Rename getCount.R to GetCount.R - -R100 R/getCount.R R/GetCount.R - -commit 48d3ecc58de799b80f3e6174e6656462181f941f -Author: dmchris -Date: Thu Feb 11 21:07:24 2016 -0800 - - Rename gcvlwls2dV2.R to GCVLwls2DV2.R - -R100 R/gcvlwls2dV2.R R/GCVLwls2DV2.R - -commit 6a83c8bafb97d61ac236c75a9a11ea22878b3d29 -Author: dmchris -Date: Thu Feb 11 21:07:00 2016 -0800 - - Rename gcvlwls1d1.R to GCVLwls1D1.R - -R100 R/gcvlwls1d1.R R/GCVLwls1D1.R - -commit 78f85701cd3bf945a99b9721bd63e5d19aedbb1f -Author: dmchris -Date: Thu Feb 11 21:06:41 2016 -0800 - - Rename designPlotCount.R to DesignPlotCount.R - -R099 R/designPlotCount.R R/DesignPlotCount.R - -commit aa0273c83bb2ffb17e65332fb1bcbaab91a90c53 -Author: dmchris -Date: Thu Feb 11 21:06:27 2016 -0800 - - Rename cvlwls1d.R to CVLwls1D.R - -R100 R/cvlwls1d.R R/CVLwls1D.R - -commit 1edae8f2aa14e429b4a1424786697546b17c3353 -Author: dmchris -Date: Thu Feb 11 21:06:04 2016 -0800 - - Rename createScreePlot.R to CreateScreePlot.R - -R100 R/createScreePlot.R R/CreateScreePlot.R - -commit 69f54c4a5b65522236217d0d5cd5e1457a82bc11 -Author: dmchris -Date: Thu Feb 11 21:05:52 2016 -0800 - - Rename createPathPlot.R to CreatePathPlot.R - -R100 R/createPathPlot.R R/CreatePathPlot.R - -commit fff9326b2033f334b4f2ce16b7d50ecbb17ef157 -Author: dmchris -Date: Thu Feb 11 21:05:40 2016 -0800 - - Rename createOutliersPlot.R to CreateOutliersPlot.R - -R100 R/createOutliersPlot.R R/CreateOutliersPlot.R - -commit 82bed0c465f99f23e76918bcb2f01d6023a25f45 -Author: dmchris -Date: Thu Feb 11 21:05:26 2016 -0800 - - Rename createModeOfVarPlot.R to CreateModeOfVarPlot.R - -R100 R/createModeOfVarPlot.R R/CreateModeOfVarPlot.R - -commit 79aa825cef7a7f3323ba1b324256c58235ae9643 -Author: dmchris -Date: Thu Feb 11 21:04:48 2016 -0800 - - Rename createFuncBoxPlot.R to CreateFuncBoxPlot.R - -R100 R/createFuncBoxPlot.R R/CreateFuncBoxPlot.R - -commit 43de40658a22ce79d760c7e063677dbd0f3f3259 -Author: dmchris -Date: Thu Feb 11 21:04:31 2016 -0800 - - Rename createDiagnosticsPlot.R to CreateDiagnosticsPlot.R - -R100 R/createDiagnosticsPlot.R R/CreateDiagnosticsPlot.R - -commit c7dbab3ffee187a8e35ae238c92f5ae2edffa3c8 -Author: dmchris -Date: Thu Feb 11 21:04:18 2016 -0800 - - Rename createDesignPlot.R to CreateDesignPlot.R - -R100 R/createDesignPlot.R R/CreateDesignPlot.R - -commit fb4ba6d5784d73b1c45ad5e19b89c4cd9e29878d -Author: dmchris -Date: Thu Feb 11 21:03:59 2016 -0800 - - Rename createCovPlot.R to CreateCovPlot.R - -R100 R/createCovPlot.R R/CreateCovPlot.R - -commit abe9e2323440e89f637b6472e11c42fe78dc1a08 -Author: dmchris -Date: Thu Feb 11 21:03:33 2016 -0800 - - Rename adjustBW1.R to AdjustBW1.R - -R099 R/adjustBW1.R R/AdjustBW1.R - -commit d818e21513fec8e0e1a62d33afc08992f9a1ce05 -Author: dmchris -Date: Thu Feb 11 20:47:40 2016 -0800 - - function renaming - - getA -> GetA, owls -> Lwls, 1d,2d ->1D, 2D. File name changed to be - consistent with function names inside (MakeFPCAInputs, Lwls2D). - -M NAMESPACE -M R/ConvertSupport.R -M R/FCReg.R -M R/FPCA.R -M R/FPCAder.R -M R/FVPA.R -M R/GetRawCov.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -R098 R/lwls2dV2.R R/Lwls2D.R -R094 R/makePACEinputs.R R/MakeFPCAInputs.R -M R/RcppExports.R -M R/adjustBW1.R -M R/createCovPlot.R -M R/createDesignPlot.R -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R -M R/createModeOfVarPlot.R -M R/createOutliersPlot.R -M R/createPathPlot.R -M R/createScreePlot.R -M R/cvlwls1d.R -M R/designPlotCount.R -M R/fitted.FPCA.R -M R/gcvlwls1d1.R -M R/gcvlwls2dV2.R -M R/getCount.R -M R/getCrCorYX.R -M R/getCrCovYX.R -M R/getCrCovYZ.R -M R/getLogLik.R -M R/getMinb.R -M R/getNormalisedSample.R -M R/lwls1d.R -M R/mapX1d.R -M R/medfly25.R -M R/minb.R -M R/pc_covE.R -M R/print.FPCA.R -M R/rotateLwls2dV2.R -M R/selectK.R -M R/sparsify.R -M R/subsetFPCA.R -M R/wiener.R -M tests/testthat/test_BinRawCov.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_FitEigenValues.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetCovDense.R -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R -R081 tests/testthat/test_lwls2dV2.R tests/testthat/test_Lwls2D.R -M tests/testthat/test_createDesignPlot.R -M tests/testthat/test_createPathPlot.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_funSim.R -M tests/testthat/test_gcvlwls1d1.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getCrCorYX.R -M tests/testthat/test_getCrCovYX.R -M tests/testthat/test_getCrCovYZ.R -M tests/testthat/test_getMinb.R -M tests/testthat/test_makeFPCAinputs.R -M tests/testthat/test_mapX1d.R -M tests/testthat/test_minb.R -M tests/testthat/test_pc_covE.R -M tests/testthat/test_rotateLwls2dV2.R -M tests/testthat/test_selectK.R -M tests/testthat/test_useBin.R -M tests/testthat/test_wiener.R - -commit b5d997e9564dbeb81853d3e4140add7a74ffc63d -Author: hadjipantelis -Date: Wed Feb 10 12:18:17 2016 -0800 - - Minor tidy-up - -M DESCRIPTION -M LICENSE -M R/FPCA.R -M R/medfly25.R -M man/FPCA.Rd -A man/medfly25.Rd -A src/symbols.rds - -commit f62a8552c0cd7bc9d817a31fca6604f36685d641 -Author: hadjipantelis -Date: Wed Feb 10 11:43:36 2016 -0800 - - minor - -R100 medfly25.R R/medfly25.R -M tests/testthat/test_CreateFolds.R -M tests/testthat/test_FPCA.R -M tests/testthat/test_FPCAder.R -M tests/testthat/test_FitEigenValues.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetCovDense.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_gcvlwls2dV2.R - -commit 2b666adcb6e23b2b84d2387e7587cf7450288a93 -Author: Xiongtao Dai -Date: Wed Feb 10 02:54:46 2016 -0800 - - reorganize FPCA; added tests - - Now `FPCA` is streamlined--get mu/cov, eigenanalysis, get scores, - return. `dataType` only specify the whether the data is regular or not, - and defines the default method of getting mu/cov, and scores. Any method - for getting mu/cov can be combined with any method for getting scores, - as long as the combination makes sense. - -M R/CheckOptions.R -M R/FPCA.R -M R/FPCAder.R -M R/GetCovDense.R -M R/GetMeanDense.R -A R/GetUserCov.R -A R/GetUserMeanCurve.R -M R/MakeResultFPCA.R -M R/SetOptions.R -M man/FPCAder.Rd -M tests/testthat/test_FPCA.R -M tests/testthat/test_FPCAder.R -D tests/testthat/test_no_FVE.R -M tests/testthat/test_useBin.R - -commit c5aa78cd39710b44214ae482aa92461e9347fdc8 -Author: hadjipantelis -Date: Mon Feb 8 17:31:59 2016 -0800 - - small bug fix - -M R/FPCAder.R - -commit f2f64015f9044e82ad8e2a7d6ea3b08c7e207aa9 -Author: hadjipantelis -Date: Mon Feb 8 17:28:48 2016 -0800 - - Docs. - -M man/FPCAder.Rd -M man/fitted.FPCA.Rd - -commit ea5df30bce451542caf459548546631cefa5b3ad -Author: hadjipantelis -Date: Mon Feb 8 17:24:18 2016 -0800 - - Changes on derivatives. - -M R/FPCAder.R -M R/SetDerOption.R -M R/fitted.FPCA.R - -commit ff5a56b83537a06f67dd02d5c765ce805831875f -Author: hadjipantelis -Date: Fri Feb 5 17:10:26 2016 -0800 - - The medfly dataset. - -A data/medfly25.RData -A medfly25.R - -commit a4f4969baf5ada4a7cff7b1c4557f0c6fa4ca81d -Author: Xiongtao Dai -Date: Fri Feb 5 18:45:14 2016 +0000 - - FPCAder no bandwidth choice - -M R/FPCAder.R -M R/SetDerOption.R -M man/FPCAder.Rd -D src/symbols.rds -M tests/testthat/test_FPCAder.R - -commit 333f0367951f875302b60596456730d597c2acfa -Author: Xiongtao Dai -Date: Fri Feb 5 17:33:42 2016 +0000 - - minor FPCAder - -M R/FPCAder.R -M R/fitted.FPCA.R -M R/gcvlwls1d1.R -M man/FPCAder.Rd -M tests/testthat/test_FPCAder.R - -commit 845ea2135c6fde603a3bb79759567a9603e10e9b -Author: hadjipantelis -Date: Thu Feb 4 10:53:54 2016 -0800 - - Minor fixes - -M R/FPCA.R -M R/SetOptions.R -M man/FPCA.Rd - -commit 54a81e24b70041c592f5d03c4c117485b893514d -Author: hadjipantelis -Date: Wed Feb 3 13:55:42 2016 -0800 - - Updated .Rd file - -M man/FPCA.Rd - -commit 758c1f70ab8b41a1da7858f8564d684a899fa372 -Author: hadjipantelis -Date: Wed Feb 3 13:51:03 2016 -0800 - - Got rid of 'MethodMu' - -M R/CheckOptions.R -M R/SetOptions.R - -commit 1e99055043903c73c5c5f5ca4cdbbcc0e0ed5248 -Author: hadjipantelis -Date: Wed Feb 3 13:45:43 2016 -0800 - - Minor bug/typo. - -M R/SetOptions.R - -commit 018cd2ae66b97dd4b52e70ab8bde274f148e13e0 -Author: hadjipantelis -Date: Wed Feb 3 13:33:06 2016 -0800 - - First attempt in smoothing dense data. - -M R/CheckOptions.R -M R/FPCA.R -M R/GetCovDense.R -M R/GetMeanDense.R -M R/SetOptions.R - -commit a6c3a5bf239d55d1234960178d379bf7e340a6ec -Merge: 9c0d356 f89d6cd -Author: Xiongtao Dai -Date: Wed Feb 3 00:53:38 2016 -0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 9c0d3564181bb8f92af2894cea7876b3ee7da99c -Author: Xiongtao Dai -Date: Wed Feb 3 00:53:32 2016 -0800 - - minor improvement - -M R/SetOptions.R -M R/createPathPlot.R - -commit f89d6cdda72ffc2eafa88a4fc8e0ff148054cc71 -Author: hadjipantelis -Date: Tue Feb 2 19:01:51 2016 -0800 - - Minor title changes - -M R/createDesignPlot.R -M R/createDiagnosticsPlot.R - -commit 5d94d6c5fad2935e0272d927344183127c1baa5e -Author: hadjipantelis -Date: Sat Jan 30 13:26:09 2016 -0800 - - Reverting dataset addition. - -D R/DavisTmps.R -D data/DavisTmps.RData -D man/DavisTemps.Rd - -commit 0e10d741aa947a979e96bd5c85767948de28202f -Author: hadjipantelis -Date: Sat Jan 30 13:21:39 2016 -0800 - - DavisTmps dataset. - -A R/DavisTmps.R -A data/DavisTmps.RData -A man/DavisTemps.Rd -A man/FPCAder.Rd - -commit 802ee8304de2f01b3d160a1bc106954f4325eef4 -Author: hadjipantelis -Date: Fri Jan 29 11:56:02 2016 -0800 - - fitted.FPCA: Warning about using too high 'k' - -M R/fitted.FPCA.R - -commit 66b0c983293dcebdacf56e56ba9fa7541249e789 -Merge: 6ccd77c 5db3abd -Author: hadjipantelis -Date: Fri Jan 29 11:35:43 2016 -0800 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 6ccd77c1133fae7502bebf0de0c6fdc34695f28e -Author: hadjipantelis -Date: Fri Jan 29 11:35:06 2016 -0800 - - GCV fix - -M R/fitted.FPCA.R - -commit 5db3abd5a42bed9bca4cc2560bc3b389c087f11d -Merge: c7af0b9 d16c86f -Author: Xiongtao Dai -Date: Fri Jan 29 19:33:26 2016 +0000 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit c7af0b94448a31532bcf5a6e18130ce82703e53d -Author: Xiongtao Dai -Date: Fri Jan 29 19:33:15 2016 +0000 - - minor - -M R/FPCAder.R - -commit d16c86f8992ee2f6ba72ba1457c21fe7afa54e06 -Author: hadjipantelis -Date: Fri Jan 29 11:30:46 2016 -0800 - - Removing example pdfs - -D DiagPlotSparse.pdf -D Means.pdf -D Phi1.pdf - -commit f7f7d10ce118210026ff9e190d6e58ffdca82301 -Author: hadjipantelis -Date: Fri Jan 29 10:46:47 2016 -0800 - - Minor - -M R/createModeOfVarPlot.R - -commit c8695576e6849e1a2cf60d85fc9ef2478d47db1e -Merge: 48ee69f f7651a6 -Author: hadjipantelis -Date: Fri Jan 29 10:44:09 2016 -0800 - - Merge. - -commit 48ee69fd18bf7a4defc704ee960f434d61570ba7 -Author: hadjipantelis -Date: Fri Jan 29 10:40:14 2016 -0800 - - Minor - -M R/createFuncBoxPlot.R -M R/createModeOfVarPlot.R -M R/createPathPlot.R - -commit f7651a6e5f96b75fd0e97b0982ecd41e4045b607 -Author: Xiongtao Dai -Date: Thu Jan 28 19:04:02 2016 -0800 - - minor - -M tests/testthat/test_FPCAder.R - -commit 578a75b909f7ec98b4320b903e46b49b9a7306ac -Author: Xiongtao Dai -Date: Thu Jan 28 19:02:54 2016 -0800 - - fix S3 method - -M NAMESPACE -R090 R/deriv.FPCA.R R/FPCAder.R -M R/fitted.FPCA.R -D man/deriv.FPCA.Rd -M man/fitted.FPCA.Rd -M tests/testthat/test_FPCAder.R -D tests/testthat/test_deriv.R - -commit 4bdf375b42bf6dc431a15d7907d09c77742fb51e -Author: Xiongtao Dai -Date: Thu Jan 28 18:35:32 2016 -0800 - - document() - -M NAMESPACE -M R/deriv.FPCA.R -A man/deriv.FPCA.Rd -M man/fitted.FPCA.Rd - -commit e6b96ed0d70d93023014b1c2daa383eedce6c06f -Author: Xiongtao Dai -Date: Thu Jan 28 18:33:30 2016 -0800 - - deriv.FPCA - -A R/SetDerOption.R -M R/createModeOfVarPlot.R -A R/deriv.FPCA.R -M R/fitted.FPCA.R -M man/createModeOfVarPlot.Rd -A tests/testthat/test_deriv.R - -commit 2624ae35125fdb77afb79cc93ca84d72fc44a217 -Author: hadjipantelis -Date: Wed Jan 27 12:22:45 2016 -0800 - - Documentation changes. - -M R/fitted.FPCA.R -M man/createModeOfVarPlot.Rd -M man/fitted.FPCA.Rd -M man/lwls1d.Rd - -commit daa17258ae8dcfd197ad6f86fc50946d40d0dcbf -Author: hadjipantelis -Date: Wed Jan 27 12:13:10 2016 -0800 - - Getting derivatives for fitted data, updated checks and 1D smoothers - -M DESCRIPTION -R100 LICENSE.txt LICENSE -M R/createModeOfVarPlot.R -M R/cvlwls1d.R -M R/fitted.FPCA.R -M R/gcvlwls1d1.R -R090 R/Rlwls1d.R R/lwls1d.R -M src/CPPlwls1d.cpp - -commit b343b37132e9eda136bbb7cf8e8477b9422577c0 -Author: Xiongtao Dai -Date: Wed Jan 27 00:02:22 2016 -0800 - - fix error/warning - -M R/BinData.R -M R/CheckData.R -M R/CheckOptions.R -M R/FPCA.R -M R/GetBinnedCurve.R -M R/HandleNumericsAndNAN.R -M R/SetOptions.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/HandleNumericsAndNAN.Rd -M tests/testthat/test_CheckData.R - -commit 57473f6ae7b2bb394ae630347bdde1a66ef5b11d -Author: Xiongtao Dai -Date: Thu Jan 21 18:03:19 2016 -0800 - - integrate sigma2 and shrink for dense data - -M NAMESPACE -M R/FPCA.R -M R/GetCovDense.R -M R/GetINScores.R -M R/SetOptions.R -M R/pkgname.R -M man/FPCA.Rd -M man/createOutliersPlot.Rd -M man/fitted.FPCA.Rd -M tests/testthat/test_FPCA.R -A tests/testthat/test_GetCovDense.R - -commit ab58b61ef36a36c6975bf4c3e42b42281208db2e -Merge: 83e2d6d 4edd3bd -Author: Xiongtao Dai -Date: Thu Jan 21 16:05:53 2016 -0800 - - Merge branch 'master' into denseSigma2 - -commit 4edd3bd19c509f10b089c0e9db7e28d226fe9d3b -Merge: 06d1361 e7f39d8 -Author: Xiongtao Dai -Date: Thu Jan 21 15:59:32 2016 -0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 06d1361119138d67bfdc59aa16892f629e337891 -Author: Xiongtao Dai -Date: Wed Jan 20 13:28:27 2016 -0800 - - fix selectK: FVEthreshold=1 - -M R/selectK.R - -commit e7f39d829e0d56275e20ba5e54508e8f669a5f01 -Author: Pantelis -Date: Wed Jan 20 08:57:12 2016 -0800 - - Minor patch - -M R/SetOptions.R -M src/symbols.rds - -commit 45a326c218e2f409ec4ac616f89b851b6ceafcea -Author: hadjipantelis -Date: Tue Jan 19 16:11:06 2016 -0800 - - Minor fixes to Set/CheckOptions, fitted and createOutliersPlot - -M R/CheckOptions.R -M R/SetOptions.R -M R/createOutliersPlot.R -M R/fitted.FPCA.R -A src/symbols.rds - -commit 4cc35121f2b7b2ba5d8d6b3b6bd4b3c1408d588c -Author: hadjipantelis -Date: Sat Jan 16 14:08:06 2016 -0800 - - Fixed Assertion -DNDEBUG flag issue. - -M src/CPPlwls1d.cpp -M src/RCPPmean.cpp -M src/RCPPvar.cpp -M src/interp2lin.cpp -D src/symbols.rds -M src/trapzRcpp.cpp - -commit 22ab2d54fa5491016e65fbe782e8f15f484f96fb -Author: hadjipantelis -Date: Fri Jan 15 16:38:09 2016 -0800 - - minor - -M NAMESPACE -M R/fitted.FPCA.R - -commit 238e589f2632087dbfbc342eba25bdfc817311bc -Author: hadjipantelis -Date: Fri Jan 15 16:26:35 2016 -0800 - - DER changes to fitted.FPCA. - -M NAMESPACE -D R/FPCAder.R -M R/fitted.FPCA.R -D man/FPCAder.Rd -M man/fitted.FPCA.Rd - -commit ea25f247e3ca513cb93632748dfe3c1f21460295 -Author: hadjipantelis -Date: Fri Jan 15 11:06:26 2016 -0800 - - minor NAMESPACE changes - -M DESCRIPTION -M NAMESPACE -M man/createOutliersPlot.Rd -A src/symbols.rds - -commit 83e2d6d63c3bcf5e2d6af52222c18af6053e86a7 -Author: Xiongtao Dai -Date: Wed Jan 13 06:27:32 2016 +0000 - - add CreateBasis - -A R/CreateBasis.R - -commit 798f5985e31c0c1691c0f7bc8e52d9dbfbca1227 -Merge: 3b6b2d8 2dea9d8 -Author: Xiongtao Dai -Date: Wed Jan 13 05:39:29 2016 +0000 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 3b6b2d8236d0f16a3b11d189792894d475ffd01e -Author: Xiongtao Dai -Date: Wed Jan 13 05:25:53 2016 +0000 - - fix sparsify - -M R/sparsify.R - -commit 2dea9d85643f0eeb5a9ae47a6443c658cc1f131a -Author: dmchris -Date: Mon Jan 11 18:50:10 2016 -0800 - - updates for subsetFPCA - - subsetting function also subsets the cumulative FVE and adjust the - corresponding FVE value for output. - -M R/subsetFPCA.R - -commit 386376dc37ef0d9de358a9b6f4b23b825ae60dc6 -Author: hadjipantelis -Date: Sat Jan 9 23:42:25 2016 -0800 - - createOutliers default opts changes - -M R/RcppExports.R -M R/createOutliersPlot.R -M src/RcppExports.cpp - -commit d1c23d752d37d4e7888dca4aaa21aded89e23269 -Author: Xiongtao Dai -Date: Thu Jan 7 16:14:25 2016 -0800 - - createPathPlot documentation - -M R/createPathPlot.R -M man/FPCA.Rd -M man/createPathPlot.Rd -M man/selectK.Rd -D src/symbols.rds -M tests/testthat/test_createPathPlot.R - -commit ce7f9dd6122d7e6e03f6ee39941e581651084de0 -Merge: 742bfa7 e0053f5 -Author: Xiongtao Dai -Date: Thu Jan 7 16:06:37 2016 -0800 - - Merge branch 'userSigma2' - -commit e0053f55c65120c1bc3d03c9830b7addbe4f5e44 -Author: Xiongtao Dai -Date: Thu Jan 7 16:06:11 2016 -0800 - - minor - -M R/FPCA.R - -commit 742bfa7a179270df217104253245b97018ed2661 -Merge: 15ffded cc212dd -Author: hadjipantelis -Date: Thu Jan 7 15:22:20 2016 -0800 - - Merge pull request #2 from hadjipantelis/userSigma2 - - User sigma2 - -commit 0a06865cdc07a5b2387891067648c59a376de6cf -Author: Xiongtao Dai -Date: Thu Jan 7 01:58:30 2016 -0800 - - improve sigma2 estimate with userCov specified - -M R/GetSmoothedCovarSurface.R -M R/pc_covE.R -M tests/testthat/test_FPCA.R - -commit cc212dd662dec89dbba37f3ada64cd5368baa1c8 -Merge: be9e052 15ffded -Author: Xiongtao Dai -Date: Wed Jan 6 15:42:07 2016 -0800 - - Merge branch 'master' into userSigma2 - -commit 15ffded5f6af79255fb09629246651f2a732d693 -Author: Xiongtao Dai -Date: Wed Jan 6 15:30:17 2016 -0800 - - sample path plot - -M NAMESPACE -A R/createPathPlot.R -A man/createPathPlot.Rd -A tests/testthat/test_createPathPlot.R - -commit 9c4199756b45cbe59c6ff41d95878962190a6d7c -Author: Xiongtao Dai -Date: Wed Jan 6 14:33:34 2016 -0800 - - fix buff - -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R - -commit 90c573f2f249ce2bf32d6890daca5b9d2e373f93 -Merge: 1bc3ad7 0a70b0c -Author: Xiongtao Dai -Date: Wed Jan 6 14:34:34 2016 -0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 0a70b0ca2915cfa7f54051b1b779ade6dde16c90 -Author: dmchris -Date: Tue Jan 5 00:48:09 2016 -0800 - - incorporating subsetFPCA function and simplify fixedK option - - Changes have been tested with updated test file. The ‘fixedK’ option is - removed, where selectionMethod can be positive integer to specify fixed - number of components. Subsetting function is added and executed after - selectK inside FPCA function now. - -M R/CheckOptions.R -M R/FPCA.R -M R/SetOptions.R -M R/selectK.R -A R/subsetFPCA.R -M tests/testthat/test_selectK.R - -commit be9e052b7006ef4802437e8d9a74b2c158bdab4c -Author: Xiongtao Dai -Date: Mon Jan 4 22:52:31 2016 -0800 - - rho=NA -> NULL - -M R/FPCA.R - -commit 7e08b79dc71429fc278c9f189cf65eff1cdf91f1 -Author: Xiongtao Dai -Date: Mon Jan 4 17:40:59 2016 -0800 - - user-specified sigma2 - -M R/CheckOptions.R -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/SetOptions.R -M R/pc_covE.R -M man/FPCA.Rd -M man/createOutliersPlot.Rd -M man/selectK.Rd -M tests/testthat/test_FPCA.R - -commit b2e75b00677a6f77f56fa1a576c56032485d388f -Author: Xiongtao Dai -Date: Mon Jan 4 15:55:32 2016 -0800 - - no user sigma2 -> sigma2=1e-6 - -M R/GetSmoothedCovarSurface.R - -commit 1bc3ad715c905e4b336be2080d81f29828fa0be0 -Merge: 26d8cf0 027d65f -Author: Xiongtao Dai -Date: Sun Jan 3 16:24:27 2016 -0800 - - Merge branch 'master' into improveEigen - -commit 027d65ff650ad39c930ecf54f667d8cfe05813ca -Author: Xiongtao Dai -Date: Sun Jan 3 16:23:36 2016 -0800 - - same fix for GetSmoothMean - -M R/GetSmoothedMeanCurve.R - -commit 26d8cf0e9abaad69c44b45ced737b21b1cd449b1 -Author: Xiongtao Dai -Date: Sun Jan 3 16:08:18 2016 -0800 - - improve readability of GetEigenAnalysis.R - -M R/GetEigenAnalysisResults.R -D R/no_FVE.R - -commit a44dcd203807f143b0cc450d8edfd3ee78927c56 -Author: Xiongtao Dai -Date: Sun Jan 3 15:02:44 2016 -0800 - - small bug fix - -M R/GetSmoothedCovarSurface.R - -commit 4e798bd5f18d1df6934590945ba88e4178074ee0 -Author: Xiongtao Dai -Date: Sun Jan 3 12:05:57 2016 -0800 - - fix corr does not work on constant mu - -M R/GetEigenAnalysisResults.R - -commit f52bb0a020a7c6030cc23c80ad0692797b5ac474 -Author: dmchris -Date: Sat Jan 2 03:18:05 2016 -0800 - - selectK related fixes - - Fixed all issues mentioned in the email by Pantelis on Dec 12. The - option selectK is removed to avoid misunderstanding, where the right - option is selectionMethod. The modified version passes previous tests - as well. - -M R/CheckOptions.R -M R/FPCA.R -M R/getLogLik.R -M R/selectK.R -M tests/testthat/test_selectK.R - -commit b228dfdafb8c358beea57ff5bf2534ce050a5458 -Author: Pantelis -Date: Fri Dec 11 23:15:10 2015 -0800 - - Upgrading createOutliers functionality. - -M R/createOutliersPlot.R - -commit a694e77c3511b8b08622144661c37550d135779d -Author: Pantelis -Date: Wed Dec 9 17:27:29 2015 -0800 - - Further doc changes. - -M DESCRIPTION -M man/FPCA.Rd -M man/createFuncBoxPlot.Rd -M man/createOutliersPlot.Rd - -commit e2671e1c447ecaf20d5e55315eefaf6d68704584 -Author: Pantelis -Date: Wed Dec 9 17:11:22 2015 -0800 - - Change to docs and default options. - -M R/FPCA.R -M R/createFuncBoxPlot.R -M R/createOutliersPlot.R - -commit 92066291ad7e18a06928e4dd7db0fa4db485c12a -Author: Xiongtao Dai -Date: Wed Dec 9 14:50:01 2015 -0800 - - minor - -M R/pc_covE.R - -commit 3497ef14fa84d031030fea381bbce3ab1889d9d0 -Author: Pantelis -Date: Wed Dec 9 02:45:19 2015 -0800 - - Minor update. - -M R/FPCA.R -M man/FPCA.Rd - -commit 4638233915c779ebe1b4f1dae48e2bf378b67e85 -Author: Pantelis -Date: Wed Dec 9 02:38:21 2015 -0800 - - Corrections to selectK docs - -M DESCRIPTION -M NAMESPACE -M R/selectK.R -M man/FPCA.Rd -M man/createDiagnosticsPlot.Rd -M man/createFuncBoxPlot.Rd -A man/selectK.Rd - -commit 01933956ee2f2cb143e74caf535ff229a4bcc7d9 -Merge: 28acc10 413fa78 -Author: Pantelis -Date: Wed Dec 9 02:16:17 2015 -0800 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 28acc10563ad392e49458a8089ce23a18ee1e67c -Author: Pantelis -Date: Wed Dec 9 02:15:48 2015 -0800 - - Upgrading FuncBoxPlot - -M DESCRIPTION -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R - -commit 413fa7841a3e971b5664ce7f8e5ae5c8a53c1541 -Author: dmchris -Date: Wed Dec 9 00:08:28 2015 -0800 - - incorporating selectK - - selectK can be applied inside or outside FPCA function now. The test - cases include dense case performance, inside vs. outside with - equivalent options for both dense and sparse data. Documentations are - updated for FPCA and selectK functions. Related changes in - CheckOptions() and SetOptions(). - -M R/CheckOptions.R -M R/FPCA.R -M R/SetOptions.R -A R/getLogLik.R -A R/selectK.R -A tests/testthat/test_selectK.R - -commit 011bb60dbf22cae5e6024e4b70f013070b0d54f4 -Author: Pantelis -Date: Tue Dec 8 17:29:46 2015 -0800 - - Minor changes - -M DESCRIPTION -M R/FPCA.R -M R/createOutliersPlot.R - -commit 46701dbf2c9ad62fe3a4e548f2958f3ae07ed7d9 -Author: Pantelis -Date: Tue Dec 8 12:11:04 2015 -0800 - - Additional Outlier Functionality. - -M DESCRIPTION -M R/GetBinnedCurve.R -M R/createDesignPlot.R -M R/createOutliersPlot.R -M man/FCReg.Rd -M man/createDesignPlot.Rd -M man/createOutliersPlot.Rd - -commit 9db1f55f08971d42c9cf5ee0008d870537207316 -Author: Pantelis -Date: Fri Dec 4 23:10:43 2015 -0800 - - New outlier plots - -M R/createDiagnosticsPlot.R -M R/createOutliersPlot.R - -commit 221e6c69f3a0084d6fc2416df9c8e434359e346f -Author: Pantelis -Date: Wed Dec 2 12:04:42 2015 -0800 - - Minor update to createDesignPlot.R - -M R/createDesignPlot.R - -commit 08de59111d66ed5527df3aca30bf13a08eab096e -Author: Pantelis -Date: Wed Dec 2 02:45:45 2015 -0800 - - beta0 addition - -M R/FCReg.R - -commit 3dac1951413ed366b593da18691cc613b10d1660 -Author: Pantelis -Date: Tue Dec 1 12:11:55 2015 -0800 - - Minor check added. - -M R/createDesignPlot.R - -commit 7657822a2352c8efa5deb6a4154c8481f1b8d233 -Author: Pantelis -Date: Tue Dec 1 01:07:12 2015 -0800 - - CrCov/Regression functionality renaming - -M NAMESPACE -R081 R/FPCAregFuncExp.R R/FCReg.R -R097 R/CrCovYX.R R/getCrCovYX.R -R096 R/CrCovYZ.R R/getCrCovYZ.R -R070 man/FPCAregFuncExp.Rd man/FCReg.Rd -R090 man/CrCovYX.Rd man/getCrCovYX.Rd -R089 man/CrCovYZ.Rd man/getCrCovYZ.Rd -M src/symbols.rds -R086 tests/testthat/test_CrCovYX.R tests/testthat/test_getCrCovYX.R -R082 tests/testthat/test_CrCovYZ.R tests/testthat/test_getCrCovYZ.R - -commit c9bfee81781765340bf2ced580cdc7d0ef9946f0 -Author: Xiongtao Dai -Date: Mon Nov 30 21:21:11 2015 -0800 - - document() such that the package can be installed - -M NAMESPACE -M R/RcppExports.R -D man/FPCAregFunc.Rd -M man/print.FPCA.Rd -M src/RcppExports.cpp - -commit e5640229aae58167da53463f6e451d09004bfb85 -Author: Pantelis -Date: Mon Nov 30 19:13:12 2015 -0800 - - Various changes in renaming and cleaning up. - -M DESCRIPTION -M NAMESPACE -D R/FPCAregFunc.R -D R/FPCAregScalar.R -D R/FPCAregScalarExp.R -M R/GetBinnedCurve.R -M R/RcppExports.R -D R/createBetaPlots.R -D R/fitted.FRegObj.R -M R/lwls2dV2.R -M R/print.FPCA.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CrCovYX.Rd -M man/CrCovYZ.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FPCAregFunc.Rd -M man/FPCAregFuncExp.Rd -D man/FPCAregScalar.Rd -D man/FPCAregScalarExp.Rd -M man/FVPA.Rd -M man/HandleNumericsAndNAN.Rd -M man/SetOptions.Rd -D man/createBetaPlots.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createFuncBoxPlot.Rd -M man/createModeOfVarPlot.Rd -M man/createOutliersPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -D man/fitted.FregObj.Rd -M man/getCrCorYX.Rd -M man/getNormalisedSample.Rd -M man/lwls1d.Rd -M man/lwls2d.Rd -M man/makeFPCAinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd -M src/RcppExports.cpp -A src/symbols.rds -D tests/testthat/test_FPCAregScalar.R -D tests/testthat/test_FPCAregScalarExp.R -M tests/testthat/test_lwls2dV2.R - -commit f42371fb41f0e622f21685e42b19c62bda58c09b -Author: Xiongtao Dai -Date: Mon Nov 30 17:01:15 2015 -0800 - - document() - -M NAMESPACE -D man/CrCovYXfast.Rd -M man/getNormalisedSample.Rd - -commit 3a7dbb912ca3014f04820ef7dbe1e9424ef91608 -Merge: 8fbdfc7 44d5342 -Author: Xiongtao Dai -Date: Mon Nov 30 16:56:43 2015 -0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - - Conflicts: - NAMESPACE - man/CrCovYXfast.Rd - man/getNormalisedSample.Rd - -commit 8fbdfc719ec4f24a31a75701a2e5c901b03c4afd -Author: Xiongtao Dai -Date: Mon Nov 30 16:49:34 2015 -0800 - - changed names - -M NAMESPACE -M R/CrCovYX.R -M R/CrCovYZ.R -M R/FPCAder.R -M R/FPCAregFunc.R -M R/FPCAregScalar.R -M R/FPCAregScalarExp.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/RcppExports.R -M R/Rlwls1d.R -M R/cvlwls1d.R -M R/gcvlwls1d1.R -M R/gcvlwls2dV2.R -M R/lwls2dV2.R -M R/makePACEinputs.R -M R/pc_covE.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CrCovYX.Rd -M man/CrCovYXfast.Rd -M man/CrCovYZ.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FPCAregFunc.Rd -M man/FPCAregFuncExp.Rd -M man/FPCAregScalar.Rd -M man/FPCAregScalarExp.Rd -M man/FVPA.Rd -M man/GetNormalisedSample.Rd -M man/HandleNumericsAndNAN.Rd -M man/SetOptions.Rd -M man/createBetaPlots.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createFuncBoxPlot.Rd -M man/createModeOfVarPlot.Rd -M man/createOutliersPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/fitted.FregObj.Rd -M man/getCrCorYX.Rd -R084 man/Rlwls1d.Rd man/lwls1d.Rd -R089 man/lwls2dV2.Rd man/lwls2d.Rd -R077 man/makePACEinputs.Rd man/makeFPCAinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd -M src/RcppExports.cpp -D src/symbols.rds -M tests/testthat/test_FPCAregScalar.R -M tests/testthat/test_FPCAregScalarExp.R -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_funSim.R -M tests/testthat/test_lwls2dV2.R -R083 tests/testthat/test_makePACEinputs.R tests/testthat/test_makeFPCAinputs.R - -commit 44d5342d5d750dd12003d1c11a800d750e1f2a87 -Author: Pantelis -Date: Mon Nov 30 16:51:19 2015 -0800 - - Fixing NAMESPACE, etc. - -M NAMESPACE -D man/CrCovYXfast.Rd -R051 man/GetNormalisedSample.Rd man/getNormalisedSample.Rd - -commit 8883fd8322ee9c2b606e291e6f2b33ebd3eea9fc -Author: Pantelis -Date: Mon Nov 30 16:47:51 2015 -0800 - - Cleaning up unused functions. - -D R/CrCovYXfast.R -D R/MultipleCC.R - -commit f892c79061f5b382ebb010823ddddc5e59520780 -Merge: 4ec87d1 ab2a950 -Author: Pantelis -Date: Mon Nov 30 16:43:37 2015 -0800 - - 'getNormalised' renaming. - -commit 4ec87d138dacb5625b247cc2258b44620a650ae5 -Author: Pantelis -Date: Mon Nov 30 16:42:02 2015 -0800 - - 'getNormalised' renaming. - -M .gitignore -R084 R/GetNormalisedSample.R R/getNormalisedSample.R - -commit ab2a950956c140677867c06e0923cba01469ea19 -Author: Xiongtao Dai -Date: Sun Nov 29 13:16:58 2015 -0800 - - remove notes - -M .gitignore -D notesXiongtao.txt - -commit 2012d89e7ba55beb155ea98c631066e496f8365b -Author: Pantelis -Date: Sun Nov 29 01:47:40 2015 -0800 - - General tidy-up; comments, docs & examples. - -M DESCRIPTION -M R/CrCovYX.R -M R/CrCovYXfast.R -M R/CrCovYZ.R -M R/FPCA.R -M R/FPCAder.R -M R/GetNormalisedSample.R -M R/createCovPlot.R -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R -M R/createModeOfVarPlot.R -M R/createOutliersPlot.R -M R/createScreePlot.R -M R/fitted.FPCA.R -M R/fitted.FRegObj.R -M R/gcvlwls1d1.R -M R/getMinb.R -M R/makePACEinputs.R -M R/pc_covE.R -M R/rotateLwls2dV2.R -M R/wiener.R -M man/CrCovYX.Rd -M man/CrCovYXfast.Rd -M man/CrCovYZ.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/GetNormalisedSample.Rd -M man/createCovPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createFuncBoxPlot.Rd -M man/createModeOfVarPlot.Rd -M man/createOutliersPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/fitted.FregObj.Rd -M man/makePACEinputs.Rd -M man/wiener.Rd -A src/symbols.rds - -commit 502842ce5085ef87b08d3bd99579b0362eb3156e -Author: Xiongtao Dai -Date: Sat Nov 28 18:43:20 2015 -0800 - - BinRawBov Comments - -M R/BinRawCov.R - -commit 90f03938806f0ef0d6b8e5d82fe318a7b4ce6d91 -Author: Pantelis -Date: Sat Nov 28 16:48:04 2015 -0800 - - BinRawCov speed-up. - -M R/BinRawCov.R -M R/RcppExports.R -A src/RCPPmean.cpp -A src/RCPPvar.cpp -M src/RcppExports.cpp - -commit 73f1e646ffc7b8f092977d10bfba612ab01950bb -Author: Xiongtao Dai -Date: Sat Nov 28 02:31:24 2015 -0800 - - added test_useBin.R and generated documentations - -M NAMESPACE -M R/RcppExports.R -M man/FPCA.Rd -A man/GetNormalisedSample.Rd -M man/createCovPlot.Rd -M man/createOutliersPlot.Rd -A man/getCrCorYX.Rd -M src/RcppExports.cpp -M tests/testthat/test_useBin.R - -commit 7957881c3dfbfda7322c1f613e45cea53481daac -Author: Pantelis -Date: Fri Nov 27 23:47:50 2015 -0800 - - Cross-correlation from Cross-covariances - -M R/FPCA.R -M R/MakeResultFPCA.R -M R/SetOptions.R -A R/getCrCorYX.R -A tests/testthat/test_getCrCorYX.R - -commit 9a2bfb6c0ce3825115f0a730b1ea6cf80c2e9aa2 -Author: Pantelis -Date: Fri Nov 27 14:22:11 2015 -0800 - - Adding/adjusting some unit-tests. - -M tests/testthat/test_CrCovYX.R -M tests/testthat/test_FPCA.R - -commit d7c777dee61d2a6db5934c974bb43a797a686a01 -Merge: a2cba3a cdeeaa0 -Author: hadjipantelis -Date: Fri Nov 27 13:38:00 2015 -0800 - - Merge pull request #1 from hadjipantelis/fix2dRotation - - matrix transpositions in interp2lin and RmullwlskCC - -commit a2cba3ad08eecac565d7ffca2d286029bef38e9b -Author: Pantelis -Date: Fri Nov 27 13:36:35 2015 -0800 - - Normalising code. - -M R/CrCovYX.R -A R/GetNormalisedSample.R -M tests/testthat/test_CrCovYX.R - -commit b7331a09725c3f0605c6b4a3ae85967a0129db22 -Author: Pantelis -Date: Wed Nov 25 21:04:18 2015 -0800 - - Tidying up the plotting functions. - -M R/RcppExports.R -M R/createCovPlot.R -M R/createDesignPlot.R -M R/createDiagnosticsPlot.R -M R/createOutliersPlot.R -M src/RcppExports.cpp - -commit cdeeaa06828d0aa8e2822715ab8e88b5ece60a1d -Author: Xiongtao Dai -Date: Wed Nov 25 01:57:30 2015 -0800 - - matrix transpositions in interp2lin and RmullwlskCC - -M src/RmullwlskCC.cpp -M src/interp2lin.cpp -M tests/testthat/test_interp2lin.R -M tests/testthat/test_lwls2dV2.R - -commit 3eb0dfee2f61b60fb3ac27804ca31022ec55c824 -Author: Xiongtao Dai -Date: Tue Nov 24 13:36:29 2015 -0800 - - test_createDesignPlot and other documents - -M .gitignore -M R/createDesignPlot.R -A man/CrCovYXfast.Rd -A man/FPCAregFuncExp.Rd -A man/FPCAregScalarExp.Rd -A man/createBetaPlots.Rd -M man/createDesignPlot.Rd -A man/createModeOfVarPlot.Rd -A man/lwls2dV2.Rd -A tests/testthat/test_createDesignPlot.R - -commit 6658e0fab55873f2ebe00eceabd766684f115b56 -Author: Xiongtao Dai -Date: Tue Nov 24 13:30:36 2015 -0800 - - createDesignPlot improved; document lwls2dV2 - -M DESCRIPTION -M NAMESPACE -M R/RcppExports.R -M R/Rlwls1d.R -M R/createDesignPlot.R -M R/designPlotCount.R -M R/lwls2dV2.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CrCovYX.Rd -M man/CrCovYZ.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FPCAregFunc.Rd -M man/FPCAregScalar.Rd -M man/FVPA.Rd -M man/HandleNumericsAndNAN.Rd -M man/Rlwls1d.Rd -M man/SetOptions.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createFuncBoxPlot.Rd -M man/createOutliersPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/fitted.FregObj.Rd -M man/makePACEinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd -M src/RcppExports.cpp - -commit ec8b52aebd8cfa1fe0d490262fe251269c3096cf -Author: Pantelis -Date: Sun Nov 22 14:11:24 2015 -0800 - - Changes in the interface of plotting functions - -M R/createFuncBoxPlot.R -M R/createModeOfVarPlot.R -M R/createScreePlot.R - -commit 5af43ac06326b6dcf172acdf450c40b089c994a9 -Author: Pantelis -Date: Sat Nov 21 19:12:35 2015 -0800 - - Minor: the estim. phi's are positively correlated with mu - -M R/FPCA.R -M R/FPCAregFuncExp.R -M R/GetEigenAnalysisResults.R - -commit 3e33e21ea0ca93501535a3ffb5718a95bc0a5333 -Author: Pantelis -Date: Sat Nov 21 01:50:10 2015 -0800 - - Changes in default options in regression functions - -M R/FPCAregFuncExp.R -M R/createFuncBoxPlot.R -M R/createOutliersPlot.R - -commit c8a4a599872751205721b98a939f56837844c58b -Author: Pantelis -Date: Thu Nov 19 22:38:15 2015 -0800 - - Changes to plotting functions. - -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R -A R/createModeOfVarPlot.R -M R/createScreePlot.R - -commit 1265c470ef60cfbf1646b572ae9e1df54aade5c6 -Author: Pantelis -Date: Thu Nov 19 09:53:38 2015 -0800 - - minor change - -M R/CrCovYX.R - -commit c20dd387f8e9e02c16bf91b0dd2e586894341473 -Author: Pantelis -Date: Wed Nov 18 14:51:30 2015 -0800 - - Concurrent model bug fixes - -M R/CrCovYX.R -M R/FPCAregFuncExp.R - -commit 46618f1e504399d71688e156c718815ee148f2de -Author: Pantelis -Date: Tue Nov 17 21:08:57 2015 -0800 - - Concurrent model - -A R/FPCAregFuncExp.R -M R/FPCAregScalarExp.R -M tests/testthat/test_FPCAregScalarExp.R - -commit 597780c0f5df38c95340dff2c04cf3aa1907cdac -Author: Pantelis -Date: Tue Nov 17 16:53:23 2015 -0800 - - Work on the extension of the FLM - -M R/CrCovYX.R -A R/CrCovYXfast.R -A R/FPCAregScalarExp.R -A tests/testthat/test_FPCAregScalarExp.R - -commit 78dd85f066b73c6dfec8726ecef55e38ac388475 -Author: hadjipantelis -Date: Mon Nov 16 09:47:42 2015 -0800 - - Bug fix. - -M R/Rlwls1d.R - -commit deeb78b3c3c01fcb39df2fdb192744e9be5b5326 -Author: Xiongtao Dai -Date: Sun Nov 15 14:46:00 2015 -0800 - - fix parenthesis in Rlwls1d - -M R/Rlwls1d.R - -commit 04047d1fe303ccf356189bdfab2353267954682f -Author: hadjipantelis -Date: Sat Nov 14 14:28:20 2015 -0800 - - Check for NA/NaNs in input values. - -M R/Rlwls1d.R - -commit 2d2946a7f5477e2563c31552202e0f59c15ee7e5 -Author: hadjipantelis -Date: Sat Nov 14 13:56:52 2015 -0800 - - Symmetry checks. - -M R/no_FVE.R - -commit c0f88a762e780989263d33790053de7124623da1 -Author: Xiongtao Dai -Date: Thu Nov 12 22:18:16 2015 -0800 - - rm rARPACK dependency; use `eigen` rather than `eigs` - -M DESCRIPTION -M R/no_FVE.R -M R/pkgname.R - -commit b307f3d585365c626f0691f4bc8b2d2173da19c8 -Merge: d6696a3 49f44e0 -Author: Xiongtao Dai -Date: Thu Nov 12 11:08:04 2015 -0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 49f44e0b282a9926e6193dae7d9dabb6124c48b4 -Author: hadjipantelis -Date: Thu Nov 12 10:29:23 2015 -0800 - - Bug fix. - -M R/GetRawCrCovFuncFunc.R - -commit 5199b50e81a8b162bd6ad4f5446bbb3035abdf58 -Author: Pantelis -Date: Tue Nov 10 13:20:20 2015 -0800 - - 'fast' Cross-Covariance smoothing added. - -M R/CrCovYX.R -M R/GetRawCrCovFuncFunc.R -M tests/testthat/test_CrCovYX.R - -commit fccfe62e0d37cdfb8c23408c49ac9b6319aae77f -Author: Pantelis -Date: Tue Nov 10 11:32:29 2015 -0800 - - Additional Cross-Cov Checks - -M tests/testthat/test_CrCovYX.R - -commit 6913c90c1e5970f49231eea7587ad120ffdb9219 -Author: Pantelis -Date: Tue Nov 10 09:48:47 2015 -0800 - - Typo correction - -M R/FPCAregScalar.R - -commit 8db5cb5900e7dfcc3629a7b788a4551b2cc99c6f -Author: Pantelis -Date: Tue Nov 10 03:18:45 2015 -0800 - - Unit tests for CrossCovYZ.R - -M R/FPCAregScalar.R -M R/RcppExports.R -M src/CPPlwls1d.cpp -M src/RcppExports.cpp -M tests/testthat/test_CrCovYZ.R - -commit d6696a3fa9f0da5d466b40fbb04c198981415d59 -Merge: 6500be8 581a943 -Author: Xiongtao Dai -Date: Sat Nov 7 13:01:04 2015 -0800 - - Merge branch 'sparsify' - -commit 6500be8a7737189c9402f38681ec70d146fb702d -Merge: 6762e7a a00e9f3 -Author: Pantelis -Date: Thu Nov 5 19:54:45 2015 -0800 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 6762e7a0d976ad1de90b103de80d82e5309dbc94 -Author: Pantelis -Date: Thu Nov 5 19:54:20 2015 -0800 - - Bug fixes in createDesignPlot/TruncateObs/FPCAregScalar - -M R/CrCovYZ.R -M R/FPCAregScalar.R -M R/TruncateObs.R -M R/createDesignPlot.R -M tests/testthat/test_FPCAregScalar.R - -commit a00e9f380312117dd7758646f2d157d0da60dfc8 -Merge: 5afa6e4 2a6a776 -Author: Xiongtao Dai -Date: Wed Nov 4 10:23:36 2015 -0800 - - Merge branch 'improve2D' - -commit 581a943261a540eb90bb9cbec4e82c288a60174f -Author: Xiongtao Dai -Date: Wed Nov 4 10:10:40 2015 -0800 - - Eigenfunction maximal point before minimal point - -M R/GetEigenAnalysisResults.R - -commit 2a6a7766dcfa5961ecd041eeeb168d48c3bbc451 -Author: Xiongtao Dai -Date: Wed Nov 4 10:08:55 2015 -0800 - - rename old 2Dsmoother - -M src/Rmullwlsk_old.cpp - -commit 94d440119f194bc08237907c218237ee55d620f1 -Author: Xiongtao Dai -Date: Wed Nov 4 10:07:59 2015 -0800 - - 2Dsmoother speed improvement by removing `intersect` - -M src/Rmullwlsk.cpp -A src/Rmullwlsk_old.cpp -M tests/testthat/test_Rmullwlsk.R - -commit 5afa6e44bbbb64b657197147768254ab722623a5 -Author: Pantelis -Date: Wed Nov 4 00:27:11 2015 -0800 - - Minor changes in plotting and regression functions - -M R/FPCAregScalar.R -M R/createBetaPlots.R -M R/createFuncBoxPlot.R -M R/createOutliersPlot.R - -commit f02ba8690a73382dcb1109524c508e37b931c776 -Author: hadjipantelis -Date: Mon Nov 2 21:53:03 2015 -0800 - - Missing an apostrophe! - -M R/FPCA.R - -commit 64d67ddb996a2833676c52cbaf1fe30429d4e0ed -Author: Xiongtao Dai -Date: Mon Nov 2 14:26:00 2015 -0800 - - Added an option allowing sparsifying into fragments - -M R/sparsify.R -M tests/testthat/test_wiener.R - -commit 99b1e706fa09a227d030059d9e068aa68577bba5 -Author: Pantelis -Date: Sat Oct 31 02:04:35 2015 -0700 - - Basic fix in createDesignPlot axis issue - -M R/createDesignPlot.R - -commit 43cbb1528a0257812e995752e7aa03d992889ff3 -Author: Pantelis -Date: Fri Oct 30 20:34:53 2015 -0700 - - FVPA implementation - -D Rplots.pdf -D Rplots1.pdf - -commit d63ca26e264198f47fe066c74d50a2a03bf6aa9d -Author: Pantelis -Date: Fri Oct 30 20:34:12 2015 -0700 - - FVPA implementation - -M NAMESPACE -A R/FVPA.R -A Rplots.pdf -A Rplots1.pdf -A man/FVPA.Rd -M man/createCovPlot.Rd -M man/makePACEinputs.Rd -M man/print.FPCA.Rd - -commit 1e2c89f521ec65392bb428ad8d3940bbdf94b6b1 -Merge: e7410f4 7924b19 -Author: Xiongtao Dai -Date: Thu Oct 29 09:06:07 2015 -0700 - - Merge branch 'fix' - -commit 7924b194760f401a50a2b29c2a67d95b0406c373 -Author: Xiongtao Dai -Date: Thu Oct 29 09:04:02 2015 -0700 - - Fix and added test for `GetBinnedDataset`, fix `BinRawCov`. - `makePACEinputs` added feature. - -M R/BinRawCov.R -M R/GetBinnedDataset.R -M R/makePACEinputs.R -M tests/testthat/test_GetBinnedDataset.R - -commit e7410f4758c646bc3d17dd09393039e1422b8449 -Merge: f723990 310c8a5 -Author: Pantelis -Date: Tue Oct 27 23:51:05 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit f7239906c06cadbd092efe39680b6acf89b3bb0d -Author: Pantelis -Date: Tue Oct 27 23:50:25 2015 -0700 - - Removing plots added by accident. - -D Rplots.pdf -D Rplots1.pdf -M tests/testthat/test_lwls2dV2.R - -commit 310c8a5d4e38081626d629f502e6f1a153d8de01 -Author: hadjipantelis -Date: Tue Oct 27 15:26:00 2015 -0700 - - Update createDiagnosticsPlot.R - -M R/createDiagnosticsPlot.R - -commit 4de3489b28ce2c97e9a4bddf4056323e2f8c55d1 -Author: Pantelis -Date: Tue Oct 27 11:34:54 2015 -0700 - - Calibrating createDesignPlot. - -M R/createDesignPlot.R -A Rplots.pdf -A Rplots1.pdf - -commit 9420899e6f7973099e27c2e6aecc555ad7ccc8f9 -Author: Pantelis -Date: Tue Oct 27 10:40:09 2015 -0700 - - Sorting out createCovPlot. - -M R/createCovPlot.R - -commit 5f1893d4f9a01c2322b45c41ad7eac165cecc6f1 -Author: Pantelis -Date: Tue Oct 27 00:55:39 2015 -0700 - - Rewriting createDesignPlot - -M NAMESPACE -M R/createDesignPlot.R -M man/print.FPCA.Rd - -commit b487b87ef8066b29cb288d21447ec388991cbd5d -Author: Pantelis -Date: Mon Oct 26 22:33:35 2015 -0700 - - Tidying up some plotting functions - -M NAMESPACE -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R -M R/createOutliersPlot.R -M R/createScreePlot.R -M man/createDiagnosticsPlot.Rd -A man/createFuncBoxPlot.Rd -A man/createOutliersPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd - -commit 6c7eef58748f12188a2c7976654d23b799bca7d3 -Author: Pantelis -Date: Mon Oct 26 15:22:23 2015 -0700 - - Minor change to smoother and addition of 'k' option to 'fitted.FPCA()' - -M R/fitted.FPCA.R -M src/Rmullwlsk.cpp - -commit 1b0ecf4014068b8c618d9636d88f8ed580e8a767 -Merge: b1dcdec 265f6a1 -Author: CrossD -Date: Sat Oct 24 16:37:57 2015 -0700 - - Merge branch 'demo' - -commit 265f6a16b941f0386a3b3ee49ae7cecac5a21bba -Author: Xiongtao Dai -Date: Fri Oct 23 15:11:06 2015 -0700 - - remove tPACE:: - -M R/CrCovYX.R -M R/CrCovYZ.R - -commit b1dcdec016d41b1a8db2c0d1b19f4a9680a0a1d8 -Author: hadjipantelis -Date: Thu Oct 22 02:07:56 2015 -0700 - - Update README.org - -M README.org - -commit 909a46ddc34565266aa93bbab4552e540784ab99 -Author: Xiongtao Dai -Date: Wed Oct 21 23:50:31 2015 -0700 - - minor test case fix - -M tests/testthat/test_GetRho.R - -commit 6d2afd19d29f367778f6918d96dc7593cf7226be -Author: Pantelis -Date: Wed Oct 21 19:08:34 2015 -0700 - - Minor - -M tests/testthat/test_CheckData.R -M tests/testthat/test_FitEigenValues.R -M tests/testthat/test_GetEigenAnalysisResults.R -D tests/testthat/test_lwls1.csv - -commit f0189ca2f5c3b7f2dcdacab58475520921ff7cf7 -Merge: 2e242de 76dec87 -Author: Xiongtao Dai -Date: Wed Oct 21 16:40:06 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 2e242de95f8d1f643402c748e85f0ac9b003deca -Author: Xiongtao Dai -Date: Wed Oct 21 16:39:40 2015 -0700 - - bug in GetSmoothedCovarSurface.R fixed - -M R/GetSmoothedCovarSurface.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetSmoothedCovarSurface.R - -commit 76dec87b598b491d7beb0cbba605139813227ebb -Author: Pantelis -Date: Wed Oct 21 16:09:34 2015 -0700 - - Minor changes to tests. - -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_interp2lin.R -M tests/testthat/test_no_FVE.R -M tests/testthat/test_pc_covE.R - -commit 282d054501e0f749d43b2801709e92afdfb723aa -Author: Pantelis -Date: Wed Oct 21 12:19:28 2015 -0700 - - Clean-up and scaffolding for parallel' - -M .gitignore -M R/RcppExports.R -M R/lwls2dV2.R -M src/RcppExports.cpp -M src/Rmullwlsk.cpp -M tests/testthat/test_GetRawCrCovFuncFunc.R -M tests/testthat/test_GetRawCrCovFuncScal.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_lwls2dV2.R - -commit e510c467c5a55c8732ead061764d9dadd3809f73 -Author: Xiongtao Dai -Date: Sun Oct 18 13:02:28 2015 -0700 - - update help - -M man/FPCA.Rd - -commit 1eafb9b1e85e552b2a263ea6f3e2d100e48f5ccb -Author: Xiongtao Dai -Date: Sun Oct 18 13:01:14 2015 -0700 - - option fixes for useBinnedCov kCV numCVcurves - minor fix for lwls2dV2 - -M R/CheckOptions.R -M R/GetSmoothedCovarSurface.R -M R/SetOptions.R -M R/gcvlwls2dV2.R -M R/lwls2dV2.R -M tests/testthat/test_gcvlwls2dV2.R - -commit 42fdf45f988672b6a92643ab6b378202b1187548 -Author: Xiongtao Dai -Date: Sun Oct 18 12:11:13 2015 -0700 - - fix options - -M R/CheckOptions.R -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/SetOptions.R -D src/symbols.rds - -commit 97b4926a905a54d12bf7a860587a7d509ebe502d -Merge: 62fd5f8 551955a -Author: Xiongtao Dai -Date: Sun Oct 18 10:52:24 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 551955a15ab5f7ff78f0e1f2f7216873f90faa13 -Author: Pantelis -Date: Fri Oct 16 17:03:33 2015 -0700 - - commented out some numComp functionality. - -M R/MakeResultFPCA.R - -commit 14eb79384976caf96bc6c2ceb233297998654005 -Author: Pantelis -Date: Fri Oct 16 16:50:48 2015 -0700 - - New doc - -M man/FPCA.Rd -A man/HandleNumericsAndNAN.Rd - -commit ee015a9aa9d2f6aceb59ef604fd3c0fa0f9e76ee -Author: Pantelis -Date: Fri Oct 16 16:48:28 2015 -0700 - - Changes to options and docs - -M R/CheckOptions.R -M R/FPCA.R -M R/GetEigenAnalysisResults.R -M R/MakeResultFPCA.R -M R/SetOptions.R -M tests/testthat/test_SetOptions.R - -commit 66cbe64261bc5e24829ec48bfa07ebc436b0c156 -Author: Pantelis -Date: Fri Oct 16 16:18:53 2015 -0700 - - minor FVE fix - -M R/GetEigenAnalysisResults.R - -commit 62fd5f8954683803eefe3959f8f39e27e05865a0 -Merge: 7d3ae10 5169ec5 -Author: CrossD -Date: Fri Oct 16 09:28:57 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 5169ec5d3a9548a36b60c4971f289418442f9899 -Author: Pantelis -Date: Thu Oct 15 19:20:51 2015 -0700 - - Unit test for GetBinnedDataset() - -A tests/testthat/test_GetBinnedDataset.R - -commit 7ffdfc09b263104eb41f673be948bcb3fd63ac40 -Author: Pantelis -Date: Thu Oct 15 18:51:02 2015 -0700 - - Bugs fixes for GetBinnedDataset. - -M R/GetBinnedDataset.R -M tests/testthat/test_GetBinnedCurve.R - -commit 82ef97ad2165037332ada8ae831ede21033423a3 -Author: Pantelis -Date: Thu Oct 15 17:31:02 2015 -0700 - - Adding unit-test for k=1 case. - -M tests/testthat/test_FPCA.R - -commit e45dcf3776bb25fb9a7087a4f9ba690be664ba19 -Author: Pantelis -Date: Thu Oct 15 17:11:22 2015 -0700 - - Bug fix for the case of k=1 - -M R/GetEigenAnalysisResults.R - -commit 7d3ae108513fdad15a92133ffa9e50c5ba62c5f0 -Merge: 806c5e2 4fa95e9 -Author: CrossD -Date: Wed Oct 14 23:10:54 2015 -0700 - - merge - -commit 806c5e2b122fa9facf53efdf64f13c75e640f2e0 -Author: CrossD -Date: Wed Oct 14 23:07:52 2015 -0700 - - minor - -M R/GetSmoothedCovarSurface.R -M R/RcppExports.R -M R/lwls2dV2.R -M src/RcppExports.cpp -D src/Rlwls1d.cpp_back - -commit 4fa95e97fbf58440bbb31a5ca7666ca6f71be4f5 -Author: dmchris -Date: Wed Oct 14 22:38:20 2015 -0700 - - FVE bug fix. - - changes in no_FVE, GetEigenAnalysisResults and MakeResultFPCA. Moved - thresholding from no_FVE to GetEigenAnalysisResults after checking maxk. - Added new output cumFVE. FPCA Roxygen doc needs to change - correspondingly. - -M R/FPCA.R -M R/GetEigenAnalysisResults.R -M R/MakeResultFPCA.R -M R/no_FVE.R - -commit 79a557cd3bbe5b75e8586aef51da7246208e5807 -Author: dmchris -Date: Wed Oct 14 16:19:23 2015 -0700 - - Update GetEigenAnalysisResults.R - -M R/GetEigenAnalysisResults.R - -commit 67126f4745eb17882522ce3febc372ab119d3f97 -Author: dmchris -Date: Wed Oct 14 16:05:49 2015 -0700 - - Update no_FVE.R - -M R/no_FVE.R - -commit 56a715eb4aa34802a8abc463f1cf5de0a57f2896 -Author: hadjipantelis -Date: Wed Oct 14 15:57:54 2015 -0700 - - update in default values of no_FVE - -M R/no_FVE.R - -commit c38255ac72c98cc8935ca380480b9c398d746ee4 -Author: Pantelis -Date: Tue Oct 13 19:51:20 2015 -0700 - - Patch for userCov + unit tests. - -M R/CheckOptions.R -M R/CrCovYX.R -M R/CrCovYZ.R -M R/FPCA.R -M R/GetRawCrCovFuncScal.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M tests/testthat/test_FPCA.R - -commit a43de3d6e8493f47f77e45ca72f4df8b5a492390 -Author: Pantelis -Date: Mon Oct 12 13:11:55 2015 -0700 - - Dense userMu patch. - -M R/FPCA.R -M R/GetCovDense.R -M R/GetMeanDense.R - -commit ebbace073b04e03cfa04c23b1a9e489cf514cadf -Author: Pantelis -Date: Mon Oct 12 12:04:40 2015 -0700 - - Tidying up user-defined mu - -M R/CheckOptions.R -M R/FPCA.R -M R/GetSmoothedMeanCurve.R - -commit 5a26a93e1e52350c31291801847ef38e18d3adf0 -Author: hadjipantelis -Date: Sat Oct 10 15:54:37 2015 -0700 - - Updated HandleNumericsAndNAN to check for repeated measurements. - -M R/HandleNumericsAndNAN.R - -commit 8222ec59d7ab8e4b4a2da696c4fe60cc36754284 -Author: Pantelis -Date: Sat Oct 10 15:36:37 2015 -0700 - - Adding handlers for NA inputs. - -M R/CheckData.R -M R/FPCA.R -A R/HandleNumericsAndNAN.R -M tests/testthat/test_FPCA.R - -commit 83505dc6d581d3a6fda7e0ebc96e5cdf83abe14d -Author: Pantelis -Date: Thu Oct 8 12:04:16 2015 -0700 - - Forcing 'signif(x,14)' to the whole function; correcting minor typos - -M R/BinRawCov.R -M R/FPCA.R -M R/GetCEScores.R -M src/interp2lin.cpp - -commit c223ef351124da068752e42b0149ea4dcd17be4a -Author: Pantelis -Date: Tue Oct 6 23:48:51 2015 -0700 - - Documentation fixes to fitted.FPCA and SetOptions - -M NAMESPACE -M R/SetOptions.R -M R/fitted.FPCA.R -A man/Rlwls1d.Rd -M man/SetOptions.Rd -M man/fitted.FPCA.Rd -A man/fitted.FregObj.Rd -A src/symbols.rds -M tests/testthat/test_gcvlwls2dV2.R - -commit d2e6d9a15f3de8881714c3d04587722c7f59d2c5 -Author: Pantelis -Date: Mon Oct 5 19:44:29 2015 -0700 - - Minor, verbose correction - -M R/RcppExports.R -M R/SetOptions.R -M R/gcvlwls2dV2.R -M src/RcppExports.cpp - -commit 2f61a79c1fa59de16e43288bec512ac073b7edd2 -Author: Xiongtao Dai -Date: Mon Oct 5 17:42:25 2015 -0700 - - minor - -M R/RcppExports.R -M R/Rlwls1d.R -M src/RcppExports.cpp -D src/Rlwls1d.cpp - -commit 2b84179e2f140bacea8367b93154694d1c403bc7 -Author: Pantelis -Date: Mon Oct 5 17:25:10 2015 -0700 - - Making CPPlwls1d.cpp and related wrapper - -M R/RcppExports.R -A R/Rlwls1d.R -A src/CPPlwls1d.cpp -M src/RcppExports.cpp -A src/Rlwls1d.cpp_back - -commit 87114b85205fbcc3373d4c74abc7b8c05e935050 -Merge: 703631a 8b653ae -Author: Pantelis -Date: Mon Oct 5 17:02:17 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 703631a0840f710d929e3df8cdafd5f2aa3355c4 -Author: Pantelis -Date: Mon Oct 5 16:59:19 2015 -0700 - - minor FPCAregScalar change - -M R/FPCAregScalar.R - -commit 8b653ae120fd78ff7ccc8c51cf0b9f805bc12371 -Author: Xiongtao Dai -Date: Mon Oct 5 15:24:18 2015 -0700 - - 2d smoother works for integer valued numbers - -M R/lwls2dV2.R - -commit 651080f655b7548d24c5f38eeb67977fe9510ff1 -Merge: a111a11 5f81784 -Author: Pantelis -Date: Mon Oct 5 13:44:43 2015 -0700 - - Merge branch 'ColoradoWork' of https://github.com/hadjipantelis/tPACE into ColoradoWork - -commit a111a11e51d34fcf8ec5baa3b3848feab23f6301 -Author: Pantelis -Date: Mon Oct 5 11:47:12 2015 -0700 - - Updating CrCovY*.R documentation - -M NAMESPACE -M R/CrCovYX.R -M R/CrCovYZ.R -M R/RcppExports.R -M man/CheckData.Rd -M man/CheckOptions.Rd -A man/CrCovYX.Rd -A man/CrCovYZ.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -A man/FPCAregFunc.Rd -M man/FPCAregScalar.Rd -M man/SetOptions.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/makePACEinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd -M src/RcppExports.cpp - -commit e957e06dbdb9b8596ced456c7597130bd79cf87d -Merge: 5c59398 4e890af -Author: Pantelis -Date: Mon Oct 5 09:36:41 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE into ColoradoWork - -commit 4e890afc369b2a3a217cd97f5b06ec90edd94973 -Author: CrossD -Date: Fri Oct 2 00:00:29 2015 -0700 - - devtools::document() - -M NAMESPACE -M R/RcppExports.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FPCAregScalar.Rd -M man/SetOptions.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/makePACEinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd -M src/RcppExports.cpp -D src/symbols.rds - -commit 1759d756ffc95489ce10eb5835331f1fef9e0ab9 -Merge: 11d555b 34aa48d -Author: CrossD -Date: Thu Oct 1 23:03:37 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 11d555bfa461114708246498b2f1d345c2a70a4c -Author: CrossD -Date: Thu Oct 1 23:03:24 2015 -0700 - - minor - -M R/FPCA.R - -commit 34aa48d87053052cf46ec3a6fde531c505b77d99 -Author: Pantelis -Date: Thu Oct 1 17:21:55 2015 -0700 - - Minor. - -M R/FPCAregScalar.R -M src/Rlwls1d.cpp - -commit 5f81784131fb4b2c9d5639ae65505951c01ccb4e -Author: hadjipantelis -Date: Sat Sep 19 02:55:12 2015 -0700 - - MultipleCC.R - -A R/MultipleCC.R -A R/fitted.FRegObj.R - -commit 5c59398125d78eeb8e94f00bf6afea5a23eaa5f0 -Author: Pantelis -Date: Fri Sep 18 02:06:28 2015 -0700 - - Commenting out possible issues in FPCAreg* - -M R/FPCAregFunc.R - -commit 41cee0fe0cfe04768a65b1f9f17778fa927b0d98 -Author: hadjipantelis -Date: Wed Sep 9 04:15:44 2015 -0700 - - Verbose option for bandwith selection during GCV. - -M R/FPCAregFunc.R - -commit 5ce11cff23537ac666666f7c5c5dcfe8535ced62 -Author: Pantelis -Date: Tue Sep 8 09:05:02 2015 -0700 - - Adding GINV functionality in FPCAregFunc. - -M R/FPCAregFunc.R - -commit e40642a09b41cbe7d87a124eb561235ae3ca5251 -Author: Pantelis -Date: Mon Sep 7 22:09:52 2015 -0700 - - Smoothing options for FPCAregFunc.R - -M R/FPCAregFunc.R - -commit 8f876c56cf422e4580a30b1367ce932d3c44cbb3 -Author: Pantelis -Date: Mon Sep 7 01:31:29 2015 -0700 - - Minor - -M R/FPCAregFunc.R - -commit 20cf7d73506e57dedd569ccf65deba377adcf4af -Merge: 73cb05c 5ef9964 -Author: Pantelis -Date: Sat Sep 5 22:19:59 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 73cb05cf4ee28e4928ede54eddeb6e84685e09f8 -Author: Pantelis -Date: Sat Sep 5 22:19:25 2015 -0700 - - Unscaling the Zetas - -M R/FPCAregFunc.R - -commit 5ef9964302e637d3f75c1de48de0d16b2532548f -Author: hadjipantelis -Date: Sat Sep 5 20:55:55 2015 -0700 - - Bug fix in FPCAregFunc - -M R/FPCAregFunc.R - -commit 0c950a6a7b06e53773dda0261afee3b0cc41c096 -Author: Pantelis -Date: Sat Sep 5 17:07:33 2015 -0700 - - FPCAregFunc ironing out. - -M R/FPCAregFunc.R - -commit d7e621bc53bb93a49d5df5026d78f36ef3d69a22 -Author: Pantelis -Date: Sat Sep 5 02:06:01 2015 -0700 - - Time-varying functional regression model work - -M R/CrCovYX.R -M R/FPCA.R -A R/FPCAregFunc.R -M R/FPCAregScalar.R - -commit c069ede6b74c0fe94460bd450ed9d4f715ea9a3a -Author: Pantelis -Date: Fri Sep 4 17:17:31 2015 -0700 - - Minor changes to make input arguments of plotting functions. - -M R/createDiagnosticsPlot.R -M R/createFuncBoxPlot.R - -commit 95b119164388d268bf983abf3730d3edced74f90 -Author: Pantelis -Date: Fri Sep 4 17:09:02 2015 -0700 - - Minor bug fix in a unit test and in the output structure of FPCA. - -M R/FPCA.R -M R/MakeResultFPCA.R -M tests/testthat/test_FPCAregScalar.R - -commit 212786a3fee058385349580dbc283956e1c4a6d2 -Author: hadjipantelis -Date: Fri Sep 4 05:53:18 2015 -0700 - - Test for functional cross-cov. - -A tests/testthat/test_CrCovYX.R - -commit 6839ab592c49512c9cb3e28e29540eb982341632 -Author: hadjipantelis -Date: Fri Sep 4 02:01:11 2015 -0700 - - Unit tests for cross-cov between scalar and function - -A tests/testthat/test_CrCovYZ.R -M tests/testthat/test_FPCA.R - -commit 331d3e1a954e22e67c67a0e1671408796634fd07 -Author: Pantelis -Date: Wed Sep 2 19:12:18 2015 -0700 - - Minor change on default useBins arguments - -M R/SetOptions.R - -commit fcd000019b969487aa72da7c6f44746c2d823a63 -Author: Pantelis -Date: Tue Sep 1 01:15:48 2015 -0700 - - Minor changes to scalar-functional cross-cov estimation. - -M R/CrCovYZ.R - -commit aa6bfc3b477c96f902e5c177d0db1f21d51262d6 -Author: Pantelis -Date: Mon Aug 31 06:03:18 2015 -0700 - - CrossCovariance F2F and minor stuff - -A R/CrCovYX.R -M R/RcppExports.R -M R/createBetaPlots.R -M R/lwls2dV2.R -M src/RcppExports.cpp -M src/Rmullwlsk.cpp -A src/RmullwlskCC.cpp -M tests/testthat/test_lwls2dV2.R - -commit 15358a72dfdf51e21617dffaabe910ac07f2e4be -Author: Pantelis -Date: Sun Aug 30 00:33:47 2015 -0700 - - Adding bagplot functionality - -M DESCRIPTION -M R/createFuncBoxPlot.R -M R/createOutliersPlot.R - -commit 3c7238e3dd773004260a0c72457d38d6e874038d -Author: Pantelis -Date: Sat Aug 29 14:17:16 2015 -0700 - - Added functional box-plot - -M R/FPCAregScalar.R -A R/createFuncBoxPlot.R - -commit 3b3c910b50d78a6f647f78bcea9e35275f6db844 -Author: Pantelis -Date: Fri Aug 28 19:05:41 2015 -0700 - - Plotting utility for functional betas. - -A R/createBetaPlots.R - -commit de2349586bb6420510865dcbe3dd8fb3ebdb2d1d -Author: hadjipantelis -Date: Fri Aug 28 13:32:51 2015 -0700 - - minor; removed caret dep. from DESCRIPTION - -M DESCRIPTION -M NAMESPACE -M R/pkgname.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/FPCAregScalar.Rd -M man/SetOptions.Rd -M man/createCovPlot.Rd -M man/createDesignPlot.Rd -M man/createDiagnosticsPlot.Rd -M man/createScreePlot.Rd -M man/fitted.FPCA.Rd -M man/makePACEinputs.Rd -M man/print.FPCA.Rd -M man/sparsify.Rd -M man/tPACE.Rd -M man/wiener.Rd - -commit 6bf56ad2aacab0e42a3e84a65de2fdbe89d28dbc -Author: hadjipantelis -Date: Fri Aug 28 04:55:12 2015 -0700 - - Added createOutliersPlot.R - -A R/createOutliersPlot.R - -commit a39694f4fc306244c70b9d862a1f888a56475c06 -Author: hadjipantelis -Date: Thu Aug 27 20:10:38 2015 -0700 - - Multiple functional predictors (dense) - -M R/FPCAregScalar.R -M R/makePACEinputs.R -M tests/testthat/test_FPCAregScalar.R - -commit 533bf75edbe18155111049127f93bdbafcb5dcca -Author: Pantelis -Date: Thu Aug 27 01:09:48 2015 -0700 - - Further works on Functional Regression. - -A R/CrCovYZ.R -M R/FPCAregScalar.R -A R/GetRawCrCovFuncFunc.R -A R/GetRawCrCovFuncScal.R -A tests/testthat/test_FPCAregScalar.R -A tests/testthat/test_GetRawCrCovFuncFunc.R -A tests/testthat/test_GetRawCrCovFuncScal.R - -commit 2132bd706b3678a1bc2247086b11bb54004376f1 -Author: Pantelis Hadjipantelis -Date: Tue Aug 25 23:16:41 2015 -0700 - - Added full PACE-QUO functionality. - -M DESCRIPTION -M R/FPCAder.R - -commit 6f5230db0764b8b094284ae75ba383256050d7a4 -Author: hadjipantelis -Date: Mon Aug 24 22:14:32 2015 -0700 - - Setting 'useBins' as default. - -M R/SetOptions.R - -commit b5a86181f1d91643db68b37aec822b70fd64232c -Author: dmchris -Date: Mon Aug 24 21:56:19 2015 -0700 - - add unit test for FPCAder - -A tests/testthat/test_FPCAder.R - -commit f44dc8dc6d0b1cbcaafe3cdbaee11fe0e4d049ea -Author: Xiongtao Dai -Date: Tue Aug 25 00:46:42 2015 +0800 - - sparsify and wiener documentation; CreateFolds added; .Rd updated - -M NAMESPACE -A R/CreateFolds.R -M R/sparsify.R -M R/wiener.R -M man/CheckData.Rd -M man/CheckOptions.Rd -D man/CreateOptions.Rd -M man/FPCAder.Rd -A man/FPCAregScalar.Rd -A man/createCovPlot.Rd -A man/createDesignPlot.Rd -A man/createScreePlot.Rd -A man/fitted.FPCA.Rd -M man/print.FPCA.Rd -A man/sparsify.Rd -A man/wiener.Rd - -commit 4dc07738ce6b05d49cca357ef718eb17f8093c8a -Author: Xiongtao Dai -Date: Mon Aug 24 12:56:57 2015 +0800 - - new createFolds - -M .gitignore -M R/gcvlwls2dV2.R -A tests/testthat/test_CreateFolds.R - -commit 14d5a5ca68112bddea4065a17826800286968ced -Merge: 0f9a95c 0feb763 -Author: Xiongtao Dai -Date: Mon Aug 24 01:39:10 2015 +0800 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 0f9a95c0494ecc4e16ca79b49a3ede7743e1f6da -Author: Xiongtao Dai -Date: Mon Aug 24 01:38:59 2015 +0800 - - minor - -M R/gcvlwls2dV2.R - -commit 0feb763eb6e122ab355e5f307cc0e4a30fece340 -Author: Pantelis -Date: Fri Aug 21 16:05:22 2015 -0700 - - Minor addition to Roxygen descriptions. - -M R/CheckOptions.R -M R/FPCA.R -M R/SetOptions.R -M R/fitted.FPCA.R -M R/print.FPCA.R -M man/CreateOptions.Rd -M man/FPCA.Rd -M tests/testthat/test_SetOptions.R - -commit f5daa33504ede285432569f41480640af920a2a0 -Author: dmchris -Date: Thu Aug 20 16:17:10 2015 -0700 - - modify roxygen2 doc for createScreePlot - -M R/createScreePlot.R - -commit fde2c5e8fecf61e810f8256c02c117819009a6e6 -Author: dmchris -Date: Thu Aug 20 16:07:24 2015 -0700 - - Roxygen doc for 4 plotting functions, change the name createCorrPlot to createCovPlot - -M NAMESPACE -M R/FPCA.R -R070 R/createCorrPlot.R R/createCovPlot.R -M R/createDesignPlot.R -M R/createScreePlot.R -M man/FPCA.Rd -M tests/testthat/test_FPCA.R -M tests/testthat/test_FVEdataset.R - -commit c16b6dfd26487458c6841f81d702821c5e9574b7 -Author: hadjipantelis -Date: Wed Aug 19 00:31:19 2015 -0700 - - minor update for stepAIC - -M R/FPCAregScalar.R - -commit 22b7eeae5faf9f017e7498b48e1de0ce20aa54d1 -Merge: c792c3f 1a6d058 -Author: Xiongtao Dai -Date: Wed Aug 19 16:19:22 2015 +0900 - - Merge remote-tracking branch 'upstream/master' - -commit c792c3f3414ae2a8f26965a6bf99a39195b4a7c0 -Author: Xiongtao Dai -Date: Wed Aug 19 16:19:00 2015 +0900 - - pkgnames add authors - -M R/pkgname.R -M man/tPACE.Rd - -commit 1a6d058b3814df488c8a300c7c6b1aa55f1f1a34 -Author: hadjipantelis -Date: Wed Aug 19 00:03:36 2015 -0700 - - Dense functional regression for scalar covariate added. - -A R/FPCAregScalar.R - -commit 927b5292c63f117dd3aa99aaf14f6017b7cd540e -Author: hadjipantelis -Date: Tue Aug 18 20:15:45 2015 -0700 - - Accel. GetRho via subsampling and c++ - -M R/FPCA.R -M R/GetCEScores.R -M R/RcppExports.R -A src/GetIndCEScoresCPP.cpp -A src/GetIndCEScoresCPPnewInd.cpp -M src/RcppExports.cpp -M tests/testthat/test_GetCEScores.R - -commit d07171e8351ca030dc618f98040b9aa75fc8978b -Author: Pantelis -Date: Mon Aug 17 17:31:20 2015 -0700 - - Fixing test_* after the removal of redundant files - -M tests/testthat/test_FPCA.R -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_GetSmoothedMeanCurve.R -M tests/testthat/test_SetOptions.R -D tests/testthat/test_convertMuPhi.R -D tests/testthat/test_gcvlwls2d.R_old -M tests/testthat/test_pc_covE.R - -commit 2700b0dae74b30be20d68ef2a029bb1b4d92ff2e -Author: Pantelis -Date: Mon Aug 17 16:52:16 2015 -0700 - - Removing files deemed redundant. - -D R/CreateOptions.R -D R/adjustBW2.R -D R/convertMuPhi.R -D R/gcvlwls1d0.R -D R/gcvlwls2d.R -D R/roxygen.bib -D src/trapzRcppP.cpp - -commit 7906e711bf87d3af70dc7a3aae9e01f0c26b0e02 -Author: Pantelis -Date: Mon Aug 17 12:14:42 2015 -0700 - - minor corrections - -M R/CheckData.R -M R/CheckOptions.R -M R/FPCAder.R -M src/symbols.rds - -commit cc4d11197251d0f03e4ded748d9094966f4fda09 -Author: Xiongtao Dai -Date: Fri Aug 14 15:09:27 2015 -0700 - - pracma::funcNames - -M R/ConvertSupport.R -M R/GetRawCov.R -M R/cvlwls1d.R -M R/gcvlwls1d1.R -M src/symbols.rds -M tests/testthat.R - -commit 1175c9f3121f5224f2b1ec1bfb49b404a9679d6f -Author: Xiongtao Dai -Date: Fri Aug 14 14:44:10 2015 -0700 - - fixed export import - -M DESCRIPTION -M NAMESPACE -M R/CheckData.R -M R/CheckOptions.R -M R/CreateOptions.R -M R/FPCA.R -M R/FPCAder.R -M R/TruncateObs.R -M R/createCorrPlot.R -M R/createDesignPlot.R -M R/createDiagnosticsPlot.R -M R/createScreePlot.R -M R/fitted.FPCA.R -M R/makePACEinputs.R -A R/pkgname.R -M R/print.FPCA.R -M R/sparsify.R -M R/wiener.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CreateOptions.Rd -M man/FPCA.Rd -M man/FPCAder.Rd -M man/SetOptions.Rd -M man/createDiagnosticsPlot.Rd -M man/makePACEinputs.Rd -A man/print.FPCA.Rd -A man/tPACE.Rd -M src/trapzRcppP.cpp - -commit 2ce1e98b603f952fb415980fab7a3782152db2b0 -Author: Xiongtao Dai -Date: Fri Aug 14 10:38:36 2015 -0700 - - minor - -M R/GetCEScores.R - -commit a1587ae82522cb6d4b42f3f4419af9798a585d05 -Author: Xiongtao Dai -Date: Thu Aug 13 11:04:05 2015 -0700 - - forgot to upload test for FitEigenValues.R - -A tests/testthat/test_FitEigenValues.R - -commit 917060748827a52eeb6dca0cebf70de7e65f2495 -Author: hadjipantelis -Date: Fri Aug 7 22:53:36 2015 -0700 - - Removed 'CreateEigenfncts' and 'getEigens', tided up FPCA/FPCAder/FPCA.fitted, renamed bwmuGcv/bwcvGcv to the more compehensible bwmuMethod/bwcovMethod. - -M R/CheckOptions.R -D R/CreateEigenfncts.R -M R/CreateOptions.R -M R/FPCA.R -M R/FPCAder.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M R/fitted.FPCA.R -D R/getEigens.R -M man/CreateOptions.Rd -M man/FPCA.Rd -A man/FPCAder.Rd -D tests/testthat/test_CreateEigenfncts.R -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_GetRho.R -M tests/testthat/test_Rrotatemullwlsk.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_funSim.R -M tests/testthat/test_gcvlwls2dV2.R -D tests/testthat/test_getEigens.R -M tests/testthat/test_lwls2dV2.R - -commit c0cdc5938eea1904d11f3e01812917c4e3aebc38 -Author: Pantelis -Date: Fri Aug 7 17:59:50 2015 -0700 - - Adding dependancy in DESCRIPTION - -M DESCRIPTION - -commit 3983308ce5307b062b472bd0d47b4ac506bf00d0 -Author: Pantelis -Date: Fri Aug 7 17:45:35 2015 -0700 - - FPCAder() and required changes to fitted.FPCA() - -A R/FPCAder.R -M R/RcppExports.R -M R/fitted.FPCA.R -M src/RcppExports.cpp -A src/trapzRcppP.cpp - -commit 3a3403d4353977c380c4a7085466e87cb4ed0a73 -Author: hadjipantelis -Date: Fri Aug 7 01:50:33 2015 -0700 - - Changes to convince R that a vector is a 1-D matrix - -D ConvexHullExample0999.pdf -M R/GetCEScores.R -M R/GetEigenAnalysisResults.R - -commit ea689527224542a6b48e7ff49e4f1410040afd0b -Author: hadjipantelis -Date: Fri Aug 7 00:33:37 2015 -0700 - - Adding option to aggressively sparsify a sample. - -A ConvexHullExample0999.pdf -A R/sparsify.R -M R/wiener.R - -commit fe4fd16cc9c24e00082c27a6a4f041bf9739b59e -Author: hadjipantelis -Date: Tue Jul 28 08:09:39 2015 -0700 - - Added unit test for GetBinnedCurve & corrected the syntax in some calls. - -M R/BinData.R -M R/GetBinnedCurve.R -M R/GetBinnedDataset.R -A tests/testthat/test_GetBinnedCurve.R - -commit f919735887d0293a5cf939fcc02256b1f456afbe -Author: hadjipantelis -Date: Mon Jul 27 18:11:12 2015 -0700 - - removing unused datasets. - -M .gitignore -M NAMESPACE -D data/FVEdata.mat -D data/LogFVEresults.mat -D data/rng123_200curves.mat -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CreateOptions.Rd -M man/FPCA.Rd -M man/SetOptions.Rd -M man/createDiagnosticsPlot.Rd -M man/makePACEinputs.Rd -A src/symbols.rds - -commit 86bfcf5ac51d5aaf3d30b38c57b6888165661d82 -Author: hadjipantelis -Date: Sun Jul 26 15:08:25 2015 -0700 - - Changes from 'trapz' to 'trapzRcpp' and from 'kern' to 'kernel_type' - -M R/GetEigenAnalysisResults.R -M R/GetRho.R -M R/GetSmoothedMeanCurve.R -M R/cvlwls1d.R -M R/gcvlwls1d1.R -M R/getEigens.R -M R/pc_covE.R -M R/print.FPCA.R - -commit bbeb9e130591f0e4a4692dab97924c94ba54d4e3 -Author: hadjipantelis -Date: Sun Jul 26 14:36:37 2015 -0700 - - Updated trapzRcpp to return quiet_NaN (fail-safe change). - -M src/trapzRcpp.cpp - -commit 6128c44c60d8f9ba1c475d59773388004722158c -Author: hadjipantelis -Date: Fri Jul 24 21:50:52 2015 -0700 - - Updated 'mapX1d.R' to stop if NA are produced - -M R/mapX1d.R - -commit cf328485220e6dbac354eb444b1af4a24de8c33e -Author: hadjipantelis -Date: Fri Jul 24 07:58:46 2015 -0700 - - Adding check for duplicate within-subject time entries - -M R/CheckData.R - -commit a0d492009001cec6ef568db126455d7e47054012 -Author: hadjipantelis -Date: Fri Jul 24 06:44:10 2015 -0700 - - Changes to 'GetRawCov' to make it more efficient. - -M R/FPCA.R -M R/GetRawCov.R - -commit 68d81f3ef76dd750bcc7465bf313f6d91b0efe1a -Author: hadjipantelis -Date: Thu Jul 23 01:09:02 2015 -0700 - - Changes to incorporate the 'DenseWithMV' functionality - -M R/FPCA.R -M R/GetMeanDense.R -M R/List2Mat.R -M R/MakeResultFPCA.R -M R/mapX1d.R - -commit 88b614125ba2702425f218b2aa77ad5d47ecd4bc -Author: Pantelis -Date: Wed Jul 22 20:42:26 2015 -0700 - - Adding functionality to truncate the grid in the case of dense data. - -M R/FPCA.R - -commit d88e386cbb9f922c0051f4c351e9b8a912a56f88 -Author: Pantelis -Date: Wed Jul 22 20:06:43 2015 -0700 - - Minor changes to accomodate 'MissingWithMV' - -M R/GetCovDense.R -M R/GetMeanDense.R - -commit 96975ff3f96edb9dde72ed95f2dbd07b9f9d8c8d -Author: Pantelis -Date: Wed Jul 22 19:29:29 2015 -0700 - - Minor enh. to GetINScores.R - -M R/GetINScores.R -M R/RcppExports.R -M src/RcppExports.cpp - -commit ebf974d96ac63f27b87f43ccb152da3c419ba93e -Merge: 174d719 269400d -Author: Pantelis -Date: Wed Jul 22 16:51:52 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 174d7192c84d115b2c95227d12be0b74b1e1e82c -Author: Pantelis -Date: Wed Jul 22 16:51:25 2015 -0700 - - Faster trapz function, assurance that the converted support cov K is symmetric, eigs with smaller upper limit and some renamings - -M R/ConvertSupport.R -M R/GetCovDense.R -M R/GetEigenAnalysisResults.R -M R/GetINScores.R -M R/no_FVE.R -A src/trapzRcpp.cpp -A tests/testthat/test_trapzRcpp.R - -commit 269400d3e10e0de1f3889cbcbb19efb7d2dc9d98 -Author: hadjipantelis -Date: Wed Jul 22 01:05:07 2015 -0700 - - Added option for 'createDiagnosticsPlot' to not open a new device. - -M R/createDiagnosticsPlot.R - -commit 3d2d3daf0e120b278de4ffed046059811119c8bf -Author: Pantelis -Date: Mon Jul 20 16:59:16 2015 -0700 - - Added basic 'print.FPCA()' command and ?createDiagnosticsPlot - -M NAMESPACE -M R/createDiagnosticsPlot.R -A R/print.FPCA.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CreateOptions.Rd -M man/FPCA.Rd -M man/SetOptions.Rd -A man/createDiagnosticsPlot.Rd -M man/makePACEinputs.Rd - -commit edf6eda84c21237994b69348374f3c76937c4998 -Author: hadjipantelis -Date: Mon Jul 20 12:33:57 2015 -0700 - - Changing 'LazyData' to FALSE from TRUE - -M DESCRIPTION - -commit 98cce460c5b7e96fe9736fdeebcdd4488965f422 -Author: hadjipantelis -Date: Sun Jul 19 22:28:06 2015 -0700 - - Adding references, removing 'newdata' option, fixing the syntax a bit, change 'method' to 'methodXi' - -M R/CheckOptions.R -M R/CreateOptions.R -M R/FPCA.R -M R/SetOptions.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CreateOptions.Rd -M man/FPCA.Rd -M man/SetOptions.Rd -M man/makePACEinputs.Rd - -commit e1cc83d0d6194340bbfe02212632c154f7aa6d90 -Author: hadjipantelis -Date: Sun Jul 19 14:37:38 2015 -0700 - - Changed instances where T and F where overloaded. - -M R/CreateEigenfncts.R -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_Rrotatemullwlsk.R - -commit dbe5a12544f8b49e3d59c25ce456e35dcc53f7b8 -Author: hadjipantelis -Date: Sun Jul 19 14:23:10 2015 -0700 - - Dropping some pracma::isempty and adding RcppExports - -M .gitignore -M DESCRIPTION -M R/ConvertSupport.R -M R/GetRawCov.R -M R/GetSmoothedMeanCurve.R -M R/gcvlwls1d1.R -A src/RcppExports.cpp - -commit 00d7ce4ac6b19c0560e529edf39608e54aecb803 -Author: hadjipantelis -Date: Sun Jul 19 04:21:28 2015 -0700 - - Corrected typo in getEigens from previous commit - -M R/getEigens.R - -commit ae18280676d79fbdb628d76e3a204e654a61852f -Author: hadjipantelis -Date: Sun Jul 19 03:52:00 2015 -0700 - - Changed instances of 'pracma::interp1' to 'stats::approx() & stats::splines() - -M R/FitEigenValues.R -M R/GetSmoothedMeanCurve.R -M R/fitted.FPCA.R -M R/getEigens.R - -commit 99a72fcf63f15f816625fd4f3fd937bea32bd64b -Author: Xiongtao -Date: Sat Jul 18 09:57:32 2015 +0100 - - add FitEigenValues - -A R/FitEigenValues.R - -commit c57b09a58eeb62d58a5113f0252a7476351b96ad -Merge: 3fb7418 a6ab6f1 -Author: Xiongtao -Date: Sat Jul 18 09:57:06 2015 +0100 - - merge - -commit 3fb7418f2c5af2e617d964faf9850c28bd975825 -Author: Xiongtao -Date: Sat Jul 18 09:47:12 2015 +0100 - - fit method and a fix in interp1 - -M R/FPCA.R -M R/MakeResultFPCA.R -M R/SetOptions.R -M R/fitted.FPCA.R -M tests/testthat/test_BinRawCov.R - -commit a6ab6f14a0b8bb9975112b0d07b324aa0e1fa0ba -Author: Pantelis -Date: Fri Jul 17 20:20:06 2015 -0700 - - Creating Screeplot, Diagnostics plot, changing relavant Set/Check/CreateOptions.R and FPCA.R - -M R/CheckOptions.R -M R/CreateOptions.R -M R/FPCA.R -M R/SetOptions.R -M R/createCorrPlot.R -M R/createDesignPlot.R -A R/createDiagnosticsPlot.R -A R/createScreePlot.R - -commit 11237c831b7945a767eb9150a83bf693da2dab3c -Author: Xiongtao -Date: Sat Jul 18 01:01:01 2015 +0100 - - test_funSim normalization - -M tests/testthat/test_funSim.R - -commit 5774e2e7712f24a90767b4de2addb2dcd806cd1e -Merge: ee8a2b6 522cf0f -Author: Xiongtao -Date: Sat Jul 18 00:43:04 2015 +0100 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 522cf0f7d75eccca67bf60b9f7ddea08cb10db32 -Author: hadjipantelis -Date: Fri Jul 17 12:38:34 2015 -0700 - - Added some default options to createDesignPlot so it does not require an FPCA object as input, added .bib file for references, corrected a typo or two in doc. Added long sim example ('test_funSim.R') - -M R/FPCA.R -M R/createDesignPlot.R -A R/roxygen.bib -A tests/testthat/test_funSim.R - -commit ee8a2b6120eb6d2ef199ca2ef23fbc4f1a0c23b0 -Merge: c6a6de6 32f0ffb -Author: Xiongtao Dai -Date: Fri Jul 17 10:10:24 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 32f0ffb19370c6b4903456cb827d3922a6dd7ac5 -Author: Pantelis -Date: Fri Jul 17 01:36:05 2015 -0700 - - An omission, a typo and a clarification - -M R/GetBinNum.R -M R/wiener.R - -commit b6bc27682b4d883940db5ce8cd7bc0e3e978a998 -Author: Pantelis -Date: Wed Jul 15 16:03:18 2015 -0700 - - Finalised the 'numComponents' options - -M R/MakeResultFPCA.R - -commit c6a6de6c08298575b0f2eaefda8cecf11ecb2d94 -Author: Xiongtao Dai -Date: Wed Jul 15 13:32:05 2015 -0700 - - nothing - -D src/interp2lin.cpp_back - -commit a0093ffa83d11e24516e36bce06c92849d3daf7a -Author: hadjipantelis -Date: Wed Jul 15 12:10:01 2015 -0700 - - Added 'numComponents' options / need to clear 'xiVar' output - -M R/CheckOptions.R -M R/CreateOptions.R -M R/FPCA.R -M R/MakeResultFPCA.R -M R/SetOptions.R -M R/cvlwls1d.R - -commit 4ed3c222d7e79ce373d1f29b39bd0c17d410906a -Author: hadjipantelis -Date: Tue Jul 14 21:23:26 2015 -0700 - - Added check that the data are only numeric (or integer) as well as coercion step in the main FPCA function. - -M R/CheckData.R -M R/FPCA.R - -commit c09a552e041dc5bbffdefb8837fea0aca0ebdd0d -Author: hadjipantelis -Date: Tue Jul 14 03:18:03 2015 -0700 - - Making sure that all member of 'y' and 't' are of class 'numeric'. - -D PACEresult0.png -D data/untitled.fig - -commit 8247f7ffd3c7c70a81e819ff4f84899d49fac04b -Author: hadjipantelis -Date: Tue Jul 14 03:17:16 2015 -0700 - - Making sure that all member of 'y' and 't' are of class 'numeric'. - -A PACEresult0.png -M R/CheckData.R -A data/untitled.fig - -commit b5b96592228182007191a0df9e0954689d294112 -Merge: 8c6abac f6581df -Author: Xiongtao -Date: Tue Jul 14 00:18:52 2015 +0100 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit 8c6abac20d9740d8e478842a8aba3af1603d9708 -Author: Xiongtao -Date: Tue Jul 14 00:18:22 2015 +0100 - - minor - -M R/GetRho.R - -commit f6581df1aa04c7b5239279706cfd015f4a9c238f -Merge: 446243f db3694e -Author: Pantelis -Date: Mon Jul 13 15:37:41 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 446243f07b9d07cf1737128e373fef77c17338b3 -Author: Pantelis -Date: Mon Jul 13 15:36:03 2015 -0700 - - Added the 'fitted' S3 function, changes FPCA output to be an FPCA object. - -M NAMESPACE -M R/MakeResultFPCA.R -A R/fitted.FPCA.R - -commit db3694e9d96973c4b1da567ca7eb885d63325edb -Merge: a5ef0aa 44aa135 -Author: Xiongtao Dai -Date: Fri Jul 10 08:51:44 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit a5ef0aac761fa694679bd13921ed12b37d3b6e6f -Author: Xiongtao Dai -Date: Fri Jul 10 08:51:19 2015 -0700 - - fix rho and rotationCut - -M R/FPCA.R -M R/GetRho.R -M R/GetSmoothedCovarSurface.R -M man/CheckData.Rd -M man/CheckOptions.Rd -M man/CreateOptions.Rd -M man/FPCA.Rd -M man/SetOptions.Rd -M man/makePACEinputs.Rd -M notesXiongtao.txt -M tests/testthat/test_GetRho.R -M tests/testthat/test_GetSmoothedCovarSurface.R - -commit 44aa1351aeefb9d398d8ddfb4dc9bbb83a4d39eb -Author: Pantelis -Date: Thu Jul 9 21:58:04 2015 -0700 - - Added 'FVE' item in the output structure; Doxygen entry added. - -M R/FPCA.R -M R/MakeResultFPCA.R - -commit e790ee6e55eda365c366e07eb320d8721dcdaf5c -Author: Pantelis -Date: Wed Jul 8 23:39:34 2015 -0700 - - Fixed bug in rotateLwls2dV2, added large dataset for MATLAB comparison, added check in Rlwls1d - -M R/CreateOptions.R -M R/SetOptions.R -M R/pc_covE.R -M R/rotateLwls2dV2.R -A data/200curvesByExampleSeed123.RData -R100 FVEdata.mat data/FVEdata.mat -A data/datasetToTestRrotatedSmoother.RData -A data/rng123_200curves.mat -M src/Rlwls1d.cpp -M src/RrotatedMullwlsk.cpp - -commit 187915e71700fd8399443965dae462988e58ac6e -Author: Xiongtao -Date: Wed Jul 8 07:58:10 2015 +0100 - - FPCA help document - -M R/FPCA.R -A man/CheckData.Rd -A man/CheckOptions.Rd -A man/CreateOptions.Rd -A man/FPCA.Rd -A man/SetOptions.Rd -A man/makePACEinputs.Rd - -commit 0fc16ee972fe940392ac5757cadd922609e46388 -Author: Xiongtao -Date: Wed Jul 8 01:45:37 2015 +0100 - - fixed 2D CV - -M R/gcvlwls2dV2.R -D R/lwls1d.R -D R/lwls2d.R -M R/lwls2dV2.R -D R/rotateLwls2d.R -M tests/testthat/test_gcvlwls2dV2.R -D tests/testthat/test_lwls.R -D tests/testthat/test_lwls2d.R -M tests/testthat/test_lwls2dV2.R -D tests/testthat/test_rotateLwls2d.R -M tests/testthat/test_useBin.R - -commit 0012d3a024e851a51af0af8fe745e71a06ae8f21 -Author: Pantelis -Date: Mon Jul 6 16:29:24 2015 -0700 - - Minor fixed in the gcvlwls1d1, first pass for the docs of CreateOptions. - -M DESCRIPTION -M R/CreateOptions.R -M R/FPCA.R -M R/SetOptions.R -M R/cvlwls1d.R -M R/gcvlwls1d1.R -M R/minb.R -M src/Rlwls1d.cpp -M src/interp2lin.cpp -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_GetSmoothedMeanCurve.R - -commit 82158573617840718578fa5ad595dc558c3bb175 -Author: Pantelis -Date: Mon Jul 6 12:42:22 2015 -0700 - - Writing up the doc for CreateOptions - -M R/CheckOptions.R -M R/CreateOptions.R -M R/SetOptions.R -M src/Rlwls1d.cpp - -commit 34bda7d807ae096dabc84d9278d734b1d6469fe7 -Author: hadjipantelis -Date: Sun Jul 5 02:09:00 2015 -0700 - - Corrected forgotten declaration. - -M src/dropZeroElementsXYWin.cpp - -commit 00aa7156b60ec3ee5819beb3952f0850ca84cc22 -Author: hadjipantelis -Date: Sat Jul 4 23:24:57 2015 -0700 - - Fixing (partially) the zero weights issue in 1-D and moving all lwls1d to Rlwls1d. locfit dependancy dropped. - -A R/RcppExports.R -M R/cvlwls1d.R -M R/pc_covE.R -M src/Rlwls1d.cpp -A src/dropZeroElementsXYWin.cpp - -commit b4bdbe013423ce2594a834163c3ea8f6843c8aac -Author: hadjipantelis -Date: Sat Jul 4 15:29:00 2015 -0700 - - Cleaning unit-tests and adding the CPP 1-D smoother functionality - -D R/RcppExports.R - -commit d69ca256567d24a9c3a04e5af2a32716673de896 -Author: hadjipantelis -Date: Sat Jul 4 15:28:41 2015 -0700 - - Cleaning unit-tests and adding the CPP 1-D smoother functionality - -A R/RcppExports.R - -commit b36fc5d6a939401ec1492efed8bc0a3be633a8bf -Merge: 296e99f 35cb2d3 -Author: hadjipantelis -Date: Sat Jul 4 15:12:53 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 296e99fd03e6c6263d8083bdab7ef10e619281fa -Author: hadjipantelis -Date: Sat Jul 4 15:11:04 2015 -0700 - - Cleaning unit-tests and adding the CPP 1-D smoother functionality - -M R/CreateTrueMean.R -M R/GetSmoothedMeanCurve.R -M R/cvlwls1d.R -M R/gcvlwls1d1.R -M tests/testthat/test_GetSmoothedMeanCurve.R - -commit 35cb2d34649f715a4f0b7c0744689395a28ec6b2 -Merge: 45c796c b364d67 -Author: Xiongtao -Date: Sat Jul 4 20:01:17 2015 +0100 - - merge - -commit 45c796c5da2dde8123fb7afc9382d9ebca26b3b5 -Author: Xiongtao -Date: Sat Jul 4 19:59:56 2015 +0100 - - minor - -M tests/testthat/test_GetCEScores.R - -commit a9a6259fcb74e51063909a8825a62733eac4cfbf -Author: Xiongtao -Date: Sat Jul 4 19:57:32 2015 +0100 - - Fixed truncation case - -M .gitignore -M R/FPCA.R -M R/GetCEScores.R -M R/GetRho.R -M R/MakeResultFPCA.R -D R/RcppExports.R -M R/TruncateObs.R -M R/gcvlwls2d.R -M R/gcvlwls2dV2.R -M R/pc_covE.R -D src/RcppExports.cpp -M tests/testthat/test_FPCA.R -M tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetRho.R - -commit b364d67fc93d01e685d5f7f0b866f931eb412022 -Author: hadjipantelis -Date: Sat Jul 4 01:17:54 2015 -0700 - - Further small fixes in the unit-tests - -M R/GetSmoothedMeanCurve.R -M tests/testthat/test_GetRawCov.R - -commit c1a483fc837335163b69c156d685a92cbfbb8cd5 -Author: hadjipantelis -Date: Sat Jul 4 00:39:35 2015 -0700 - - Further small fixes in the unit-tests - -M R/cvlwls1d.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_gcvlwls1d1.R -M tests/testthat/test_gcvlwls2d.R_old -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getEigens.R -M tests/testthat/test_getMinb.R - -commit 94d35d8239f8b965625b85d0847f7074c7344865 -Author: hadjipantelis -Date: Fri Jul 3 23:31:26 2015 -0700 - - Small fixes in the unit-tests. - -M R/RcppExports.R -M src/RcppExports.cpp -M tests/testthat/test_GetSmoothedMeanCurve.R -M tests/testthat/test_IsRegular.R -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_SetOptions.R -M tests/testthat/test_lwls2dV2.R -M tests/testthat/test_no_FVE.R - -commit e2c2cc838bca6b4f3d93279897874a23bf0de0de -Author: hadjipantelis -Date: Thu Jul 2 22:27:12 2015 -0700 - - Faster 1-D smoother ready. Not integrated. Updated unit-tests. - -A src/Rlwls1d.cpp -M tests/testthat/test_lwls.R - -commit 1bf6b8b83e8a8f68f82e296b83c2ecd4e3b9bead -Merge: b0cae00 f0ebbb2 -Author: Xiongtao -Date: Thu Jul 2 17:45:28 2015 +0100 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit b0cae006ce27cc401ca3c8475660f69934eb203b -Author: Xiongtao -Date: Thu Jul 2 17:44:36 2015 +0100 - - minor - -M R/TruncateObs.R - -commit f0ebbb2b6372eecf2d73106bf83805482cee2186 -Author: hadjipantelis -Date: Thu Jul 2 03:32:55 2015 -0700 - - Fixed boundary behaviour issue in interp2lin. - -M src/interp2lin.cpp - -commit b2ba44f8a64dbed787902cd06e678a15da0aecde -Author: hadjipantelis -Date: Wed Jul 1 23:18:40 2015 -0700 - - updating gitignore - -M .gitignore - -commit 341713a88b80b5b4ae2679ce46968560d8932fbe -Merge: c693530 1745b7c -Author: Xiongtao Dai -Date: Wed Jul 1 22:49:24 2015 -0700 - - merge - -commit c693530f26946a73240ff307fc179c21d0b1da21 -Author: Xiongtao Dai -Date: Wed Jul 1 22:45:23 2015 -0700 - - fixed some .Machine$double.eps - -M R/BinRawCov.R -M R/ConvertSupport.R -M R/FPCA.R -M R/GetCEScores.R -M R/GetSmoothedCovarSurface.R -M R/RcppExports.R -A notesXiongtao.txt -M src/RcppExports.cpp - -commit 1745b7ca7f0fa93273b977d4a23bab79e69d8bf0 -Author: Pantelis -Date: Wed Jul 1 17:27:40 2015 -0700 - - Updated interp2lin functionality to use only two std::finds and changes Rrotatedmullwlsk to have correct bwCheck behaviour - -M R/RcppExports.R -M src/RcppExports.cpp -M src/RrotatedMullwlsk.cpp -M src/interp2lin.cpp -M tests/testthat/test_Rrotatemullwlsk.R - -commit c727c5ec28153d894f02e3b0984ad282eab0bbf7 -Author: Xiongtao -Date: Wed Jul 1 07:21:39 2015 +0100 - - support buff fix - -M R/ConvertSupport.R -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/RcppExports.R -M src/RcppExports.cpp - -commit 8c6ea8b6966d48f59029744a121b00b077b87565 -Author: hadjipantelis -Date: Tue Jun 30 17:14:49 2015 -0700 - - Changed interp2lin out-of-grid behaviour (NaN instead of ::error - -M src/interp2lin.cpp -M tests/testthat/test_interp2lin.R - -commit ec6a9ca8620ef2b6fb4e05b03dca16c3dc59b7ad -Author: hadjipantelis -Date: Tue Jun 30 12:28:08 2015 -0700 - - Correcting a typo in an error message and moving 'rgl' dependancy to 'Suggests' from 'Depends' - -M DESCRIPTION -M src/interp2lin.cpp - -commit 517491d787da7b5f2c74294309ce7db998efaf0b -Author: hadjipantelis -Date: Tue Jun 30 00:28:52 2015 -0700 - - Upgraded interp2lin to use std::find instead of a linear search - -M R/RcppExports.R -M src/RcppExports.cpp -M src/interp2lin.cpp - -commit db159d0b605a147cd3ff0f8748be39acf4a5098b -Author: Xiongtao -Date: Tue Jun 30 05:14:53 2015 +0100 - - interp2lin integrated - -M R/ConvertSupport.R -M R/RcppExports.R -M R/gcvlwls2dV2.R -M src/RcppExports.cpp -M tests/testthat/test_interp2lin.R - -commit 48a8e25eda96a870d0b84d1b0488218ec11f56c5 -Merge: fe012b7 7060fb6 -Author: Xiongtao -Date: Tue Jun 30 02:21:04 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit fe012b7ceea2238a1ae49adf6bdc0135f14ed8b0 -Author: Xiongtao -Date: Tue Jun 30 02:20:47 2015 +0100 - - test cases fixes by Xiongtao; devtools::test() should work - -M R/RcppExports.R -M R/getMinb.R -M src/RcppExports.cpp -M tests/testthat/test_GetRawCov.R -M tests/testthat/test_GetSmoothedMeanCurve.R -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_Rrotatemullwlsk.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_gcvlwls1d1.R -R098 tests/testthat/test_gcvlwls2d.R tests/testthat/test_gcvlwls2d.R_old -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_getEigens.R -M tests/testthat/test_getMinb.R -M tests/testthat/test_lwls2d.R -M tests/testthat/test_lwls2dV2.R -M tests/testthat/test_no_FVE.R -M tests/testthat/test_rotateLwls2d.R - -commit 7060fb62d8b16644e80ac5babd20d710e0fd68ce -Author: Pantelis -Date: Mon Jun 29 14:29:31 2015 -0700 - - Upgraded interp2lin.cpp - -M src/interp2lin.cpp -A src/interp2lin.cpp_back -M tests/testthat/test_interp2lin.R - -commit bc137a7f3329dac7f37fbf4afae9b9ff1ac29d47 -Author: dmchris -Date: Mon Jun 29 12:29:55 2015 -0400 - - RegularWithMV -> DenseWithMV - -M R/IsRegular.R - -commit 4b5c4c09ad806d50ed3be28e0db26498bc26053d -Author: dmchris -Date: Mon Jun 29 11:57:30 2015 -0400 - - modify createCorrPlot - -M R/createCorrPlot.R - -commit 921e2e7c5a2b7c69a083d3c7e0bf4886997ddeee -Author: hadjipantelis -Date: Mon Jun 29 02:59:25 2015 -0700 - - Added interp2lin basic unit test - -A tests/testthat/test_interp2lin.R - -commit a60e8a49bb19c5137e01495c9851f44039681855 -Author: hadjipantelis -Date: Mon Jun 29 02:50:21 2015 -0700 - - Added Rcpp implementation of bilinear interpolation method - -A src/interp2lin.cpp - -commit e699bd88c30f65436a0003e653610fdf8dc8408a -Author: dmchris -Date: Fri Jun 26 12:40:45 2015 -0400 - - Tests required: incorporate dense irregular (Dense) and DenseWithMV cases - -M R/FPCA.R -M R/GetINScores.R -M R/IsRegular.R -M R/SetOptions.R - -commit ebe2181407646a2955e332f24b030a7d02627032 -Merge: 125ec34 4eab96b -Author: hadjipantelis -Date: Thu Jun 25 14:24:47 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 4eab96b94352b5938521bbcb0ef146b7f35989b7 -Author: dmchris -Date: Wed Jun 24 03:34:23 2015 -0700 - - SetOptions: set method=IN for DenseWithMV - -M R/SetOptions.R - -commit 250c0e1435f139a68917334a7cf6a9b68d81b30c -Author: dmchris -Date: Tue Jun 23 18:31:30 2015 -0700 - - GetINScores for missing values in trapz integration - -M R/GetINScores.R - -commit 739fceede3ab24705aef82e1d81144582120ac42 -Author: dmchris -Date: Tue Jun 23 18:30:10 2015 -0700 - - mean, cov estimation for Dense & DenseWithMV - -M R/GetCovDense.R -M R/GetMeanDense.R - -commit ee0b93df3838eb06a84b0d1a4c194c6e7a4a9180 -Author: dmchris -Date: Tue Jun 23 18:19:31 2015 -0700 - - modifications: t[[1]] -> sort(unique(unlist(t))) - -M R/FPCA.R -M R/GetINScores.R -M R/IsRegular.R - -commit 34de488ee9162f599b62441cff6ff0bf2b59c56e -Author: dmchris -Date: Mon Jun 22 11:48:23 2015 -0700 - - covariance plot caption: "correlation" -> "covariance" - -M R/createCorrPlot.R - -commit ce201422aba0773710d9e3d0afaf2e4fd9beef40 -Merge: 65480ce a105821 -Author: Pantelis -Date: Mon Jun 22 10:52:28 2015 -0700 - - merging the cppSmoother branch in master - -commit a10582171910e99249f12b04cfd3a2b210a76e63 -Author: Xiongtao Dai -Date: Mon Jun 22 10:45:03 2015 -0700 - - rotate V2 test - -A tests/testthat/test_rotateLwls2dV2.R - -commit 22d49ed11042b5f989defcf144bf0ff7a1d50ff7 -Author: Xiongtao Dai -Date: Mon Jun 22 10:44:24 2015 -0700 - - rotate V2 - -M DESCRIPTION -A R/rotateLwls2dV2.R -D tests/testthat/GetCEScores.R - -commit 4e27cf8192b3a4c81ed1bb704be8e5cbb8ff4b89 -Author: Xiongtao -Date: Sun Jun 21 05:06:45 2015 +0100 - - rotate smoother done - -M R/pc_covE.R -M src/RrotatedMullwlsk.cpp -M tests/testthat/test_pc_covE.R - -commit 65480cec87288a016d932ec72b329cae07af7064 -Author: Pantelis -Date: Sat Jun 20 19:10:50 2015 -0700 - - Added BSD license - -A LICENSE.txt -D notesXiongtao.txt - -commit 18ce2215576106bc4668dffe5020e12ee2560ceb -Author: dmchris -Date: Sat Jun 20 04:33:34 2015 -0700 - - modify IsRegular, FPCA runs for Dense case, tested with wiener simulations - -M R/IsRegular.R - -commit 9a63ddf687e8d16789c97a215f89cf24b421117b -Author: dmchris -Date: Sat Jun 20 01:56:24 2015 -0700 - - To be tested: FPCA featuring Dense case structure - -M R/FPCA.R - -commit 34aaa1039c634a6407411176270f9255407f35e1 -Author: dmchris -Date: Sat Jun 20 01:52:39 2015 -0700 - - To be tested: FPCA featuring Dense case structure - -M R/FPCA.R - -commit eabd3d2bd4727ad6189ae4b8ca0d30d683f3fd67 -Author: dmchris -Date: Sat Jun 20 01:49:58 2015 -0700 - - Dense Case functions addition - -A R/GetCovDense.R -A R/GetINScores.R -A R/GetMeanDense.R -A R/List2Mat.R -A R/MakeResultFPCA.R - -commit ea3f2825681ae5167c0b4f7e5435dee47e6de4c7 -Author: dmchris -Date: Sat Jun 20 01:49:36 2015 -0700 - - SetOptions, IsRegular and test cases modifications - -M R/IsRegular.R -M R/SetOptions.R -M tests/testthat/test_IsRegular.R -A tests/testthat/test_SetOptions.R - -commit b19371ee7fcc034e41afe8b8cdd9b32f3a88e81a -Author: Xiongtao -Date: Sat Jun 20 07:52:38 2015 +0100 - - GetSmoothedCovarSurface with lwls2dV2 - -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2dV2.R -M R/pc_covE.R -M tests/testthat/test_GetSmoothedCovarSurface.R - -commit d46aed01c573b2ff0600f0eb836077606cb7f51c -Author: Xiongtao -Date: Sat Jun 20 07:00:36 2015 +0100 - - fixed gcvlwls2dv2 and added more tests; degenerate case handling - -M R/gcvlwls2dV2.R -M R/getMinb.R -M src/Rmullwlsk.cpp -M tests/testthat/test_gcvlwls2dV2.R - -commit b4284b5be34d77541ca5efaf008c1b4d3951a4cc -Author: Xiongtao Dai -Date: Fri Jun 19 18:45:48 2015 -0700 - - 2D gcv trycatch - -M R/RcppExports.R -M R/gcvlwls2dV2.R -M R/lwls2d.R -M R/lwls2dV2.R -M src/RcppExports.cpp -M src/Rmullwlsk.cpp -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_gcvlwls2dV2.R -M tests/testthat/test_lwls2dV2.R - -commit 667ffbe2d2581887b7fab5a3c4342f785add9457 -Author: Pantelis -Date: Thu Jun 18 20:38:08 2015 -0700 - - Added options to R(rotated)mullwlsk.cpp to make only a bandwidth check; all tests successful. - -M src/Rmullwlsk.cpp -M src/RrotatedMullwlsk.cpp -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_Rrotatemullwlsk.R - -commit 125ec34960b26d81f5596d8dcf01828da0313dbf -Merge: f37ab8e ffbb6da -Author: hadjipantelis -Date: Wed Jun 17 13:11:14 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit ffbb6dadf969142855d4c1374de9f8a5cdffe7f0 -Merge: 4f897dc 405ca3c -Author: Xiongtao Dai -Date: Wed Jun 17 12:56:00 2015 -0700 - - minor changes from 'handin' - -commit a4b25cfeb41674196cce0c48cee0b11a89dd2cc4 -Author: hadjipantelis -Date: Wed Jun 17 12:37:58 2015 -0700 - - R(rotated)mullwlsk.cpp now returns correct warnin g and error messages for wrong kernel and insufficient number of measurements respectively. - -M src/Rmullwlsk.cpp -M src/RrotatedMullwlsk.cpp -M tests/testthat/test_Rmullwlsk.R -M tests/testthat/test_Rrotatemullwlsk.R - -commit f37ab8eb9062140089efc13af522f373224100cc -Author: Xiongtao -Date: Wed Jun 17 09:05:28 2015 +0100 - - roughly working version of the matlab gcv2d - -M R/RcppExports.R -A R/gcvlwls2dV2.R -A R/lwls2dV2.R -M notesXiongtao.txt -M src/RcppExports.cpp -M src/Rmullwlsk.cpp -A tests/testthat/test_FPCA.R -A tests/testthat/test_gcvlwls2dV2.R -A tests/testthat/test_lwls2dV2.R - -commit db924aed5783930ee357a6724ed78f271cc9c7d0 -Merge: 4f897dc 138b5d5 -Author: Xiongtao -Date: Tue Jun 16 22:08:30 2015 +0100 - - Merge remote-tracking branch 'upstream/cppSmoother' into cppSmoother - -commit 4f897dc18cdd5bb9a5a0026a8e897f993be2910d -Author: Pantelis -Date: Mon Jun 15 18:11:50 2015 -0700 - - basic README.org - -A README.org - -commit 138b5d5a823420b3c1be31bdf4101947cb38bc44 -Author: Pantelis -Date: Mon Jun 15 16:17:56 2015 -0700 - - Rrotatedmullwlsk.cpp and tests added - -A data/InputForRotatedMllwlskInCpp.RData -A src/RrotatedMullwlsk.cpp -A tests/testthat/test_Rrotatemullwlsk.R - -commit 405ca3ca8d34e9f5b6a12ad63ab1869416be3389 -Merge: 05dc572 0bb95f8 -Author: Xiongtao Dai -Date: Mon Jun 15 12:35:24 2015 -0700 - - Merge remote-tracking branch 'upstream/master' into handin - -commit 0bb95f8d391cca299780e2817cb920959a575cfe -Author: hadjipantelis -Date: Sun Jun 14 14:25:02 2015 -0700 - - Added checking in case one uses incoherent kernel_type - -M src/Rmullwlsk.cpp -M tests/testthat/test_Rmullwlsk.R - -commit 5a63359775b2e972495a103a7cdbc8f1a07c4982 -Author: hadjipantelis -Date: Sun Jun 14 00:38:07 2015 -0700 - - operational Rmullwlsk, tests of Rmullwlsk. NAMESPACE and DESC. additions - -M .gitignore -M DESCRIPTION -M NAMESPACE -A R/RcppExports.R -R100 misc/InputFormMllwlskInCpp.RData data/InputFormMllwlskInCpp.RData -D misc/NOTES.TXT -D misc/testRunMullwlsk.R -A src/RcppExports.cpp -R083 misc/Rmullwlsk.cpp src/Rmullwlsk.cpp -A tests/testthat/test_Rmullwlsk.R - -commit 850d756d9cac5cc5d5172ffffe562754611c6edf -Author: hadjipantelis -Date: Sat Jun 13 18:50:17 2015 -0700 - - Fixed numerical issue with rectangular kernel - -M misc/Rmullwlsk.cpp -M misc/testRunMullwlsk.R - -commit 05dc57267b7bb2edfb4702d3e7f185b0508d90ce -Merge: 2fc6e83 8fe556f -Author: Xiongtao Dai -Date: Sat Jun 13 12:57:33 2015 -0700 - - Merge remote-tracking branch 'upstream/master' into handin - -commit a6d4012975ae4b2ea120fd575c74eec1a279c9d3 -Author: hadjipantelis -Date: Sat Jun 13 03:31:23 2015 -0700 - - Some ident. fixes and comments in Rmullwlsk - -M misc/Rmullwlsk.cpp - -commit 8fe556f179ffded309098a892470a2b0ea4bf74b -Author: hadjipantelis -Date: Sat Jun 13 03:16:21 2015 -0700 - - Working Rmullwlsk for Epan. kernel - -M misc/Rmullwlsk.cpp -A misc/testRunMullwlsk.R - -commit 214f204c424c83589ef426cfd23c461bf7944e73 -Author: Pantelis -Date: Fri Jun 12 20:19:51 2015 -0700 - - deleted Untitled Document added by mistake - -D misc/Untitled Document - -commit 404195b0b6f802d6f08b61c8e82e4d358ef78230 -Author: Pantelis -Date: Fri Jun 12 20:18:30 2015 -0700 - - deleted asdf.Rhistory - -D asdf.Rhistory - -commit aee3649624236364d36b86481cac8e285da9f4a7 -Author: Pantelis -Date: Fri Jun 12 20:16:28 2015 -0700 - - buggy mullwlsk.m - still wokring on it - issue with subIndexing - -A asdf.Rhistory -A misc/InputFormMllwlskInCpp.RData -A misc/NOTES.TXT -A misc/Rmullwlsk.cpp -A misc/Untitled Document - -commit 2fc6e835487d9d0de4409fee5733a9807df43ffb -Author: Xiongtao -Date: Wed Jun 10 21:00:59 2015 +0100 - - minor - -M R/FPCA.R -M R/lwls2d.R -M tests/testthat/test_FVEdataset.R - -commit b7f2a77f9ab29eeb12422cdee917688389b405c6 -Author: Xiongtao -Date: Wed Jun 10 17:43:19 2015 +0100 - - fixes for pc_covE etc - -M .gitignore -M R/CheckOptions.R -M R/FPCA.R -M R/GetCEScores.R -M R/GetEigenAnalysisResults.R -M R/GetSmoothedCovarSurface.R -M R/SetOptions.R -M R/gcvlwls2d.R -M R/lwls1d.R -M R/lwls2d.R -M R/no_FVE.R -M R/pc_covE.R -M notesXiongtao.txt -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_lwls2d.R - -commit 8e0ac8dbfd42dc7de31697ab72c5ad87f940e333 -Merge: 9e71c4d 8d222a2 -Author: Xiongtao -Date: Wed Jun 10 10:52:02 2015 +0100 - - minor - -commit 9e71c4d952b05444ee1d911b6b93bc88f231a3f0 -Author: Xiongtao -Date: Wed Jun 10 10:47:46 2015 +0100 - - interp -> interp2 remove akima dependency - -M .gitignore -M DESCRIPTION -M R/ConvertSupport.R -M notesXiongtao.txt -M tests/testthat/test_ConvertSupport.R - -commit 8d222a2f6b0cad382803077fb2442f4c967a983e -Author: dmchris -Date: Wed Jun 10 02:29:36 2015 -0700 - - Modified createCorrPlot.R to incorporate raw cov scatter plot and rgl package check - -M R/createCorrPlot.R - -commit f028e7fe56f4f8ce54b5a68ff3b37736e33a03ed -Author: Pantelis -Date: Tue Jun 9 19:40:37 2015 -0700 - - Delete automatically generated Rhistory - -D .Rhistory - -commit efd962ad11fba8d4cc01e9ae982aca0b2d4f264a -Author: Pantelis -Date: Tue Jun 9 19:38:59 2015 -0700 - - Typo in SetOptions, Fixed hardcoded number in GetRawCov. - -M .gitignore -M R/CreateOptions.R -M R/SetOptions.R - -commit 7b5f8968c4a0715cc7bf439cd85b2ecd046d0bfe -Author: Pantelis -Date: Tue Jun 9 19:38:05 2015 -0700 - - Typo in SetOptions, Fixed hardcoded number in GetRawCov. - -A .Rhistory -M R/GetRawCov.R - -commit 3b0ee0541ffbd326403f2739cef494526f2d5adb -Author: Pantelis -Date: Mon Jun 8 18:48:35 2015 -0700 - - Added gc(), renamed tpairn, added LogFEVresults.mat for comparison, added corrPlotType option - -M .gitignore -M R/BinRawCov.R -M R/FPCA.R -M R/GetBinnedDataset.R -M R/GetEigenAnalysisResults.R -M R/GetRawCov.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -M R/gcvlwls2d.R -M R/getMinb.R -M R/pc_covE.R -A data/LogFVEresults.mat -M tests/testthat/test_FVEdataset.R -M tests/testthat/test_GetRawCov.R -M tests/testthat/test_gcvlwls2d.R -M tests/testthat/test_lwls2d.R - -commit 986a50446c0f35db948bd9abfd1b6e08c8db841b -Author: Pantelis -Date: Mon Jun 8 10:09:31 2015 -0700 - - Changes to FPCA.R and other minor corrections - -M .gitignore -M R/FPCA.R -M R/gcvlwls2d.R -M tests/testthat/test_FVEdataset.R - -commit ebd0809e8242b9233af17d3d11bf0db76659fca9 -Merge: 78a5a14 05b173f -Author: Xiongtao Dai -Date: Mon Jun 8 03:01:36 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 78a5a14f6b6beea0940ba8c912d6c407d486ae1f -Author: Xiongtao Dai -Date: Mon Jun 8 03:01:23 2015 -0700 - - GetRho works - -M R/GetCEScores.R -A R/GetRho.R -M R/SetOptions.R -A R/TruncateObs.R -M notesXiongtao.txt -M tests/testthat/test_GetCEScores.R -A tests/testthat/test_GetRho.R - -commit 05b173f68246aec0690226e5b58617a77c291fc3 -Author: hadjipantelis -Date: Sun Jun 7 23:58:10 2015 -0700 - - Providing alternative for memory usage issue - -A FVEdata.mat -M R/CheckOptions.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -R094 R/CVlwls1d.R R/cvlwls1d.R -M R/gcvlwls2d.R -M R/getMinb.R -A tests/testthat/test_FVEdataset.R -M tests/testthat/test_getMinb.R - -commit 79cde6d92da7929bc690f1ee33ed5917173a3608 -Merge: 55cb67d c7a332d -Author: Xiongtao Dai -Date: Sun Jun 7 16:20:40 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 55cb67d97e03dd80335085d98b26b4ca2688fe05 -Author: Xiongtao Dai -Date: Sun Jun 7 16:20:14 2015 -0700 - - GetCEScores works - -M DESCRIPTION -M R/ConvertSupport.R -M R/FPCA.R -M R/GetCEScores.R -M R/GetEigenAnalysisResults.R -M R/SetOptions.R -M R/mapX1d.R -A tests/testthat/GetCEScores.R -A tests/testthat/test_ConvertSupport.R -A tests/testthat/test_GetCEScores.R -M tests/testthat/test_GetEigenAnalysisResults.R - -commit f72de226c2ccb61d8eff46c1cd7a311081f51309 -Author: Xiongtao Dai -Date: Sun Jun 7 13:20:19 2015 -0700 - - added ConvertSupport, GetCEScores - -M DESCRIPTION -A R/ConvertSupport.R -M R/FPCA.R -A R/GetCEScores.R -M notesXiongtao.txt - -commit c7a332d62fed3a85fa644bfa9fef8807b7c0d407 -Author: hadjipantelis -Date: Sun Jun 7 02:04:55 2015 -0700 - - Fixed makePACEinputs bug, added test case - -M R/makePACEinputs.R -M tests/testthat/test_makePACEinputs.R - -commit b1435e8f651a21ef44c7a692dec0e51773095645 -Author: Xiongtao Dai -Date: Sat Jun 6 23:19:37 2015 -0700 - - cut OK for cov. Eigenfunctions trapz integrate to 1 - -M R/FPCA.R -M R/GetEigenAnalysisResults.R -M R/GetSmoothedCovarSurface.R -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetSmoothedCovarSurface.R - -commit 93333050ff4c75be67eec79fff2ec80d593273d0 -Author: hadjipantelis -Date: Sat Jun 6 16:28:07 2015 -0700 - - Making PACE inputs conv. function - -A .gitignore -A R/makePACEinputs.R -A tests/testthat/test_makePACEinputs.R - -commit ebcefd1230c14ea21cc3bdddcfaf9a1704173d8d -Merge: 2f2236b fd87c77 -Author: Xiongtao Dai -Date: Sat Jun 6 13:53:38 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 2f2236ba2c7ddcdb3b7a3495ef25b620cf0946e3 -Author: Xiongtao Dai -Date: Sat Jun 6 13:53:18 2015 -0700 - - tmp - -M R/GetSmoothedCovarSurface.R -M tests/testthat/test_GetEigenAnalysisResults.R - -commit fd87c77d1ceac4fada515479bc4e8e0a323e273e -Author: dmchris -Date: Thu Jun 4 23:00:39 2015 -0700 - - modify createCorrPlot.R & include library plot3D and rgl for 3d plotting - -M DESCRIPTION -M R/createCorrPlot.R - -commit 826ae17485b39384b1e2c1fc031f880841c92cbd -Author: Xiongtao Dai -Date: Thu Jun 4 12:13:18 2015 -0700 - - changed test cases - -M R/GetEigenAnalysisResults.R -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2d.R -M R/no_FVE.R -M R/pc_covE.R -M tests/testthat/test_BinRawCov.R -M tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_GetSmoothedCovarSurface.R -M tests/testthat/test_cvlwls1d.R -M tests/testthat/test_pc_covE.R - -commit 28e5c7f5d8b1cfaaf6bdb87b933a3565a6926ef0 -Merge: 914e2c9 471198e -Author: Xiongtao -Date: Thu Jun 4 16:51:27 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit 914e2c93d352727d8f3435b1a67d4b84920bb5eb -Author: Xiongtao -Date: Thu Jun 4 16:51:04 2015 +0100 - - added Eigenanalysis, changed no_FVE - -A R/GetEigenAnalysisResults.R -M R/getMinb.R -M R/no_FVE.R -M notesXiongtao.txt -A tests/testthat/test_GetEigenAnalysisResults.R -M tests/testthat/test_getEigens.R -A tests/testthat/test_no_FVE.R - -commit 471198e03e38ab5eadbdafb239063c34adbfb1cb -Author: dmchris -Date: Thu Jun 4 05:31:01 2015 -0700 - - createCorrPlot, using package plot3D, subject to test - -M DESCRIPTION -A R/createCorrPlot.R - -commit f0b112741a6ba30822fb5c20b3eb7f238749c609 -Author: dmchris -Date: Thu Jun 4 04:41:05 2015 -0700 - - createDesignPlot function - -A R/createDesignPlot.R -A R/designPlotCount.R - -commit d0709d032e490e7934f4e9cbb8f92fb750275521 -Author: Xiongtao -Date: Thu Jun 4 08:10:18 2015 +0100 - - lwls maxK->maxk - -M R/lwls2d.R -M R/rotateLwls2d.R - -commit 36ddee7c1641ecb8b65b2363b90dddf7aabaa38e -Merge: b0eb065 73225c3 -Author: Xiongtao Dai -Date: Wed Jun 3 13:52:59 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit b0eb0659acb17fab7eb1d90d0c5d3e21f677665f -Author: Xiongtao Dai -Date: Wed Jun 3 13:52:54 2015 -0700 - - tmp - -M R/GetSmoothedCovarSurface.R -M notesXiongtao.txt - -commit 73225c3e9c001633ff8f37777dfb1087a73f24d5 -Author: dmchris -Date: Tue Jun 2 02:53:05 2015 -0700 - - Modify pc_covE with rotationCut option - -M R/pc_covE.R - -commit 54788837df83153893656d61197ef09aa138ab80 -Merge: 17564d0 94e9528 -Author: Pantelis -Date: Mon Jun 1 19:35:18 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 17564d08c92c76d902460c987863110506c5d142 -Author: Pantelis -Date: Mon Jun 1 19:33:49 2015 -0700 - - renaming and cleaning up variables, added options for rotation cut & out percent - -M R/BinData.R -M R/BinRawCov.R -M R/CVlwls1d.R -M R/CheckOptions.R -M R/CreateOptions.R -M R/CreateTrueMean.R -M R/FPCA.R -M R/GetBinNum.R -M R/GetBinnedDataset.R -M R/GetRawCov.R -M R/GetSmoothedCovarSurface.R -M R/GetSmoothedMeanCurve.R -M R/IsRegular.R -M R/SetOptions.R -M R/adjustBW1.R -M R/adjustBW2.R -M R/convertMuPhi.R -M R/gcvlwls1d0.R -M R/gcvlwls1d1.R -M R/gcvlwls2d.R -M R/getEigens.R -M R/getMinb.R -M R/lwls1d.R -M R/lwls2d.R -M R/mapX1d.R -M R/no_FVE.R -M R/pc_covE.R -M R/rotateLwls2d.R -M tests/testthat/test_BinRawCov.R -M tests/testthat/test_GetSmoothedMeanCurve.R - -commit 94e9528f94aba0170349996ba249b1f7dbbb05f3 -Merge: 8118407 46ef864 -Author: Xiongtao -Date: Mon Jun 1 19:07:45 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit 8118407a1c9deb14deaa4187bef5584792144ce2 -Author: Xiongtao -Date: Mon Jun 1 19:07:13 2015 +0100 - - SmoothCov testcases - -M notesXiongtao.txt -M tests/test_GetSmoothedCovarSurface.R - -commit 46ef8640cf08893b3cba17a6b3a0521fca14b179 -Author: Pantelis -Date: Mon Jun 1 10:42:34 2015 -0700 - - Changes in the tests folder structure and minor fixes on the GetRawCov and gcvlwls1d1 - -M DESCRIPTION -M R/GetRawCov.R -M R/gcvlwls1d1.R -M notesXiongtao.txt -A tests/testthat.R -R100 tests/test_BinRawCov.R tests/testthat/test_BinRawCov.R -R100 tests/test_CheckData.R tests/testthat/test_CheckData.R -R100 tests/test_CreateEigenfncts.R tests/testthat/test_CreateEigenfncts.R -R100 tests/test_CreateTrueMean.R tests/testthat/test_CreateTrueMean.R -R100 tests/test_GetRawCov.R tests/testthat/test_GetRawCov.R -R100 tests/test_GetSmoothedCovarSurface.R tests/testthat/test_GetSmoothedCovarSurface.R -R100 tests/test_GetSmoothedMeanCurve.R tests/testthat/test_GetSmoothedMeanCurve.R -R100 tests/test_IsRegular.R tests/testthat/test_IsRegular.R -R100 tests/test_convertMuPhi.R tests/testthat/test_convertMuPhi.R -R100 tests/test_cvlwls1d.R tests/testthat/test_cvlwls1d.R -R100 tests/test_gcvlwls1d1.R tests/testthat/test_gcvlwls1d1.R -R100 tests/test_gcvlwls2d.R tests/testthat/test_gcvlwls2d.R -R100 tests/test_getEigens.R tests/testthat/test_getEigens.R -R100 tests/test_getMinb.R tests/testthat/test_getMinb.R -R100 tests/test_lwls.R tests/testthat/test_lwls.R -R100 tests/test_lwls1.csv tests/testthat/test_lwls1.csv -R100 tests/test_lwls2d.R tests/testthat/test_lwls2d.R -R100 tests/test_mapX1d.R tests/testthat/test_mapX1d.R -R100 tests/test_minb.R tests/testthat/test_minb.R -R100 tests/test_pc_covE.R tests/testthat/test_pc_covE.R -R100 tests/test_rotateLwls2d.R tests/testthat/test_rotateLwls2d.R -R100 tests/test_useBin.R tests/testthat/test_useBin.R -R100 tests/test_wiener.R tests/testthat/test_wiener.R - -commit e48648db4b5e493910e6aa0412ded0cea0a5e280 -Author: Xiongtao -Date: Mon Jun 1 09:20:17 2015 +0100 - - some tests and small modifications - -M R/GetSmoothedCovarSurface.R -M R/getMinb.R -M R/lwls2d.R -M R/rotateLwls2d.R -M tests/test_GetSmoothedCovarSurface.R -M tests/test_gcvlwls2d.R -M tests/test_pc_covE.R -M tests/test_rotateLwls2d.R - -commit 429769d2a5b41b560c34f4b9926015f1330a8a54 -Author: Xiongtao -Date: Mon Jun 1 00:56:46 2015 +0100 - - binned 2D smoother - -A R/BinRawCov.R -M R/gcvlwls2d.R -A tests/test_BinRawCov.R -M tests/test_gcvlwls2d.R -M tests/test_lwls2d.R -M tests/test_rotateLwls2d.R - -commit c469bd2cb385ae5fe327e16b66858362e546cfc9 -Author: Xiongtao -Date: Sun May 31 21:24:22 2015 +0100 - - tmp - -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2d.R -M R/getMinb.R -R070 tests/test_gcv_lwls2d.R tests/test_gcvlwls2d.R -M tests/test_getMinb.R - -commit 63bf1dc2b22280680f4da7b4e1fbf035bcf7a383 -Merge: c9481a5 3ecdce2 -Author: Xiongtao -Date: Sun May 31 08:20:04 2015 +0100 - - ours - -commit c9481a5f7e9a9e4537dfd280b2fa4b4d56088617 -Author: Xiongtao -Date: Sun May 31 08:14:02 2015 +0100 - - tmp - -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2d.R -M tests/test_GetSmoothedCovarSurface.R - -commit 3ecdce2b9af1c5e31faf042c8a38f6326b5afd9d -Author: hadjipantelis -Date: Sun May 31 00:09:55 2015 -0700 - - Changing SetOptions.R - -M R/SetOptions.R - -commit 4ae1cb16f5ad1189f1c91525478ff3b9348e1295 -Author: hadjipantelis -Date: Sat May 30 23:45:50 2015 -0700 - - Remove ..Rcheck folder - -D ..Rcheck/00check.log -D ..Rcheck/00install.out -D ..Rcheck/tPACE/DESCRIPTION -D ..Rcheck/tPACE/Meta/Rd.rds -D ..Rcheck/tPACE/Meta/data.rds -D ..Rcheck/tPACE/Meta/hsearch.rds -D ..Rcheck/tPACE/Meta/links.rds -D ..Rcheck/tPACE/Meta/nsInfo.rds -D ..Rcheck/tPACE/Meta/package.rds -D ..Rcheck/tPACE/NAMESPACE -D ..Rcheck/tPACE/R/tPACE -D ..Rcheck/tPACE/R/tPACE.rdb -D ..Rcheck/tPACE/R/tPACE.rdx -D ..Rcheck/tPACE/data/Rdata.rdb -D ..Rcheck/tPACE/data/Rdata.rds -D ..Rcheck/tPACE/data/Rdata.rdx -D ..Rcheck/tPACE/help/AnIndex -D ..Rcheck/tPACE/help/aliases.rds -D ..Rcheck/tPACE/help/paths.rds -D ..Rcheck/tPACE/help/tPACE.rdb -D ..Rcheck/tPACE/help/tPACE.rdx -D ..Rcheck/tPACE/html/00Index.html -D ..Rcheck/tPACE/html/R.css -D ..Rcheck/tests/startup.Rs -D ..Rcheck/tests/test_CheckData.R -D ..Rcheck/tests/test_CheckData.Rout.fail -D ..Rcheck/tests/test_CreateEigenfncts.R -D ..Rcheck/tests/test_CreateTrueMean.R -D ..Rcheck/tests/test_GetRawCov.R -D ..Rcheck/tests/test_GetSmoothedCovarSurface.R -D ..Rcheck/tests/test_GetSmoothedMeanCurve.R -D ..Rcheck/tests/test_IsRegular.R -D ..Rcheck/tests/test_convertMuPhi.R -D ..Rcheck/tests/test_cvlwls1d.R -D ..Rcheck/tests/test_gcv_lwls2d.R -D ..Rcheck/tests/test_gcvlwls1d1.R -D ..Rcheck/tests/test_getEigens.R -D ..Rcheck/tests/test_getMinb.R -D ..Rcheck/tests/test_lwls.R -D ..Rcheck/tests/test_lwls1.csv -D ..Rcheck/tests/test_lwls2d.R -D ..Rcheck/tests/test_mapX1d.R -D ..Rcheck/tests/test_minb.R -D ..Rcheck/tests/test_pc_covE.R -D ..Rcheck/tests/test_rotateLwls2d.R -D ..Rcheck/tests/test_useBin.R -D ..Rcheck/tests/test_wiener.R - -commit c9d8823bd8c5624f514884765d44a40468bf40ec -Author: hadjipantelis -Date: Sat May 30 23:41:44 2015 -0700 - - Fixing issues at "tests" - -A ..Rcheck/00check.log -A ..Rcheck/00install.out -A ..Rcheck/tPACE/DESCRIPTION -A ..Rcheck/tPACE/Meta/Rd.rds -A ..Rcheck/tPACE/Meta/data.rds -A ..Rcheck/tPACE/Meta/hsearch.rds -A ..Rcheck/tPACE/Meta/links.rds -A ..Rcheck/tPACE/Meta/nsInfo.rds -A ..Rcheck/tPACE/Meta/package.rds -A ..Rcheck/tPACE/NAMESPACE -A ..Rcheck/tPACE/R/tPACE -A ..Rcheck/tPACE/R/tPACE.rdb -A ..Rcheck/tPACE/R/tPACE.rdx -A ..Rcheck/tPACE/data/Rdata.rdb -A ..Rcheck/tPACE/data/Rdata.rds -A ..Rcheck/tPACE/data/Rdata.rdx -A ..Rcheck/tPACE/help/AnIndex -A ..Rcheck/tPACE/help/aliases.rds -A ..Rcheck/tPACE/help/paths.rds -A ..Rcheck/tPACE/help/tPACE.rdb -A ..Rcheck/tPACE/help/tPACE.rdx -A ..Rcheck/tPACE/html/00Index.html -A ..Rcheck/tPACE/html/R.css -A ..Rcheck/tests/startup.Rs -A ..Rcheck/tests/test_CheckData.R -A ..Rcheck/tests/test_CheckData.Rout.fail -A ..Rcheck/tests/test_CreateEigenfncts.R -A ..Rcheck/tests/test_CreateTrueMean.R -A ..Rcheck/tests/test_GetRawCov.R -A ..Rcheck/tests/test_GetSmoothedCovarSurface.R -A ..Rcheck/tests/test_GetSmoothedMeanCurve.R -A ..Rcheck/tests/test_IsRegular.R -A ..Rcheck/tests/test_convertMuPhi.R -A ..Rcheck/tests/test_cvlwls1d.R -A ..Rcheck/tests/test_gcv_lwls2d.R -A ..Rcheck/tests/test_gcvlwls1d1.R -A ..Rcheck/tests/test_getEigens.R -A ..Rcheck/tests/test_getMinb.R -A ..Rcheck/tests/test_lwls.R -A ..Rcheck/tests/test_lwls1.csv -A ..Rcheck/tests/test_lwls2d.R -A ..Rcheck/tests/test_mapX1d.R -A ..Rcheck/tests/test_minb.R -A ..Rcheck/tests/test_pc_covE.R -A ..Rcheck/tests/test_rotateLwls2d.R -A ..Rcheck/tests/test_useBin.R -A ..Rcheck/tests/test_wiener.R -M R/CheckData.R -M R/SetOptions.R -M tests/test_GetRawCov.R -M tests/test_GetSmoothedCovarSurface.R -M tests/test_cvlwls1d.R -M tests/test_getEigens.R -M tests/test_lwls.R -M tests/test_lwls2d.R -M tests/test_mapX1d.R -M tests/test_pc_covE.R - -commit 96ee7ff0dd9a9868dd41185357b57fc11604225e -Author: dmchris -Date: Sat May 30 21:08:00 2015 -0700 - - bug fix: cyy -> cxxn - -M R/pc_covE.R - -commit 45cc7ee13ac6309c8b69b749eb150a27fed77304 -Merge: 8e5b799 1f6913f -Author: Xiongtao -Date: Sun May 31 05:01:21 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit 8e5b7995ae94595a7e4171682f8252ef3d0918af -Author: Xiongtao -Date: Sun May 31 04:59:43 2015 +0100 - - minor - -M R/GetSmoothedCovarSurface.R - -commit 1f6913f1c390aec2cf274d7ce483bb0f19ba1580 -Author: dmchris -Date: Sat May 30 20:08:29 2015 -0700 - - library control - -M DESCRIPTION - -commit 35ebaadfd7d243c9431d910cd18ab33cc58cda0f -Author: dmchris -Date: Sat May 30 20:04:45 2015 -0700 - - tab -> 2 spaces - -M R/pc_covE.R - -commit 7df0e409960362b9ee4eaa9a01f0efdfdbef3f4f -Merge: 560121b e18c9df -Author: dmchris -Date: Sat May 30 19:59:46 2015 -0700 - - library control - -commit 560121b1428f45afaefd9e2915bed8ec7693c31a -Author: dmchris -Date: Sat May 30 19:55:36 2015 -0700 - - Merge remote-tracking branch 'origin/master' - - Conflicts: - R/pc_covE.R - -M DESCRIPTION -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2d.R -M R/no_FVE.R -M R/pc_covE.R -D tests/GetSmoothedCovarSurface.R -D tests/pc_covE.R -R100 tests/GetRawCov.R tests/test_GetRawCov.R -A tests/test_GetSmoothedCovarSurface.R -R100 tests/convertMuPhi.R tests/test_convertMuPhi.R -R100 tests/gcv_lwls2d.R tests/test_gcv_lwls2d.R -R100 tests/getMinb.R tests/test_getMinb.R -R100 tests/lwls.R tests/test_lwls.R -R100 tests/lwls1.csv tests/test_lwls1.csv -R100 tests/lwls2d.R tests/test_lwls2d.R -A tests/test_pc_covE.R -R100 tests/rotateLwls2d.R tests/test_rotateLwls2d.R -R100 tests/useBin.R tests/test_useBin.R -R100 tests/wiener.R tests/test_wiener.R - -commit e18c9df905b869482d5ddeaac4a1c493bf4ff6f5 -Author: Xiongtao -Date: Sat May 30 23:51:11 2015 +0100 - - modified pc_covE - -M R/GetSmoothedCovarSurface.R -M R/pc_covE.R -M tests/test_pc_covE.R - -commit 4fe52142991b49b81cf60e9f305a4293094f3f16 -Author: Xiongtao -Date: Sat May 30 22:40:00 2015 +0100 - - rename tests - -R100 tests/GetRawCov.R tests/test_GetRawCov.R -R100 tests/GetSmoothedCovarSurface.R tests/test_GetSmoothedCovarSurface.R -R100 tests/convertMuPhi.R tests/test_convertMuPhi.R -R100 tests/gcv_lwls2d.R tests/test_gcv_lwls2d.R -R100 tests/getMinb.R tests/test_getMinb.R -R100 tests/lwls.R tests/test_lwls.R -R100 tests/lwls1.csv tests/test_lwls1.csv -R100 tests/lwls2d.R tests/test_lwls2d.R -R100 tests/pc_covE.R tests/test_pc_covE.R -R100 tests/rotateLwls2d.R tests/test_rotateLwls2d.R -R100 tests/useBin.R tests/test_useBin.R -R100 tests/wiener.R tests/test_wiener.R - -commit 2f7d6fcc3a22154cb8957939729bcdb5f72520ce -Merge: 83c778d fbfc641 -Author: Xiongtao -Date: Sat May 30 22:15:30 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit fbfc641275d4173b8a686deb9233cbcdf6eb7e14 -Author: dmchris -Date: Sat May 30 06:17:23 2015 -0700 - - revised pc_covE.R for sigma^2 estimation and its test function for dense and sparse data - -M R/pc_covE.R -A tests/pc_covE.R - -commit 1543fe9fb234fe3a8292e354dee68759c8da2aa5 -Author: dmchris -Date: Sat May 30 05:35:15 2015 -0700 - - tpairn is now N by 2; added output: diag, a 2-column matrix for diagonal raw cov - - Please look at the description of diag in comment part. - -M R/GetRawCov.R - -commit ccf7f4a4ea91a3311fc391495879803c42fcc2f6 -Author: Pantelis -Date: Fri May 29 20:05:05 2015 -0700 - - Fixed transposition issue with tpairn arguments - -M R/GetRawCov.R - -commit 69ffafc8f9291a8444d4bb74191d3a3930c2f1e0 -Author: Pantelis -Date: Fri May 29 19:59:19 2015 -0700 - - Fixing Set/Check Options, added CreateOptions, added basic GetSmoothedMeanCurve test - -M R/CheckOptions.R -A R/CreateOptions.R -M R/FPCA.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R -A tests/test_GetSmoothedMeanCurve.R - -commit 83c778d2f13c81c2cf9a718cb14c15726058a92b -Merge: 6724c71 76dbfbb -Author: Xiongtao -Date: Sat May 30 03:30:46 2015 +0100 - - Merge remote-tracking branch 'upstream/master' - -commit 6724c71093a14aac1377f61253d44469d8c12afe -Author: Xiongtao -Date: Sat May 30 03:30:33 2015 +0100 - - minor - -M R/GetSmoothedCovarSurface.R -M R/gcvlwls2d.R -M tests/GetSmoothedCovarSurface.R - -commit 76dbfbb850fe155d08b78a8e4ca52b25743fe763 -Merge: 3bbde52 53bab32 -Author: Pantelis -Date: Fri May 29 17:49:47 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - - Conflicts: - R/SetOptions.R - -commit 3bbde52eb0fc15db5fd4168c2abe7d4ea97e4cf4 -Author: Pantelis -Date: Fri May 29 17:40:05 2015 -0700 - - Fixing the Set/Check Options.R - -M R/FPCA.R -M R/SetOptions.R - -commit 53bab3236bede4bf9c5d2616f80312accb4dacdb -Author: dmchris -Date: Fri May 29 17:05:11 2015 -0700 - - function for sigma^2 estimation, integral test required - -A R/pc_covE.R - -commit 26a42a2881878773ca0f9449bc3ea7e21f6e3a58 -Author: Xiongtao -Date: Fri May 29 23:12:09 2015 +0100 - - working version of SmoothCov - -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/SetOptions.R -M R/gcvlwls2d.R -M R/lwls2d.R -M notesXiongtao.txt -A tests/GetSmoothedCovarSurface.R -M tests/gcv_lwls2d.R -A tests/useBin.R - -commit 6e1815e7d6addb4ad92888074fd3fda1a57fc574 -Merge: 2c406bc b7e289d -Author: Xiongtao Dai -Date: Fri May 29 11:36:00 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 2c406bca3d0f673e79dcd8108fcbbc715cfbc775 -Author: Xiongtao Dai -Date: Fri May 29 11:35:43 2015 -0700 - - minor - -M R/GetSmoothedCovarSurface.R -M notesXiongtao.txt - -commit b7e289dbf645f572579e142543aab9be99cf504f -Author: Pantelis -Date: Thu May 28 19:29:56 2015 -0700 - - Changed GCV/CV/etc. options from numeric to words, Added options for binning, Added basic basic binning cap. - -M R/BinData.R -M R/CheckOptions.R -M R/FPCA.R -M R/GetBinnedCurve.R -A R/GetBinnedDataset.R -M R/GetSmoothedMeanCurve.R -M R/SetOptions.R - -commit 87a610887ffdc84c2411791568cb2de3e2c065e3 -Author: Xiongtao Dai -Date: Thu May 28 11:33:21 2015 -0700 - - clean - -D R/gcvlwls2d1.R - -commit c3cd65bd307efe6d2507c24d13dec186237ba5fe -Author: Pantelis -Date: Wed May 27 17:39:11 2015 -0700 - - intefrace specifications - -D mt19937ar.c -D mt19937ar.out - -commit 564aa0b2ffe158ebd18cb2e0cb713021f099ed09 -Author: Pantelis -Date: Wed May 27 17:38:42 2015 -0700 - - intefrace specifications - -D R/.FPCA.R.swp -M R/FPCA.R -M R/GetSmoothedCovarSurface.R -M R/getEigens.R -A mt19937ar.c -A mt19937ar.out - -commit edf3bd54f30065db97e0ed41155d6ef462a7e2e8 -Author: Pantelis -Date: Wed May 27 11:44:10 2015 -0700 - - Minor things - -M R/FPCA.R -A R/GetSmoothedCovarSurface.R -M R/gcvlwls2d1.R -M tests/gcv_lwls2d.R - -commit 43403c2c7f74b8956c68808de00e0cbdba5aa327 -Author: hadjipantelis -Date: Tue May 26 02:32:02 2015 -0700 - - Added test_cvlwls1d.R - -A tests/test_cvlwls1d.R - -commit 4880570d23e40f1a5fff722472c4f5cb13324d9e -Author: hadjipantelis -Date: Tue May 26 02:18:46 2015 -0700 - - Added cvlwls1d.R and the related test - -A R/CVlwls1d.R -M R/GetSmoothedMeanCurve.R - -commit 8466ed2cd00c65e8e7fd0d04e79718c8e3f35ec1 -Author: Xiongtao -Date: Tue May 26 02:17:57 2015 +0100 - - added convertMuphi and modified mapX1d - -A R/convertMuPhi.R -M R/mapX1d.R -A tests/convertMuPhi.R - -commit c19daf5379c2a0a71c108709ca284af0f64a2989 -Author: Xiongtao -Date: Tue May 26 01:47:08 2015 +0100 - - changed desc - -M DESCRIPTION -M run_tests.R - -commit ae0baf76d8f3273356fd82f534156159c9a28b2b -Author: Xiongtao -Date: Tue May 26 01:42:51 2015 +0100 - - changed desc, added namespace - -M DESCRIPTION -A NAMESPACE -M R/mapX1d.R - -commit ee428f7eeb733b59f2958d2c447e381587613898 -Author: Pantelis -Date: Mon May 25 17:21:37 2015 -0700 - - Populating FPCA.R - Adding the GetSmoothedMeanCurve.R - -A R/.FPCA.R.swp -M R/CheckOptions.R -M R/FPCA.R -A R/GetSmoothedMeanCurve.R - -commit 83d2b382cffd8bfc461a0d8c4e6793c9dd5f39b8 -Author: Pantelis -Date: Fri May 22 17:07:32 2015 -0700 - - Added getEigens.R and populated the DESCRIPTION a bit - -A DESCRIPTION -A R/getEigens.R -A data/xcovForGetEigens1.csv -A tests/test_getEigens.R - -commit c35965e4f26abb9438710b35c824df3815b46289 -Merge: e4e9d8e bc6b4fc -Author: Xiongtao Dai -Date: Wed May 20 21:16:11 2015 -0700 - - Merge branch 'master' of github.com:hadjipantelis/tPACE - -commit e4e9d8e15e841681eb46744ed932ccfd73641848 -Author: Xiongtao Dai -Date: Wed May 20 18:02:40 2015 -0700 - - reorganize - -R099 BinData.R R/BinData.R -R100 CheckData.R R/CheckData.R -R100 CheckOptions.R R/CheckOptions.R -R100 CreateEigenfncts.R R/CreateEigenfncts.R -R100 CreateTrueMean.R R/CreateTrueMean.R -R100 FPCA.R R/FPCA.R -R100 GetBinNum.R R/GetBinNum.R -R100 GetBinnedCurve.R R/GetBinnedCurve.R -R100 GetRawCov.R R/GetRawCov.R -R100 IsRegular.R R/IsRegular.R -R100 SetOptions.R R/SetOptions.R -R100 adjustBW1.R R/adjustBW1.R -R100 adjustBW2.R R/adjustBW2.R -R100 gcvlwls1d0.R R/gcvlwls1d0.R -R100 gcvlwls1d1.R R/gcvlwls1d1.R -R100 gcvlwls2d.R R/gcvlwls2d.R -R100 gcvlwls2d1.R R/gcvlwls2d1.R -R100 getCount.R R/getCount.R -R100 getMinb.R R/getMinb.R -R100 lwls1d.R R/lwls1d.R -R100 lwls2d.R R/lwls2d.R -R100 mapX1d.R R/mapX1d.R -R100 minb.R R/minb.R -R100 no_FVE.R R/no_FVE.R -R100 rotateLwls2d.R R/rotateLwls2d.R -R100 wiener.R R/wiener.R -M notesXiongtao.txt - -commit bc6b4fc261a8b427e1c1b6500451ff9f7d4ce60b -Author: dmchris -Date: Mon May 18 23:17:55 2015 -0700 - - modify adjustBW1, adjustBW2, regular code 2->Dense - -M adjustBW1.R -M adjustBW2.R - -commit d536e961628f0f8864916ea930175a79b9e84e0b -Author: Xiongtao Dai -Date: Mon May 18 17:19:52 2015 -0700 - - rotate - -M gcvlwls2d.R -M lwls1d.R -M lwls2d.R -M notesXiongtao.txt -A rotateLwls2d.R -A tests/rotateLwls2d.R - -commit bca3a8aa3907b1af458eeccf7f5f39a79e05fee9 -Author: Xiongtao -Date: Sun May 17 23:56:24 2015 +0100 - - CV for 2D smoother - -M gcvlwls2d.R -M lwls2d.R -M tests/gcv_lwls2d.R - -commit ef8123d2ae6746e583b15c49aca20462e6a7c94e -Author: CrossD -Date: Sun May 17 01:48:08 2015 -0700 - - gcvlwls2d with getMinb - -M GetRawCov.R -M gcvlwls2d.R -A getCount.R -M getMinb.R -M tests/gcv_lwls2d.R -M tests/getMinb.R - -commit 69689858e434476d98f8d3ca30ec4c20abc722a3 -Author: CrossD -Date: Sat May 16 18:52:19 2015 -0700 - - gcvlwls2d raw - -M GetRawCov.R -A gcvlwls2d.R -A gcvlwls2d1.R -A getMinb.R -M lwls2d.R -M notesXiongtao.txt -A tests/GetRawCov.R -A tests/gcv_lwls2d.R -A tests/getMinb.R -M tests/lwls.R -M tests/lwls2d.R -A tests/wiener.R -A wiener.R - -commit 097222b692e71993b90a04e68ef9b7123420af76 -Merge: 339e558 1a0dfb7 -Author: CrossD -Date: Sat May 16 11:40:51 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 1a0dfb7fa6fe565b5a7a019332a7a9fabf3d752f -Author: hadjipantelis -Date: Mon May 11 23:43:08 2015 -0700 - - GetRawCov.R fix-up - -M GetRawCov.R - -commit 339e558d8358f4197c8e715bc40fd5c098e236ad -Merge: 820ee48 90aa41c -Author: Xiongtao Dai -Date: Sun May 10 13:38:26 2015 -0700 - - merge - -commit 820ee4888c6037e5a47da927d3466e1b14f2706f -Author: Xiongtao Dai -Date: Sun May 10 13:38:11 2015 -0700 - - update lwls2d - -M lwls2d.R -M notesXiongtao.txt -M tests/lwls2d.R - -commit 90aa41ce0298cbfdf91bd429954f70d0351d644c -Merge: 7b11ca2 d63a0ad -Author: Pantelis -Date: Fri May 8 22:58:00 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 7b11ca2dfe71e14439e0888fd6f81f68849685d5 -Author: Pantelis -Date: Fri May 8 22:56:00 2015 -0700 - - gcvlwls1d*.R and ones test - -M CheckOptions.R -M SetOptions.R -A data/dataForGcvLwls.RData -A data/dataForGcvLwlsTest.RData -A gcvlwls1d0.R -A gcvlwls1d1.R -A tests/test_gcvlwls1d1.R - -commit d63a0ad3adc1ac6ebfb0b083a51970bc3f2bcd22 -Author: dmchris -Date: Fri May 8 17:44:40 2015 -0700 - - no_FVE: change LM to LR - -M no_FVE.R - -commit c599098e3bb5464e83ac474fe8cb19317fbbdb71 -Author: dmchris -Date: Thu May 7 23:53:16 2015 -0700 - - modify adjustBW2.R - - Delete an unused argument: npoly. - -M adjustBW2.R - -commit aa65e40ee9980f7d5680ed00fa9ae67177c7612e -Author: dmchris -Date: Thu May 7 23:51:23 2015 -0700 - - add no_FVE.R - - The function selects optimal number of FPCs using FVE criterion. One - thing to note is “LM” or “LR” in eigen-decomposition. - -A no_FVE.R - -commit 997086ccd77083b3d9388f36361564899c27b344 -Merge: 5de20e6 9fdeb6f -Author: Xiongtao Dai -Date: Tue May 5 15:25:59 2015 -0700 - - merged with lwls2d added. - -commit 5de20e6a0b337a215155ad75ec44793ba7dc7ae4 -Author: Xiongtao Dai -Date: Tue May 5 15:25:35 2015 -0700 - - lwls2d - -A lwls2d.R -A tests/lwls2d.R - -commit 9fdeb6f827a6d5650f51d273b2e3146dcaf93d9a -Author: Pantelis -Date: Mon May 4 18:48:34 2015 -0700 - - Getting the Raw Covariance updates - -D .mapX1d.R.swp -M GetRawCov.R - -commit 1ccbdc748ebf4bc5d0d2efc18f764baa306a7bed -Merge: 8b9dc37 5955dd3 -Author: Xiongtao Dai -Date: Mon May 4 16:29:33 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 8b9dc3748402cd2671915856cbd17f7dae24c806 -Author: Xiongtao Dai -Date: Mon May 4 16:28:49 2015 -0700 - - lwls1d - -M lwls1d.R -M tests/lwls.R - -commit 5955dd3ced02662c4ce61cf32e170c912b6221af -Merge: 142526e f90cc7e -Author: Pantelis -Date: Mon May 4 16:14:13 2015 -0700 - - Merge branch 'master' of https://github.com/hadjipantelis/tPACE - -commit 142526efde51d660a6e8c59c2dad3f710ce30a0a -Author: Pantelis -Date: Mon May 4 16:13:14 2015 -0700 - - Getting the Raw Covariance - -A .mapX1d.R.swp -A GetRawCov.R -M IsRegular.R -A data/dataForGetRawCov.RData -M mapX1d.R -M tests/test_IsRegular.R - -commit f90cc7e45ab35ba3eece6474746c23eab0cff781 -Author: dmchris -Date: Mon May 4 16:00:42 2015 -0700 - - adjustBW in R - - adjustBW1 and adjustBW2 are added for bwd modification for mean and cov - estimation. - -A adjustBW1.R -A adjustBW2.R - -commit d5deb7141ff145186a4b39c413440813945f05f5 -Author: Xiongtao Dai -Date: Mon May 4 10:07:12 2015 -0700 - - lwls1d added - -A lwls1d.R -A tests/lwls.R -A tests/lwls1.csv - -commit 7e420aa95a457f8427d38b5ebd2d22b12a2de7e4 -Merge: 6ea0cdc 0a38e63 -Author: Xiongtao Dai -Date: Sun May 3 17:22:23 2015 -0700 - - Merge remote-tracking branch 'upstream/master' - -commit 6ea0cdc1835caaef5d68353e46f0d0289c37d918 -Author: Xiongtao Dai -Date: Sun May 3 03:09:55 2015 -0700 - - notes added - -A notesXiongtao.txt - -commit 0a38e6314ec8b230b6aba2d5e12a270d73b79b43 -Author: Pantelis -Date: Fri May 1 18:53:18 2015 -0700 - - Building up mapX1d function and tests - -D .minb.R.swp -A mapX1d.R -M tests/test_IsRegular.R -A tests/test_mapX1d.R -M tests/test_minb.R - -commit e722462e5e1d6044257c734640c2a86203315af4 -Author: Pantelis -Date: Fri May 1 17:53:48 2015 -0700 - - Replacing is regular - -A tests/test_IsRegular.R - -commit 903000124419bc20728c1b77745fa1be24799c02 -Author: Pantelis -Date: Fri May 1 17:50:43 2015 -0700 - - Building up minb function and tests - -R100 tests/test_IsRegular.R tests/test_minb.R - -commit e876fc22f21cf85a07a3d8b3332b4a751e5479b3 -Author: Pantelis -Date: Fri May 1 17:48:19 2015 -0700 - - Building up minb function and tests - -D .CheckOptions.R.swp -R085 .CheckData.R.swp .minb.R.swp -M BinData.R -M GetBinNum.R -A minb.R -M tests/test_IsRegular.R - -commit d6fdc4522e6d985c8a123b009587b5c4b74beccd -Author: Pantelis -Date: Fri May 1 14:25:21 2015 -0700 - - Making a basic dataset and correcting some typo comments - -A .CheckOptions.R.swp -M FPCA.R -M SetOptions.R -A data/.swo -A data/.swp -A data/dataGeneratedByExampleSeed123.RData - -commit 51370bc1108f1dd631da4b2c058a5af0961f9676 -Author: Pantelis -Date: Fri May 1 13:34:41 2015 -0700 - - basic little changes / adding ROxygen comments - -A .CheckData.R.swp -M CheckData.R -M CheckOptions.R -M FPCA.R - -commit 6f167b0b0e41ca973f8fd2f81e1c480227c4010e -Author: Pantelis -Date: Mon Apr 27 19:24:32 2015 -0700 - - Removed some system files - -D .project -D .settings/de.walware.r.core.prefs - -commit e9e1a97c9cdd3ba9800fa6349aacd4a5be909f2a -Author: Pantelis -Date: Mon Apr 27 19:20:14 2015 -0700 - - First commit - -A .project -A .settings/de.walware.r.core.prefs -A BinData.R -A CheckData.R -A CheckOptions.R -A CreateEigenfncts.R -A CreateTrueMean.R -A FPCA.R -A GetBinNum.R -A GetBinnedCurve.R -A IsRegular.R -A SetOptions.R -A run_tests.R -A tests/test_CheckData.R -A tests/test_CreateEigenfncts.R -A tests/test_CreateTrueMean.R -A tests/test_IsRegular.R diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.R b/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.R deleted file mode 100644 index 3b332637..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.R +++ /dev/null @@ -1,110 +0,0 @@ -## ----setup, include=FALSE------------------------------------------------ -knitr::opts_chunk$set(echo = TRUE) - -## ----eval=FALSE---------------------------------------------------------- -# FPCAobj <- FPCA(Ly=yList, Lt=tList) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - library(fdapace) - - # Set the number of subjects (N) and the - # number of measurements per subjects (M) - N <- 200; - M <- 100; - set.seed(123) - - # Define the continuum - s <- seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi <- matrix(rnorm(N*2), ncol=2); - Ksi <- apply(Ksi, 2, scale) - Ksi <- Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue <- Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M)) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - L3 <- MakeFPCAInputs(IDs = rep(1:N, each=M), tVec=rep(s,N), t(yTrue)) - FPCAdense <- FPCA(L3$Ly, L3$Lt) - - # Plot the FPCA object - plot(FPCAdense) - - # Find the standard deviation associated with each component - sqrt(FPCAdense$lambda) - - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - # Create sparse sample - # Each subject has one to five readings (median: 3) - set.seed(123) - ySparse <- Sparsify(yTrue, s, sparsity = c(1:5)) - - # Give your sample a bit of noise - ySparse$yNoisy <- lapply(ySparse$Ly, function(x) x + 0.5*rnorm(length(x))) - - # Do FPCA on this sparse sample - # Notice that sparse FPCA will smooth the data internally (Yao et al., 2005) - # Smoothing is the main computational cost behind sparse FPCA - FPCAsparse <- FPCA(ySparse$yNoisy, ySparse$Lt, list(plot = TRUE)) - - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - FPCAsparseMuBW5 <- FPCA(ySparse$yNoisy, ySparse$Lt, optns= list(userBwMu = 5)) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -par(mfrow=c(1,2)) -CreatePathPlot( FPCAsparse, subset = 1:3, main = "GCV bandwidth", pch = 16) -CreatePathPlot( FPCAsparseMuBW5, subset = 1:3, main = "User-defined bandwidth", pch = 16) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - FPCAsparseRect <- FPCA(ySparse$yNoisy, ySparse$Lt, optns = list(kernel = 'rect')) # Use rectangular kernel - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -SelectK( FPCAsparse, criterion = 'FVE', FVEthreshold = 0.95) # K = 2 -SelectK( FPCAsparse, criterion = 'AIC') # K = 2 - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -fittedCurvesP0 <- fitted(FPCAsparse) # equivalent: fitted(FPCAsparse, derOptns=list(p = 0)); -# Get first order derivatives of fitted curves, smooth using Epanechnikov kernel -fittedCurcesP1 <- fitted(FPCAsparse, derOptns=list(p = 1, kernelType = 'epan')) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ - # load data - data(medfly25) - - # Turn the original data into a list of paired amplitude and timing lists - Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) - fpcaObjFlies <- FPCA(Flies$Ly, Flies$Lt, list(plot = TRUE, methodMuCovEst = 'smooth', userBwCov = 2)) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), main = 'K = 11', pch = 4); grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', pch = 4) ; grid() - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -par(mfrow=c(1,2)) - CreateOutliersPlot(fpcaObjFlies, optns = list(K = 3, variant = 'KDE')) - CreateFuncBoxPlot(fpcaObjFlies, xlab = 'Days', ylab = '# of eggs laid', optns = list(K =3, variant='bagplot')) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE) ; grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE, derOptns = list(p = 1, bw = 1.01 , kernelType = 'epan') ) ; grid() - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -fpcaObjFlies79 <- FPCA(Flies$Ly, Flies$Lt, list(nRegGrid = 79, methodMuCovEst = 'smooth', userBwCov = 2)) # Use 79 equidistant points for the support -CreateBWPlot(fpcaObjFlies79 , derOptns = list(p = 1, bw = 2.0 , kernelType = 'rect') ) - -## ----eval=TRUE, echo=TRUE------------------------------------------------ -A <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), k = 2) -# The Neg-Entropy Criterion can be found as: A$clusterObj@bestResult@criterionValue -CreatePathPlot( fpcaObjFlies, K=2, showObs=FALSE, lty=1, col= A$cluster, xlab = 'Days', ylab = '# of eggs laid') -grid() - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.Rmd b/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.Rmd deleted file mode 100644 index 34b25aaf..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.Rmd +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: "Functional PCA in R" -author: "Hadjipantelis, Dai, Ji, Han, Muller & Wang - UC Davis, USA" -date: "1 December 2017" -bibliography: roxygen.bib -output: html_document -vignette: > - %\VignetteIndexEntry{Introduction to fdapace} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -``` - -## Overview - -The basic work-flow behind the PACE approach for sparse functional data is as follows (see eg. [@Yao05; @Liu09] for more information): - -1. Calculate the smoothed mean $\hat{\mu}$ (using local linear smoothing) aggregating all the available readings together. -2. Calculate for each curve separately its own raw covariance and then aggregate all these raw covariances to generate the sample raw covariance. -3. Use the off-diagonal elements of the sample raw covariance to estimate the smooth covariance. -4. Perform eigenanalysis on the smoothed covariance to obtain the estimated eigenfunctions $\hat{\phi}$ and eigenvalues $\hat{\lambda}$, then project that smoothed covariance on a positive semi-definite surface [@Hall2008]. -5. Use Conditional Expectation (PACE step) to estimate the corresponding scores $\hat{\xi}$. -ie. \newline -$\hat{\xi}_{ik} = \hat{E}[\hat{\xi}_{ik}|Y_i] = \hat{\lambda}_k \hat{\phi}_{ik}^T \Sigma_{Y_i}^{-1}(Y_i-\hat{\mu}_i)$. - -As a working assumption a dataset is treated as sparse if it has on average less than 20, potentially irregularly sampled, measurements per subject. A user can manually change the automatically determined `dataType` if that is necessary. -For densely observed functional data simplified procedures are available to obtain the eigencomponents and associated functional principal components scores (see eg. [@Castro86] for more information). In particular in this case we: - -1. Calculate the cross-sectional mean $\hat{\mu}$. -2. Calculate the cross-sectional covariance surface (which is guaranteed to be positive semi-definite). -3. Perform eigenanalysis on the covariance to estimate the eigenfunctions $\hat{\phi}$ and eigenvalues $\hat{\lambda}$. -4. Use numerical integration to estimate the corresponding scores $\hat{\xi}$. - ie. \newline - $\hat{\xi}_{ik} = \int_0^T [ y(t) - \hat{\mu}(t)] \phi_i(t) dt$ - -In the case of sparse FPCA the most computational intensive part is the smoothing of the sample's raw covariance function. For this, we employ a local weighted bilinear smoother. - -A sibling MATLAB package for `fdapace` can be found in [here](http://www.stat.ucdavis.edu/PACE). - -## FPCA in R using fdapace - -The simplest scenario is that one has two lists `yList` and `tList` where `yList` is a list of vectors, each containing the observed values $Y_{ij}$ for the $i$th subject and `tList` is a list of vectors containing corresponding time points. In this case one uses: - -```{r,eval=FALSE} -FPCAobj <- FPCA(Ly=yList, Lt=tList) -``` -The generated `FPCAobj` will contain all the basic information regarding the desired FPCA. - -### Generating a toy dense functional dataset from scratch - - -```{r,eval=TRUE, echo=TRUE} - library(fdapace) - - # Set the number of subjects (N) and the - # number of measurements per subjects (M) - N <- 200; - M <- 100; - set.seed(123) - - # Define the continuum - s <- seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi <- matrix(rnorm(N*2), ncol=2); - Ksi <- apply(Ksi, 2, scale) - Ksi <- Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue <- Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M)) -``` - -### Running FPCA on a dense dataset - -```{r,eval=TRUE, echo=TRUE} - L3 <- MakeFPCAInputs(IDs = rep(1:N, each=M), tVec=rep(s,N), t(yTrue)) - FPCAdense <- FPCA(L3$Ly, L3$Lt) - - # Plot the FPCA object - plot(FPCAdense) - - # Find the standard deviation associated with each component - sqrt(FPCAdense$lambda) - -``` -### Running FPCA on a sparse and noisy dataset - -```{r,eval=TRUE, echo=TRUE} - # Create sparse sample - # Each subject has one to five readings (median: 3) - set.seed(123) - ySparse <- Sparsify(yTrue, s, sparsity = c(1:5)) - - # Give your sample a bit of noise - ySparse$yNoisy <- lapply(ySparse$Ly, function(x) x + 0.5*rnorm(length(x))) - - # Do FPCA on this sparse sample - # Notice that sparse FPCA will smooth the data internally (Yao et al., 2005) - # Smoothing is the main computational cost behind sparse FPCA - FPCAsparse <- FPCA(ySparse$yNoisy, ySparse$Lt, list(plot = TRUE)) - -``` - -## Further functionality - - `FPCA` calculates the bandwidth utilized by each smoother using generalised cross-validation or $k$-fold cross-validation automatically. Dense data are not smoothed by default. The argument `methodMuCovEst` can be switched between `smooth` and `cross-sectional` if one wants to utilize different estimation techniques when work with dense data. - -The bandwidth used for estimating the smoothed mean and the smoothed covariance are available under `...bwMu` and `bwCov` respectively. Users can nevertheless provide their own bandwidth estimates: - -```{r,eval=TRUE, echo=TRUE} - FPCAsparseMuBW5 <- FPCA(ySparse$yNoisy, ySparse$Lt, optns= list(userBwMu = 5)) -``` -Visualising the fitted trajectories is a good way to see if the new bandwidth made any sense: - - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) -CreatePathPlot( FPCAsparse, subset = 1:3, main = "GCV bandwidth", pch = 16) -CreatePathPlot( FPCAsparseMuBW5, subset = 1:3, main = "User-defined bandwidth", pch = 16) -``` ---- - `FPCA` uses a Gaussian kernel when smoothing sparse functional data; other kernel types (eg. Epanechnikov/`epan`) are also available (see `?FPCA`). The kernel used for smoothing the mean and covariance surface is the same. It can be found under `$optns\$kernel` of the returned object. For instance, one can switch the default Gaussian kernel (`gauss`) for a rectangular kernel (`rect`) as follows: - -```{r,eval=TRUE, echo=TRUE} - FPCAsparseRect <- FPCA(ySparse$yNoisy, ySparse$Lt, optns = list(kernel = 'rect')) # Use rectangular kernel -``` - - `FPCA` returns automatically the smallest number of components required to explain 99.99% of a sample's variance. Using the function `selectK` one can determine the number of relevant components according to AIC, BIC or a different Fraction-of-Variance-Explained threshold. For example: - -```{r,eval=TRUE, echo=TRUE} -SelectK( FPCAsparse, criterion = 'FVE', FVEthreshold = 0.95) # K = 2 -SelectK( FPCAsparse, criterion = 'AIC') # K = 2 -``` -When working with functional data (usually not very sparse) the estimation of derivatives is often of interest. Using \texttt{fitted.FPCA} one can directly obtain numerical derivatives by defining the appropriate order `p`; `fdapace` provides for the first two derivatives ( `p =1` or `2`). Because the numerically differentiated data are smoothed the user can define smoothing specific arguments (see `?fitted.FPCA` for more information); the derivation is done by using the derivative of the linear fit. Similarly using the function `FPCAder` , one can augment an `FPCA` object with functional derivatives of a sample's mean function and eigenfunctions. - -```{r,eval=TRUE, echo=TRUE} -fittedCurvesP0 <- fitted(FPCAsparse) # equivalent: fitted(FPCAsparse, derOptns=list(p = 0)); -# Get first order derivatives of fitted curves, smooth using Epanechnikov kernel -fittedCurcesP1 <- fitted(FPCAsparse, derOptns=list(p = 1, kernelType = 'epan')) -``` - -## A real-world example - -We use the `medfly25` dataset that this available with `fdapace` to showcase `FPCA` and its related functionality. `medfly25` is a dataset containing the eggs laid from 789 medflies (Mediterranean fruit flies, Ceratitis capitata) during the first 25 days of their lives. It is a subset of the dataset used by Carey at al. (1998) [@Carey98]; only flies having lived at least 25 days are shown. The data are rather noisy, dense and with a characteristic flat start. For that reason in contrast with above we will use a smoothing estimating procedure despite having dense data. - -```{r,eval=TRUE, echo=TRUE} - # load data - data(medfly25) - - # Turn the original data into a list of paired amplitude and timing lists - Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) - fpcaObjFlies <- FPCA(Flies$Ly, Flies$Lt, list(plot = TRUE, methodMuCovEst = 'smooth', userBwCov = 2)) -``` - -Based on the scree-plot we see that the first three components appear to encapsulate most of the relevant variation. The number of eigencomponents to reach a 99.99% FVE is $11$ but just $3$ eigencomponents are enough to reach a 95.0%. We can easily inspect the following visually, using the `CreatePathPlot` command. - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), main = 'K = 11', pch = 4); grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', pch = 4) ; grid() -``` - -One can perform outlier detection [@Febrero2007] as well as visualize data using a functional box-plot. To achieve these tasks one can use the functions `CreateOutliersPlot` nd `CreateFuncBoxPlot`. Different ranking methodologies (KDE, bagplot [@Rousseeuw1999,@Hyndman2010] or point-wise) are available and can potentially identify different aspects of a sample. For example here it is notable that the kernel density estimator `KDE` variant identifies two main clusters within the main body of sample. By construction the `bagplot` method would use a single bag and this feature would be lost. Both functions return a (temporarily) invisible copy of a list containing the labels associated with each of sample curve0 .`CreateOutliersPlot` returns a (temporarily) invisible copy of a list containing the labels associated with each of sample curve. -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreateOutliersPlot(fpcaObjFlies, optns = list(K = 3, variant = 'KDE')) - CreateFuncBoxPlot(fpcaObjFlies, xlab = 'Days', ylab = '# of eggs laid', optns = list(K =3, variant='bagplot')) -``` - -Functional data lend themselves naturally to questions about their rate of change; their derivatives. As mentioned previously using `fdapace` one can generate estimates of the sample's derivatives ( `fitted.FPCA`) or the derivatives of the principal modes of variation (`FPCAder`). In all cases, one defines a `derOptns` list of options to control the derivation parameters. Getting derivatives is obtained by using a local linear smoother as above. - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE) ; grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE, derOptns = list(p = 1, bw = 1.01 , kernelType = 'epan') ) ; grid() -``` - -We note that if finite support kernel types are used (eg. `rect` or `epan` ), bandwidths smaller than the distance between two adjacent points over which the data are registered onto will lead to (expected) `NaN` estimates. In case of dense data, the grid used is (by default) equal to the grid the data were originally registered on; in the case of sparse data, the grid used (by default) spans the range of the sample's supports and uses 51 points. A user can change the number of points using the argument `nRegGrid` . -One can investigate the effect a particular kernel type ( `kernelType` ) or bandwidth size (`bw`) has on the generated derivatives by using the function `CreateBWPlot` and providing a relevant `derOptns` list. This will generate estimates about the mean function $\mu(t)$ as well as the first two principal modes of variation $\phi_1(t)$ and $\phi_2(t)$ for different multiples of `bw`. - -```{r,eval=TRUE, echo=TRUE} -fpcaObjFlies79 <- FPCA(Flies$Ly, Flies$Lt, list(nRegGrid = 79, methodMuCovEst = 'smooth', userBwCov = 2)) # Use 79 equidistant points for the support -CreateBWPlot(fpcaObjFlies79 , derOptns = list(p = 1, bw = 2.0 , kernelType = 'rect') ) -``` - -As the `medfly` sample is dense we can immediately use standard multivaritte clustering functionality to identify potential subgroups within it; the function `FClust` is the wrapper around the clustering functionality provided by `fdapace`. By default `FClust` utilises a Gaussian Mixture Model approach based on the package `Rmixmod` [@Biernacki2006], as a general rule clustering optimality is based on negative entropy criterion. In the `medfly` dataset clustering the data allows to immediately recognise a particular subgroup of flies that lay no or very few eggs during the period examined. - - -```{r,eval=TRUE, echo=TRUE} -A <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), k = 2) -# The Neg-Entropy Criterion can be found as: A$clusterObj@bestResult@criterionValue -CreatePathPlot( fpcaObjFlies, K=2, showObs=FALSE, lty=1, col= A$cluster, xlab = 'Days', ylab = '# of eggs laid') -grid() -``` - -## References - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.html b/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.html deleted file mode 100644 index 4f77b6b1..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/doc/fdapaceVig.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - - - - - - - -Functional PCA in R - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
-

Overview

-

The basic work-flow behind the PACE approach for sparse functional data is as follows (see eg. (Yao, Müller, and Wang 2005; Liu and Müller 2009) for more information):

-
    -
  1. Calculate the smoothed mean \(\hat{\mu}\) (using local linear smoothing) aggregating all the available readings together.
  2. -
  3. Calculate for each curve separately its own raw covariance and then aggregate all these raw covariances to generate the sample raw covariance.
  4. -
  5. Use the off-diagonal elements of the sample raw covariance to estimate the smooth covariance.
  6. -
  7. Perform eigenanalysis on the smoothed covariance to obtain the estimated eigenfunctions \(\hat{\phi}\) and eigenvalues \(\hat{\lambda}\), then project that smoothed covariance on a positive semi-definite surface (Hall, Müller, and Yao 2008).
  8. -
  9. Use Conditional Expectation (PACE step) to estimate the corresponding scores \(\hat{\xi}\). ie. \(\hat{\xi}_{ik} = \hat{E}[\hat{\xi}_{ik}|Y_i] = \hat{\lambda}_k \hat{\phi}_{ik}^T \Sigma_{Y_i}^{-1}(Y_i-\hat{\mu}_i)\).
  10. -
-

As a working assumption a dataset is treated as sparse if it has on average less than 20, potentially irregularly sampled, measurements per subject. A user can manually change the automatically determined dataType if that is necessary. For densely observed functional data simplified procedures are available to obtain the eigencomponents and associated functional principal components scores (see eg. (Castro, Lawton, and Sylvestre 1986) for more information). In particular in this case we:

-
    -
  1. Calculate the cross-sectional mean \(\hat{\mu}\).
  2. -
  3. Calculate the cross-sectional covariance surface (which is guaranteed to be positive semi-definite).
  4. -
  5. Perform eigenanalysis on the covariance to estimate the eigenfunctions \(\hat{\phi}\) and eigenvalues \(\hat{\lambda}\).
  6. -
  7. Use numerical integration to estimate the corresponding scores \(\hat{\xi}\). ie. \(\hat{\xi}_{ik} = \int_0^T [ y(t) - \hat{\mu}(t)] \phi_i(t) dt\)
  8. -
-

In the case of sparse FPCA the most computational intensive part is the smoothing of the sample’s raw covariance function. For this, we employ a local weighted bilinear smoother.

-

A sibling MATLAB package for fdapace can be found in here.

-
-
-

FPCA in R using fdapace

-

The simplest scenario is that one has two lists yList and tList where yList is a list of vectors, each containing the observed values \(Y_{ij}\) for the \(i\)th subject and tList is a list of vectors containing corresponding time points. In this case one uses:

-
FPCAobj <- FPCA(Ly=yList, Lt=tList)
-

The generated FPCAobj will contain all the basic information regarding the desired FPCA.

-
-

Generating a toy dense functional dataset from scratch

-
  library(fdapace)
- 
-  # Set the number of subjects (N) and the
-  # number of measurements per subjects (M) 
-  N <- 200;
-  M <- 100;
-  set.seed(123)
-
-  # Define the continuum
-  s <- seq(0,10,length.out = M)
-
-  # Define the mean and 2 eigencomponents
-  meanFunct <- function(s) s + 10*exp(-(s-5)^2)
-  eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5)
-  eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5)
-
-  # Create FPC scores
-  Ksi <- matrix(rnorm(N*2), ncol=2);
-  Ksi <- apply(Ksi, 2, scale)
-  Ksi <- Ksi %*% diag(c(5,2))
-
-  # Create Y_true
-  yTrue <- Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M))
-
-
-

Running FPCA on a dense dataset

-
  L3 <- MakeFPCAInputs(IDs = rep(1:N, each=M), tVec=rep(s,N), t(yTrue))
-  FPCAdense <- FPCA(L3$Ly, L3$Lt)
-
-  # Plot the FPCA object
-  plot(FPCAdense)
-

-
  # Find the standard deviation associated with each component
-  sqrt(FPCAdense$lambda)
-
## [1] 5.050606 1.999073
-
-
-

Running FPCA on a sparse and noisy dataset

-
  # Create sparse sample  
-  # Each subject has one to five readings (median: 3)
-  set.seed(123)
-  ySparse <- Sparsify(yTrue, s, sparsity = c(1:5))
-
-  # Give your sample a bit of noise 
-  ySparse$yNoisy <- lapply(ySparse$Ly, function(x) x + 0.5*rnorm(length(x)))
-
-  # Do FPCA on this sparse sample
-  # Notice that sparse FPCA will smooth the data internally (Yao et al., 2005)
-  # Smoothing is the main computational cost behind sparse FPCA
-  FPCAsparse <- FPCA(ySparse$yNoisy, ySparse$Lt, list(plot = TRUE))
-

-
-
-
-

Further functionality

-

FPCA calculates the bandwidth utilized by each smoother using generalised cross-validation or \(k\)-fold cross-validation automatically. Dense data are not smoothed by default. The argument methodMuCovEst can be switched between smooth and cross-sectional if one wants to utilize different estimation techniques when work with dense data.

-

The bandwidth used for estimating the smoothed mean and the smoothed covariance are available under ...bwMu and bwCov respectively. Users can nevertheless provide their own bandwidth estimates:

-
 FPCAsparseMuBW5 <- FPCA(ySparse$yNoisy, ySparse$Lt, optns= list(userBwMu = 5))
-

Visualising the fitted trajectories is a good way to see if the new bandwidth made any sense:

-
par(mfrow=c(1,2))
-CreatePathPlot( FPCAsparse, subset = 1:3, main = "GCV bandwidth", pch = 16)
-CreatePathPlot( FPCAsparseMuBW5, subset = 1:3, main = "User-defined bandwidth", pch = 16)
-
-
-

-

FPCA uses a Gaussian kernel when smoothing sparse functional data; other kernel types (eg. Epanechnikov/epan) are also available (see ?FPCA). The kernel used for smoothing the mean and covariance surface is the same. It can be found under $optns\$kernel of the returned object. For instance, one can switch the default Gaussian kernel (gauss) for a rectangular kernel (rect) as follows:

-
 FPCAsparseRect <- FPCA(ySparse$yNoisy, ySparse$Lt, optns = list(kernel = 'rect')) # Use rectangular kernel
-

FPCA returns automatically the smallest number of components required to explain 99.99% of a sample’s variance. Using the function selectK one can determine the number of relevant components according to AIC, BIC or a different Fraction-of-Variance-Explained threshold. For example:

-
SelectK( FPCAsparse, criterion = 'FVE', FVEthreshold = 0.95) # K = 2
-
## $K
-## [1] 2
-## 
-## $criterion
-## [1] 95.68368
-
SelectK( FPCAsparse, criterion = 'AIC') # K = 2
-
## $K
-## [1] 2
-## 
-## $criterion
-## [1] 1004.783
-

When working with functional data (usually not very sparse) the estimation of derivatives is often of interest. Using one can directly obtain numerical derivatives by defining the appropriate order p; fdapace provides for the first two derivatives ( p =1 or 2). Because the numerically differentiated data are smoothed the user can define smoothing specific arguments (see ?fitted.FPCA for more information); the derivation is done by using the derivative of the linear fit. Similarly using the function FPCAder , one can augment an FPCA object with functional derivatives of a sample’s mean function and eigenfunctions.

-
fittedCurvesP0 <- fitted(FPCAsparse) # equivalent: fitted(FPCAsparse, derOptns=list(p = 0));
-# Get first order derivatives of fitted curves, smooth using Epanechnikov kernel
-fittedCurcesP1 <- fitted(FPCAsparse, derOptns=list(p = 1, kernelType = 'epan'))
-
## Warning in fitted.FPCA(FPCAsparse, derOptns = list(p = 1, kernelType = "epan")): Potentially you use too many components to estimate derivatives. 
-##   Consider using SelectK() to find a more informed estimate for 'K'.
-
-
-

A real-world example

-

We use the medfly25 dataset that this available with fdapace to showcase FPCA and its related functionality. medfly25 is a dataset containing the eggs laid from 789 medflies (Mediterranean fruit flies, Ceratitis capitata) during the first 25 days of their lives. It is a subset of the dataset used by Carey at al. (1998) (Carey et al. 1998); only flies having lived at least 25 days are shown. The data are rather noisy, dense and with a characteristic flat start. For that reason in contrast with above we will use a smoothing estimating procedure despite having dense data.

-
  # load data
-  data(medfly25)
-
-  # Turn the original data into a list of paired amplitude and timing lists
-  Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs)
-  fpcaObjFlies <- FPCA(Flies$Ly, Flies$Lt, list(plot = TRUE, methodMuCovEst = 'smooth', userBwCov = 2))
-

-

Based on the scree-plot we see that the first three components appear to encapsulate most of the relevant variation. The number of eigencomponents to reach a 99.99% FVE is \(11\) but just \(3\) eigencomponents are enough to reach a 95.0%. We can easily inspect the following visually, using the CreatePathPlot command.

-
par(mfrow=c(1,2))
-  CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), main = 'K = 11', pch = 4); grid()
-  CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', pch = 4) ; grid()
-

-

One can perform outlier detection (Febrero, Galeano, and González-Manteiga 2007) as well as visualize data using a functional box-plot. To achieve these tasks one can use the functions CreateOutliersPlot nd CreateFuncBoxPlot. Different ranking methodologies (KDE, bagplot (Rousseeuw, Ruts, and Tukey 1999,Hyndman and Shang (2010)) or point-wise) are available and can potentially identify different aspects of a sample. For example here it is notable that the kernel density estimator KDE variant identifies two main clusters within the main body of sample. By construction the bagplot method would use a single bag and this feature would be lost. Both functions return a (temporarily) invisible copy of a list containing the labels associated with each of sample curve0 .CreateOutliersPlot returns a (temporarily) invisible copy of a list containing the labels associated with each of sample curve.

-
par(mfrow=c(1,2))
-  CreateOutliersPlot(fpcaObjFlies, optns = list(K = 3, variant = 'KDE'))
-  CreateFuncBoxPlot(fpcaObjFlies, xlab = 'Days', ylab = '# of eggs laid', optns = list(K =3, variant='bagplot'))
-
## Warning in CreateFuncBoxPlot(fpcaObjFlies, xlab = "Days", ylab = "# of
-## eggs laid", : Cannot use bagplot because aplpack::compute.bagplot is
-## unavailable; reverting to point-wise
-

-

Functional data lend themselves naturally to questions about their rate of change; their derivatives. As mentioned previously using fdapace one can generate estimates of the sample’s derivatives ( fitted.FPCA) or the derivatives of the principal modes of variation (FPCAder). In all cases, one defines a derOptns list of options to control the derivation parameters. Getting derivatives is obtained by using a local linear smoother as above.

-
par(mfrow=c(1,2))
-  CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE) ; grid()
-  CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE, derOptns = list(p = 1, bw = 1.01 , kernelType = 'epan') ) ; grid()
-

-

We note that if finite support kernel types are used (eg. rect or epan ), bandwidths smaller than the distance between two adjacent points over which the data are registered onto will lead to (expected) NaN estimates. In case of dense data, the grid used is (by default) equal to the grid the data were originally registered on; in the case of sparse data, the grid used (by default) spans the range of the sample’s supports and uses 51 points. A user can change the number of points using the argument nRegGrid . One can investigate the effect a particular kernel type ( kernelType ) or bandwidth size (bw) has on the generated derivatives by using the function CreateBWPlot and providing a relevant derOptns list. This will generate estimates about the mean function \(\mu(t)\) as well as the first two principal modes of variation \(\phi_1(t)\) and \(\phi_2(t)\) for different multiples of bw.

-
fpcaObjFlies79 <- FPCA(Flies$Ly, Flies$Lt, list(nRegGrid = 79, methodMuCovEst = 'smooth', userBwCov = 2)) # Use 79 equidistant points for the support
-CreateBWPlot(fpcaObjFlies79 , derOptns = list(p = 1, bw = 2.0 , kernelType = 'rect') )
-

-

As the medfly sample is dense we can immediately use standard multivaritte clustering functionality to identify potential subgroups within it; the function FClust is the wrapper around the clustering functionality provided by fdapace. By default FClust utilises a Gaussian Mixture Model approach based on the package Rmixmod (Biernacki et al. 2006), as a general rule clustering optimality is based on negative entropy criterion. In the medfly dataset clustering the data allows to immediately recognise a particular subgroup of flies that lay no or very few eggs during the period examined.

-
A <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), k = 2)
-# The Neg-Entropy Criterion can be found as: A$clusterObj@bestResult@criterionValue 
-CreatePathPlot( fpcaObjFlies, K=2, showObs=FALSE, lty=1, col= A$cluster, xlab = 'Days', ylab = '# of eggs laid')
-grid()
-

-
-
-

References

-
-
-

Biernacki, C, G Celeux, G Govaert, and F Langrognet. 2006. “Model-Based Cluster and Discriminant Analysis with the Mixmod Software.” Computational Statistics & Data Analysis 51 (2). Elsevier: 587–600.

-
-
-

Carey, JR, P Liedo, H-G Müller, J-L Wang, and J-M Chiou. 1998. “Relationship of Age Patterns of Fecundity to Mortality, Longevity, and Lifetime Reproduction in a Large Cohort of Mediterranean Fruit Fly Females.” The Journals of Gerontology Series A: Biological Sciences and Medical Sciences 53 (4). Oxford University Press: B245–B251.

-
-
-

Castro, PE, WH Lawton, and EA Sylvestre. 1986. “Principal Modes of Variation for Processes with Continuous Sample Curves.” Technometrics 28 (4). Taylor & Francis Group: 329–37.

-
-
-

Febrero, M, P Galeano, and W González-Manteiga. 2007. “A Functional Analysis of Nox Levels: Location and Scale Estimation and Outlier Detection.” Computational Statistics 22 (3). Springer: 411–27.

-
-
-

Hall, P, H-G Müller, and F Yao. 2008. “Modelling Sparse Generalized Longitudinal Observations with Latent Gaussian Processes.” Journal of the Royal Statistical Society: Series B (Statistical Methodology) 70 (4). Wiley Online Library: 703–23.

-
-
-

Hyndman, RJ, and HL Shang. 2010. “Rainbow Plots, Bagplots, and Boxplots for Functional Data.” Journal of Computational and Graphical Statistics 19 (1).

-
-
-

Liu, B, and H-G Müller. 2009. “Estimating Derivatives for Samples of Sparsely Observed Functions, with Application to Online Auction Dynamics.” Journal of the American Statistical Association 104 (486). Taylor & Francis: 704–17.

-
-
-

Rousseeuw, PJ, I Ruts, and JW Tukey. 1999. “The Bagplot: A Bivariate Boxplot.” The American Statistician 53 (4). Taylor & Francis Group: 382–87.

-
-
-

Yao, F, H-G Müller, and J-L Wang. 2005. “Functional Data Analysis for Sparse Longitudinal Data.” Journal of the American Statistical Association 100 (470). Taylor & Francis: 577–90.

-
-
-
- - - - -
- - - - - - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/200curvesByExampleSeed123.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/200curvesByExampleSeed123.RData deleted file mode 100644 index 165684e29f1544ad1674ec78484be16b757f7394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759158 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�*_u3?$rB{GN|V%dMI_r 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௎QSYaPd_-L3TUiQ_Y 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�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

az=v41)$_ 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 lS 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 @aqn=U zDSKb(Pahb14a(L88!8n+g~~5>jj(g7Jn&eqTv7HJ6-hTGPW7=G{nBcP3V6t<$gTmY z4c4x{U4SV(dmY57>8n*_349sb>_M}Qr+~JTJS&C9r#~Dk!ZSGjV3I<&O?Z?Ob~q2x zy@%)2n8;A!PDAYOokTewqF@oXOAnX%sM3Tz|uy%(KM^PulxHht?kzP6F{z4};uC=*#-A(t*h`#E>GgfGLI+rNMau5E~( ze>~4n6*!j#ikr5k3(0Qv}vsi=c-rPBx=IHST6km7U8GE@) z-ihW8uR~Acn@~tB50F=c)j=0sS;Mty5KH1$VkmcisytFZ#i>Pq+KoVTV22 z&W=fILpU#XJA3Uwn613J97coT!M1f~)kb^#PT&)_7r+g2m9lWsp&z|d2vZMi*cIZJ zkjO5N1MytcV(8=q-Kji%9^dgd^^^j|J@i(0<|yxMMDkzA=83y? z8Ea7g$6T<>5Qy5J6{M#Iq9k&G-coa@cxcnz(X%!geYgVm9z)S4Aegr;fpY2851&q`3upDu|1} zTM2TyVRGO(X*bc9$8-FxJ3KM7W^7Vf1CYZJ%D={VKy{U(8I0~{6gKr1KVQyLSbvL+ zFLRoVfWv&>J|#mZ9F_KHPxBBlo3>MqEcBVv2E5*7G>ceg{$4n?%PDFS{h9UTN5;WL zPbX7>p6r{?GNlcT%AUQ-*P(Bn8KbB?ns~*TVaXu)`~!S@bDOU*x5f9osleVM7( z?3d5R;YpY9kIld3=mNvRh>!QLpGmTNz-O=~g(G16#+j0%)|y5^Iq6n&+r-R^ zp~xg)j>DuMk;8r)JJK7kR4anHzz8u8OfbyGnmxzUcqbpH`m@Sz{`Y=CDQ8SvH@0lg zX3b8S*kNHEk&kBz+$*_11qU(X!l?q=7e%(Tp)9q{`_SlB*_?B)W&fosB1e2>R>LXz z*nMV$=}M2Rb#ALt(O-^4(yY}^X9z;2kr;-w_S7t|&Hr;=vd_GHfxbSeUte~%9@WL` za+_Ky1^*&GyN;>_#>h8hOcMMGNUpkbb($HUdjv~A8BP(%esFX?{wc`C%QuUZ| z-T(*q4_vrLP^J@Ul^aeF^tZZ^9+z3n7<+zf<34ThLgRY=eH3%|(RTzSJeo+C1I?KRJa z(tz3{*ir}YadPB_ON`6tR(+Ie-!>i)sffOpm6nUffe`Ae2H}(4P!lFkZ{ng=5wU~bsL3_k6}pmk*_S)NS` zKIkeLrE7xp-!hhRGeLQ2MZy-E*9vy>Qz}eZRK2-s;_TAABl1ro#mAM$8r1spwrSBr z@^Oa~Stww2L$>7tc)Up1W4Z1O3*pAVu)+Aq@WzJ97peo3Y-1q2JX$MiLBJsCF$dV9 z28*n^;DT%GFuoPy3N3O%dhB|iljzW>%n}QjWwyXBg>4{)kJX4Usl4>j8A7&tY^|kO zm5AIEeAWA=Lh0@~Jm!_yiS|@yHCf!s%?UA=?JRvEZA7^{zMo+sWH)fnD-eepi*%j> zXIe0HSpXIk`sA(0Cu=b?qzDd+X$z*rp^4ME!|M!7gY|Q8|JJ0HUhPt?P3lI>vI=yC7EyT5-e~u;b(> zxvlQT+95C6yj6fk3yZdBtIOTYcAq0gN*l5R8GS@%(yz66q7w{$&D*yC0us{-cCEj}(kk%Tx!zJ5Tw z-7?JW0`?fufI#qwoKqKBf-Sj8SOPxPABrXu;`}eP|KjYy9BWQQ8EwU@zPnsB#EMx* zriqQj&Mi-uRV=h0JN2=fY3AtB*M7dRL|Wpeu3uo~aM{FMnu*5kQW)8a*HAhtw#3-d zguI;#kyo19chKw7>Rmv?lvPX)-OGT~oJ(B$B`d^KSgm9>S?Xbpt>vH0h_du`U z3G0#2LyP9}jd;G(y3!Dfcw&Lu%UPbe?6{rVnq_@VSAUp;C2>PHMp*9fp^*mTw zekr7|(Z=D{o0YlMy{G&%Z4wjV@P)cWVLUGH6hwktYy^B2C@1lUUn9n6|ay8Y;T-S$mx z*1%{7Jt|0T88K^-`j5)Fuw6Fbk~y`DL{)IUqDbKDUmJs}I;~U1KcmbC=t=3BM}`&B z;N}$Tr35!n(N_J*z;+rmuGmRCqBt78v;g&&kCy0PXtajp|M03JB>=^n$jPbXlS4E> z;etJNTcPNholNH2;b;CZg*YvFU0eCV|Q{uS}N9TSjS|BY~yLE-L@+bWqPdv zJjSqAT5!fN{P)<`*{s;VFYn4!FfGuuiyH(^TU~_`73~zK0v8OB9%s5fS2yyCcD{}r z-RG$qzX8uGP&9+f{9mRfipPwnb#)HCl2KSxW$?Q`aBHDgOyBl}2fI(T3mW(6wPj&1 zwEW}Y82Fn7{}U|y!FzG!9XAis@K!r4Z$Q#6Fe^nPO@_F@f80G=wKWF6yL&~J{8&Sd zIabS9;FlA|tt6`3(@hPJGgx5o9oc^89Kq)WPLwl(sbb zEOAG_R23baqxt1*&R>dD!dIS zBFhEloJ8{_BpR~vQKq6Oo#Q3(Q$6kB3|FKULCtjFCXZE5_dfUS!-EVL(lTlSXfPM#nJcWFdVsV#7SQMbpzSewc{cGGBF$i3q^e#h zIO8dN1~i|L^Hc+H)oe9}l43@5m8f{cnkqb=QXUtXz5NWyS65G6$$(_=G6a&7*hg=q z?MgkFE%2B5;DHy8tD);_UANDB&&Hg96^)jdq57&EEjQD!)RV=>JGeC?A%hv~S%{v- zTYs}P)5d$gyt-xL!I{rHic3+5wW@a|JM^TBcayNLrS>#qqwF55372NWU07k@2Pf2K zne%nXs(AnnFdxbHiR4nesX3Cwb!Z1bt*W?&Wbf8h_sl{9wRtqD6V4z%xDu7s;oL{G zwxu6GCdbydR^KG=MjEV$%6woZ8#Mi8l~k0*q>YUw&;@K5B>XlD@bco)2HSo0=P*I9 zIIWYu%a)S!T`oyNW@xG3N+l>FFMmc)X!(XfnG@^Gj5B5n zx;VGI@P3zRgxVZAVLu-1K3ctTpC)Q#wyt|V6GTooOB)cIQ(mY|4DK@T^Q3EWbPgTd zAn2y4h+y=(CoV$`Ofe?No9oW(B(42RI_608ANt=Y|0~XeP20`MpIeXI;n5sXtN-M5Z&2-a^tRxI;R3;AO^HG*WTuYd@ERz&%e}nUEjo6774Kl6>s> zt@4GVt8RgX@c5y?zj?u`G8=>c(weG}QD?;q+VH3xaEQsmor8V6dB)N!hAIr?tpi?e zn5jIQ68>5i76p%sO|eIKs0e!xQ8!it2X-4f`bc{*&hM26xb*z~+vQ=l!hWK8HR(Hn z;@NEXj((#AR=F#5TugCZpHdj&uZn1+zgDdUolI{M4<8xu*yT2No{&#{Qdrup`q`v)j0EbZpD zwNgZ9+H(XRj9Q5))a7;@G@g2yW)li0ejGxxk}xmm*;~RP&Guezr9-OJ=F=)|yF(wB z``%3a#G{>^c0$kQ3}P8^4fNC!dU33l_UW|>Vlm)5JRFC=;oM5uhEHb_2p7FKpq*8NDG)A8Xr8uH1_W{JPMp7GFa-4;7@cAV1X#*8zA@Tj2 zNPwIE2k<)^fSRiX^jzT#Kx9uF&sDjY%n^TxgKTw!G`oV5dIHd_Ny;5+HadbA?h&8)F!M4exCeU;R)VNm}h_+upe2pDRfKo2U6Ykmnep+ty3f>ZaB z6pcF1KPcINq^JUW(1;(9|5(hsaq55%Q(7u7PfOWx0U_|+V~WkDIKA#VhpCtjiZ~ZS zg(Y7T=}6#<)0(aMh_`cw-N}cWa@~qoGH(5`20(_ zyMIm%I_l!PN4IM+C{~LYRZXB2p@cd*JDWLc{5Xw3mT1@Lh1_c@;&Hf5k=@{uf&DS;T_IdwhRhey})6V^=D?(P_bondN!(rhC9%+94 z6NG`=#qdGEZJ~UY7fKXiD03^&WKD{VvDBMNX%5C+^jMkX;~Il-hp|g`g-onX-YEA` z7^WzsjH2C(ON2J&Q+?;)mY1A5E}?PEZ*m_@mz$QUVJhdvS^Rn0b^K0#u&mPgh(Bq-!Ta?N=x;isf=oshc9s`6fV+l_`dL zbH8DcA6#p>pP}?*e5j|*-bHT!NuiH?u6F?$!iFkWk6RCxb>vg-YL7hpbmd_n2#R5D z>0v=)HZFwE@Z)w=1*)>_{+|v5<@n=lZLdo-Y<0<2s3eJIp)F6Z?;V)D(zXl5w-Xme z3JX-HwHPUa?QuN+f`+h!$bu&S95&b&d?aiJPl2)FK25&+4Qi~|c7+H2KOp?cf5KWV zj6|fbdTSoC55eTt+5afZpe2u#4^QL|2R|Aui?!f^#_Ye`Y*3#(_pwyXW_!XJ)~bO| zq%TY{jvXx4&_+h%Evs^Ddl&sZ(t6dT{ss)n&D}_Y&tts)K4n-hcVhLZ-okK3FixL6 zTh2EIn|Mz)6KppmHF|)zPllT-YtWKlE3yAUhX?mhxWO@&c7e5c)XB`i-TS(@LKKDU ze;XL`Z{xo6K;*&)Cas)`HE6k2jU)|prO-R7%k;@cELz0fj)o{wsAI#Grx>q-iv%_lflH!rpfC?9tD@)T2w)Oo%M|RT?wMbiKM`wR>!E^gryy%z<;aSkNPK2K z=(Ht(fk1e7W32F#z3NZ@N;{UR?z6E%yg+ECVYAtU^E^xz2om5DNyplEIUExrOkS>K zPNL_doL>ukE5@v28fmS1b9MYAG4*Xw`}_s=F!y7pO3Bc}Sj@+|oe(-6dB~gG(MAn4 z?QWf&mjEKL3MPshfK%aq&#iA?%tV8^g}TH3>&uPcUAAllz~jj7j)J@HMgF7um@s8R zg|}Tt0_9vufz5#un@*6D4Nk!g-?9QN4g(_Gp=f)aW()XK;3gAlu3fCICSDDM8$CM& zU$i4*o-QUsoc{Z?41`7=vhs^JX#)Ou@y|b(Jy{9{8Au!Y-VogcL?z(h4q)^~O5g;H8lOX{| zK$43*w5lbqG%_Y~x}~J#_lq}-nMHPki$^N|{X1cM_gCH_@z7z7P!O}$jfA%*@#&NB zDk9TQSn!r`ioK%GoN%u0Z~!OSaIp{;Y6YGcj~nZK@3!U7HMa__ja;b1>vijxR6k>L zd8_$2#lcG1v~0^*5eeJ#eRN*dsLD1{KY=&A?^3FdC4Qb_KeQJBnnxHC_3AgJ0OlZ> z5=hSYgjTzle>p|>#@VQjix-FR_iAWX({-H2p1U83sj2WM>XxNq9qQg1nSMHmAuFi zSKz8!L4DXrRht5kH9$r`#^B@0f#HWKEw|H!w#avex<;o-G%P`Ed@?{Tylk{Ivj8c2 za(NG+F7F*aSt)LVB0Yh^$AjLQ=u1*&2gLM z_@;7xuvddx1$sM&wy2;`1V!rhVIH|(BBD)X3A34P92btCBfksQFgi>1)By>STU#CMH2mlW-3 z5WhB~e)dE{bromo@Qd^#XE|#GZH)SlPrb0j&tOD+=zm>_`mZGJ@{Xfuf1%tZ)k7O? zNf$W>9}AfqqlL%lnJRz0Acv2o`%7B@L@Bz~hUcxYe&0FzvY<*7TG!u8xkD4|-1`9M zch*&U%{ygnharDcVB$?Aq!oVSzS|PbQCRg$G-&fDjrrl^vLhwZNMu9sAf1C)@ zQWSuv68Hmj?^#SbsSGdA4aY5RvGZ{n_$FTo1L|rvs7I)l>&Rn*1}(&|dQUP1iAmd)I;*nvMJrTP4Ye{bRx*e(Ww|PD!YH zp9s_5Nz#11^^_b>_??GfRd`)l8rQ78=87T;YnCflHz5uQ!(YljdV?ZTFJ}Yz7m6rK zC>y%zAqnsLg_&TzM8rjt4|Fxr;&c)Yo5N#^n#8snc?MAkY0kf`(wfcjcolg&EhAdL z%(7(i6C%cqG1S{`fr6z_v}oOcj@CbfW*T2TPzjA@Mpy9pL`sSeC5K}HJCtq(S^WDQ|bt0s{xbwQ(R$t}LS0)r)$(w+>T(8@pRhDyZo z1m+EL&Kn^Gx|UD)pFNZL7{NN!Q2G90X!@X#iUa$e%NNEQ^}IAH0l2|KS<9YlZJ3>{ z?YQ~nF`1l({COg1W#GTA!}zDYGaJcTIe9oIoA;>$SC$)1;@2(RRd`Y?JPiShkPcCw zpm|T2UIWf|aYsRTC$BB>fe44atDMQ2{AsA!cF=q?A)2@6_iIb$+dW(8;sRjac6kQmz2fPTOjO*SUKz{>jTPaYmG0gyrU#^|QV0{lKpo zYJq_MwGFI-{)b>j% zk5<$f^Asejh^z1S!teia-A_@~hKG(o^v&Czb-SSSG)P3?_&(;6E zHmyFso&mcK1HuLFpz#UTV(qfN0+1N4YVUub$-#NJ;#wli$C|Au`jQ`Bhn>#Fz9DRu z^AzGsjz(NR9K8}M$&9R8>fUJQjZ47f)oj7m2)yp9FPqB6W#vaFkAm0|IW!$bF9rhh zfnxg|)-j~>`&K6Sw_ORR#S^h@b=%7B&jlXGH4hZNKad3bh-NVbC-66(x92H*vv(c) zK0uK30Ar;r{s828fC(E|9gX1ACfV;Q0*lr7ditrw6a!krrXCFqb;MXL{_-}>D!Qn| zq2)K5LR8Y;vB75l7nKxn#DSRqKK@(F+0(6!kW4IzwsXZ|56l~Ud_prh| zeWh4*I(e`kgQNn&OaWyNO+sekeoWi@O-!aX7KbU-S866gQ>AA5j*Nmtsmz^I3^jHC z4B)(`IU!S>@tX;$u8cyy0rAzUrLuwxdbiCFKJ5SWD^zuW7mQ!8v%9^n1>eg@FH;?_ zbR`v#mHpGad*U*=NG*NH(#gve@#(MQ{1p{8tAzo@n~0M(E9>k4L6NTKzt@ATEGnd< z|F&zb(I*=yvC*xZAPa^&?koBrgs#Hs*i5yCD!$&|eA@(Wn6Sw*^#|bmfdZ@cZ&;9@ zr8<2;g}~5(alWz(K9Y~Rj`*BfcPPNB|4d(84SC|93@ebTdEQJ4I|>LeNBg>;^;jBh}g z?5th9j_jVoE8f0eE`uZ-84kZn>^?;)0zBoICuF+&R<1mFCh7!eHPy)ku~ zNX0H&FVxBvG5El55zjV$2xaGy0rPgjD&@M1p93?6ZmIn*1Fi4|{0Y@=44Cf2{qyeU zw5J!YZhwcr{35UR+0^@R+>KhOrsTIpXA`%1%~es}PSY%a@dd$+J69{lMOGL)i>;@D z(wt#=e_t%tt}yz2>Zem}VfSfVig2aqF+QKnr!k&k!g3s0rICqb;nmIxkSIR5F+%&Tbllpec_dB9kb2`H$4n{6f}X2F+7ycI~WGnD2Q!a%~-$H@46ib zR|f9~yr}AP*(93Zzn57W>rd}|II1##!~FeZQ`IumS!4QqZO{Mhx%)}|bQ^*aTsVJY zO!SR+5`EQs3$nypU)Z=E`CCChnx7L3M9If^1+FqMNVTU_>wAI!&dr%c#JTNHUD#^; zJVRJ1>87rh9`tY9o7|*Z1#qK#lmNFg7Gnkf9q?=qX{>B~a_z0#!oFcB?4+^6gz$dp z^mm6CCTlht67XG@P3*&x1r59)n~_ys4y(>}C1@2jzseXz(!HJy8KOk`l%~Q1Cl)X! z^%O{P?^PLCM@IEN-(F+r_6u%3pDYKjssX;lu<&Kaq*<6#JQX`;!WYmwkc=G*S#mHv zdi|I%^rGGVU^qwmQ%K-*PiGE#^gW+_S8Dv_nSs*N$`SUk?nE{4ujx;<&6RJZ(V@4+ zoB%};)Njhgrsj({L!GX>oI+Bhv2*Bou5J@gk@?rl22Y5wdvuQ{e~;Y0^zd6c3LyS$ zzsU_={xR-!Koj=#V7Mj)R0|sHG9ND0zqx${P)gxb>w^^H-`+%PhdC)C2k?5$DeVrbZmWH{idKE#Gmc6 zSu{Ld__5-5t`)6h!7knmP0nN3KjUZET25)kfG;QFE$C!WhvqwaJrj1uxq-b)*Mg|A z$bSFszH~w`n+>K4oG8DkLa|=0n17CO^>A%mQUm>fdM7@v0ReucUSAKtetzl~TwK|s zN&!~4H>lu__#Wo9-(+!On`nCC1CU>w1o6|Z>mw1uee@)jp}#9+pcG+yVkBkB$?Fxu zV$S3eeP-R0v%MP}Bd0!gB9{+_k3REd`Ie`2&93S_3H?XX^) z4=wTZ%FA9cWrhK{l*R&o=GijVoK%PS*y@-i?Xmxae&cGaKM5vqHUECcGWbtbt+Y!k zX#K)_Z^jL(Snpwn8oU^M+GTMSZe~S(uJv5Spp8|0Cij#wLs6Pu7Ho-)p$DMnPfkN* z<#$jzuBVI2GyWi;P$0)kKfbySfHo~CAmWpe6|HsL)6_8`9r694Nl5D_YHvRy8K}n_ zh3)u>$^b_mSek&(o{i#?QQWutK1Go)d=ZeQ!7&18L#Hw9ML}%qSV3=g5*rR&es|Mr zqi|`xU5)v>OR-;$c{56jh}98UoG^@zg}yaIw$_M(wcc9Z65)|JjxVpm#uOqEumf^s z7nO+x4YV(P!2i&KiPp#ef|1Rc0_%~!inE!!UDz(RCH4xUOfbAA`m=dm+~vrVzxtk+ z+8=7kSYFX9*84+DnA&>iS`+`!!>ey}>_(Xorf9m_O%VUxy>&PbCnPgZRw{qLDqx-{j-;`B;58GH3Z885X4aA+(dfQq_C-<45VkshG73{a!rMp^PD%VdGY%r^hO&YD zGpk%fDz=dd9=%mWD^JDq%CrcpMK82|o2t(1+T)%!JeaUSA6 zmQu!SiiFt-i z3cvA-{u*m!bM)DSnr6J9%OnSE!7A58!RlT#GBS}T`;8B|D)huYa@*@>Zj9#O*DkM_ zq}Ky{MJ>IZ5PPVAYnQC9Ln4 zyDX7>leC7iRR|x?QvJdKWN&v06x>qNsv&VWpclrKzfdg~r;5v#N%b;Lnr2|2gz@b0N5tjyQ9 zn*Xnes$rDpmyGRKbWYX`T6My$#N#BD6VO6iPAB@W(;cls(r;$o=?$+w_6s@A=ri;@ zOeJ4im2c_f$994KJX%{98G1TASx|PG^ptE8r%DXjF9jVgbX&zT8!Mq6(QWs6Ix07Z z%1uQ{|Ju~xx5J}M@)M4E*$t9*CP6H;hfl+mK;{ZDP`NLn9L z8{@9NeI1qYMk|am5ZI%UxlBN7b_Q0@+hZP+RilxLWJNGQ5T78v&=ys?;>melIm3MmcL10apDP9PB0R7486(K>I zow9>K0MhmI*b6~JwPP`N|Fp^_zs7tD)=FJ>JDRcMWpw@oD z^-I948Qc+@0AfIf2i9XqK7D99U$fFP@UZSl&w=N@)Z;JmvpNuStC0_JMeFuHihZWOu;DB6HI8z7@pDHh z&g!Nj2W?z;O`Tt9d8YGwKHPl=U%}QoIwo{HOjvi^vxcz1*&IcA76T|C=m3^vlC$*f zUrtHa7npfyB+=w2k3rr3<-0lmXPw}gOCIAuNB(vyBm9iWns@lAuX9Ay<;JpMDTUv^ z@T)-rOC=#hYM@D~4g+T!N^a9V*o5 zsQkU=EncVC#`<$C7i7J0^5|?2Q|WHSx?Rg4uH0lNsXMVg-``g4Nf`b4&9r`R*!s0n zmw!U|&QyUCt?zNc3}&~zmY>kh7A$yhUD?4ksT8hX69&%fA%E^)W>Q>>om@17rwDok zKMj-qziFq}W?w_g0Hgim_qR)pNWb2x=>9)Wsn3hY(SdR|b%jhNBM^3_+o^`4D8ySo zINZfjzgbt=t@I3khvRO|%W7E<{w8p_w|4QA^G#rTUw_wD9tAnTH?e|11_fUjcd9W! zIyTD5jsNKdll6{+VtwcYgOy(6hg1NoOzh5PvQBe#&^NG`!Qn#@?8w>%@}V-(_oyat zTI9ChNYw4>E2j{z|A_bg(8c}XdDQKGcoU!9RCF{I92fs+TNI*K_=OZ7--v{t3|Gkk zKWo?Z8`|v0;mFd{ujYHW|44O}t&u5dF;QoKErW@glcQ`5v? zCjS(_7^Ewx9F(9C*0%;FSDv>%YjV)C0Qy!A7-La7KrT+3EePFWJAw3f(b3>{$+lHtY7dUzl+02M9mxHqYDVxkCZsD<>}P z!Y|x>c3j`8g8+6>n~eMNdmS9!&Vv3BAMJb^4!Ape!fVnK0AI8Zt9o-~!i}I^tI$d{ z9flV$eY?6p81{2eZ^AzrdFV?<@p>KfV_{Yiy&W$2tEuR4C|dMppf!a~7#sbQxTUyF zTzn58tU*x@4t|(Q7t^y^SQ8G+Ki`{m|BvWtg8s70oU3Kw`|X1ORxMBKbPr(Ay!^Ea z^J27~YdwAf4YomVe!vBG6t+}=B?dw2+3KgC zsh49X+5JT8<^%Ct8!tOhA5!8|y5iVF4GqAII{9)VJ_`L8sYLbv0Bb(XFF-n4gSrLi zfrqZL{5ZV5oX>L2Eik@6W$Yt0OY`7r%U`GT3#%LOhK@>x6Jq~TAb*`-X7oSmJnjnib!1fETz!=6kPx} zPqLono))nQQ23(xeyXZ2!rGl$>?Z)7nwEi2&yoZqxu{bn=1V|(zeD{KX*J|~zx{VN zOkvh-Rey#1-^8ro7271GQGe5oKAzLuGk8;9&nEK~4`I{lhK#Rn0}R&x;p;5A;^2Zs z8{DCBm&TnyaJK|^cY-?vcPChI4est5w1MF6?k<7G8*6yq8{Rv(KjEx1s#Uf3_9%|w zzxkV+i7L{ds9u$v+2lGpQM7@p@zaQ~u0DynEFE8#pL+t35;Uy_&(TdwKcT^g^`R%N z*qf+#;%&^Ibe=MBGQD-|2Ohwf6?H%Z zB-AN6liHy^YdV;mKi0kki*^3ata5fy%7%~GHn z_R|+;`RJt`2HpEV`;{jU1-*50J*1&?zV`{5OfhE@L5%PJE}l|x1}a)OeYlC38G;{H zM(ZsEvSKYsW{l{Et#!1JO&DfK<8l>x-_seins%HSWq!GJC!Bv3r5#?%)o`CY8{}`+ zQ+SYK;^bAH68PxOAi8MoIB_=!Tl|$z_>o3*p^duOu`l(DhaE-uTwn4RkA)q9rU8!m z(vC`1oq*ggExF&k@-7% zu}V6yD%TFkAd8&5RPsLx91I`L&%IMA!NuLT^8G!DG#LJ}5z~3(78Om!6KJQ8!}((= z?c-)GVo=&*h9<3`cyREpZrSg~aZq|aZ#x4_9~BJ-f1KY1QPY1DyRfn8p`wo?K2f~l zprLo3?Cs$;#pNX45!;7U{>&t6C#uluR#eRWNa{ISr{&bj+xs*39fp&w&0^5zNX$$h zdk5*qe>>R~?6)Y-*i2*kwZcwE5l+X&@4qEbpkTj?*y)Gg*b82smXWrp*b64LP6$C) z)MXn*tn4B)bTiIs6CO)rySV>B-hnHyy_Q_b5goX@cP}KqM-hlmMPSj#Zec9{S}-Qt zEfglua$34xkMC)Qr>u?g00}e_ZI~o~`{pOyLHlDI_3g%h)TIO+b^xj6*?jcY`v;_M(A6DqiRUYhu@N2_3H78Mbsfw60RJrCM=lkFPL6YIrXx2}r4POzD!uXjEY zMU5=b{SmIN27sSJWxoJ-V)SQhlm`9R1=!WWLm#n_Y&W+1Ch;HrejF-5B3p;`g zvRaslx{Bi>5UKk|F?v>nB}D6uCp%k?`J}Zcx6XcSAW<9Swm5Ud{*-l)e^oW$%WTon zCz$iZPXkx}KI<0Adc*%nva@UMz(LNH?h_X={)p*Et8 zjnEqA0v}leeCPJD0NIbibb-u(eb_D7pUo#yZ+&nbS4W)yuNS-~JE&09N1nZdTRA+= z{GeUGwG36GkGAv^1XETQo{RO1vebUlqdA0>Om?ulEy>3WD|!&ZM-br{e)tlRKmDJ7 zz+xCv?-{B>B|xP~mthIdG|c-mz8<9{)#j~hrc2V!uk5CY3SV{$Am|3MCM%iuVr}cr z!mQ*H+uDo`*4%J0-$fD6a+~?55l&mO(m;ecyh0Vg895W!MNp!#4!fvlo>=!M=pt>#UZ7$DGG|q0| z@JOK(+BAddWBvMx(TiP_4^n}rdEDS^W63LF$teT;!}^Jtw|oC;+O=Y}oYb&q5j9O= z9TC-pQT5sI&Q$}uMuw!R&jq%KsV2g6KX%#0}lo}g7r#=ELzXVBoJr0lv)XP+8p#}P9@bEjqD>V> z%f2n01oudPuD+1xUuEFiq?7;B7w`Qt?B-0f8rM%f;d~Y*^7Q9l2m>0Ka<)t<#MOmc zxGJnfM2uXdPO^j4Oti{q|*edGY#6DBRKD*%&WYl49kH9lzVC z@F9JX5mpYJ+ZO2}>?S|>b^HX{)iYXeW_1+uMuIqOCe41@)&t!h<`C|7#34BK${s_0 z>3v*R^LVe|(xxgs^u?|g2NYNkd$;d=3v${G^=dzq|2g1veKmARPOyl`A%9XojKu7n za9m-dL>meb_OVW?MfCpBPSKI}7@RS{S}jN}r@v^>bWG%JTmRgCW{^bSy+r&Pn$i1M zb8M$|%{56RkT4o(QKA=wwux$N^#VRg66&AW?&Q&@i(ce#?COQ_2J?XZt&@&|yrEQb zXYAe`)!H6dzQGyoJoIm^0PpA0ys$mKzSln~I49eP#y=|l3*;u;7ngL!!+PgGzIRqh zJ|3hPoTUR9=8-{AM1m5p{85HKiC2c6+oqJidtZDpKqz|3QG5IMrt@FQd_1Oh@nv@= z6=)Vtj>OJqyA(+V|B-T0Z(vuP7+FfSUGQ%j!pm8UZJ#~>y2(E5LhRWrf{d56;cc!|f-|;yI#nOm68GO_Fc**`R0&^a5nPFOFG5+HQ#KI;0 z^|0#A5h*4*#%aAS!ag^8{5|G?U4bi_Sp$jqyqBWrWumxl*PC8V%0WMIeuVbiVfnNc zcnnaocT1T9lhbAKl&*l)2T4cF~rC+9GTUCpSg~hJo*&zu^g49s_ER zaZ>5d6^kBbO|^@pMCN=&52KT`;pVbV3(qTaWLntP%gfWxWLmyoyzQ&A&w1W`pF8Jh zj`FN(yOnelD}t_X#r3M#M}bxr$l5taqCh*Kom`G>33tQw3f`leq|*vAOyPLjt;_5Qowfbnx@ z=IP!B!LwZ*^IUVifFvaC%iKYRF&Q@S>%F0yw@9Ebxvj&tWi?8X_4Q~!0s@BgPW_t> zmI)>83j&Vlh?fZU3*pXPo(Q?jeZ9LIHY9=%vfbfZT)y(`0cRO9hqhuqku!Kb=|@{}Pb+yf*w`-=}^0B$oT;3Q)efIIvZ zY>t(~K>t`<`{zzNG1H|p#E1h68<$w>@4gR1RCKxqh0}iS;NkL=9!Sq;&|-=6B}HG% z%ueNT{{F%%suI5Z%3cL7s`BS*QgB#8)LH5Dg#F4Ju*{1k&i~0bER&saM^hwSUh$(C zO?kzE?vev?c}ZXPx^=FcW(@Py_pw2yn}?Bw4TGj!N@C6LsH(^ljWIsQhQ*hZvAmsw zR|5=BC%HFHk88D2=)UZi&(U<;}s;l#+ZTvTC+}H%ZrH~!klQZv6XPs9^ zCPm|YAQ~$FgR{up9W8E(HDSWH5spAM_J#k9(J#J@Y9iM=B}=wCe!*gu!lUJuG*2K8 zZ@VK_q@e5xRQzcqu}Z>_3+K?jNLu}lzY9cJw0URl;dy4Bmzv{83beQI_Ug_N zl_W;HRYhR9^VHw;l(}rsdWFf}XyMkW*Zb|`C`w*gmGE=L7ub657JvEoPF}Pew8PA@ z_By>*kfNtFcpKz0816(p=+d$Fd5Paj}7j5_@$_cQk!Y!}C&zzco^L zH(xKnAOoRL2v&-?z6yBnx?IZ@Z4U5t1hU(2U>2&}@kK|%O2#c22!3?Go)&oVNK2TR1o9)F}2NHU!&%e31EwIOYlt6r!;0H?VMXcx;luszOuC;Hh6 z1u6`D5O`j3-9O{5kHq4-o@>6*nhMDFJ!?TH&)<==Nn-?_aR8W8>@UzdxPhI4KY3_; z5>GQP2d-+BrY_{wpY8je3><$PiSrQ!^lx|#Il-HsU%(vS zGeymU$(pc4P_Y|z%HGr|flZ9(gXY5~QJJ1Lz1o|fl5p3?+o~O@_B%|YkH3mVb%XE) zO>9snO*V#|AG<><(A7M5+dfNUA<))DJ)zIB5L-Ks4@$K-aVcIavkl_$yc4wM{>)VQ zD*I@NIrwJIE+RmI)tEZvk*|^$zPh2oA~s4OZYWZ*$;61gFUpt0?t>&Q*+jO=)(@HXU}lvc}?ghd%& z%Jrzm1C3jV%16<>A*cuTztv5q5V;@1SYMFLw-f^L+m||X1!+g%^Vy5)Vc1OK8$_Yo zLWPtzGGhGl+oQOh?QP5514E*|iP{2rC#57lH{(1Vs~$-1WS5WqfI07M5HLY+2ZX-9_#7-Vj}paE z%KACN{Qff0WS^cBt|(ZX-1hOwLNs2L;#W_YqE=%CXj*v`-QrX_3PZ}OW?(EZL%`xU z#BBN^OVU$K*5$98{`zcW;&F#M3L*gi}`%ZM2wH8O%XN3rm^#)6pd!! zYxaW@>jkBS5WbhR!bez6_pE`vG3sFpJhH6?sSP(8K(z6fXD37{hHGxG{AiCDmQ8M{k`NQw^)Zc7@`58#nzW zbO@?MbfP-&q=|w0dW0mXU*l6~gpQfpuoZ7Nu#}pDHUqOje*xvkn^W`W?dU*d!e&IgfHApmO|*)2K@;aqnFoq)U~CyXf2?e2=*1=8|B#2BXJQ6 zDfdT7;)yZKOeO7Am^hUT`SadY5n})N~pRl z4w$*#R4B{qJvc%LO?~TgqgCpRa1%uy?faz%rfZoQK^KIG6TDU@?G0uPlDN1YQ-4h9 zJcr)*PeZjplGJ?N@D4tWscUWXrf%%qnFJg#24IW;2@RT6=|e=VDanSUoBOHFIMa>I z{pea*nAc3Hdu&uVhm{OoPd>ChQCw`BhJ8BQviLaxjE1n2?yWVsGOT#DfW0BaS2fL# z!wkU&G1MTPg1Q21jBM2*is!%UkY)GjetCpk5M zgD%mh138D+$S-%jw>y%VvC))eS1gsDa%v|2?slVbdP1?`>m*AI zzWw{^qLt4GTEKl0l)I^dL@5}X7`FY{-an1!7IUU zue0c2_o_=M=@aH3nQ(PRI{Dqal=sv(c7#o|%IZthn!X2N9?fd+JnlDGAPCmbd9SkG z#HS=bp*i3<>;hM1PJWJ#+=XXn7P$`mUctcSS;F3Kk$chiu(IwSw*%Nz&~Ik=D%poI z*}b)UD3P`Bul*mb?J3C&SyP_E4l8Z8SYjSi76}F%#0(XZlEb7ovs-ln8GGr$`K1yr zlziD>w1W5jTiZ*t-MsIy*?6J|D_RFGlLTDQ zG3Hu2DUp&`ZX^K0)m-t2WyFOXghJD2>DwbHS)1h%WAiT`&3|lvVwDwQE!L+Mr{*~s z8Cw@DWJ@T%F4EPz;s-PdsjpQuHP9MHK-rIdib+uDQ{7Q?wU9$~e{1HF(T`v<@MYoL zdpzo{)8v1~w*d4ywWattL<^#3%zV+CPn(uTm2v}aeMT=Q#mg}pyXQY6R3b7$t2JDM zIc>47HrItMBSd!XkSQh?@;>PtTfTuKon>{_p1t^kS;#zA29ti3_f||RO~dOHycxKM zVg5Cz=dms6Lpz2Zbx4J?Je9z8LWPRe8X(kd8FyH+qL7Br+$G!CT+}9 z#F4$fm@!L1ukftCGNk;ky;*KCv3-rxekUtJNMzMkVRYYXOEPk~(0hZ;ea3GG3|#Xs z0|m@{z*zjG*|^;#?7_|NDrq%`urABUdbqV}yMUrsMeDQR=G(i*vr0@?u{^oaS_qQ$ zReFSE?ueYVO{{@Iz=iGekd_cD!Pvgp}Aw5^P2h`QaXk~S@ z!==CR4@}UaQDW;-vQssqEBDW2@;kGm&U%Qm&lAL8ElXQ3U_2I{PC6cD23QY9UfTs;wx1LuPrISMT65PwI|oFK^-9P9MHTS~i+02RUC%#za=kqP22Ga7HnUu=yN6QWTM9 z1Q7W;!l~V%-31tq1JC^vFGYtVPK_R}BUgeX?oJV>ui5Q!VQ!+PW*NKD15xt0iI*2+Q21d)P+Uapi8$8}Ek*H4 zG1?s-OFH#QD!t6(79~>(TCw=cH!Jaa){4N>$;hky2LQ_Q_?9baMh#+R@eX{Pg+S zxTqeA28+a~QPn+6X3E~VLlzkwf9&@AC0eC|-Nu_jxW7yZIaCsqSd-h;;pritb*!1x z8@mVJhjKoft zT~*RKCi3R<4|=D;p4ArZ=;N1-KHXw0#8OK6x`ly!{_)9X2ilsvTqBgMOo99>;;FR8 z53K`3@7K@gQx7>TI!s=0^DiWQzs|1{0wVAC88UcFd8PFIj;J08Mm;UJ*9>c6ZIuTO zMoTS(hUgc)ko2VVKkrVpw?Y%MddUxfjPj4of^u3OY$b?@#$tx|2*PP!C4HzG%wR2#ARbP~3kR-shQz-7Y$^swg!YY~ z^?@C@0{*Tn*_uX7``DYCZ(V|gvh?+}ZaNV4=8TQ*P0Is7=_AR`R~(%KBvu3J|elv=I6C-}IpXg2c&x?xMj-*F*{F(9&sk-GTc| zhyh7W5DXpjRmxrH{G>>Hl4OrY-Ip5Q2@>eRQk?5OfFK%&jO|$ZKBb^ZZ{vw6-9tYm z{nhUrIaLPe#xlL0 zx>d_}M&2`C$+JME+WfEaEPX|~r%;rkfE6e4Bpnet-Chqkb}-$D6^m%NCL8Z8&?_is ztz*Xo&iswKEX(#zFEH8Wtsb<)INg>wc$~l&H|d=EV=D`A|C#Lj)PNeEH9v!Hs2Dl> z>c)jT(h0opJJbF3;)=YboNcD9D?a+VY@qLl6^_{^6yS&!F>4i9d59GaSii0Z4>zEM z9~;J0&5=azzRt~2PP76ur@#>RO9bRzUFUN{LS%`e?#GK5GGz9Q)un51CU~Bul3$b- z5{VaUoZ0Ufp{P5~4zFdOBx1sx-(WFjvmU#;&lO?VL>=AVGO^RDqdw0_l!|^H7RSnjn=!))ZYS z4WtH_cWYGhjk{0*WbPU;ePKf)In#z%zES~vTSp2xFczjeMseCV1=A&6otOS!c4@SDChrygJFpndke+_@S7%e&YY3ME9cez z$olmkMErhNnWO;VFQ<8H8pDLW!bl!I0#Uip)jQe$#)rSkxDnB4D9`$zL>8nqZMfCF(^z87EKj>1l5U>FE3}hti zjkv2Dz%1}XIz46gdQz&MTIz$HwE)9rADyAC|44SzL69yZYG}K11EJdJ3=-D)^z!94 zO8@-JqE?$R;Ekp3&FoqP-fv(sGG8Pzai;CP(d!ksII+B70!6+@$aC&(Zw>ApPc8Mn zqdncg@F2!(EW}XZ=bHglrk#X2?<%wd# z@QDUP5gI!v>(Nq9qE?$!mpW;10e6Dg(@|>(jYZab*@RCL4w|0rvp#fD9QjrW$0L%G zvh_tDXKu2(h>`B3^P_hg*AbcCytMB*bw>Qxm^kJ>2L9WuRAM@lYt@u8+k{0ILJz#l z66$_v8W)QEwB)zzgbt{Yss0n%5GY%sy3oFj_(f=H-qu=-tCB47jWO{m^ylIOaIkbt z@;u-wyx&nm7JuW}1y!z#`5da-1zb`gwf&5a zMkqoz<6@gQi`Wwtpqj4_n-rr^G!a*tHQ3vM39>aA2jGk_g)6BxUXX$qpNPDZ}Nr4jgs4ZA-@zO6K0+P=qsLll@+g2sw!h8r*imAeb_u< zK)uKVI%7R1f0vUVZEBBi7962iL=1a56QctxGd(GIQ1F+O<&KVYypp)1@oX#h!Go&7 zitxx&H`XFACeIk+Ok`Gsq~htsjH;KK8leCI=7Z4Yt3n>LM319msfwY9u4cKP-(P}Y zI_He8;dF%M^f^ko4g9{CA5UKzu9$T3W$N37Kf_l4Y!5ZrZn2(@gcn@ZjGPm4rtT{{JF#WzhBK(NF04QGXvm1GqntB@ z@kEx9gT(Q#Lb6JB5Ld%;rO{1NJK;Si>N3Br&6s+fpF+olksmAk=J&L*TnGr=BWmYh zeUim|jx159e{RIjkk$09>HF2MtWo5UAMD^jBEy;!0%kAYgk0j467(KU!f*?`6@zim zl>aQmTC0pcc^mbN<|_2bjW2g|_~YkvyLHnrd?X($IG5)kmR}P!-xT8U?&>&fi{!9zyG^foYm!J++?~$jl&46IX;P> zUHvY|GOPka;;CnqQY~4y_W+GhuEyscz*(9pftNfuCOb$|aTY%aRFOY~YuaQeKLkn_lt{B@W;>9)6FSQ9m+*y@8FG*apr$lQzE_d+U z^kzYB#c_SOP>WLXMpR*h|FE7JD6ERyz}k!hk9XC-1_gww-Kj0W%fpz*wRoc-&$~j^+x{&!*^mQ5mMn1(k9%D_F%95BQ-}auI;n>s$&kqYr~)*s!8%b zA#yzp&uG>aqo(3$_dO+|@E?uAXb~G^&h~1N)Wo%o!Dtmu(5rKHd2!N|(>soMlhzfBHRDu37A1pAI z=!w$8<;*mGsrrvu;OuVdyr)Oyn}Wgm5BBMNSiQ7W+E z^?sz232Rz66TF-yP<`v-xQIax#UU47dyV^a6cN0VoZnc0_aKbbn~gbsVxlm>o^lrG zZhqIMW0pU=Ii_Iy(|eV?IaoY063sRx2swfH|biEO}+V1%=8EE37<6Vo8>m?-gc! zr2zc)rfE5}`y@@jgoM!=FKKZ;Mk$oNW;*V`YyIv4qv8BqIc}iSzv*hozOTiYnXay_ zZ}8eDY|2GXKZ;bA-F_yp1~L66$X2&%0eg(L1QT7O|Jfv>l>jR~__2jcW7@{;vc3)uUh9#bFdqa=Hez!Jz4anRGS{Vilnc@?G$ziM!W*+v=JN0v!F^ zs(-3MSMwOknlM?B(0t?vb6x_aEhU3Gg#9JktTX0KiWQ@{YGOa|zDa04tqmAel9(zp zU-}9T(7qN*(b=5z{j(^@(D97#K zWj8{>U_IgL;jZCNlUU!m`*XJr`Nu)#fp-XB+78as-;_UxwFIn?14md2j#Nr$1t?*r zwFV^Z`@8?R*FR3_x{9tlRUJnKpYfBIWy`dkH27RE%5i+I6-D#TKnU$HdX?J-5Q7X& z%$45QK4&oAc=^-hbExN=Lf2r*c>Q{{R#`u{mIVs`YG6ns!SZfGQJi{EV(Y2ywEWv(#Uu+f5iX%Rb%naBi`1v>qmaIM$0xb`w6SZpH18 z_XpMdY)NO|Uj%9oF?XDq_mfAqrj;D3+lRcnnj!S4R9@!sW3gb_{(VAuNRR|Aq^WwZ zRt(_tC3n4Q4K`_oLb=GRUXm7SwhnD#0LUqD#r@Y3N-B|8;yC&dHE2yj?4u%a7!mQl zSmY2T49Yq_R7fYKAu4q>XOPabJW{9*mpVK;qn<|lulQ7tIF?bzkbAG;YuSr#gCF!~jV*J@y$25N*JotZH1;Tx0xPzU67L^!}6aX#R>)BY}#! zL&EJxFQ5ZUwB~tI1bq&_T)-(3W)2Q#X2MOMDhp7IEuw}z$5ELve&;FPlJ!6XuA~}# z>f{T=Jrw_ye|Mw2?-A9(Cffaw$}?DZHXZ-Z5TH;I}nG z#k;uLyMBr{XnSqKuaEL$uI7#gP77dC-nGe6MZP~`r;hmqk=$IW(wm(|+$RS(+do$clB8;M&XxJYf`;Q1qz8SSq}s#ZZrYu( zmEBxprhMpv!@)AF-LB^jmi8UHU1d=L-dO&te3;otECCZ-kPD-Y2^?@Ib%1~!N8?gU zL!ybBDI5(8k5sgm$;DZ;DiXK9D&3q?_-MDR7pfUO61%3)GtfLZ0pe?RXnmK1-UPVn)wWXxfVLMtGTde zZxQDI4%(@<3M<+tX;Hbji90qb9~0HkD-PdI!++UnB`x{ljb-d=ZD|g$A+Q#n z8nw;%<3Kl?m;EiuABjF&Ypra0s9dFg&#`3ufp>Io)-fkcqy9aj6B>cM7QMCLyp1}f z-|L`tY`?Wc+m|2gW_*NPMx4XI+OtIb<~m`4;qV%Mz7OjTWDAU-<^=sp$$0REvGSwN z=$wgVzL~6)vgBuQ*B0$z3uyb#0~GhLEwA%&Lmc25`A6nb{vVZB5(|x1-lvXqrL%|V za;o}P*AIzxgHa@{-tmtf(%Ts}3fB6B@V9LJ%bzBH6KDRpGYJ*LJ@3zWu88G?`x`um zh^~#OswU#!Zj+-#5VjiI>2DMyb`PJvyg#Up>L?lY{SF>DsZ8V1QYd5;c$FR_{KCl2 zGq*8+1poE#Qk1U-*4K%^kFyId)yrcgZJuYeoR#DS0bw?bKU zPnoaE22zZXM-tQivFgA4?E}hVlp!Fbr|Ypq!nUp-SU7}L=&t-kb6~`kS|?oRB*qF? zO6af=jy0|-U$ygLTu&swRvaY!x2f>{eIFJ-h@5fagC{nfD5NO@w7yBYq^dlXKC_n_ zhFagRYxPE@iEdS&{gj4?|C%kqkYN-tz6KJ?V&jk)3TSL^9J8vh$ZglSSqzs?3;T;D z6I9XS)u53ClUDaQLKxOkFyG@~LUll^iH|$Zp+F$6#WZrb@eQlODW}?&8j4=!^~FRj zy-n(2V$6IZJYGVnU7*ss_se1%Yl1-9Gr3)1YAdO8cli2J2NLuFUar`U7VC4tG$CiV zupPxBUk;t|6Nv=0WMCksb4Rt_=bH8Onz!OZ4{Da@$GaFwF(+;F!_c?szU9^2)ItSkdllg|W?=e-X*9}n;2?ThgL!Vj!2 z{PFq%A9C+p66jZdd$A%cKZijd@OGNK^i4A+ayz}0u>YMSY$pvYn0jGhTaF@heXKUm zArY8j$y`2gL*V@!O0)a5NgGDk>LcPaLPhX9JX@zJT;NHZdu8`s0$BYr7!8Y2C@q z<(I(4&NE`DdDi|y|0eu&JgJJ6SW$4Z!otmT5xPswILluU2kgj;@kOyFr;Ec(fMebX z%5+Fmf$27;3t4pUOK$Ei*~h7mfgWs*8?MyVPo2IW8`saR7alI%&O|!a2*C$Bui`hD zF!7)Rj3sUb7k0YK|DZ!GehEpsAZ{gDXJb5#Xt)!3-FQ+y@|~t{ zhoq!hy-3QV<=l4=vUlTC8M#CAlW6(tKZM2h{u}Ju?ic2Qq;|Xgnv{3@*dwAgpbdy%$>XbELi;hG{iZm35S}skX_A{Kvh3W zWaYb_R=TA35|5Yj@2KMTVE)q**lCkI>-kq&7eRJu_>l(LW;?Uatbqb2O#)qm%bd4Fbk1lM}&40)Q~SsdH%iP=!Wn8VIOVRVG5VY)kYP_broG2 z!RvT`ZWHph=GtkY$;(!=aCPcdli4Qt|3~S?=Yq8O080bORX@Hi3Zs)DW1*@3+e^K= zv+`ZtE6fxp#O?ex)CS*EM1TiG=wOWxnyI8u_WYP=ocu2&Ec_h!hrfKFtGG?Lfwx@p z@}$r)0^%x~D#Rkp0%^~g4sg2;!2pcC z1q3!H8tH=!XpLn`inQAv#wGt>ilQMFs}c1N&i(qG@_cD$iaAc-IOFuk^i!wGx&OSL zGVWeP(J?H3fUSW0Eg5h+K*XS4ujc9j=v&K-2Ny6DwVk59_vVi+UEe;9$hjd~#FrlA z35n;E&Sy>8NH+a?-)P7|)OLs)fLZJ1l#5LFvW?GvOks%w?Zi4qBle4eDO_k5*nS!8 z8`lKo5#4WZPd8&hsQGbJwv3FSFOa00d z)_zD8OKB~0d6C4b(U+v<+aymzXdS=E(M47}74`dUv)%NBdjDBk$TcnWy z;2yn=|0WEhKU;*q#r;#LT;$O=Q5K17av_PKQN&P|)Dd1oLr|Ka#CeZn^@lM1R zK+=F->&y!e-5q@YbA~=^l3I(0-38}s`My4?Hv^ok0x?&E5xljA zq{ho$*)(3(zdFo0{!NS5#_N0S7HV1i^kQa|VCDv8 z8-K3Orv<6i?Z83ONr0O@(ogQpn_f_Nl>BG0K%&?7K7>i;j8)cGxhSp?J7-=$@x`Xo zZ|z|6sCC`7&n9@{i_ux)M&IG)G|V@J3Ay|)qpa>KDFFdD`zwY(!l+};xS-xOv^lFe zs7I|9z?{D|e-n(!IV}OXEIk3XN!VW+UC;o&G%I!F3x8^a)6tPXB@17TUVpRq#Rs^R z{eoUIh3WDie5`iexiEr0f_8reaZm<3uG$q|WWiE&ooieua3!BbTK&I>IRO8cr$Yayx_S zt%h}z@4qH2@sE9bBWbF)37O9jP*=CIPAovj9QniO$3Wf&#lTh=xr}2jmGJZ6X&5tx zW?k>}ggk?In#NxApB}QsA;R`wWR37k=X?`xGhbD`j9$FoIXNnL=cN?8>7Xx8R`7z8VN}KZ<3)*f zKiTyjBvFBc3JB6i@=1Ec1ug%JS0dOo-j|hwL_=R}i~AE8v`10WVy0knI~k25*l;YlzELvN|&U|!cXv7R(WP_Jw!I^dJIS@pb)E;(mTW~af8YM!oZ>qA*CJWZ% zD=-H?8k)57fl+PhhXZ_SdL$;ips7{InCp;QaA{rgkGIX-?I}V;{R2X@mk82=IMyXz z1&nayE-ACcbJ3`4jjLWCFEVOam0mscF$rn!FV@|=O)>Uo*u z;mBI5qQrmgcakX5n)$+{9!H_0IPviB?le)SJEMGQZa+uQ7;u?v0AeSYW-yciJx$E*;9tLPOkPgybLAV*NDg1(;0 z_hK%4XSfi+w($ZPilc~nx3O!wW(%_k`|o>|6o7&^XEs@%38hcamlpjGspvUrUj~bj z&0LRm?uscS6tj;LOY0FiQ+y@{CMcbiZ6?a0ZfAvRkYNaqy7!3Y;_@m+cCh51A=eU5AdRJjrUci1#?be9s zX6T>uv0ukzLQ(YwNkcx$So=aBhCEzq;eSR>`=?^xsIJn??r-+=qjr)(xoTW!H<|r~ zlY3}@pu+><(G30poe*uQearorl*l+>(ncFA>vuxh_d}u)wOXLWI{=zO1t+(6 zJ_6$SFO%AFVwrU>A$#tmYA~9@gFBHjf zRw`(87*uPPZTqTPUrP9=g@XzT;Fy#<)|%27fUVqDZydbeWdj;f7BVn@YCfBuZ_rgH zRyjfU7Or3_`Fl%yG!Sx}l;o zX-10#jE^MF|8&4!%X!U&2fzy*%a{Mh*Eu~@;y~^Cm+c9Y_oT_TZQD(@&B;60WZSki z(`4JOop-e}zd3i`ITz<<{S6E6dY*fGe)EH2-(*1!^4B}@wBT8i(ZK!|wfpaAP5o|l zr-~BdZDVJ9BaAWR8%;%?20f&%J+4}KFRY3B?N06?A0)16cTtfM+2o)eyVJ;5mqdQg zjWbj;gu@V7sH4JB%s$sQT!+SnsC{k{__t2x{b=ivVtrFdnPc|hZygmChey>ayR)`Dv(*)^8y@8-LVzi8tu>$gp$gng`TS5%KrA1 zDhGTSxZ~Y$AB~18%Lf~BE>)Wt-PhK~(?LUq?-d?MkW9AcHp!CT|C@{i*E;+)8<><~ zR#Ev54+$9FYc17aX$HY{GaDj6LO+VZ*`q$L*<{r>I3~yXukdxgsFsDJuU;`3B?m*(Cuh+;oEIg`9A8hR2N^n(Pkf&RGb{udGgd~4PTnyx-EC)U*6HnS?n#}|VC6cNb-8`XY zu*c09NKDFZaM$n`BOlk4Kn<2Dt^cY6XG0(7?5h2-X6uKXOAB<2J%JG9gB*0x@rY)& zBOgG6rYnV1^{7;r_wL&d1Psx`N&G9nWp@OY`_2Bti`;qU?^I~$@HS+I)WOGe$Nhq} zXz*U#{+h#$5Tk8yjBS>)sI(s?D`c}27s_l$*z*Izi5zluG7GtwGvW`Y!` zPnt|2^|I0IZOo_h`*timOIgMk5}N}UK?$;xLHZ68(-mU(cL!5Zhzxl(!d~!KHcsDpS)$_RBc;8U0TxTJjUg0CB=K zBlq$z43(|LpqjC^#lN>=w>y~(ry{cLx3mrB@;DLO$v%niQnEQKF!Iv}eSgb5OlY47 z*`yLe{&sXu)!X4QEW5SF719i<;hD4xcwjK3@|!JJkMU>(?x;DRz{q=81sQka>%_#m z=@~2iY<()7{!8QDu$W#WXzxtGz__O%6e^+ij)Erm&E!$G19#*08K3ep8IUb70;}aJS`(+D5k{B=oC}#7B9egzJtS^N0gj8^O-7-qPp5 zv4IOg*KyJZWf_k)(pp)v!Snknq?;qOwfjYEHj8e4?TAn+e_-7Y!mZRT~D3f8wxXtD1bqq41Dz|JdFuxFm>p!Ay zS*@;WC)ZDF79IC7#&s+%XD<+LG^|sps7As<%zyBD3(R?&db9sA>9kcI7|@K$o_K6%8#X=9X0bcEH0eMb`?(IU~9o zz_&_{CSbD{*eCEAkjkeW)z=ooZTQR>6-1n#oTBVN^WnhE1|&$Mc==0diX)LJ@o8EX zN3gF$+Uz60*sP=Th-hs6rDDNBW}(-bb5sZ58f&0{P! zYl}zg=v)+~sdYYsW{?*a>lYkM_p+@x0yzdEd4FaF)FbA4-T@y)ijRvx6RG~YX(8dLCC+dWQea_f0n@$ac(`MJU~&d(amA&un6 zrvdFdwKTxzz#v)ak-sMF*4>tTsmN^(Zcz5|Jtl7FPH!hRFb_*uXzMOs1MxPmJE^)R zJLH118Qw4#TX}|@R&F9=OLKRID@gI2MF>qw$3H3T_1t1sxSa*oEpSNp5R@oVg{6z- z25flCTZ9_Xa-{vLw02ft%V&}?*K-hfjN|IS1dab$p^Zd6C2Z}^R|vLws~{Vw>iJE) zZvV`FH7SkpL+nsgu%w5P74$t6u3dogO1tpwnxl69Y?Yp=xuqSkqfa$ZF!~5 z{t0Qj)^#s!WqptcXI@%&4{;kKf0Y=tF`%#MQu~I!c2#xleW!@kgM$t=!_hi0Vn*=C zjp9H5kkfp1ccWnNK%VFrgXi_L9?nhd*J~;&j`ufr0{@v0U5S~oU@*TGdA`nlcIl@$!F1cM+c$tBl-gf}lU>-*f}1k9R*c%`+_SFy8J( z&s%)>20p>X{|vr%*BHw=w)_u>&@CcUWx^mp0n?W!Eg@29qCNtpsWq{I(+P}t7ZSwH z23Arzk%b8Xt&u8X<@~=gvW-z zB5r%y^gXWOge2sCD|uWMW1*l_@=0Qa?Ozjm!dpZelv?Owth~YeW$T~S6i60kE{PB@ z(?eC8L>z}7j!7XTNM}zJ*5dlMmj5Vby;1ky8bT;0o3^iNbrIq}ERcBnbWhl{-K^zZrVi@OWNi^O~p*NBirPuM=Vnd#R7( zx`;R2-`A&i21KX)S=}scv>);h+|>2(0Q=U;tAkEl%m+fS7Tp%=9>h3T`NdX@=Uc@t zP~>YE8OiOV>Kn@5Ti}TCu=%HU_U-l&J-{GPbgJB!KaAdEM;P<|=QX(^-Nj#H72f53 z;k7#~jk(<|ta`1Gao>i2_S$b1gtcpF^%EjXRe_n{Eu^X+v-{=xZNXhfsO7dc0u^aO z$q%m_qOF8vWwwgJXLnEGN^}?%SU2@qJ%J%FyQ!g>AZ`^LrXZ~E$ndQ`0sFZq=^_sD zvHER_D2qlAg~v}~Y}^W>ZKSgy+~UEY)&iH5Jp2R~1jW&}$t}>Y0$PoW7(rs>tmR)X zQjw0ccYU6AoVFpBzdiOR3RtWoS9_8ExX&s<{M+cgpr$?zk5YdSS_c;srAPEaUq%Oo zs|0_y9^@+QiY_kLO61m^CqmL&UGhjT9TJT}QVyDYCu%7_W=hX~2uXVp%-ffapD^a_ zps^$PW-66qX(vuz)MVZ+N{%2AJ2`WMbQw8{7mV}Q^po6mcO@F9(EyXT6Vy1jUy9jj z=hE=(C@gWs=$AM~7$URzDwfJ4Lb=`lZHgV?TR8FAnJg8iO`9GbQvP7+PcU_sdXp+v66R zFI3|+#x@d{IA*!NM{nY8SjTUrm`ma>K;|v#b&f%o*SX(i+e`QotKs} zDMq~gNIb!4M`2VKnuOz;H4@Cnm7b-?KGc0teGkq1Sn`j<0leA`R?HwTMI%{f{GoHI ze{d&P@@?0T+u#B@;LJz@R&jD-fu!;5su3zuBjxnL*i<49-X{L;0&G-@Jc1u8EI@Uc zM0Lmo2HWHD4@?9P`P>;u;k6g}SI!RQrjxh0>&>`|M>tU;2hgAIGKlz>J{>bM<2tHr zc1I8)MFP1`gvZrjAfwE-i5_oGnHbv^`wHX{OD2s_G7z)+r};a5u$@)DNYnEF+Mehcn^~BFQTAH>*NvbiEu~_sh`l1pV&TxJ)iI@{g z#t`M~i@bHX#&vWxmHdv#*@uSRfs?k3Bs|8~_-PS3p%PK?C#Vu+Aujhk$`Sk*KJex` zbma%ke)tXtISD;4|B@Z_>CpY$507&4+*@_M1z*+@dEHm}cPH^K`4+3)D43FR#`ms{ zG;yh(QZ@HlYI6gz=*ftTL?6C2XHF3^wq(=&rK<^YdSszqr>;azj?ML1vB;YFH;tuk zP~uXB{--k!Tod&OIAEt8zll_oB=W>4@e)OFt`36HB>pRA1)?P$@A_Hg4u^mE6hVP( z>H%n9UI5+e2p?X=NVEy;{Ks1!^illeu1gRUVWamEL~UqAP`YuHaAoh`9yqWH7eVE#o79 zD_?cARTdo_UWx!@qlKqbGcD%fsywNvp7q`EfBER}@dDb3?m3lT@@jg0zuUBnLMjdc z@aH)N-Cz?C8VNWolMS#W8cnB;K}F0R1~i-NvLM!;hTWT)TAY2wA^q*-SvQb4hPJJ!7$S z$I0hk5x_upV4Q09;G2ypmNvDBCWAv}ELtl~qS||!5Tjw_j~jl^zY?3!Ub1a9)Zj5J z1qnj}k_Yw10}H8cnEr|GqxyT;2iLv*$47+_Y8)OP`_faP?fh1U>Q=f+Bn!&}rUu!V zXHsQ!VVC2#r`ebO_4=Kb56$~>^W{oRrh(etMH?SjBgyyUAqsnsz`FtN)>fv!1xQA~< zndRsIdprtnm#t2C^Ra_pc9{mL*SE-0ErI(FXtv&@0LqDXS*2=n!Zv@`6%BJr;t*;s zIb^GiThQv>>vz>@fwVJ zOjL-=Da*vD(bo6MM$rsYOPX|YWrSH|{j$WXsIExn+rAlNhdy6*3WuzWc_c_hm@k)w z9^L+`Xlnp?D6F>FAm~hoWrRN3HlVL4@9=$Qm=eNmL}e4E?*LX9n()rs z6B2=gJw)0pUM5Y|9J_JxZA{i0QJD3MV3q?}Pse278XoR#wRwdow@R9KT!?i1ir4*H z#(XdCzwkK9E<0iL7wpqD<#ii-O11sESydRNEk{qhA9Lc-6F>e_H4ItsL}_x|v$_{@ zNnXeGqWSf@%G)!}0TQYNyIUU#oW}P_?#Y_y_UO#mlYN^R^oc6wy(#JAj=ry!@i<## z4@w3dnxCY~-U_-&hF>nKHB9bj{`pN+Le1tz&z)3twd-M()FfB7ljOsi-0R<#D1dMI zjpqFOh-_(UttGY03SX{QA~`6@{m)=RNvxUO(TAOI-OZ1Fv31^gTfd(M>C(c>A)6p{ zGm=sU&3T8{P=_s9@FipD4pg`RRYU9xW{<;)p%Ew;2IISum zrH#I;Nykahv+qn>Y)xqH-|beZn$N(5!F{x|UXwMe&(-AYnKtM4-rW!srjGwzKK(wy zTMr^_lUszrdz&9aLmq|O+ODs~gb_QiYHpv6%vds7s^ga*#SPLelYn;ptEnkBqIQrc z72JA7w9B#Q%Mo)N!|2SVL64QH?e5g3(!&?_XdMH`7@MGK&rE4Yvv)Y9k0ohWqO`2- zE)N#E_N)JT2Ol*|uIg8lK^y5cGqqm;i*>6fhguv&HD(vRiLZv6I)5$5^c{8G55|Y$ zOEy=a1P{`cIzfH^+=aLH@_LSP&+^*L^lh8gge`P!#^murK>&~Hs5tM3?snB{DquT; zWcnO_DVBw!r?3EBhD5mDkk3)slmzGHY)}4{Z;{?hYMfIOnW=Y5YS9?yuxGl3l2B^;>B?H2n$Q9_GWXRxiux+d z|7PY9SauS+Vpx+BbsV}M{>rckO#5|coL)`@)G7t_KOYkTxx&Z(K~x+hHl`kPf;XCh zZTP|oicf)*>-cf7GkqG=>-SS+m3fBBE!{OdJKHBR?!EX91ScuvAAGB7ZoH;Z{o6uY zIHI}|kF;}Jte&nC$^*B2kz*W1<=o$9HZ&7YO3}FZPFJyezn$VRicd@A4@;b;r(v1S zmN6VgAG(=dUp4VhEkTA%YR$AXfh?@6ji0H5QK3W5e`Dq&(Q1cAA2si3U!{O^M+gbc z>S9rIxwL=1$_}DbH!A30+%!!&ChLk02Ruz%LT8pNuu=&Yu33qy{3K)7fO+o!!ZxwY zes3b}oj`&h-boPTc&bAtWpihUIyncjbF}mYk5Ih5tN|7Gi z`-qqW8-fE&HH$_r1yoYz@$v=gQO0jlsmbJ-f?Wj%i#_}Cz6TI4^Y4uP41I`d2&_Ox zPjY^(gKlDccv!tZ4A|A#peW-$K#kw^>uuv7d!U(^0Fl&(6bA=ohV(P?NSUWTWEjJP zn(F}`9l}b`1R3{Y$QWx zq)3{&xmf6xF^2y7@Uz{ncF+VF7~q`R#hxAhefQ;<@y*_Zwu3sRh`0SZ*iZHl;a<^j zci7kPL%V(8@*6>bl>zqV3h$J*9APNG=S)36O!>eTY1K8C1F?XmG0{jn>`yCg@A=Il z>0Mr>Ez5EmguG;eJO2rcypx0ZgCD>#(2qKzci$Kiw#fzhY!i>oy~dF%gy5SP}m2Ichu5 zSsO~2+pBhthWVO({SS=+(sj0G_lk!TZ2$S7wye$Lz~{oH@t<$P*PpJls2et@A6dU! zi6#^VcL>gMY(Ai%zw|ZH#;71#U*gobyrDq#E?CTP%>x>kO*L~=(O{L7g)4!dXu-cK ztCW*IFe^BFJCXljT0ff+QnNz^_m?F*GQY|+uMIuuixhA}GT%te5K-a$`F4g8L@PB) zZ^@|;>)O#AA=QeKREGVak$Aw5OGWUKyz_7Tm@RO zZ_t8N?B22^DLNbTjCs?(JrYOkpb0nqs7}hFgOM%-)4t1u29WHL$>@YTpo9ekkLvVwZ^Q^gC?jJy|=kCXMb zmeP>aRkGb7!pKXZ>m;w44}AY|c&1x;LHmjpQ;kygRlqB5#WfoH!CC89iRlT$2e+|n z<$uaiT03@M@x7IX;Qb)xg=i7CXzyWLEGrfSEOLI8t3GsxOL$s4wgBr z3f)9d7Nrzd4Y&ib0X0ZejWqI5lOFc>r`r`~J7YrGn><9cpZr=r${0`d_u2gguR{Co zU$ct80t&#!ZfaVTD0eWB8MStWVA39iy4iY^yYzfJVvn{^q1QI9pbFF?S7Y-FbaOF{ zBef^=14GQMUxHP1t+_2;ajW@em;qmF7;Jozi^$HK&nzSXdTD_hV-D~|B!ALaPo)9W z_P$0>@7O@uPd63sS$I}lg!dpH5P8}3KS;SXwrMwlJBgtO`SDWFC?f@uY2O(Cp@cMf z8oXnihdy~4q>1Bjn-QqkKElPx9R4&7`!%~13v(w~=PB=d_|x3eUv2JJvA2irRH;ZU zF@fLGKK=HDL(K^`_1)a4H$}0Uq<*I4+kE?SW3j=oG}2QBpVBh+-47qe13of2LMQhp z0Th&Zd8|%1mk|=jshm5f^yI3m{cWNJsMxK-XTL!SqD27PsDDZpnLDG#4Z0qZUvJfa z?#8u5)OIf~d)zn^4fyvTNjIsI(&2!?Q%s zS|x7xB}V|M^woJuUbt!wRt9{nPNI4;`nSpvI3>7twy#AXK<&L8Z;2Mt{II(PD?5q| zzfB1PJtV9JY@}cMhAlG^dGW#GjyT`hdmcY>BHCrUbIBsjF0;b5{3I|Ia`$v@RgN1Z z>Kme)R;(Brd+3-m*A^D5M+HKr;xnJl;dHhChk6DOlU4mWdC+9cN24rq{M=mK4)+@X*{bx^_9itSPj_^^e1pk+ehr-Y zlLE+oPp3a?CNxJ0=(_613$?GLd5@dM8vW??>N5RnF?w^U1NN{)Iy}rzH`r=`cdg#G zROVY1zw)$vQA%S!tU4L_)C~&jSyws&J)|Xad*WsSuS4GAjXK+1UjhA)KO4hcki_=v z7Z<;Bg2RA^8VxjI=;x8gI%k!Zf`SfNgTfU8K=(P%oAS(N)&G@KA6!19g^}3M_r#iuD^XcSeuzd3UL2@R-Kh9UB*^ zf|(JmWSx~s*J0-e&kw{h=}Z003?UZg@2wwSjgc&8_x5O_0!@sTuge0?;n-i&R9p`< zS#X#Gz6id3o%{kp3-KZuRES$hK=YM**_PH1V9x*}5WxhZgl6{s9e?lzWEi)q-wG21 zul3cnXa`Yb6w99o=!1V!on4t%G$Jsp!4Pc-UBSr*`0Gz>Wt%W|yKNpWW1d#ygl3ix zu-&_)W&|Lm84g`^>$92g;)gpKNX9=Vcz7wUqH66bLw-6kH`Kwt=)mHbSU7#ysO!RO zG4*$j*8MmC$1$@q*yM<}b}D?sH+3*Ows7 z%{Zl$^QtwC`|wCg&~meN()uPX@WgFf!|qq=2Hj04ALDfuD>mzYHE9J!aSo zO*k7$Z1a=AO9maE)<;Ne(;z=~^u?c=QvszTdGK0m_W}9ONJb^I%OL<@+j%m9f;SgJ{5G@_S91a?qEW$?HN~G_nC- zb)swCKX^5<-DZRT&RbTn)&_#>2wJ{iANAYUsQZ1&!HoyZ8qnt=(`h1v`ZH&v=?Ym# zR$3vnc39S8qWYAr?UwLp8^AYG<@DX_gJ1YiImd%20NozViGLr4WlG(pr!ea@v}) z%LYH3iNk@edVnLhPhQRVR9YW`U2ztZu|THu2|b22Vz9-vw$)?zk;&=hyr8=!zRms;lYcPL*3tn$d=NpTaP3YV>4TJM6_4f^XE)KbgP5*-H#GQ2dI^W{+-Vx zEJX9uQfCOky5RE}i*xj2@Tm$8+AT<|R=OONYszA$rVZ}iK(t(b5wS|wbMKDZpFVK%&2fKPf#l@OaLqHGUW=P(b7);T+ z>CoE<{8A}tE5Y2HV){lWP*09y7ZBkb=ssX9qhY+@?nGAp@)h_$V+d8}D|^BKvp^0D zz8mt}GD7s4@@?>EU2`Cv7{H{$Kfr2(8j)Dt&iTCrEm-*h3jBQx^ZTCtSEPRF7dK(U zX%grKkJ4z+6M02HmHOl!EG!zSCPViQhUmqN@lZxcK~$*hwILJYdOBh?(N1UqjPLSP zK-g}SG^p=7@qo$jxzyelHDoTosB|lvT;~@kxBZzOHi%T|;ZP8HFjz5is3jS|quwuf zaLJ9>7{2+|%uXaGhQqrN1dhbyq}4TELKoZr5}js*9cCaI7;Dc1UFi03fc*I`Xf8~X zJt%+J!BV;MZm3Uw_j^RlEa`h#Q&V4Ft07Y1V_duPwvZ@agTl!uJ)-8g)v!*Qm^UZF zry~RvvEBmj{gn>o2M+!mSMxdM_WY4XyC(c^D-;C5yq?JGsiu@5WL3<*$3Jta2jpRY zzB{VV9YPxZI7Euk1Bjo69DVwQ!p!n?%4KmyczwGuEDEdxINJ)|boEH_0c3y;C3EdBbRzY0&>ISvisg zW@o9;3O$!moyzgUs&ExfayT*Ndi{lDoxX-CIYiwb>cRj7_j0IM2Qje;hzK`cGHW8| z$i^jM5CeG}R7eAHLu7p(&?`SM1;`7JY#R|nh&Uv6goP0Y@3oEINc#{)%>t_(#N#ki zxP^(VWb(=*&TG>lvE+%1_;V}Y;exv_4UE5tlkd`;gB(hbf)$%UT!j8GLHZe8aT+L3 z!mu+}l|IlP8IhZro_xFgcO91XG|!v83^ZyD*l&JjcaWZ#0jIzAA40vP{{4)bokvE& z%w|hPwa;C<{AGRr(74b~IcJ`Zx^*x@_k_}EWH>!R%z<78#L(OGnYFad>bt#1e6PC~ z2-jCQ!ru~cv?6qO&c~o}WbsXq$32$}N>u8UIf>J6Ga4CaZ{Y|lc z`g|Svlw2K6&x!dPFuTz}*mk-7oxJqC-7202hFjS$9T&o^Ow7#)=`A^S14R7JQYz9; zmENHc%LvoscTs1@>0Cy?X;>O@y^^+>|8jm&jdUyag-~ccXxThEIK!R_+;h~!jvNa) zz5?i-tusJ&-0x6STvY5{V^S&?2WJV~>!D2>&5SQUh`;0ECH+XVF8~JlQZV#jT`(fV z)w@Rg6dZ7?_FqA3$R;Q&Gcfr%)i28J@ru-t%XxFrWe>vzrn#VL5)Qev?htjF#avBe zL8HP|#(`jXr5e_*%1!>GbFIs0Qy#B5YRha1OHTg9%C%%`9I`h#7{BeqGxf~29E#y? z9jfuQc!MyT_m{}s#xy%c>E5*9k6f?;b%Q~s7`}^9nNd?^-+tf&zmnyz70<5^-Sv;y zw5fLkPjxsyY4EqP7ci84xzO)$7Rpgi+aC-7WmU_8Jp;?)3aLv9Csh95%9b~O6_w=D zP~!vv4cNV<6t?|I1?nfH6pW&n>ZedBs6Xb;=`)^(hSGl{lnW9J4UyKCp1+?*A@#zL z1=*uf54)w2?7Sz&5nyn88(&jo67>7d-VC+NnQpECzis#>6QtiHwyc2^VmY@+RS6XV z!$$Uw=X~!W1SrV2-p3`fv6uDE4QMYCvAWvhV91teZ0$oG(yj;1a7nG>6KXq-nSCQQ z3C`5e2?Hp`Hy3TlT2r)P!;jna4mfpS1{E??k$i9!Wvn`MG94UEc;;hjKFh^7%a=xQ z>M@h`(w$0RgHF52+@DEM8JDMlXiFhAj?lLW>=cdlm)W;(jQS>(2lU%W$i}4ja3X6K zUZ9dfUwr8GVx^Mu6doJTN2Zcmu4iPBX`qx^1RG-awIva#ru|sZVH1ySh)tfproo|@ zEHti<1}94O2-(U{&j_sPJ!xm$Rj6gIySe6EeBH1#HkG(J0b_YlvliX%uW#E2m`Ys! z9#8dM8Um&z^#z*avAWt>UEk7g4ap!Y`&w{x23{ss{rh8jKQYQ*)TWV2wO#fmAfc3M ze;_f|?#v>Ht2y{mrAQ%FY*UEwvW;2n0~bhStcX=iRoz78xsGji+qa2d2F5Zg|5UAh~{7AX7Z z(KKE)6E#MD8gB;b1&$Hs-Q1!z4lR^d5g2 z07GjUxZ!`A)uv|p@u2o$IO%7StfbV%)SvXWdGW!}UJ7k*)NL0=pC585ry@BMuho#M zxv43~hwgdvfU-gA59>EQR3Ae@RnRbfl`8Cpn*y}+y+nMsOz3LbG2|g&H}Eh;~>w+eM78#8;++8p$u~3&rc&Jt2I)zR0BF zX0y)pBJV%lv&-7Zk~AvMr`!1L~S`){T9;@)80 zY9M!@dE5Dv=DH)Uev88wU7&SutQ_JoAkW%2-0})-6fSy`de*hui5<_zmECHb#z-u{_d^zcfA%$AZBe39%tvwk~_CD|md?6W#`3ZOg_)qAcgk%okPJIGwJq4^FglQsO#3H663i4~IyCSt{~ zlftTI@WkWk)m&SU07i5lpZf~hY}VnR=jsOw25$p`vD$y^nu@Qyk8ms#2#=Z$QTBcy>)D5u1V5hT4@VYK z{$MI`i6E1c_d%1xW+*VXpvH86#!tziYtKC47dx$~>HN4lQW^h+7~}R|$|-I>D;& z*QB@kQ*4!O_ubJ1DB15$=zDu~fY(}z$?lnBai9LJ2Xe8e4E$L&43*+y`gy87~yAanNarwDFttzBHZk5Y*MZ)JHIwy5h8bj2If1GT^ zEX4PZ3E#yk>}&JBJ4J<$*QxnU-{@7q{*x*C3KqKdM{j|%X*EdGxGsFb@Tn4>_%|5~ zDzd(M+x^4vbT*ECE3Ft}RDM0<)^mXsZ!-9Jw&%g)`Df!$0^#EWKim6ppZz;Z1~v*X ztB9dgqwuq2-He@d84xt<)-Mkhkt&d1KcDoU2&*_25HPl5L^OlzFCE`VDylS$=(!bt zR@rtcNOxdpc-$f^=hX&R?Qzk-NBhCuxxh=^g z#P9v<=L&8ZG~UTH(mtv}ZAZnW;Hdul_j4Q%Idl`}R5Si<_lK!Ms7FFz9xcN5Ok&LE zQ(R?g|3c_MMz3#4h7y8*IyKQf}aLiL1d6pWpK?*|#H^oD}$gQPmrj6vK8_ z$k(ABq@RMP5xMzHy{KNmSKQat@{Y6Ep@sLg${>JERZS#ijITr<%Ld;Ib{Uo-_J6}mB?h7ru=dE2X z$>zcGIa@m-4l|$>W;cjRbN8p6UXp*HO7<_7B2>=uOKGOY2hl0Umdg83oKyU1zy48g zfuh>dvs9kXUN%3l;T~`xkV@6?doQPAm0`6SKx4%=W z%TeS{%YU{j?Y9KyM-7ad4$S}8?ezbQt)JVU;7^B0#Z#Q@q}Lhw>5avK?~gk_z+nLx zoUVSyJ4#b{+oP8p3vQ<@l&<_ON@3CcP16nsZrg4z`+b{fBuzmC)r+p#^xo63KGert zk!SCy{jYrO|}csU@y}$#OvZeN(5LpVnPq}nGZP${8SqGl_h)k()Z}_$)tqZkpGNF zfhCXX-1q9UJswN2TkFj=WGIfRmfIf7b{kblVw(Rkt$-yy&76fBp%_)@)`PIB&j&07 zJs`ovEC7GRMU#R@?M+v&f9yWCDVaXyHCU*haGQF61gkU{qp)JXz1}IugNCfHyNU*g zg-!41^Doa@bB0!*1&Sogei6KuUCFNTE5x?;pS;-P%Ei`?@qJ1i;Ij6yKEOX_2Ml$@ z95r4$4G)>`nT35x#Z<38pzu(>#!;t!z<496|V-ysxrFeV?xWB3(bM0ivgNxu*?a6%6yRV zad2eH9B-5EoKDUkX0W&9`{y+c*%tk3Sgf=|*%`?1Uc z;RC9i$f|kp!I=pOI0Vy}s1GFF?k?=G8{}=HRC>`M!1TCmeL{( zeAr(yKAopUQSaJVhh}7qu(;Cuk)<|q??1*48|&(r5AU}doAofiHKCH)$-;x_(uKL5 zv*4?Y)OJA9G{1*(+PjOk(nUtBvRS{BON1&a5vX{byS#K<%3_62~Xb#}e5k(;1F|LN98$OQo3~V zLimd4;lZoK&7w1qLk=+&jPg^)_-0zlm-1vYJt(1*6e@Rxee0DD;bfogS>7;OBps5) z^K$&<a7LH+>?78Rw3zZd#ze>!;Km73Z!#M|0Y?Wi3MDn!@KsOrC;iy_ zoe>Rng7tCJ*<)EkCT*auCmKZl_wQQ+&Rxg(L21%j0gZee_m{(OB!aoiq_F?O*DmQc zWV6QnX`mV)f}ruAqvB2VS(IGLdV^JXUsYt~b9&s_80IK4vMGvQqIMmcc=t_1-AjrS zvS#<_y42tgs)`fu6P}YJFv0mUN9YIpVt;uX$NR7C*NO#cSOGk868uu1EK(vwq`MEiYs54=yso_N1@@ ziLa^-!vCyYl3-UVlG%~KC%b!}V4+690t;Ja3$?nKE$vCNpJ_iy8ccxa!Q8z<6Dg$L zy*f)-G^KZ%x1^q+i1_Ppy6329%DLrb!h4Vm0<~hGk64P8Rq1-V8t}GJFkf>y`1|Lw zoBq_9OaKm7K3iDDZgJYqW(X$k(nh6is)R4s+vYeEF#3q!9``u1!T>05UqK;pw3bY7 zz6huqpz?18O6j@Y?ycZpS`5Wp-#m(>q{<}Z+l5x#%1KQ8<7Lf-5rbAnFb(@4U+8~h z6cOgql29FEEusq9K@bJG7Z_K;g;Zjz6~V|8Pmo(O{vvtTfqIQW35kT)+2)7qKfYJD;SL_U zW5fw%2M~UJo}%7A;w1HCYr-?}xhsIY>w4Y@7;#UAt;+~C=dD}+ z)8N+U?dAdRk0NHki+|4rUuOE@@01ly^Gzq@T6B(1v6ceR>;sSM*80vbM$Zkv`pePI z-NFv$rT3^)Ya04oVYF8y#xD;7TcKUB5j1O5Ge&v$j)+2_VaU#h9FSG5O9Gn)&~|ca zwt#5`Jmu>1H4sK_0ZUw4CoU-OXQg$0_vx483bq&?>`7K`qj#lUlpKg*0}<^C0?=n(Z$|c zjHhyaNP&KK!Yn(_$ouIeM~fCiW%E4w zVx8U*0s3+i4^@|BPH`eA<2t@jkRZtZncNg6?M>V?{nFNVB>d;T7{f8*aJilJPiG{# zP1W}k$^!)17>rGQbo=m<(MM;8G7E0kOFOs)OwA%{!K>z2y) z0A9fS?cNf)j8ejtO4kn%9tequcX&uI^EeZ)P0~0w5+`Z2$1wsifM>+uOjsu znNgF$uUPoFPz}A4X6ia1ny>mz!494T7>c9iD7gi@pR1NG=_AR^d^ZdNx#O{2& zuS`r@S!>Us#rUczYgT=PLEgODYVoI*B2ib(^sG%0hK+~>CO}GAWSByBXqDd9G5!9g$7TLI9+x%k?Kz|O= zcUkZl)k{DBP&Gi-Metp_wx=`iweup$wGFQMqMBHazQFO zOSFthfzZf!&-Qj~?ghI`Q=bu8P~r5#S5}PAP~j#sJ3*G_GM^9nYrLX+Z4QUG6Neps ze)D$Rf#G7SK*)$2oC;9ohwPQz&)+bPo~O_9C0fS)+t|Us4_>=g=-3Lc#WtRgqA9

5VRgsysb97r7?lApe;Fig<{#bV#!^m6-+|PAr#tJyw#j}1~)u?Frz^h8~lT0 zO7PqoW0*9k_U2glD4oPY@9jmrW-(*v5X_HeFfx^Ac+ad#wK(?34EGBNy`|Ju|Rq^=fKIK{YsNbZg z-q`egN2uu><=1`x&m?A@>i`lmg1=Xd=`cbeH#bE_W0i6&5e=*E=xD#Rck=1uzPZ;NySAb(fHR*S$DGiH(3I%2-jPwJA~^u z%#n`wc1K972?yODG+OMV|66#~=Ld61vILwPk^U0=udH8nazgvicO^H=b-rZ)_1UqG zEepwVawFk*#&$p<1}N0Ck=z2Q*?UGX>BH*Q;#i&f|KxaQa*fLC?HR}3*L@zhX1r$H z`ujNibcqu)^oKM8oP`dZu0reE?A$Eyu<8H~cJYtRST=-FdBkGD5^Za16|ES#QJYnq z%faV7Q9bQ|ue>$q5=Usy5BYiO5{5NTDb61|Ls2 z*1k+vw{}j^SSO#>Y~%H0f*q#L!@U?RQ!&NJE>9;!*2>O+nQL_=Q&+>~%_B~ap_0<_ z@Ac=Lrnkf+G#;6(rcG{s|C06?th`@VRIB|WGW0xLG74SdGP+0_Kl2ihS*L8M>l&?j zSq+~paUnDOrV%spRSx3cS#h49H(sWNOphNUJcu_eqcVfKS3VjIl_t+dqcMj0u$tjR zS30GcFq^x>xxaHCV?(5xq2wU^QO_CYb#>Y^*pRVwtD%&%pNe%Nt~kxG_R|56Ba@2* zc<$UaC*FWn$AG}jBM<6Rf3?jBLlZl$^;!Ns=Hg!|&vG^85|!S?j*8o0(q~84OfSM6kKZ#p>$t*zH~SzLhbgk}?^-9pSS4}N2q{63W4wxS<+%~cN)oA?qa zIVqzBdWR_*8tV#l`hG*JT~&450B?%n!go^l?FMQD>3r_~_LQ6ZBEW|dZn|#(_fhhF zcQq)`T^HFdWmc0c&t>;|3R~cc96k*F77jE%g4HR``1{;eYPV@&SMgQ<6Lz-a>VVOwMk5aSXs&^e<&Rl^1ghBiOw<4y>i9P2BTp@AeRMK3RZgj0WTfZGcfcP?I zyihlkveJPmSf8#JcG>JY5m(VUygQiIc+?%flBCd?=UXTI`LTHj81tw&7tQrK$N;XI zh&9YGYUwRDZ=XnJ!9}Qzz3(eoaFbgsd!>+dn}R4^xIH$gf7u;xsQ~9Uys(^KfzQh>5Pwnq>FM`GJV3#CG#> zOtJDOqS?hfG$~xQ)n~B+G@270?<~+aKg9D57m6rrmlSeBA@f2R``6PJ&aRyenW(~7 zR`KEQE$lru;yeZ+T`C`>UDulIoVrY*-PKoiW(YZ1+S545d9redmkUGZ;>H3hS|05w z?~cbW!Jo98w%7arOO{xEqfro0KGx?dHfjioSyJAMA{7XJuA7%}tS^gNZoi|DF!nz8 ztY71<>e{>a=LAmj2KLk%i~HBge|sUU`j|gu-~?Iibp)N*k3sh7?pJ)ns<9WlM$%+v zUUfPJZMgJ1Oog@|7!P0Kq72$}%D!J;w->-^(^H-`ZHBldY2>zai!U2$)pt*4ERD>? zZ5M8hW-=%P?A<>I`Y&5|qznL%I%$%e4*tF?7EYkGDPm@g@OUq*8zswwH?BJSpy6Y$n5Rn7`K?tMKq-)XG<03mFJwqO|6Ikuw5h#&*M}GwJ~F^ zB*HjAexa2J%JOPTix$@P+Y!+H4s(7Iq^RVcF2Slv_G+b4*zh9zK87DWH?-+p6*3Q_ zJosGf*~Db4NcP_6@CC_f*cfs2*m5r6(O)zT6~<|?Y*(Xjy7&sj+Uq||#BG?RYo}9E zOt$0;d5rmNi}B~!Ezw0>=nH^qTZ^o9(h8nvm`_~M1pM}?f!Ef>Ypc3$?1ZA1yn+5# z_+#JgZB|`a*+HJ_Wj`u*y}gk7d=^&8c+aYldPIzE(@5-$6V?y1T)^BbHg)%J}q-yU`+ofwvzTQNQ=N2M$Mc{$EB|Mco0Ot2A3ilO@~!eeGAtrsPj$2gVk%Me`#;XH*rVwA{p7-9?u*HHNM8zqF{8G} zGNbaGZiD1IlImRS%}n|%ewg#PmGMP6TK6Q*f!qPd91W&h{8bJzbo%<&__THLDu_Hi zl@+#6yM8q&kN8x?51jRqD^XPLLH59l6g14Ms3-Kd(5hju>qxyVd?{MaS>=N6mBC#$4t8}ChR(tkGO=1E* z?t_9|#D*fAtKohoW5Uy z+&_fAA{`+z2sWqSnQxabR;Cyk`Ftc=lYT{iqgIQ(M zM&*pHHy&4yg&iVlZ*PCaRKY;wzu z@;zJ|_P{St47K=vU`PqFkNBVW!<2={U0Esmem;w(O;pv{3PanxR$VpW5w|{DFfM>~ zq52Ih@3XE(;FJyTF>&b#May6#!ibbOmOENV1S6)%LoI#~U3|{zo!HXo5FdN9f37Aj zhR+dWC(CVUmnvtr9sakZO*vCJzYWBL*LQmS2~y%4>vny(ILZ&b%&RW$V3wk!FK5m@ z0He9vcjPAex-q!@Bph{gEM{-ZBfmfw33>RiEdia9;c`Q$O|GCuw`L0mW z$G)vF`mN#s624j?-rt|*=eNwqFz1M51@e~&V}n>3m?kYXxG;e@@U}n{LGq4~lJ1A^ z)8A2x)tYIc|H9?pvM)`NSqlc$UbO&~f}vi!&jAm4 zc#Zkn!3I6_VMkOn(2P!um00+V=09O(eh+-Moo-=AK?C#Lw+MQo4azf_F7T6lvf|ld z@U`*A>|Yb42f8zwpnnYg2&lJH1{qf~t_q3zE)$u$-VH67w1J>@t~Uzs8H~^<^UL zg_VUT)Wp5Nwul5?bsOfw$$92=^|M(Yz{|EedFwhlyF6z3@QHNvVwJ8aH1nG3KY1YR zN<}|vM5KC|g+5Kk@xV(yHWXaOq6ZXkSfmadtd{ez*%Uz1c^IYF4cMpc`)?L})@fP7al&Zcxk9P`PYt0a{zUQPs~?;HMIHdy0q@XzXtgY1(nu%G z=Rrmd=02D@$#@{H?Fv#PW}O(!UF|X7ng1ly9&T8}ODvvhEFPHQ3oA2W13uRLt9Hmw zO$vY#;zerq`Ty5k%&^bsdSk_pH>^G7Ck0>3KtB)m)*_BW`7TT|J{z`Q`r7L6&w%IU z-m91qC?B1ye{v|L4t%Wy68uj~Q3$9#_BOweV21qz3wH&1giPvdOzd`+Rhh$mY^)e& zXL~(5EnSVU(92M1EMv8Ghj$_jhgZEtE)lt^l6L>C!Mkrv_W7hh{U9JUJ9lZlQT?2P zqs7W;?v49jke%oOYcu3$wl)T&w5%MrrRn-~dQo)fa;Snmdgg=bIRE)EPnRFdWBfmB zWCt-Ej|f@kvsV`^u&~iB-xU1d2;berYbe`VWs@I;p!8t*nBHEeF^*%6AE5(^@_@BI zXRq!ovg3(I79VHcz~kv<#q+g=*$L;1fYT15cXV9+*LIh1zT}O;QlK=5vIb~-kvP3#X`uH zm!D*D;GW4pdO!BwIHORTgTa*Soo#}Ma+<7BiHQdKhpSnrC?h%5NBaT*Dblx548Q9N zUaaE#eAqjF1mQFkAMfwttcysX$pbQmI>Su7>e`p6>O|ZrEuLIXp8Olc>)3@Pk|1e; zbsKxJ|k2h$S=pwRh4ld)qq5?OCI3 z$va!{?S|LQDrgM|hM~u+_1cqz-qpM{S0yxSES6RB5o~6-PS#ER4A@|cX^V?L%Q4UH zB<(UXWoP*RZ3z90eQqoc{M_Yd{vJ3~Lc`+_^Q`&WFSgDlGsQ!;?KGIFG9?mnd;;C& z<*>ORdVTLj;;>1#gV;>dIG<}#nl$qw4(Z4H)!=Wr15xH+BDG1qw% z*P+Cu=ivGw52z84n0j(cu4oFOF86={8K61xN)?N~Oa8>MXNqF03Izw$<+Jg4Gm$1= z%X#)ezle?L%LRd?oq=!691p&kx1}X$<`ajJYE8p19M3ITfOjJ{4!^`(-O|6&*@x(x zALg!~IXG=t0oktMoz7eOfE&NIB(n?UH5bc+>RjP=`_ z$?#b8U#K!Sm8QhqcxddKlZ?zTig_8tCN5`3*ZgZoTak!mA)%k=!_4}X=FnKuQqLxP zHV(}NVR>qA_|VvS)ZrzG!O)n(Y8%BHr<`5h(l1&p8Ur8ARb*Cb*c&#BdutS`4Z}n@|EbUWpqL1yzoYbxs4G80j?nhFINsLg zdz-L^TsP#Ie`}GMKP6f}D z>;<2xB9q?7?yYY%U<3VPuuBqNe?NQ~iuojUc+wE}j6G!8?dx=&yosu`t&|mEMH?t9H zbL|Os#MZ{MjqZ)smpSNG4|)E<{=I1cxju=ZmQ7At1A#HI?}uc6LRVj@se~uRWM~+~`IVgV?{NHh!i1^-AAnd5(qq>vQzUwc}ShNxc66!)ZVl zRfGC>;oF#OJd3=|d#Z%&Tz;Br8vzNWYl`yhs40~LzWzFec z>w}@osAh(A7Ay}>67?gO*rEKxqA){;p4hH~ew~Bz)S)dIKzV^M?$F!uE13{Qba>+G zUBft{RpXcYtJR)g2;MKJ@$7lmp+RmL4GFW~)*7bo@$*sO18#CGOzqH%h2OVG?%fF( zcsfou;#VUUT5_~)A5lni+a^{5darZ905P4@kGZl?O9w3QHSTGH zkc6Yt;hjYSkP90@(OU37ZcsX*Xz?hB4LGJ=$qAyqF0DO}#4iz$aUFCasPE0~7U0P7 z9I>CK4vAe=6bazB&|{n9vfH4P0pw~#fujf9EeWAYQa(l+SH@!?C_HWxpuWRO>;+Ks zlYf$UZmR3HQ5APpbSr^A8)7M`7zEwsks+8q4R`O%MW^6>#DJGXK2;&gd$$KhslDkJ zT|kl~Dt+G2P6FwECU+1Bxg15h7RRrA4)OSe$=nlHa}-()U0`-prmMUd!nFD3C&9(x zChw{ZQ`acweFnV1+S9^c5#>Y1?wYI?l?|Y5W;tlj5?uGbBG@xnhfUSZ8)>6SqtY;R zt3HK6r~dueQ6OY2UcsooqCFe#+&*zzD2IJ&qM^JjbR{ucpF4fDh2dWmRZX4>tFDe- zn3aD`#Z+@k`=2^O>2b{4cQ91}pmOCm>^$@OX5vt?6!-kicE)$4AswdSne#V60+_ocTx9MK=)+Yse1oSntoT zQt$GfC&FL(-i~^mtI@_=g1c0K@1YrYYQM!}Sj*CUxkF?UBsa>w?t9)-mOBpVX5Xv6qJ(U@- z^B8#u*44+`CrhX=Z_%~S&&x(JfT=&_p^iT`+66_5VZe9Y4oAjA6{d`wObn?R8wdf! z+uOj{7XrSi* zm=@uB6|SKp>D~Px%Ygj8zQr^hdUutwUN2%(9Ju;K-ytcI@t?tOP7t$rWO9SQOD2KV zR}ts!dZABW3Kk8M##AH_d-`b&TP3VE53lmzIn{0#9-jtgF*6CS{kI)K5=V+d8#ZL} zYR~VMLF!7RS`!c!8{yPYh3R-w3{?5br3ORr-HLW)tK|;SKl&%Lec($7r)SAR*Q-Wu z&}TcD?w(2#Em?fjzSPE0rmWlE?nBN>`z60xrG9knKInWF+eaAFV-r2MoP^ivwss4- zPqF=lJFo8vQsqX_ERP5!%ChE>n9qk+cy)4i7_@-AvM?_>zHcD>9Fd+pnh8aVojetq zql39Do>xJtF{9SUsj$bp`DxkEhlE;>z1ZJJGH|r#k6PlE2wkfuaW&@sezk{G$xGwi z0RJ;s@!`iS_Q<-2TH-^2JbDk@@^^F(Iv2r`7hlLMd@8S+vSXIUy+)|L2BX!IFKM-E z7xe}JU5ZC0=r-|Uv*aZo`gAuWx*$zJbpE-r|H&}m!vIff(NxP8V@T>@xyMF>9VF3uI4 z&GghpuO7e3D{`Vf2ys`uhEK$-{>)duDpD@VQ~%xiBT0{wU5}G;7=Br;3%=$7so39i z&+AmG8N)}rl?J1M4y^wn{yTx&QuK#rDy~)o@(McAzoIG=lD3ASU-x;*u_6RoP*c&W zT58DAB!514%a`h%$V(h+%Qt%7PhP(YqR!R96580#m4fKH{a#;JJv1&LzA8x`Z_Ce) zMc?!x7d}#>1QK4e4iyxv{c3H^b0TQWmCkRgOTHn6_b-?0v^HZNiZY?0MkFMQ`>-z(!jFn+&Lo*V@{I&R(yRw@BKZxWa&+pyB(caSsPYLc^# z#hU(CIyaz0;I9!D;Wl}AZu{nkt zArG>KG3zsZZo}_FvFjY(x^}mkL-`8Zl&^&d<}*LmzLn5tW(OF&44Hc8W@n|@TdP#! zf=${0+q?o{=uM)vv--UAd&j=CFMLcMtXE`HUhJaG%3_8^M!hp6)177DSZbYNV0Am-QifZuh zw|v4|EF|A3l~$`2=0X4Ww>G!PdhnWo>>yVexBm4_oGu_U$d zW(>EO%!zL(flnf1mW_ecbiFiyT1&@Wc03T90QQCWld|!MzORNK9HJzJpaTco>?0VK zOUX%X^cI8HS9Uv1b_?7kFiH7bCq0Uz?scxqWGVUo_HtuHkAxizu4UC&ukXeXULQjX z;gi(nmxA2FcRR0(>`oiWNp&g2fV*oLNs~Pn4yP1@*lS+)ey0Mi2!z1S1|TYi>9NY5 zHu)}ppN*mAC<4C`%F#?vFFHoeP59bZ6IVive>dT{K-HkrQ#lzle!V~8u#<=bRQ!dt ztM!=wDx%tRY%s$YBwAK(xsd*-`0J^V6feCuI+;4cDky`tC3l94GnRaK{2>u(=S?pv z#E2QM!}CG0mcb1az>x93Fd3mo^v(TgUi_u}^WNj|c>i5?8y=$Z81P6=qQe1NBb^wTW5FblNQeH?PV;B8SyRAODDyfFx*hS^CMc!EK{I@%m0Lx5PIf;^ia;LDhH&e9zO*g=OS`ftkr_ z9o$&>&4wT8+IEM2fX8H@(g3VuRt8&uqaSj6daCn2J0yG>YU#JFO52$8D!;(jkCfNm zXueX;)+pafvLePpdu#}3L)=-RIc9%nt%eFqOf{I21t0Mfa6lZgyyn)a%|V8TMVNF5 z96mmDkntDDQ2yvnFYYYi(AK;YEz0DV7=iwy_RT31>=v4hABOeiI4y`Y3Vx>iG3zI~ z2W@ErvHHIqXUt^O&2<5j=#j7tzzUReOHV<%VGpyZ<}B*&fce!=x$S&v+qFI zch;QhSaF6j)*3*&G|NL7L&`@rUJpYV)uRfGkD}%Z%(K;U98uZS+zt6Iyfo$Q zQzlJJa#ZEs=w~`6A<|0g!Td!#UzC){7MRXFXn;c4?k=&rBY<(1(_0<1d{vEeoriaOv2Iu{53R73f7~uor)-;I67`asnDEIPXoc7KNsk zO>DQmmOBa6Te(cqm1BO1fAL81y6t&|>K%XLAnPc*$l8-N?|xRgl0k{gR$twEoaxWY z=1AI@vHqnpWps9>rBQ*^;%EcUcZz}4ay-5~Tr&~7t{AbXv*^(#ZP32ZR_Q|Emba?DMO`Xy=D*kF8ZUn-n81e__MFBsJ9mbeHEz*^R6b)&7c;P~ z{J8|9758EPy>>mDRHg4S09*O1b7XV7+!c+9`6qc-e>#V&*B)B zmxweE+wc1S$m*%p!Z0!gR5Cc!BCP_&G8rK=5e~VD`@AMMiSA7ZXNrAf*T1W=}u^*I$+K&)Qu>&_LBs@UD77XFy!g-UjDX$B3mMm^8?k@$w zA)wnDRU|r4>Xi#rQS_sRTPRe8X-Z(Ft$PKGXWD*R?;e6aT!yEB$4$*;{$h1IDb~L6 ze=ezCp$7_YP%hb6kDD}o`CCrwBZ*u~<+w@W>oso_LwSv}T1ZiWrv6Z^} zgha;_{p-2oxT5dTsM6wb|EzEaqmXHhr-Hk zLkc7?#d`l4-L>ahhRe%^4<(9@y6L*P;Y;I_dp&jjrOT`QHriDwD7(3yPrGneu+TkI z7ki&zO0&vlg70WwTiV%!UWd?2#gY}W@w_Cac&S58ai=13?Hw zt7Ws!n?0mB1Ud;eXj@^@uF|iuZSN_cCNHs{l%l2AccD~Sesb;w7$)4mP{xN}2(058 zq!xGu{Y}0hr&)N_((Uldk+IMD`??dAb@6w!I2=hC@V#B`on@u$jE}BqX@9nJcvT(O z?@JL~`PC`gNU<B2d&5FFynJNz{vuHD@BSZI7VqSF7C? zOwj&Qejb`KiDIr#ao1_sQ(B@LO!1)DQwgQqdh93RT8?6NzXh+EBK3n=qw;#G)KswmeqLG#1#=fLFGJu7|g)pT|XY6j}YmJDtoynVkTDx zf`T_F63XI5dkQ_nyST0Q&!SPyi2Fe|o!;bAL5ac1ao%BmN}eM|uR_`NZS;;wMMzvK zw7^q!)a-`WYo^O{EcGwVap~{H#@;mC$vo{P)E(-t3TJqll0z#CWFi z>=Bmep{c10di@35Lw* z3dJtb$OVcbK!^8Eghs?z)+415LmNM$<7yzP)gtb)b+v)oj)=gowlkaz)gO|%CwLj` zoeDV}ZsN})8(D*^V<+rc2G@sy=tlrP1(05CILheM{m>9{<;`2#lg`^GrrvkBB68s< zl)f9E`k^*-q9`nP(e#((ACpbB9|T>1^1ygg=xg!9f*Qk3 z8ah)QCNQWI8#dEBGPz^Pqj;ffkVD2pOv``C)cV>VHS_&QMwJIaUNfJ02P|df`ey@V zvsi|i_?FgI!dd3iU+VSqULD$VYo$i?SU3SxJr3&ZY!6)Y*MMNULucg*Ol4zIuc)}N zBT)?RplWUY|7k6x`_PhfmT;;Gu@#ysbo;Jef$ZJ;h=P&@P_*8O@|hPqQ8P^r6yYQe z-$Z)f`q9(X&L)Z!1cZ0Ww%4wUGQ{{~GxMu-vKP4F+BWWlUKNi%W9ruU^acALNFV+_f1mrOm@; z;#`D>hXyyZfx=bcGmFz~dKwN}>9pJx&p?~|#c5!hs(LH|V8A+RAn9R%K5`+7Ys$&~ zQG?B|+oIw-?z_hWJ06Y6@>w=@HTkvkA9VrPOvyoLwIEBWqxtwS_R)(H9Gm>Nl0G7) zCU8S!R*F~9sqf*fiMx@~Guf4GGX?~-F3L4VIh(aKRrQ0Ta_dcfgSQejlleLLB+$AT zCxc!Upu7U@-Jln$6dz81dfEOOuO-|Y!1~-DU3F%>KKwsbM>|eg&K!5eaYj@VAKPG0 zZY!)W89+`+lAss`=DgPae9F>#N?L#>9SdD)XM-#nDL-9zgPdA=qJl<>+a zZQABG`mPYNZwft|4EXbb1^pfEc?92q3t#PQwaO!kErlN(!7G?%Jny&wx~etOmT zt7nqaJljj~?^@YULJX+=Z{9PN1iea6llYMD2?_Rq!mCUAk^V~zDmE0X1AK{fa>c9I z&jHnU4YGn9Ze}xcH$F5Rd%ljQ_#z3}*+rlxomhH0u~YjU(UX6a&>n&6bB>gf4rb5t zPZN5&=t)hmuk8?ClPa6~dSUj4=hMLv{6CvT4qC&08+&XOOVk9I_F;${_|Fy{)-mL{ zR34TH2#h^@`>$YY^(vOA4V6s$!XTDta_TLKeq(4#;#Mgt8ji!G;>4_8L5KsFiiXJU z-_5NIFEAvxJtDin0m^14C_VL~9y$rm8pAd%@E52wMi+XC|oA-OVA6?t2k>-&-V$6i@ z6Oi^ZgZUZu4C{5};zHBrzEA`FDH!@p3AVL-5iqKJ6h`Z1!=%pK8=@Y#Tu)tM9#n~u zM)UgAPXI2+qe3j$SVFK#m*Lwzh6n@W8K)ULrEoLI*OwwFArUR>^-n+I**k|wkF95Y z!xW>WjHV$3ok`jszJ*J$Y}Z)_IPrIbUwkwFyF6raHO|s`;wk=IU*V!8d%QpR5FBB$ z$VTt#MOvjV;*P(yz{&)m{W;KQ^_rMow&r{2ZI)QMCJ604gNsf#?g$pIS1WfteNI#a!Hk z?tZ4%+zTQQ#xyauuM`wF0A2W+kqfJDL1u~>TTyZ(s)1otd(N5 z877g<+|6(D2Dlre&eL}0BP!oF1imjb-eD(>bFX2-#y3wlH@dl5VWS7F)YF~>zD5xw zkKJx56HGr7{lZW5?rIq%K%0KqAF2Ohu~Js8v=R8bO$7OyChLmF%v-GcPHev3Mw#-h zwBSyubst-jt{sfW6Z(2bWo6;++g*bKU3Nv}Grq#it>^H)jHi7OayW^c~-Qlt$Ic+btr*1?yy;uS@t7>zbT{jk|RuwhEv=0&7f z-tAR8{&6$E&4y`*^jha|z>I6>IE0f!7vDpRkQb{#N) zrzjF^R=$A-pRd(#i~}KGeI_}P*q@*QW!?4PLq9T&7n%ivZdN%rydT}A#Oogv-dnD* z)W)_Z{U}l49CpmN&S4N%`ah{_FGh+Fpm*%d$$!EF^!K^oehGI#{I!E!@N>7SzglWa z1`EwmO!YI*PqQW}WwRn4yRn&1cPEK+&kfkg=pj-JAirXeuGl9L0ux^0o-dLi2ub{o z-Kal~MBccA**`Vd3wU}zvHYA~%6~K<54$P!q-B#2{#0QKtTFM%`fJR_s|frq<-67j zYCQB%t7FtCh5jw}=O)pAK@Qtk_Gma=!<}ol$8^!HM{=t8Rb!mSYm2cF{XVe`b7ik4 zxqj_F=X`y{G6_WAs3{WZ_Gl_VG zPqwS*9I`P>=!D-3{Hec=zUT~RF-iW(i}n<1H?E=rg8{}pn9l8y_(MEo<0F;+FVcN$ za#5xVcZA7`>CZhMtpX&I+IjqMUNpt`g|ItExFZsR->HhWi?xV4$6QLcj4Q#!Jt;wk=Hv^~uQcD-axPS^R-NUB+na_ExMxhko#=CMqBPm1pPzn4UEu{cnOok6Q zqA zeWNrcQo}U^Arggcn1Wp%sM2K&0|?zy#@8RtTUp3BwF8uitBF$Vlmac>ONg2$A3bZV zmZiKQY>@+_5UPNIKR%AP#$zu5!q0UTFzb^Sml!{V#2-tfVNQ~5$KIb-|Meh$T9100 zZ?hLpNjKorf8r%|SKJ_5gkVZJ%k+5uOH7TO^>&Omt)mKbRQ@`_cTRcjH4a=Vqi|;p zlBw8Uq*TRT6I?1r^xLTkT0A;W$r21O^6x=7w1W6Y=j2ECx;W2lS3IY%@6>KR`C;Sz zDgeLzD94DjTrVSkuTW!fyfil5LysJ!F9MvLM+`okEc5kKnB9=abQ>{aj3g;TS6^8N zT$x$7cAu~k;&DrjR5u4dHNPuY38}mov2d#)B=Fh0%vQffq}uJcRYP$IgA$t0ELI0B z{}9aotQ+L+HC-c^M>`&0mx$^_%YKL04spPLqv*-r*$N_##1CAnMIH&tss~3nBC!Mn*zk$SHP%HY(T80(ZgX%M6d>6hi zVH3+$ho~mJ=|6ZCmc?$7RhtTVeEb_jfrr|6rved5!w-Cw4#vO(Y~{%P0KgC16L{q*{!k+o zhFqPF!!RT{J!d~ElEiU^uLh3{i^qm|Cr}k)&<-l#RxH^v%-1>_uQ_1QM*fXX1{#Oq zFu&C=d}d}~yx5sIv=2?2NUpG$@mAC5^W98vz*mT$Ny3R(Rx==mdKoYyE98b46x6ooPDv&@1{Vb4T`qYiN(%X!3%WD5D|abK0Di^QRAeXc%^oh7?0rteKh%; ze5eI|zz^gMu5}Q-nk7g)(x%qEqKun-O{JBOXVqu2Wc;G>OL`qwp@!AaG9F*C-7!{j ztpEA~(jW5r1`DKs-Un_4%!-_NnKXD@`wGukBxH(^KLidLe}$38L{)So?ZhbEsG?Xj z*H8oGd3y1Oo~CjIb1iyPR`Ug&n2jRDkfYmn@6;lfzKlO)TD*!cVYy-K6u_zDPUcvj zX;S+4j%QpC;>YBY?Yv|Mp-E4Z^rBhgOWgm|VXjEwIalJ*eYe4C>jcqDy~0YX^1cOD zB)4}cS*B{)BC9i}oouAho%i$FA>r6VO$YO!m3gbrs@7qZJjZ`u(vX=x=5Qg*mCbQo z$Xse)sEs}6-V7Y7ZjIjGfPTQ@5p=Eo3qH-@Qb;nLz0t8mUnNFO5~aU=znQ%O`h(59 z+6=?_WU6O_&Oecvq6M8+O_WcQ#yzU~5yra6zW9Mj`Q3VQu|0E> zUa_0rTRextlFafP73qJaU^IY#`5ac}7z856!4w2atwG?XumFb(MpQb})AS;#b!jZN zgwF+vocf7U#vHR(7X2WsJ8%PDTzAgDkP}SYP8A`~TU=xXyqv3#zQW7DRZde_xXcx= zB)^NQg}Wg5s21ET2|i zVrKwZDSLZ!(IqrCDeC`0%6bXh$JTVJ%L4_NISYST?Nk4bRq_O;(=+)~rcXN{Mvlvl z;X(2$Lik5h7?HwOvwtK^)y30^)b@u?Q2NzL7)uS=nIlKgu`#%SqRaiOoQ&eZ&O95j~o_F139 zqOqurKuU)*cC>UIJtcEnetmJUBW3x!-E3MR8kNJ7?&F;&^O*mqh7b|}TeIkGnkV0X z6zdGX(Hm+ye>!FW|5gtNe&=Pn6tw+ylA?Tsi-!2yYRtM|o>aU3Q}gq zcYH;>1aAe{mXI7PmG!oMC9KulQqek`P&e_nM$ z2pe^y_J0ZE!R9^v$9tS3YF1>D`K1et(KySo=$8o%4I=7pb)Z07Gw)ZuVrMg+F^D(vgo!5Do9a=3h;?$D>d0kKZ>#4k@j_E zmzaOmhzeEGO9MB~N>-gJOfIU5A+%)4s_F2=g%>-y_g>=veW9}JYDD6Gs!zP-ar2HrqD+}hbJ9Y?KiZ@Vyg!uXsfOHvX z@tW7g97@J#Bf1q2dpY*mz+U#g^Fza1Ee6@FM~g(zHyNhA4rrWz%w;AP8(0D?v4*c--t2CB#^p!)z`>7=;P2sN8I?KyCyP z)X+PFVOP4v-0pU%26ESkv-%82$EYLP3K~ zuyKI4xO)bf^gbN4zR?fl7oBspcuNekqnV__C1?)$jlXa%8QQS^)mQggF7ugxnrZu^ z>S+QqrSG$a=}k6}Pqd-KK=3`t+{IGurYMdmtEsX|014G{fWKCMWn1dR?H9APm<`WH za!}(Ka5dDeP#3)Sib|+k-jO}nHz&Q>sH|80%heG8;Ui3)2 zccS5sjqaggQH3Ap&KJtX^Uq(KCn2b|Myc(XM+f2_s|;t}er>CHpwW0)*Es|Nu^Y*$5j+MKA9u=n5t^}bnJaUh;X z-AX3PJ-`sx7fmo!VrB8++#_IV1`sjfH87^b?X)BKIpKWaa%+Upj9V?8IU5gQ#1LoH zxkvy#LCkIndC@P-&8;XeE{FXaM}ulJNhB<;y86T{1*Vcu(uFJNKiI`AmllY-UFg}U z!M0Kb;y02m-EImI_$d&z)S-0FKa8tDF;O}qTcrhf+%vmvok!f9en8W zct)U#$0xmpYt(_JL|BK##HdVqvH`)HGhaki;>Pjv{zrZ{iZwWYMRZ6Al6UY5UZ0AT z8DEeH`qA3}xs2TWAvVHe1v7DxC@Xw`^Y(LqtkA%YUVD()5msXdl#{zJ74tF#NYR=4 zNXSo!M5xdL7Z!2$dgRDL;Y#XyOBu%i6Fu@fx!^y{u>ZD)SkG_qU8Q53on4C%lO`f= z>B%-i4<_}o^XEbW4rlcLkE^q6h=OaQ^#t7^T_Z@RbThO{3xYIC3P^X(C`d{9NOyO4 z4@e9R(mix{_wjr?@A!YXmHMQ!rX@{w8OB>AaqhB;fs$bQ&~Tvwkl7_E zBf2BO($U{9zt@a&X(ri7fSZx8-59JY_C3R(FfC;r119$E0sJ~G=8MlmJqn-sEw8Ln`R9!jMZ83dg^ZmB5 zbuI(BSN zsr`Vr*#35lTYn8fI$U7u-j3r%@-&%jOb<#|{rYk$Jp(bJ%a}UnOW;-HK14+j0;o7S zexvOE7A5qePH5H#x0O5Z{+^c(Bpv7e(7;IutC$^oICPap(KI?Tr)&WH>`Y$>X%qlf z{#Ct-)+t~ab-OP432Y|}li4CZRfIQ>QE6VB%eWx%P2gnND#T1d@U}OQ7>(zRJ&EBi z6oES@Q+@;nt^8pqE_@4!HF)`DzlHZ-qxoT2J{eZ%b;0I%z;yH_sRh%hz!rbdf^&X;B$yu$RME%ebUmwB>8+AZ{Ku2g83XC+}x zD^R`+Hj0ET@HcLLRaPNQiWRF$#RWJjpST>=C5lyb@L0Q;Tp+VHj>`~}lM9R_h=z)a-DKE&mZz_i;e z-sSoz)))TJ$;O#|y`SHZs*-9(cXp5ox7_C?H;n4^F66n9A%upz=Vbvt%&+?Q(l|FZ zQsDCY`8y$~iG<)!vQ6NbPw0wK1X@f3d4h!>@AsWk4R_hJI*6@n{&}7vTBr$omh;ph zhE~U*$BR*CqP9b&wXFbf_U_@2xn3p6e9RG-s57BL;EYmb>mp|M_a>?Ft0#zfF69H% zfKH+B#ix^(+@b0id?7#BVLJys$Jca^P`7f_pMDW{NV8`8)S895KTSJZ@|BUP4csye!r~ixlh0M5J=Bp`Yr0^D2f~7Wy~D88t;{dx)C9GoJmtr|zEv^`9FN_9 zYh|1-WrJc1KW%&AMIKvK_IMu%WCkfnM{NjU4y55OnUE`Mk>Zd?;KN+>ybf>5*mQt?Z?e=nNNsnuTV=a1 zGK}PTW0dWu){LOPo#a#Vy*OqLw>(~5Tz`gre%bqFE)V;KYo10Mu0m$w5n6&9E_ie2 z=P)TnZAQ)q`}6nqP%$~rSgCMqHgWDzz1ZzS4BFo69r5vc+VxdZxwru{ypI?IpWslJ zMk>wBA(p3DHqFW4Z%g|$FqaeAx4Dzx%tEx83|ysk-8;9AK9(13;l#X69OK@Djk@=x zT3P#bT>V+R7((j_fj0P>-B@1U3kJn)ZHNC~)Rek@c)kw2sxR>|;OHQldS4=ys=Gl8R3ogN)`^Qc|*sAImm~IJCP$#4JO=|{udD}V8T-hKWYq@{rc$(;9Att_~`9#80{cxe0H^7Ll|Fj$Ddnh)=TO$_`58u052n`{ufN2FomjN-Ju zjK1W^SLNwo!>PVNPssi&_WjXi&)7=}TUl%hvY4_*yaU4iDCBe=RyuY^19Ez>BGvwI z9jW`NSG&ZDz@ksZZrt}8SnbRIOVMkYVb0%QIHgn~^gvjNL^aZc_WriPtX3$Uo@Dl$*9JMESf?O8R6?HA8;L% z>*-to_n+*e;)GEIw=jhuQ2+-W;6AA0ODw>I_$YH(oXQR0lAnj4ZHgj%Y`#vk%0>@< zDFgFpf$OISdu6WC$7tI-xQb;71zD}QEtl3{Ti@thP5XT_Pv7r^@q1wk?tb4)FL;D+ znFqFwtye%J`n|m-*@Z_SbI^O`Pj9W+>1{mMm};{}z-cbCLQM}` znF5vKsLfY|ZiE~PqP&}cCD$?@@^$seV`@xkMX>QzS5}85ChSNB|A}oGV`m!gg(RHH zsq3rr=rSfqooBS7EgIL!ptPFdT|02(G*jK@2@{b=mWrRRhHey#dc5qxLioRaTmSsM z{(ju@#_&uG6%ftlk%0?ZY>e2ur&xfcNW1(pjAGcimNN9&VE|oF>)u-x$$;A2|Jj?^ zO)?ucM;nK`ur8#3E`2s!hcaA3%$c9*$5_MO4H)bI{g3vk{N9O;%{}ku@7~t?y-?i-<4Kt#Y2bXkL8p;>q`aG_S0F1om5r^$JW@9;3Gy?Y^yn^lt z&@>Btm2rImtci^$QroCe9|V+Nl#$Z-V{eAU8ICHY1^p=gPU6U043v+Y3yXezix>lm z1U;&Q<*$?AM>S1|G3}L7DP@cw`VH$K?|b;CUFeYUtpuWS-|c297{e^L^S3o+5GV(g z)f{kWX0~W;E?A}y`uPjHU`tdDuC<5x_av2qlCZEJ$*u`pe`)LLe0z?t;o#<`%q94# z8w3tt3`Xo!80BBRA*XZDXUBs^P1GGbw)eB)fJucKMU;~H73|= z?}yGIAr&(}F##iWDU6@!wbyQ~INW>)MZDE z@9Lc&PGl&s*OZ#4OTo(QpaC+|5Di|>9T~O4_cdE=y_c#hCQYX@3~G( zfqYG`1f_E5F!DLo=1(6OVC*`7e2i`c_!NC?CO9>YXEO~;=}-vl&xGZ;KbxlZ)pLH#AzYb&95x*r25O)pdxm@i57G} zmjKKmTJr>-6I}$CSDE48GXcH`Uq(N@U6}sbzDztnh_A$Lx%f93aO?b&s~0u*YUHY-D8cEucJuDS3ClkxKiWZMDGtC$|LS7EqDcQ;$KPM+g3Dt ziaM4gT}K-VJdh8?eL%>SrBil`p>wUZl;tNVz!bwSl~XGDD?g5@bWq`8#NU(s7_qQ5 z>re9waLC2|*uH%EC4&+@o~5~Xv_2ZX8B#oQv`TKat6xv^f*!jRpLa{yz{XJl`KEJDRk$mn&Ut~~D+Q|T=Xeq%@ z*If}?ZuMTzt4xTiMg=D(A==pi%wLk*(!hnIkG4%o;+5KuTjIo8-~)SB!*T@%bPx6a zN@Sw+fh~WtZ)Rs45dn+}%AweV2jjdU*gxA4PkT;9DZTua+e>33Qb>#gZW9iU!wN0Z z2+CShU`Thq(t6H1!kOVdC)(-=0GB=^Ny8DgPMsHQ8bKlIKz|fidx%F% zY%nS2`3=UTaTLn7+tjbTTRv|*D z$hSS^&m?sjG=1yQtFEC z)}o$UXN zi?%POz@$iq)#;}pWGfCQO6Y`SFyRKB!EgmJ$327yADy#oI^+ptFvu-om9$>!CIU2A zG(R2FZ0F#EQ7--u^PVW50F$CRYZ)h@@B;Ot3e571rxh!vK;X;@CGKeI2b9&=I8O>6 zrbC`t*V{k`)bw?q!xvj%!-x0!e_ON>{<|kM!-gVoiC-_`DYh^clVs4Q25jN?5)IC0 zc~~g=nRuhwE6k&%8gm!L1%&*c!lsHf!jqWi%f$jKG={KAkL{$+TE`xPioULx41rl(#w6f z6Qlis>77F7je}VTmGw~dMnXdkL7m& zmu(j=eD^~5`1eaxjn`PLU^}`WkJzy?nKA4*eg4(v2@Q%Sy2I0A2L0xmur1*?3Hp=RpWM z4LUXc){RG`L8WiwB7>IA`MtL%|&YY!`dKG5Bor~JVQ z{j;Terbh)Ay*vB9d+G~8e%0CC+`#)rU>T)c`2g{%vym(CBtXky{u<>skJc$_n$vkQ z1G(YaDT#Q+i)D4SF;%dP)~Wbm-PCmg@`|;4XGR?(i^%$Q>W(rIwg1A4P z!Y2q<>%%_&AQ~3uzh*1X1n3j<=Z6WxYRCagN6hzniuT8$kk%XeAoG@)`7U$Wo2uQF z>z7A`&Z6&qh_M0}L$uNHiONy5goN!lUC&));=Bsru>IhoQ)W`g+k3%;(2+lBp`1Ka;q*3Ew&DEozr2==ELueW81eCkLp-H@B z2ZOu-QPN=Z>g;=5M%**cHw#gP%V`|m?2zizSJjQ(Sd1lG%~b_LvKC9aLcKmz3c^kw zl7v$r)%|&1ciND>Rcd1%2co&h5psDTWWpgOC6o@tzgkoNP|FwN9cA;zcNv|(BYahb z9v2d^ScaeIi*8YE&bK5%1JN!dv=wRs>hIY+JIWY9R9eno?(>fqjrK~>V10MThb}@x-$=M z+w{(s4Z}jZW_8@S!j9;R_)nSzgk%0U5zVyz*Mdy8`yo_d7M-cPEZ3t#N!CCYyqrhn z6x2YH)?v5@=B%c((oGV%V0*Rlx5u5EcaiE2uNkzc1SWdhbI$i#1k~K|>rUCrpM}Lu zs}L*aJMME6A3yN#b(LecuIS0{~=(zU3y7YXnnx98(`7SZ-~oLd*r8kDG?nFPHK4Tp@JJ3 zVg2NBmnpM%@u-nz)8@tT!xlJ9qfwq-+rqhLr_hl=D0B|xEg`Y};likmVY}CSg7qZh zE+BKB^OP&T88RJhJ?N(}jC*J*q<-sh5x8DCJLNCimnTDK5j@~{QFo4=tepMyc!X11 zuHc&EN|j%@fQ{jkt>f#v;Cs}xo&NtmxBnJh0vub^stuD9mm}N`RP{|<{Jy!ZRj?5= z*fB}bbNdXaz#h`wSw{viUV^E;T^g*0VmsFuq(1BA#AbD{6lnxqy$qak#0reYmwghy zD-%j{m+d{-%b(YIiR``=p}%joiRu3?k@5xT8T&<7t!Ea*YSG)N%$dAN&);WuG;}sg zlN51KM#Oodv~?@fap$84NSd*G|Nc#=EP2J31JPg{#t5xzMFI>=riczgu^!C`CKaFF zk$S?q*t}>CgL3f_Wc9ISiarguMKD{-{ly@&g}bw|Oy?g`{TAXcX4s#QcWv2$E3a^4 zFYiZ1XzSY{`&vfi1s?V>`2As1gLQnn7yo#$I*Clu44?Sc(xyikvDl zrv_(?+P3}B>9__mf7^Gj1yd<@m@8TAwpP%>b>}WzUJp`T_nb7B^!S9FP7p*ZzK<#E zC;UFw+Ka5$k3`m_u~|si+)Z}>kgR@0+4y#~8CbM@J5=f!A*nVl@eV4Npr1Rsd*qNi z!>(=_z2eZfp`LSpO`=IptK`u}U&``1Ep{nt{QYGjdnSp`TiSyMOr3Yy6|@-R=5?{3 zo@}i$-&=E8e_;Vm#gX&{na4x@{TUQjSO^LkW)l*ev-?In1jCE2ftULw^sDkfSk(X? z7SjcQCHiEVf3@S-`R>j8iNC=741v<4cpkH-Mlb!RSj?d{B63v?aQug~C*xpxvmR5@ zZh{k#u0Di+vz5#2k*Z$jJtgpdQ7$&BjIgrFj`}HY5LV_&vK4xcNnQD~EL<0j+Bi(^ z*$bFCu3~)0aYANOt;dR^cnOc!nU?VQf@hQF5K&b|51jA2SPRTch6~?fX!wy3+pwDB z))6j(=RcHMnS?NneM()ivP?r4|M8ISDTOr_rotLCVhu{;IK*H#d9g#w)qFyp0XtgN z->Zzkf$F(?MX^j$@A%9}8rS@WJDdfn4E?4+?ciLc_4xy6??<}YSw#Q^g?-QJJ@`(^ z&I!(4X@zOv)-`O{gl!()GYTVh{JfUU9vwCE_c820Jhaq;^y!_}*QoMAk)JA+V4lp* zA70!9PQ<2yV&|8@>)Jn$n`-U|%Nhbio;RIqq;|sRJuy5ihS{kldNmpNPJy*o8qCtrQBx=Eh6Z`E*8MUo@Ol(k3ZW2jRdfqj0L_?V_`eV)YCIGumOz*rPAslYr?D+)`8!s zn&CMqd;wE2_Ay{-!fo7e3%uVlheb5M+NYSnZ*;;eck8f61d|2bU^8d`y~4JP1Rcd^ zF)ggQ3wD%iSLu2Jw*9}J)qkW%@l0IxQ!b&Wa{JOy>`J5TdGfmz7?k7m3u6Nb8z)qi zzjWyXt%);bM<;MZNq4O;SXN;ISCB9n5{yNyB(noYK~r%x{@Q3(V1aZ>r<@dqs8B`Y zB1j2A=OhO$U=gpGsTi>Ur zTC%rcAOp-5WxW0b5P;%BhmlJN!>K`vgu6=#;HiA3`<{e)6x~&xG9wa6$PnBy@n@s*8&Rdm@&-xQ&X#r<%|n88;4sMP zzmEGh{IM%LAtuu>a_Fct>=yBXEHgn!q$wd3d9^U_Eam$ScAcMZpa46 z-&A3z?Z6HyQ^Gt;;fQrn@|k;B?>{)4mlY7WPs;a#y5!8q0wmA+V_&P1neQ)Mos5q; z872Dh$Cj#SKu*}38XRpZK9exT!mBhuFKBVg>Mxm@--?^`@(~?h{RQ{ga2?3px|bQ- z`;*z)nLf5;B8DpK%8R@da=^s(HcuMuYlJFyM)C_0>>>LV!J}7h;F>Q72mR*>n$LTQ zkLKv))V;^6J}WRqqaKr*Li~@vx#-+pjjaome_`dUhiwLb-SBx5Fk>g=piD`_h@Y-` zxam`dR03H1i5JbuM2t$z)*mmElfJR1jDy5Fb_*2$&sd zd%AC5BAIp8dvH<6ds;{t?T}m|IOzIq8V77c1O#n)K9}&BiIhv3dr8yHN;T878Es;C zn9jw2{)A~3_}2q!xkX-?aA)xRQyfGq_)X2W+!HP@EyZ6{OCy@fcC4851^&nGLy4d_ ziKv6ivg8>tCap%4Fkqzt{>|W0}F6`O+ z_}UfM8!~o3(995kg%;a_PLVbQs|@7l5PeOGrM#!Yu$2PtH23NFM2vxTt(0+U0Jmj8Jha;p>x z-_MP_eS6?Jd4 zaANWmeA71UP{Pd%>{yBTuQMsY6K8u*} zQwm4W=>0duB4$G&ZefH*s^Pv2P%G;A`0o!e(Q#cugAWRxs85FcHILP8pvHcl;SVi! zq&JJ4!B`u;Dll$h#yggA2qWDF?fV~acw&dl@NB1UjnJQ$t4)7&*K8xoo zox;vht^|oH6fLQ*)$l83EYob}&1X)c*KY#?=0!jX;?sk9)|AlP=TwAcvp3PLe~M6A z1-b$TL*9hl7l1y?#{6k82Bf5Nh>VZ}G>34qOqKv3t^U58#;Jiym+|YJUQ@^TTir_Y zih{-T3qG47U&X9M9;@``0>qA!C@()?{HyEKiTxA-HivXK^TFMH-v0KOZ zqKqK>uhRo!2P1S~ER}{J3PVebySX)21ycOcb6pUhFtj)x>Ag)3D{SVJOwEgi0%=J@(^Z#gaZN#5 z`>0qYX->d*~%FQ~XEB-q6{--ZhO*mi2!(?nLg`EtwBUTm|D(XZ%>*!e1X^UocM^x(vzN zEE`EYQ2C5zKb;djBw=Mc$fn8PekzO*Q*Ic0Xj1Xn*yhjiVQw9|KW=nUW-rF6E7^{@ z#hpw)!at;(T&|vWAehXETEBlW~Jaao0756!Lei%C}2C~0Ro z{0kx*rTtB-xuYfCp99xCIzH5KB40ypIXGOEmmCG79q?Mr=?R{T?pdo|#67KRYMce? zDvQ=Vc}mCqASjEbVQQ^bIN!+kE8&`_`e3Si_!+#%?0x?eeRAzV0YlKCfv12i&fKO| zBeA{vaGcxgA)(FkZ9M*~?r8T! zV>+t)rIX{xd1edyYpdedz?h<|!RpC;Z=~v~b+FOYYl|z@=flbpe`Mhf7;`{IqRSo}8C zu>Xe8kw3oDEKKiGAbZ!9!Vb5qkxB#Ak)Q_jYAqV*ANxn*xsQ_kVKTBB`9o>O zl+haxJ%K=`6tW+>%eZk!@^#L>9Qu`5?xba`8lbX;ie*^z(Ke~YVE&2i#Jobg9u7xq@)Ymz3c5WaG`XTMei6zU~TS)V2J))y%PU zcKH&Cw{jNSsY?kA$pu>Lc=0{|#iq$cc=LSvr&fy-mSDg^<9M6;8JtF<`6bbp*76uo zEbpy5{U`-O*v96p%OC8gj}pEJ~_ zW^M$1hfM3$G+pILmIgtaHHQ63jg54)3qpEK;x`HgK42O>X7r2#3m+bn3UQDjtPVC9 zghjDujhgi&2gzaFlubR_CqVaeueNUN(CZLtLLvd*q zHlMaB&FHTW0D*!3zKq9$65(DsxQDK=-96T#i78;dnv_P<7Y4Ip!bi2o;PQ;(hMDJ7 zZRn+;$K(K5)$+~B5Q9I$?;~}w3J*YaRZ4F-j7R70P1&d{te^88-H_t(=wR~1Q4m^Y1O)4i|E zyhi^L-Zgsd%Gmbsrv%O83?~9}kZQpA*oFm$*}GP5pJ3Q)L(xQmh=F(3S4|+23ZjoQ+vk7?=gnFl+9;4S8UQB{2gfzz+7=> zUS$J<$$cdiM}#X1=i#5iEr!5c6IE9tE(b8OY%#4W!Ves!&n2NkW*=Tnv|nWJV;)@+ z2n~Ryk*mqSuF(u;DB?mC$9&QkskW4U1NY6YhUWmr*9m?>eC9ju+YOFA?<;^;ci$iB zu6D$SNi2MmDsX4FX&h$Q=wQQ1*xsIA#FfvCBVog>mu1SgscZ@bHIgW1_J$bOi9jDU)>ME~RcUvqyCaFD~ zM`(eO46iJ69aV$J6So#G--F6N24qybNsPVYeyWOV!>hgj%EoRj0Mkv&q;}e;9itaF zxZCT*7)zh0_;M14R+|tMXj&wRQTtL=#^hBT;PAWJga04y%tuNO$dEJ5PIlv5K7||X zNIrp;JNnhw*XEmBqg-^_XW2Zxk1rAW=jKros$ibdk2|-`XsA2hPwh0D;3JJwDOzKR zu?b3w; z3)rWqs`vm4(B(jbOvnMe>RhScT}{m_`;5$z@)k?gUQy6$9~+VD=%$96C*hM~(w8>j z!pJ|vx)wl}MNHmK-gZkHm{Bi}y!9c%9Lo1&^}=a`-)7yE75QkJsh|7EALW9{kB;(F z&g2m;m8)C(-0o&Y(d_{r{BS=0XKnHt&jMgq4t$IZT!Gc$mJCgApxeKz;C&qr*i+gO%C<=yiFV)bl47vTVRlXuj4iaSvOEQzrS?)djVp+s&T{#T}tM;>ak;`9rc3q;$W@-FSUB9gu7!2 zHqorxRdYng1ay&-t{zt` z!ZZb$=X5kcU2X;!z7znShy6Tjj%Gw2W!fN$8EjPC;l(R52ArAmVs_obN4fl#{#As+ zHHxLdi*93t@87nU(k`K)w$$!@t~Q087zFhgMDy?$Z3hB*@sxlKEcbRai@d1mHSU{( z5c(8BuY?XsyhU<9*s7m~;dqS;SZR;u zK=*b=Q*c3FuGjt6xeoc45zpoAYkG45+}& ziF~7|d5ePA2`AWS^m$U}opIlxf1wS_430!>&8O2%F*Inlv_U__RN!n7pFovhhESIE zO?3VcnAbb`htG*jMBuVT0{3Rn>y4EJy{a^*s)T1=?Y<k`-*NY#2d8WQ=(zzad%fQ4sr_`~E)nQ*TneIw4X&QgL4{W~1h$ZUa;JDA_=#-a>+(Hhj}9MRS)%vK{`sYgwOL`Txko$RAYXf?w*BT@Mk}ppOVM47qcH-eFS_N9%+g+ z0V;Tf8JUnq%WiB`yH2*V5H&f8tVaehg)TmSX5L`}GRCG}x=>da3ir$3^n_wWNac@Q zQ-No?=K;G3w2*f_ZN2m-Bnr_}%wOiIzZbeMh!siTK=#_dvrbdMcj~^E=2eZ#3W`q1 z>{E+`ve1MkbmU`>Yec2sM;pl2{^#{6k{d(epYr{^RzKV(`jgzpPPWji=ih#6lfZHK zYS@kiJrP~IHe~k+sGuBPcJIXi-|1k5{BmJ%cSCfpvxJURv2#$r{l1ewetnyX30QeA)I~peWXAbD`JxtSKYqI~!Ktkf-~LK{^CStjd7` z_IdPumitE%cL}MB9dgZ)f1Zf(>~+ys9ixZ1paK1gbuQ}(%|XsEoIu!Gp~kDFdxGDt z9}8wyx8Z9F_PYFQvfSK`$M2Q716h`QDTVZ>M_CDlEFdPNX&L|Z=dn7PWRe^ZCM9NH zGyE1ea=|(reJh5*{fVnM3w5438$n|N1DFNt;lsflV!cPSMrbZuo60 zF3Qk{E2Br={!(oW4nPUbH|>KcCHEI_n)4_8Ja0r_FRBKVFX#- z>#=Xdhsu8l=T1og;d{49Jkeikqjckb?QDY;Ps3eHUd(rtDt4yny@STuvT;!hDA!Sv zh?E1vH<&iCwfQu=nVj!^Yv6Lu8xnCpw^ATNw9j1*u_%Lt+45B%XxHLsW#MJ$s!tbPax#Ji#MH%D&ijTQ>%N7SXG~mAY!A_sv z`XY0z#N=+m3hTxE;dZ}v7Bnl}u1(*Am`z7xJ<8uyafUPFZwAGVYfWuzT_t`v2``{$ps*pI4rj7SeqlHWYKadH4@GD8#PjaFedy9Po-J!iL^( z;aap8DO$<1Ms@|%ysVMRT6)dy86$SNF_HZ+iA=4)BJ<2<;`elXirt`rq0u7hVSoBU)MrXac*kC*3ZR`y5nBdP{Jvm|wv5Mm3H5m^Iv5Ij5 zRT=3sOc5jBg5UECA+sGT7IW4EkiU9GzKou3BY*Mu57jXFBY!>qons9)LjEmNO1}B> z$zs>Cq1US$Z1F|s3v2WszW!FU%1bdRX#C3Go`)DBrFe0v625*@ADvv?36*|W(Zl?pB&^he z*>CfBPf^!oBSh*;;J4CN-sddu1|t2UGQU3oVnF@f@uv4wCXuD~Qmv&co#CZ_m7FEd zRuy#7L)uMnsRqnDp1kjJicQ3=Vxhv?xTo53sC=YUf3eL z8g{oG23u0GxYPq*-+uJBP~#ak1J4APvZs`DwIxEQC;MC;m&^wi zhZM;9e{QmSmWSB7655Eb{fx-@Itrl-$FZ!DctOsuOm+c%q7lz7jCR1G2I@%Nm^z4Y zP#}_4AGe<8j$QC)=~BIfYU{_4(j{kltV)(Fj5gOw7x~Nl$AB})eEL3WXB^*xyOM3* z=rjK1eAuJNw^*TQ!btcB4rH?TY{8q$7Zz&rsU@wv0DV%KIM?S)scM$_rMsd7^y+4l zTV4(y41MDroTH!7DQRx`-tQy*sae=09EtfZt-6%dWXPZ{8ClM^BV_d| zD9}+;y1Mkz?{2N5;v~B7eTk^q^nBs`ul^+=JoU4Wer$gQ$oyhQ%s^7B3I$S ztq0>mUCV^#63CLzF4Wl7UdG(AzuawRibFn}^ocZ|h1O$~jmsZ0}6x!qCAb@}%Tm6zx6eooHU14zF_WQO^f z6w}T=(l^ zy_T!RI7${a+b3G<@MgQ`9ks=4^MKw%CMta{n#B&WDEau4i?qn0X5=qMeN<Qj5KERw3S#1@k1^>vrDhHr?1xJ*NhH;n$1 zjjy1k5)dGS#xq!cDbzKRjpx*}zh&TgIS4kL_8;_$-HeUmycIS5KAur3_n6DaX{o-E4aokbTf(c)T(OsV{S;EJJ;>fjeTHA& z^wnR|7&MxTqwS-v`(BMmDb+`fu%uwOE7q5W>|3hS%hi`Fioe$S8C&*d)YX>f4^r1f z>{xy!1vyPC5=Gt@X|IwVyC<0vYQKUvYIumFP@gfVbHeBPQbOEuZ9XLjHlSzWwc>7` zSzIdt(ocqRwid;;2LJgfIL-5-6LDAVK9iu)3#Qp!+!!%APCqJj)T7u>SD+%LV=zrzoFP%>}y8 zAhs>ld!jK+RrL?KKfsSnIf5yg4rVb=o=>YkY4{{5d6Fg?!Fao^GdjU4u<`EWwAY3> zd>BQGBTeN1Rh9yWYu!3P&GBt+Q|&q8p>Vgqrtc?WktpG{ixl{ys{OEIdL4SaO6{m= z##dlG@OZaDc^GC%V@S6~j#fG%X<3{;gqY9yHSeWOG3zt?yd0_ryaH#7yjj73KX%&3 zbR)ScWdh?}2L@?p2P+`r;!z0cMyuP3BdJOaBS}PWF(GYYaOdN`2wZ;ZQ+wa!d#jP!#v_T+QQC=%eTWe2O9o@I#tRx5m$o?e|;cr0q& z*x*Sryz9ahAHT{FcDxV3K~HxeHB7QmL@~d*dH5`i)4F&e)>-ijHuF7iv;rk^;!gjl zD*udggF&UWwQ&_PG+ z4LRN`-w>$-ow`cSklxlw)hQ>y+O|PFbrk?YFt{`*CkVf(P>NucBn@rh<}~k2fi!k- zd^Aa+M>~GU;;**~%rev^7sFG5ym00`Q^X<;T6Vb!5*vVNib<%)9 zj8PJ?QAU3Te<z2Dv~DlKkCXKGDWZ3x8ke14B262I-npXCP}|8qfEPL7~5y4f2L| z!AUvOPvVbXAQADQw@-dJ7HOC*(MQ~%xdW}(3`KB^Mk>Us5(V>Xc*0MZ!;1OumDO&m zBs|r>S4b)!8(A?rg1*C+ldo0gYYA@B!u0gqV~I(bo!t(k0(d(dU0C)KLO7PZ!X4D9 z6oySgBst###x2sPHbaSthP_pGajU@N%ON_LrE<{P=R`x<3bMu2yNXG(uwDifWzBc$DbVt0e$@W10) z%5v=pyDu*p5#g@xJY*6Rem1rwS=f#DPA{=z?9h&w_ffR3WvAw=#mB$z*{@f=4D)dv)2B=8!-d<&2Zh+&i;ON99gYY5 zyeD+7%I5dfSM!2-^(u}&8th2&)4D0|TWAKe#PSA0CHQcqtov9t;N7WDP;_*hI>vST3qI#$q&gn00?; zQ+@t?V(KL`W|*oLe!~*V?L$bpDgJ$SXtHe9P7Wgc6ns)-joba?u1@r2L)IR8R+LW< z`plhi&v<#G<=U0zWi4Ae9{Rbt1phNx+P{eS7oywM^4stFpOafUzM4-6`!oA`d;1U< zggjxBQGAu)b2M9Abg~qbi)9-D$G>Dt z_P?OJG>6lR^z!)r-NulAW5oKu1__@cPjJ8-mi+_8+Kqd%W(qO6wV|Il?-ZBcM-8=jzBx*0&} zl5U0)q@_dRp{2WHMi3+Wg(nay1+>BuZb2igB+&4sr|>1xti3ycrROLLmjzc&VL41)V~>SI@t@jqJ_ z^bTGqM+!fG23T=TPz{ZR+kBC2L+=~)7C}O!2H)k^u1g@RPe=X+JjreN)<|Lt^ftwJDjeU_4B*VB)oaY+i z^@DM}&4;n^PXw~XwBWk0m?H7Cz)spks2>>~ApdW}51;?PsnAzGNW4_Gs;q2o+BYmh z%a}Ib=oDG{gv;umI^PtrNAgmeibty5D=YIv)G`Y6J@&;=S0to@2D!Sr@sVmV{p%tU zg2;;b|JEDqu=vYURK1JWaQOHAqaK~d0Q|g{qos?s*s0f96H=k8#QY4%OSLav=&9LQ z8dEl|Z^%dNyXQ~eLdof;j0yTV7;)LNn1+ATPt6}TnGYkGc%R>R({k4xR4VUQ>AXp< zH(qb(GJlhdDM^48*asO*%DOb?VNld(9$~5NCjYlX+I%SO-616yaoQF?NA9rr5NYl_hbYAlnrD2GR;WyGYr78|6AiWpAq$!zQUq0nD? z-NU2q)b<*yJ53jcrdZM{rK459T&;i4JQb9^+^sryrjO%*%&$R+Hht zt_1bBw;8#{0tRsWao>aIb4WL-?LcE)WJrIbQ!@K){G#Ft5X|S#**`#=Sx$Z@GfF`k z%j?2{q52=vR{Wiady?lnXmP)=_ttynu}nVqs~3V8;+iQTgUp(69!8lT-lwm}HaXcj zJU#$TvxBx2RY=Aj-yV}q<%8P3^M_*Gh9Jg8>F^-Fptz$2i&-xzl(j0eOwbu91LryJ z;gdN`;HEh5ww1uOPAZmcPq**iD#{#*Uw0CNnw?qN22Vq@h4(xe5=;JdH~j^k}NXmx7# zlWa2jj%LO6o3{s;0ok{pa-eC>^`!&8HXr8Q-+3o;?7*B*9^E5NX~K(cLYk)=Pm-NJ zR$V@KXNw&TOBxX*AR?PbC#Y%~flL_J<{rh44PX6J!a0H{S-sTJzQyO;+h4ElIKu38 z#IsToq=KJTy_aP+h43vKbl;urqVe@w7c3bB17dBCkA>1s0anGUB(=#n78zSAT4d4a zEPGBSrSWRDXs9ggR>gDCER>exDsh1e*j6PQSUKj z>3;B#e!?!;2kLY+idjwKT5vR2(NxESiZnMdU0UA(1y&ql+Q+3V$f<+pHX#^8+J2>) zM%6-$+=*GU}!gaeXh?6*4igFV(fwaqc6Hg z#nTA>Y2`lb{)o7yWsTtG-Cy{t$_U4`4-_@J3{4)WE&?v|tVG%aGq9>-aD5(>wdMj( z!0h!Ndh*k4%&ki(%tpYq^GS`frmpc*1~(l@Uo6HwkVeO1n#h5Au>`2k`^W0E>=a?k znaSWXgX459-+9S(1vD}FdAd3>iD`8Sp;BAgBorPD4{5U0^Lae z6;~BH7?-J zxeEWp)av<8;|n;1^O7m$Dg-k2=IEX}lH#MfwK!J>k~;l%YC|Q-9BnG7-N;dM_v|J{adc9XmzGUJN{aV7s6vrM9c&NrzTTpU2-Tu#?2#zaI?HiftjEHJ-?1m@g744-{Xdp^X2h#0;H-hNU6 z)j}>E7ISr=w8l|qFNi_1<~F@Qs*j<3eEzeU_bgb_9fr?R>o2ib=mKtQck!^Uf~!so zh(U~ai~WSIn2Z>VheiAxM8ruwj)xdw2`}BeL$yGR+`gLquLFoY^z})d|G*NOt?Pa^ z&|%q_(FON1q01f5)x>I&$(DFY+UGAZgb!Q_WS{ZE$2P)J#CZTc9O%Lq9p52NQzPI0 ziW2l}^S=HTREqguO1!+41|B4+(;yRldcl2FF#Dm`R(_8Vq?5yI zow5#7TiP+AHVJK5`~J<;s`A%gsQhhJ^JhWglF4U%-`f~%tIrf4=m@=X3B>RQucdpkI6c;75Nd6aF zp25$LPjxrEJ;&;h!A6d$X?4);OGS-_JwQUGd1P7XBe-r|9aMGyI)PW~R5u8E?3=av zS4;e9<@x3HPT)B1MndAXET$Ta){KOI)td}?&Gf1uzeMZ&N6g9_;BD8@m+Q4`*aH+A zY(Wa%PzFh?jYsc!)q3Az?&V-j)6q|DiiU|dtn4&ipAHznXagH3Hka8F7<|90WLX2x zNWl0D0@@|jG3p6{CEuI4DSEZcAtD#%`B~=kd-`Y|9ce~#gy4krqja|RA@J?H$PPtG z@nvStSMuY$B?WPr4qhR(vqeU9_ppbtn!rMWOuH%Vi;uB*)P0df)p~mNi-P;_?#iHX z${6R^AaNOg_GF3wN-WJ-sXoGJuYz@rH`o&7D{ZULI^=DzW_gRy&kpam4Uj2g9ei;z zQ89qC%4}-7D|#rwJmu_(IPM0tX$O1e0|e9XA;1^idHcDuXuXmqDJWEc=gzmst5dqB5H{#{t**vQ2diu3UCHuvGWJLYNV7G9?wSs$h~OZDgsMWz-n z{q@#}g(*LO zFAJP+hfFA~VrB4RCYqm`(afPu&p zhrjEJN#XnBR!>JtfNF-dU+>WHLj4UZ zfq}EPPJ=zWzn%$;VoF((U77H0gNrk2qFk6@Ev_=2uFANNAwM_%b*XWEyu=K|%&0L< z+rs^PEvjr1O{hLMBg%6573@5ybuv%50#m3DQWCn?=VW$W$=x>UVJR4#Rh ziAb))^4@QBoFvWZjP?3b)zw42Bn4`qSVUu)J8#9Z>|jUPy9e)d?a<4zcjROynnjIe z@8&1d>Q~6iB2xVZBL*0B@mciJn+;10@Z0pt$xpuP43=NalgafOvjlXSG$)*jFTd9- zm9$>ljOpbidq5V1&rtYQ^INyYnORz<+rv_Zp z)+L4>^-UUVA@wJ<{(SKzwKhqJWIibe*Bwe1tRn*P=0cjBvaTx7=1wJvl^^?v=2EG! zdAA6G97hYZq962g?t(227FDHkLb{wTp0+V8ewU&j93%tRlQvbWSJ8jaCGH1N@B;Ny zuP)%9$PsZva}Sm6n1c5u-mP17us8e{&<%8%oWy2+&&C{#w1w0HnSLwiAperd^9k!1 z#_;FnWh{*OSu_`7XPz-1A~Ae{Y*408g70Pr@0c@-)3nN0K=JS^d8-vn(Us*Hr)wS9 z;MtunWh{8Hx!zYG=>RA)9(Bw56{BT(ECjyllT%$bQ+C&nkEh#tA04Iv4r}iPcESe{ zZkHQM*HC8*dzFjBx<>Rjx2SEaA#?aR%alfIBN?UVa>HoB7GOPkUTU{j--6hT06#q! zT$B-ssUU0%6SHhA4P?gsk)+3Blot>1OxiHOZJb0bzD_0AT*u+6>xpAEoPoU>8y#rh zz^$2Ly+>hFAvltbja@>p3_U-x*}N`kzy0r%O%sCLTMo|k4c#f~yC&FxAMSjy@vstU zf*2Wd6HD`;`fF77i6^-OqQ1Xf({mbkTQ1Spdj@B#XfD|&~n%?$}m@f`V<)o*G5C(>qjrH z9u~L}ug5(arg;fOZE;Q#B{~tW`=%~^1aU<5Imls*_@e&KE7y-CXd0bM$d8_V@X4Ly zu7E>pR0q?3YH~Mj#`O={i{}o&2tk$ZEU7n&);PqKr4pQxM5UVhB!&Nb*VxvI@{gVjmjhRgQpUX+%3Uoug=O7762X7yQ4*)G)fX9%Gnu!$6mL> z+QnEmhVOWmoF!4~7v7ZR@u03fi-)upVpOrUQV|mpX0G=5!MhaeWDxF1u_FVNeSeK) z%ca1ICTKlU424_Vwk5ZYU}D9|#L>C30p$uT4Vf;vh`v5axBNGY6@IZE%X5nZ_0wqO zV>ASYW6X?$LcAe(4cgb$i}0}w*Q!W^g;}G z{dTtxMsN9!CK{&s33%O4ytSyqj0m>1hu9BewuDtxvD4zCA7w=1G)vOJ+ILUut$r;c z9*Y5ijWaYY&uKez(=)(pQJ3Ub?3gXZ>+*63=78&rnDpH-Syb-4)~!}Cp5)LC5|f?+ z9%;Bcauh`4r?7(Y#`zR9`XBcBn79avy|d_9>I0Uaao#VzZ7;ap6AW&qhj*fFvu7yX z0_x~7ixXNCLO8Z|F&(`*18^b^E=Ho>r2&b)u`U;@8vES}<~ zN}%gpdA`@vG2A!oIUun}=Hx}}sMMELbZPjv$^GmIn5NX5n+r~2hkiKC$Oi<)Qlymk zDE3Vjb!fX5B{;~4p)qB}6xcQ4kS%h~j+lMa_PR3woZx?(&YD(&xk@G(HizQf*xq%u zW^w^SG~7i7t%4EVnzM&adw3^<1*wf{O@QYplV+RlZj6w7tJF|cN!WA9Ow=9V70MNl zKy$_u@FaYAFCvuz?>=4!c6s2U%;`F<%06E;2d^UC|9$YIdXF=9snCJ&)t2fkCrFNA zaeV*;7wsZ-=HXfIBkWmz{(@Vc$gd-yMI1?irXo;OA1wq$k|?!F5tz!1hi69z-fSvK{|+;=rLyZQO68; z3YO`sy%U1Oy=UB*4nki`ju>lZNQNj+-UYzSsnDn-&f_Is!gD@nFuV<;Lz~th>-S`Z z<@{UUFj*HNlH6hn(v>4btK`v>{vrwfctk()YknBAQyqA-RxCsmw3E|R+6nl$Dtn%tsOGkZ$fyI|dqQiagZe;?G}GBJdQgFTN2LeLmrFDQ+w zkV2Jh*nKzu(Q-=XAKMatXn^RC=GIFnnyWG%`?Bn<%q6WEa?m!y zmsx<_W7a)dJ$MVNxn7{6{z*!7wZ5$XfgWR3!j&*#HywI&DupYtB}U|em%nq&3On&t zN?9)CCpyY`(65ihTy;@_;as~CWl3Mjif+o4RGG+>MbSVaA{Q+WIaDk>g^FII7ZVBc^9dx9> zkSqSBXfOrTZzl9y{U8I$d@G3ES%~uzb5to=rN3mLKnqb<*z-F~xEp6ZS(dh_O>SmeQ1WHX?CXQyQ+RiC0ssHptvENq)mUbs*_Y zCG=cx@s>7Wgx%%R$I$31AQF{ieE8!#jLMyXABENutKOWIi`h zvO#irXD*stJ@Ct{Vd>bV`1Ep98bD6Q>u^s#T$at`Dxz*bgebtax_w^&PcHt$o4`B+ z*&SK~?cyLoETgww;su&O#-u&-*vD0fmu{}O${<;|*I^eYN6w>t9S-)wSE%yQUUTc) zw-^5P{%jnYgmSUncs<>OaFk_TyYadbQO0CymNq%&&nKk$z}H!=_?K8xcQ_wAzvoqj zewD4!v-)d%55^J}=tHu&!Y$BecP|9Vh=N>&jrJPAAJM~)Z9BMk0(%|?hCY*F^;Vv& zGkCx))C%8S?Ya};Z8xwJy;fS`Tya*C$-w+6Fe}KNh9|3KW#(f8glfIoUJ7RvuiCMn z=S=yJi1fYSbq+m1_9M5*0-Xqvbr;pvxf1qgPW5L=vbWHOZO#A=dEjTE53em(3}A+I zt~H4==)Y5F}plU+-?LU2}KKF~bXZZ2}U&m$LG3wD1F=R;ChUa5iDh%~Ah=`9} z+y6LfpIzO#zs%YU?p%RN+Bv@n=LE0yAFb;7N1dhgz9Qr|1Dtwy_5b`^rnFz z*u1;hv%`*1;kEPXbq>D5_^;*Q+HokUA9BDWi|q4|UFr=lPYyNfZ^4(qL}}}u3gSn} zISoIS>s8`Af46P(8ATGJAHjlylnVr)=d0kiUso~VxtvX@o^K(1H@aOtCqh_wKZf`& zoO82TXWrqc+3sxPKEJhf#3Z`;&u4GhjT%c(#h@abFjrgbK3ymb(JUVGt+p9*;%zMU zYg2qL35V(KItKC2mLVc`0XeaGa`JPM+*4c$lw>d2dqpKX3(cw88-1h9;6S*)qJs`O zG19UBI>*py_G_#oy!ZMtViq@#R(vFzzn+c5>mgz23mNm2L0NpZ1ROdWRbx0p@IRTk z-OWp}{YJ6Lv}Jb_evFk~g*AJs`s2Apj&XX^Z%#87g+A$Na>^`w8}nAS&9VB0D`w*K zi{9T`n_sCGKsmY`*aT?VA9?~swM;SCjnBV_>~)0)^_{++>Qqw-vGBvCK>L&sN1DWe zSxHu)bhY+}h|sE_nI(LEznAZf#&yLbZvaGPQF=WamnMhNKS_9)I+-Zjt@bcXuWDVe zJE+oCi_2ff?f1*P8Iwx=2|2s;I_$xdto_JB_hYP4k?XQ4zEZErk$7KZI&)G-7Om@X zu&nL8^tHr-3Z$MH!?Tm|EmAUbF7Nn6+B$1_UEeNxoM`rRr{a6t+~ z-46Sw>$#vPu8^*vTs?7oqq^%QH#RDT4|A}C}W zcp_t%CBiEcZ#FHgl~_m4KXmcdk-Yy}ac&8iWA|s(dwQg)nl1eEk zgueH+k*TcO8d38g;co?{;$!(@oc5&@R(n%!ImZtAF%WUeoEiiBpwIOqV+CC;G_Ai3 zAYt+J$?0!r4VY_x38p%X4kO!tPW$I*xf)8oW5Xw};q9&Q2oZ;6#$p|-a0951*58Tp zfX3Lcv@8!;VZAdM_tSQ!IquDMHB~5#G%inv?(A}?4$hT_>#KLTti;WDu%e;#(2fyI z`;hm)dJDQR(uN}^1V%KVoG6+58aA-~t18Cd20x+g*(2_r0|5JY!V#QyUEm=%^I(1> z0rXzkj462vt6?{6NOsf=e3(wL4Qa-*$Cdh?r>+4$>?;btSc`$0OxsNt@q-!!z@ZQM zcQ7A``>+lb_Az%d@;Y<^FkQS%`Qbe#l-0)A`#4r&jIl>vM}QZmVQzz`dJFcNStLAo zS_HPm6pb{0$b*mkYJMGM0^VWraH$T~2DN?s`lH7257giSdCRPg;r0Dvd3UO`6@@@rf#jCeYJpUmk0$vT$JOHUQsk$fTTbW)Il6eP7~Ph2`d9 z@|A*57^Z_<|HEDi&`2u%FKQOeZC-KkzFQKMF_Im(8deRkyX8>mFk)~kUMZa$+X0Qd z-4VL(azdC|&iL4HV7|8qjJR$hLG=);h%5HPa7W|+;*Dc0cDi=o5=?=PUK9`6F9J|s zOQ(l*$M&n+*s>Wq!Ha?a8e@U9sE`XE_5KTBmCl-Z%N*I%MkpR36JU19pxKL@u%)}H z-e~we%!KxLsiQW~Jl8VRgw!n0z-NA1js||z&m6{Bez_Bpw2Uj znEijvl4=LRF~z5dfXA}(1OFVEAGbdOcu05t(HifYIRKrx(Hk!UfH}?6v6i1-gYIzU z#knQXrqtPAJ@DrE(hSwy{o@4qR#gmy*MJ|FT2d2ycWz2MLYePx;9Uxgc_loAJA>wT z&8G#R$G!+0sVI${XB*wj7GaDF`CRiL>Oy$P`DvZ~I;TZWZm1416CU2i{d}8EA_8(= zXxUx_pd`hZZip0w%ZfR?S6rc`913!hksL#h@GM{L{@Vxt$$DIHCm>?cQYqCs?+&80 zw27C2r~&04UUUwp%33IQ>)h^i3Gi){ME1H~0p)jzrn$GQE!fV3%OCm4Dbu+6Lec&L zn46w50;IY5CSF&ER2rkbxq8CMjQ2{!`P2Hj2jAge`m)p&YyiwD2s!s}}?3)ORjxm zm~%a1110*1Qs&}Y+D;3Y6~R*DW!Z4ur2*ZRJNwif~2Q z&5_5ZAPaZ%x_DnzVDe}3a72Liir2hb37XST1UnJtUD!Bp!VmZBiFzG}5HnUAdxxma!1@!4A^MaGby9dt4#pnV>83Uq6LT z11yf|w7N`JaSrlXhCgU4SY#K)p9UAtd`Vnw0V2NxNX?9X8ONY zS)1YO9%q=>_oAayYX0nh&rB3Er1u4ayNOoG8BdImNAIdHz90^e*Lz>F%EJ0Y5k)Mk%U|0 z++lbpC!lH=O|z@=9>IOfE<5t@(#>(9f~!^x(ER7m*bdDgA~+<7&hrmiOa7m%;R`0j z<5^YYLAxqq>C$N^^cLH#`b5CoR~t+}L(Vb+bwDv%&^86R0OAL{%}-H|B{BLe1w^RY z)xzhB4uE9J_huF5eb{!p%ir?+f0W$OkC`jGBqy=8#!in}XjxG){!ZrQa696p($A5knDGo;;BI(+t$b=rc?89&|!8>PmDY z3V$wrJ6*cZ2!VP&llBS`q5T#^%U8RRg&r#RpQMgLa$flC@II3f@o^c6b~@pKs+wnQ zXwGFJ&LhUFXGBDVR8nN^A2IWIMAn-!MTjcZ8!V;!fa9l*td&iKMCOjh5=S23TB)Pz zvrKBp(<0^W=TO4mLPGVtTqDrM0aP`mG~UOIDsj)EYuOXGFUXLEc!+(FrsoI`Hkxak zZf$&Y80wdXT^YSFk(!pEedi9|$G6@KvI3*BHJc^BZu?SXm4Bl|QrBs*=sMiSo=dT? zj9Su-ImO{)yUf+g__Ub0s-=tXEwv#VZO;p*Q4pd#(oE5fa?BpXbg#*E1L$9P?hG$l zqtWjEY^FXDJ-y`l$sldQ4t-0P#d`qp!YjD^`5n}f@a^_;Bk*fa>g1*NGpwM{Y+=lk zR$0lCP^TOlyjyZCH7P7HC8#;-NC&Ocqa!^#d&8~1ix2?x2ktwRDM=*|-}+f8BB28& z!6`Xum<2MJ^8TSSzz=6XbGv;9WzkrZOfEd>6?XdF-wc3D^qad&gE3w-a>tZ_yJdg3 zH6r`MUMOT_&S(a`119#_P@EBbcT$tL4{LsV@bxzjiW4l-OZ3A;*L$h&l!sJ%=`M-x;FBLKDzS6uw=ehq0p=9SL(#qn16CU->J zVBo|4|9sA4RC>w8#{X=@u2w$2YX0mKbNVWYa^B;?O5S?c34U zB#i@_HZLk&$;w3vGLoP~S>85B(oQfIo;SR>xc__Iq zKBv8utEy`HZJzfsz099;Y~(2UL}AG~JmXHd)UB4}QgN@)i5*fL?w=m+m$$F9s99=> zh1C4m^VND8BsL<%c7xTnOi!(|Mmz4Fw=^ZgV+!4rE@xZ~uWHBIIx?`AVi3)uW9!D> z_ze8AqayfpvR`c2GwvO@aE$sP+D71Nk}f%*aNK?gt&1fzWe{;pdHg

34p1n(6K( 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 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputForRotatedMllwlskInCpp.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputForRotatedMllwlskInCpp.RData deleted file mode 100644 index 48b9583c0ae4646b886fa9b7b33689b880201e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmV+^1lIc>iwFP!000000}FDAFye~fVqjokVqj)uVqjthGFg~_1S10r11Ct_(+@}p z16k}qnhzvn|A7GtP*gIfWaa`XUa(;xVF>;Q)yCw&^FHSHy=z`D8ls))KbjsUs2%|% zqghf567z7VN4CSqf$fQsk;kJg4os@AKD}7w1?P+LmQ9<{tb-vA-)p$^7}sfY66>e0+WR|n(6)Wh}RuouHzX@^#kh*NJJ6q~|M ztxov`r(xn^I*)S2TT2}HWw+`t?0x{}D>bZLp{%zbLmbA3$-`(|`V`*DEZ+TXii4P9 z)O)c{)o{L|*y(T2gfcP2VSJc8jK-l4OBw`WHKa7C2Fo6!G;uVJe2pBYY3S+E{;OI= z^B&Hi1wXH{r#fzb|(CSn_eXWW6) zOzowUUQ6GD)6BQ7lpdP*08X>&8Ar@gd<3W28Yfv7E_n*4*{^(*^HhHZr#UqO7!_8% zfYV&n>mL8meGR9%&+{HTzu_&M=2gmBx!m{zoaQS%-BY*i6P)Hhsg)mQ`2|i3^tr4Q zyH^FL1EnpdT*oewSDWr-izM{zfVNgVVyMOnFD2)FbG78y^@hV}R2l9f^T+ z(;MNmsFA>7PE95Refxk($*UGPE!LX9^uZbyI4!O(FYc4uhM;ep>)4^s2B#&OYJVwz z=z!CbI=b2Yn>Y~k)jM~77k9yFsrnwjbWmiGXYM^Rj&B$qv+vOWY2EzhAej&jNvDNm{GKmE7q=AB0Z_V>L)|wv>V&R$aHUqdisQCUzORj1wy6uPQgQ*|-KW>joZ`3!&VP2-#5;LU6HFY& z#}cM$4Dj{`N>hk6FEKZ@7|0M{0JWQ7f(7|Gm9S=2QaO~xmYrIZmzo3Pl>{Va78S#q jROOj@Fo}xF^rFlZSc53Jq9PAsF~dIq#jLL7#R&iaP*NiF diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputFormMllwlskInCpp.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/InputFormMllwlskInCpp.RData deleted file mode 100644 index 37d3f247bf405d8fe1001bdc71746b1d34c312eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007 zcmVF5F&{{?1H&XG;nt^fU^Gxn0Lc)R)Plr3pfZqJ z9|yK4N=6=!Hp6Kq)mNWhtnz}>V!UP3W;E--X#2lLcWTbbK7rGJgc=#wto;F_9YmeQ zIQmaS!fB;PlG*O<{us1~(78Q9&QTb-FA>(k@VY5Pz0yY}(&&PAskq#asCB2K+^ zP;3f2wL0aOgP6{vT=CWtIL$A+RexdkLpZI}uy%#A-hMc(@J?p&?r&4zw3uSld$CW| za9UC9^tWe1nQ$6CTwvjb&WEZ)4;NUtq4VMD(82-kPguC&5{K%;B@PcySUADL4Lw|7 z;fBtKsY4GJSh%6{q3X~QFmp;~E|B5{r*Q@bH7NZLnsklf(fd`cqIr+-Li_J$%{;Ru zm)ZX+{=zRMzsmlv)W$0(RoB`7KbSwOLVL3VqlwrC;Td-vnA%Gxy_UY`z7jWK z99Z>?BW5W+a$swmWL>!Ai39tUk8+;s&m1^40vHumy>Q^FUibKi?kflG^SsB-Z+Pdx ztCX{Hx$y@FzS7e@b=y8U@SoJm53~H@AkgQsQtV!}gP{2rsiygV90VUO?tYh8>mbw} z^fyZBpM$U|Q{K@h^$x=KHa;+1#^4~*kr+5Pz0pC`NZ>H1CX<8c?E@wyubLgiTJx7a zSi|Zdt}id{liTJXe&bxn4t;h9iKg0L${#u$Bz1JN`!{hqNM5~j=XY_JgH(NwU%Dx` zgS4jg{!8C_9HcM3HniKp>mXAzYtgF8J_lJfFA*_oeh1m}KU*9BOmvW|T=DJgJ|PEr z<%o>P`pFLRXW4Habrf+>u#R3jqtV+zVS;g-UlO;2!c%T>7N;`~ik6Sg?^5n@Q0&{) zQNZHsp!j%_qv}&$2PKQlpSO>mb5QDa+%$1nKP(wR<40}(>Ay`k?>zi%f8Q%aKBO-P z#^3)ujCJ-yrn_))82_N@iVrM2nfupnpIu({%N@@Dz?ArIqDVDN9L_)VF(5zZXN&!d zrq+Z{#b*1DTBU53>fZ(v-~V9Iug+9vU;8~53(thNzJaTQitm54P@k5Iyv*|to{e#_LC1>baPI*0g0JK#ZVr5 dQEIw-QDzFP5KpeC$b;sbe*pUF2C_K@003=}1Lpt$ diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/YmatFromWFPCAexample_rng123.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/YmatFromWFPCAexample_rng123.RData deleted file mode 100644 index bfc838d5e9fa0a489223afbc94e6a79a0f51f665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6781 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 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataForGcvLwls.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataForGcvLwls.RData deleted file mode 100644 index e1eecd6807f2a6f1f41b21c9b9fec84de0a06735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3318 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 AVgLXD diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataGeneratedByExampleSeed123.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/dataGeneratedByExampleSeed123.RData deleted file mode 100644 index 88f251a6edb2027a2f599f80194319bcd30b277b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$s{iwFP!000000}FDAFye~fVqjokVqj)uVqjthGFg~_1S10r11E?s0TRMM z3{u1g#LNzCPn3*29&L7DQhoL5#VRicG2XIiGn#c^^7em??$n%CnBNpj1Gd4lCzXADnR)x4oZ(Cv)$YM9YloA?Fn*@a*+7yZh3uroc*WzUHf=> z=R(ynIY>LSibR}x>!8>ac4~FXFPM4u|ApftA3almn=gLscVo}8g>d(Z={(96Z!K}) zm))wru=}BdQp4I6%6j|Z>bWa_t=glN4_B}7PG<4$Z&Mt^6rBB>maf7QrV@o{&0Ctqb+YZ^e)=}$-MV|T~wxnDED~} z&CVLQLzqijc&7fpg$S6EhI8J2vm6AEZHe1_?4^TX2GbJ>@p1=&sVwU%i_gIWM!qO1 zp|0qxgVM*!scCzB;N}V4zBy--s~93+I6OOV$IXYkNBHe`yR3#Q4s2zTr)x%!2@lwhr@NlyKU9LNS4v&VD5TTjz Dxc%e1 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/datasetToTestRrotatedSmoother.RData b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/datasetToTestRrotatedSmoother.RData deleted file mode 100644 index 34a62f6740d8d7f4c785868d60f90726301fbd1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869081 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 Gu9)g6h@6q5@36zPJ|xJvzDG7uSpv7}9is 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�}jENiq#^Us7>N7uFRg3rLL~UeJK-6)Pl!jx-uw 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 ^N*_zIGK(a((u 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 z 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

Q^C)56(ADBQi%SY`ej3Wa~`^sTd@FjB^K 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 z zUt{wFc2R1E4B}@x^Rx~V{LXQzsWyJ=&?#b-KR%8&rv$_Qg~KcP&=JfR_xwn5vHO9+OAzfiiCX`xBnl4IQbpgqM(f93yzV(Agn}*mNqh{4aHZtmU-n(z zI?F$)iWZ!qp4Mk224pqDMPe^QFD=B@X^x?H=^aE~GT*W+qfU@wZ;?O$%q2TF!1H-M zHl#d{7}wkjrU6erSk2O00WNNMdUtq)~owWtr{`Rx=c zAPOWq1*Co7xo5vSw{u_N!Jb2dzq9Dm6l$Y2p{M%K@SGHR8T^M!*dVRiMy68i}zizbsefgaLndgC~dc_>rHK6d)ET9H) zW_i`$^%6i&oe~>xdV`kB!uu}U_$NFrpht?XR|y}}KKV6%7fXtI?cA7~PI6v5wQy1$ z`J1#vrj748=$jHxfg%PMt%3W?%s7Y}-Ba*j^)3x{BYUQ3HF7K{?5N_ZbOug)={ET6 zFyV$TcE3G_$l}IVp}rbrvq7Fn8MV8sos_H(_Kf3b!jyRxd}S!z58Q|87G-Lq<9pZL zhA|(b2-V?zyj3eYz`r*&~jkWVqXgyNC zHzD^jkmG-J%BBWzSTFcR^4&6;*?{x`L--$BRrxuasSVJkC{4|s@3ExcYlAsE@Q4<- zC@ni3C#Y#+5wWl9kAJ6eS)5mdcJb%(y}%GMzLVn2Ab13Hai$hKYh@Ya71>b!SJM&y zjJ>=s{Q~B-_C2Ve##7SoTxB^!3p)%i^uu*BbI|>dnUg#>V^00ZD(5EneIAh}c_aBp zb@1v!|2q(Ys~8Ph)*2cH@lw>%MjI`_irFpTDzK--tAQ<6Fi!Bq53!2j5GVMAXv?KW z`{>p9T>U7CiV>h1?dFm|>tfC%a>V$C-qDCw@asBcGdZ#|Hcvbby}>VJ&m9;pq9mBM zB~1H<@>L{B2c6)e%%E^*lJ>i0!!UgtfB;XcR%DF{-qY>TLVUcJ($oEh^!t$jgpS4J z%Honb&gA~AN>r~0dMvuec~uJ|Cf>! z_Y^{2mr$l30HCLn_T80At6mN$%zkjCs9P|8rQ-XDoFeXU)_F@z>&oRcg+%Xn#M~Tf ze&cJ)6Af)aB}h@;rJuKkZ2pmY5|OuW!;0sjL75lqudI3I8P-{Qx0RrM3;T9+gyj$f zpmmv4exS=h#>fmn1Q2*~zH6*JyXhVs>D)1%nHLRJ9cBoKMaED`!gJY+fNbWt@`6NW zIc^-+wiSHi)KxGC&iY(GJ!pv!Ut!b#93?Jo>mCig@1$-_ID-UwZFdbr-hDhL5vY51 zL&m5y9%$mXH~RhT_wJ4ce=W@8T(PQ`cZ+CP5VXm{B(bvkpj`9h==*;g(trKw>nmc- za|tV(_KN zy^n6f`AJHjzzmwkIY}*2Gey5oCKNyI^|bWT)HAw0UyYO-)$^a}>-M$9%zh403O0M3 z@KIu`Jg$ASIBp+VV!bC%X}pX){pd4Zn3LQLJ7=pu_}rJGwGhZ}p2Vn?j5;ymDZfVF>zbhSJVZhv<^-2gnV@eFJ3%645{1!)gdHV z!jb^y(J{wa_ZFaR*X0snMIJ=MD|2i~35_`-OjY;W*PMHs?DBYftiYt zI`#&LZooO^WdgYwOrV$stEWRBv~?NwmSZhTU`+8tPB1P&_2GMU{!%VW-=vw5n36zU0Dj;(BH6Z-{wvIuBM+Q3>5xsjaDrEq>n z7{PjY03#he5?O)*&r30@^40#0U?b;B1s~t9$3A*i`tPE)@^_f;z9(3ZeOU3qc>*|< zR)<;Q00I=-?7#nW^DSC!6#wz;Y}ua!kKSY4mto!qbfg2$Dn`1@X3@MPHs#a{P}bks zL5-KS0DeS0J|iCHeX11$!9ei^`BSq`{Oe#=ffX?$jQi=Nj{3DSKz7f?r857!b;6)E zYhfys=amegL;su3Q2iVCx&WZxep93UBu-~2Rg9umCeRPIk73D&*J)hGuSjW#((0DE z9<6o<2;eT@XNe^_PrJe?u$^~%+T~#TWeLoh|4T+UgyhwiwD;j%DXgeg7_s|XY+X*5 z?G}w1)c|iTFoyu?)N1MA&3m3s_m0@A{3PIVO8bRGI}gnFAeZL9ZyW-^??D~Qzi8ldek9h>uZhu<6x|PwH&#Ee^Tde?zT%IUai^%Xv zyXK(`YLP0EpOH@y)plYB27MG(|DpqRINncVCmNJ(x8Rk-l0dyPyaJVdvv&w_^4( zBGMz>xp$w(M=Qb~vvJC-_lkW6sXcA$SKJ5bj(x-y9aWDiCgrU~{I3vG`NY;s-Mc|n z?dXf`U#?|!w8%oI{&2o!+@@J% z7NC548aLi&hvwa{6m6Y<-K!eB#8Usg>hU>Nk9DyrY5z$h0NsIVs&(G$!@palqa({I zf*;wE#&xY)iZU@x61mQ`{v~9=(}`R}FM#AV_>&>9!s@j^>p&=Cb}GO>TI?v6JgjUUay)z%H;~C91|^mY(tRf?d8lmP;JW{Wf%sWHGj=>KeeuD z5rbMA{@Fs}*x}Xt@7cLFD=~cb`*UU|e9Ia!Kbx7*z%l+<;=ObGSKb=&^|Q&vy;!}! z(Zx_b#0BuUkq+S2JVlScEa#>#0?e9nu$0t*FR=oklXcC@tX z%1|!&_P6l5kN3gW#`FcL7MGcvwERyw7DY20m0eoN99B~)-ko*lvPB%_E)LdN4{dwz z$v2SHyZbtBZHLe*Co#oj}Wpx+Ufr`r9F?}9%RAjuRfYcZE+jPvQEEE zyJ~YWs)srkj@dDjIizdff5w%NTxNl>IyB+bw7*^J`69fgs<^*_K`9!rvVXT-y9XH6De z&ST+RX890MEB#&7PRIv%TFD#c*Hlo0>EzE&d4(Ky(I=xq4gBH`{_x0w63~r|(^KR( zNX}|bXY?Z*+eon%OF_YdXaD;}a5onJMhvFZgi;Z<)Dc^9>fuJ zT#PneSyt>Hc zW*LI)bx)moNsO8vcKGvOEZIerJ(1Ei#jr-!&N@lxwYtwUQ0Mb}D-ZTD0Q%B1R(ogt zuuK|y-3M``r*_~C#(yX#b4Ihm)m#|IzutzvFbV^F2W8F6a#}i#2AbPX-y$FDPrsp> zWaxam^XZUY2%9Q|QC2Ry47SyCr6eHA275QHtNttmDdyo%O9q>*SGecu#x0Fj4-DrYOIDYk$uLBVc(^^t%HUSbq4R1Y*sZ4x5qMRD zNMODst^zZh^Y=vt9ZedTeoXr^Uqu$-W1Gu+drn2LG57m_h#>Oyp|BFh>>||m4&F8{ z&t`aszNT)(688PmE5opcS`boiqq@yI3VajON3ywgQsn2gaV57CSZ6w2uUxV^ela!g z_c8m8eN7R?5jzArk(E4ZOGuxE^SpP-OwGG4rH$3^|#s{c}y6$3B+x_ekx znoe8#;4}S>4qs;M8N){_08_?Lh+ieKJ!pR?J1hBg4#KP7x;vgPi4PSc>U`r98oOyT5hg+>M#G~wkDW~7|CFCcvn)^sUWrwI%3qfqfY1BY)Iwqu20xLJY{u z$Sf~`2g%iVwqkk_~ zNqsLy=^QQpn;V8vWt^Uibjq@_&$O!hn~pE{=sh+;06?JYcb6U6kX^QwxL-Tu{LEkW!D_3!*kY1(#y=-DW1^vy%JyVZ;{piAf~?Bqs- z)?Z<}@Mf7P%=ly-uQUL#`Nk27&0!@edI+f*=l-R-%+|p3yh59WHiH_nMf_?Rs{-sRi}G`KBzh5SA^3KbG?rUGKREH$yboYo|L&krw?UV z!|uKgF)4q5d7atcH89%XpJ`4Ki3gulb@Y|n?f&b*Un~yLw7!Fl+cRPJ-_!b z<_n9p5owQWM7bD%79Ea;*4SVT z^}@6&F8fmF74^q^U9^w$FH}xhN`0eUVE%*yTzfEd<9!DnhMCYX`5{3y^tLBm_jg2~ zSLnq^I|l0=Zsr+(drCExzLgtKb-TX=Q8k?eVAEJ$a9CDO@;Or0!Qn6VYzj-%nA8C6 z%f@vo$K1B$GxXgPalSo%)oGHp<)7U${3eCa{w!a+yC^_xX5?h0-&KFM8t0f#deB0MyM5iiH!EM83oNrby}wg}#09>BlAZW#F88gfKwm(eOnK|YoF zFT4q|^+c$hjUpjO$V*^nz!EUAR#{%d;7XYm|E+@|{Mq{V)p@alFX!W&C);vJ73m0T z=6@uZd~$UJj%#!~;`!cnInBdx72dPUPrPcOfRPS;_0~<+Ad;}TPk2WGl2{7HYz%Xi zIkG$#HDUcb)-DPMH?#BDdXBXbl8t2J5xP1Bq1Qt7J~6W8M|dK74NJ4r&o^il!oRb; zhq9uyJ^2~gdcgS&A1of81gOUK2*u_i!86tsZe0~3?+Gf{>RX>7CbCESQR{>?Zq|l( zn?=qoto5h=ZC+`V5mj^$zu}l)3gzFAX@B^8j_dIAX!P(aN=|fIq&e^Rz45~Bk%^dh z($-VYDkJ-v4D~i+H*!7FWDb2Qiyfq3$@G$EQJdr=>nqulJ1f~jYdhb4k=PB<#gLQl zg@K>yE21X4!vM7OC1d8f^U ztef^4Fk?cX5}b+$u%c`8Sf4{(r$VE$-{l98e&yJiru6JApo+BLF$Ec%dPT)Ol6R^= zR|wgj(a&3VzRa~8z?eeS26VSUMxRAk1f2lq7W@bBwP=7bt}nTu7{FN9&VuhRl2+cb zxnF+|{7~{iDE7B8gwOeQtGf#+XZP#;KSDXc)?YN`3xrg?#p4(8b~LcT=>YRCiy{ZN zEmFe&Gfwflhi@&GJMc%{)R)a$^PI|Y?E?vSK(V~x?-|l65YAf8J%=M>j*umldqXaT zHGBIGXFUSI>%S>_3w(qmY`=tyK#8quoua=jG=NkP!NjZI2y$$^9W*IZf}3?us4D=x z4$9frpHBfJu;&MqBJ>>H3btmuHe}>SnzsdG`4E$qO8gsjOmxxc5K=u|7;WlZDO&;- zx^=#JGd%^mkAN$XiVbeEEQR^|0vDYrDW$^dEFm@?^bAw_?SikHoe4zgta`%>1rdRV-V4V+*!fm0%bQS@xGx|Ili7&ciUq)*DnF2gjE99woH{n z)TQ^N=Me#eRZ6^^Yys&#s{pAqC_-1y?)c$HXnqG27FS$i^0N*$k}WUh?v8`55t@`$ z?+ki-85u&q!mk~h4*3BQ!v8a(OU6_q+)YBG@;D9L*kx;7OV z!3^rkhO9YW;-J&aeJl?tf;m5|I#CLU7Q&n_Yf149vYlLL?blSXu49{O3`PUYS46B( zzqv&%^_^(y7`=BaIa>vFU9-O?OzFfFngOol=6wniQL;Rv;3j4p)7HT-6Z#(LD9Vsh z_KHj$H`S3m{IY_M)%b)u#8|TgBIxsCrSt`eZ&DKdWR7L|l^4wLuCQWu->IBkQ1r`| z7`&w5W06rr$*?w4%ns3IqaWUR635f`bG@%kE=x=7DB6UDkto5t3{ClowOE$IH~X* zd3F-#D@>r6FCWU_nL#p*t+zPbvu9z(g9x29nl0{aiW+Y>LhmQ#7Fb-s?)i*6l9U2{ zD3C>aPya?q;q)2e)z9$ki+bebQ1-UUjsPE(1AEQn5$RiQ1e$L=yf}?pk9d_IGg9F8#dYs?T=7BC1tv-M>j%9(;+Ed(l>_`+O z>^GCB>nuJ#5gDIyMhT>jl%t(WkA(D}der@@#n|r|tAJwYq6y2^Wu}Do!Bj&tUZM3Q z`%ythgm*?j;W6rfqc=P`dy_GW)KNem;*{%TE2L}ov)F;KaUk@Z{>Kbf&rr z%xekR5H;lqq@eZj%(UmTPTJ?bkiksl4UF_*vM-*3pyI zS6!G!q@-|+ISyG{k;rJ|DWGrsJH#NKk<)+ri-n*$oZO9$_{qDQ=$?;H{)&{-g7n*m z032W;&@wfc4Ps~^ZKj6LQ>v7)BWYtk>jMFXRDB7R`6!RKY6R}*c z2m367YGLNgZ2TzTY>R30ntub*5tOpjiBG%p@v#4k{h+x?h4Aq^C_hl=3HSE2_aAJ| z;d7x?y%lvwfKMBOZQuyt_mub2 z`17Efy0HNS=+=rS8@(jC)9AVcek_D^OkFjNEMan`Y#YUCNCUXlT@q34PlInQhj&)j z^~3VFP5h%jQ8{0S59?qvBK2Q0jQIB=I%|aeoDYwMo#XZOzw&>8O_dL2{VW4yq*!vl zFC7C}<)|DES%^CK*}5>a&!LRE#)^qA2z4&_??}5rD4jR#O0(Bx;Yv|eG13~iO}yP? zi3v;aBj?w-tra4&9xf z`)u#;V4plE>)<(9zZLhouj_xEWWdb{=VAK1mqD%3EKVekB`;e<;QHmFXE76ENO6_K z1244u2du5uUkQ&0|L+VxHM{9uqYv>e@sR=5G2#bcO0RV({%Gw%pmK_8(TKF^EIzYVZ)`RDSTd9=4rT|d!fZ`XilSKO0a*X!|6MD_wJ-yVZ1+1cn zywMG|LwI^7|GcE8II)zjA5onJ8P7CncmJ|QvdnDIRgeSQu40dfNa&H)H}ikamB?;Z zt3Ml}Ng^x6FZWUaA}5}6JI_a?z$Xdi!3#$M7%cMAc%a@NV&X0*$jd~Gc92$(@Oxbn zGPkkIL1s#XCE+r|-UCFVa|u=XV+n&Uwij)}g@|qpYx3U60wh;n*|{I9L7k4n%&QJT zSnncF{scZ_1l_Z+masWM$JzWV5ySXs)RBz|7uHZGr>3Wccm|?Qu9w5lT4?_*G*42q z-9y8!n?y3X1hBB@ZW#A5gH#ardpFj6kPB7i1LZC{qJ+k^X%9boED4JK)Vx59PWQn4 z=(@Y0lcmX!<6}+9uT9sQJciU^;|sq-pEp6o>dVRflsrVvcBPXZepn3kT0(`HQLs-* zJsbuxB33|aHD>CtIN7%5HjbB4D@l<)F-sUfY=1aXmlH$eSj(*~>j0`F-A%hwK%&+r zKBmqd!kmtOBv?(blxrG(ZrQrzg>&ud$V7Y6NR&*cnq=)NW720+;xJzMXC+x-@DImd z%BMvTB1IY2wlC3ui5x?{ojeJmvBC5f3v%4Tn2lI0!1zqY+KvYf{FnS3|Bog@s=oldq|y#oGhC8=LkVT&y%T)t@U#?51G zod_#*fRM%9;~3my5Yx*h1(wjBCBQV;uWwkfQ!B#HyV}Eip?6LwmA#q&Ak&-e z&5bY7@`N)9XRT{2DnSHWuPOMAG3f)ID%Oqyu3#0k;L*4fbH#EK@R&Hhy%Cu zL;olm_v1`8mNr)`<>Dnr%P@d@e_$?^pAkx4?wh0@fZ5+2=T(i8g+#pVYs-GZw>Yh{ z9#XP~vpVlTIq$JSjvL#)ZVSU%(@)($R8jSxwSJ&b!T{^;BB!mx$)Q?BiU07`m=>C$ z`0I%upyE1w{)LPdsz9qis6fNzy zh@LhTC%23BAw5SDk8XI`XL`1bwF!s3?H9;143X6@JRJGH#U;+Z+6A>L$K8pGH&Yvf}7$Vbe6!khsZj`D-RrmdG$ML$hmWTr^VSaHoB z8QvL%N1d1F-oN~|dw-%=avpf@9ARW$Fy~+2x?kRW)bxLUo}ZtNn-8EDXaA?&5y{9+Pu+Mh2@PyM8pM9rkUOwF{ZpF| zZ=BTgsY~Ku!$$5+_}*%-9j`nmLHlVx(Mb7^$)msq*mk6^bwV_Hu6Hkv>tq!(Zzi+< zG}Attp5WQE=S3+ z-=-f%mI>;O5{uGx6~`oaGFmEOF283vO`f+M2)2peNG_up;nu_5zI5D@2%mY{{=O2h z88b6fbUdXklzkbl@AYTS(WZ4zL1g+b>%v@MP`O1djl&f6uo~%$3F-61_!}T??Zk9- zmn2C9e||*a4g>l`zLd3mpcUo9(zP~c6HT^ajYI|aoZ7^8S(Pt-9f z)#9X;x9@6yU#o={%7)gxz*#NY{+3h5UAFpw6JoO;?B*z}MBsq0PkFSZBdx!oeo7z> zw6WVtS?|p!U&yfiK{yuiQG{X0>(R4dBKjtzX8zEn*7cT7e=dP#!MotZQOBC}(Csdn zcjQ}6`ct#ZX{`ijiSoGM02qC&Z52+W z*BGWi8~yG^GQb5e7nz?1W7mXE_eX5inlfOevF?oo0YYT-c@YzS0&q0s@#oQdR%C`y zz@>*g&>-Mr&lnwGNq&UkL$N=MIyGhCivoI!f^zq&5I!RFgeZHC8?A*pV_QC$99e()$b%eJ}=zQwSJpEMwlZRQAv=LJ)})7S*_>8zp)@R)4Ait2v{4 z{D0AJ*3x{fW#7V#^9T1z`@jKAKRc_(NDB+aGu)&HpglK|@BRDm3w0ixTO_TZJ^W4Zj$NF!+XMK z`M0spB6x)7Q2gp+?r~M9zX~sSEaBm(1x@?~pRD!p*y^moytmvf`|S!NPdAN$5| zG)nQOT$C?3$zBvND1pfSge*6i5vr)Foqv-11PU1WbhfhZhNvJ%_g?lUxM|FoStT!tPyTev?HNcQB>sfu-gwXr z5%QLPeS_&RF1D*mhFI}faV1&L*>MXnjH~Ybc{L9O*cE8iERU&bO z{^f6_VmeUEk0?{`CkAA^z>Bx-O28*X+lQY^3b550(~QI)m|p9?(biN(Fp5i0gI|3v z);m$v?wXjQYlE~sQc4I1u8@FMeVm5rcYm;og%S9lmc3~!@ft=mQr_ljBHZI_!>vOB z38faz$O37tQzuA zAccs>@#!)Y(L=K;qF9F3aAKkSRQ3h2TzKe~O^jgxog|LYmI0zZ9GZE*dg(;RhCfd> zciZB%-)GyXhe*%d%v6)2QP)*?!O^o_YHOS>SpS)_?D_YFh8a#~}Pr0n$03i?9 zNdhYAfJ^foY_~Yr!xsAB$Dhv{UYj9(!_4EEOu(b1;*XDp_VgYGRdNUPmH#BUVIRhT zDA9uL9s#rlc?0ZMnNMa5_<@c5_<|L@A-K`X08d2-!}%{3 zk$p({IjxiIF9NzyA7Enjd-vTcYUJOA+KT#0@KIy`?Wv;uini*&n36J}{4UaMB2fl* zUz*hIYh$M0UcVbGTo+p&WS3WVa+P|H>K)nolH2aah@ zq}I;gA>~W3QA6Z$)fv`|@x4a0l}PFF5m$^-J#gi&1S~_0eNrc}1A46lczS3?SbR80 zYh*>r+MUf^-!l2T=mN^cz%+|K#@ow#s3tx3!x%kKGxNuIN;tMk)HG*wTr!w1@d%%i*dy!dl?~ei z0@G%v&iq8f!+MtAYoPsAwGTHsK&%K`N0;by%mrV?CSm$jz~L;C@N+sP^uGDc zH<@g#*M_VrV8e7na*!{v+dj&?$SKH6@6| zNG##l&p_`T>XuX^7UTTFJ~*p?3RXXVYHdJ~BY2$-&pBw=I4A!yld59^YI3;-B+ZGE zDh{zBm671{+5M=YfkVWSv7K7aFKkwB%CTkTC2#^PqrNXr9K<5w+N9LSWx^LAj!*W0 zpc+Xo?|6k)N|;DEGs6zFGkv^m##lrwXtcST+!9sRJqcU+wZ7B|l_NA5QvmTd1vJ&i zI0C4<1nLXC#7#ty>+GN6FzbR(<7vCD;fK{f?A-n`R(^~Xm}xwOmFe-FZZ>L}+*`=J z#(KVvUb;O^O<^>#-W;yJkU%>)2tPxYnS+T58K`!D#+cJibhs^ID3Ix&$3g>9>U#`hy0mfWVFbGZV>wF?#X`v)4)>yEG?7;UgE0wYEKvJ0KLi^J5qAU4U3#s+FExk?`W2w#7YL#9d zpp2IpzIA(z_;pq=I^{s*_p|RUP%T zjf;GI(kdF;B|3Rq;q2G=0^85BZ`f$_3~2l;CZAmEim1PnmE3R>K5-D;6t#2#-Xym- zZF&8K8*BcWK@QL%uSEjZzey2d(G+22**Ahg7(vp;Hyl9-^a1=1aw?(|DLIloBgo0& zsJ|tjEKy#Z^5VlbZqUW;hmSifSns?7^Lai2B+1qgL0QB^q8%k#HOho&=2{x%ENOs_ z$Rpxs`6h^A=F5RA_`mdZ!k}-)&_W#*{{JR% zzqTEl3wjf|uJyc1NaBIinnIZyIf0!DixPTY;)6IBbwgcIev*Q(ibSncujl-Q&}ufJ*+7`haM@I9;|hd|Rj>Plt%ThaN%Mr1)sC~HZEzkQD zwC_qR=tJVC_}ELDPa221AE-y6e}B*qu+;*8c9?;L%Lwy+IqDu7PQorKOih%k zFg}%phMZc^LCVnYM*QG2{%jY%$4!+VM|F{tQXhpv4OK6IkyghXHZkm$TEpoOtK(`-_vl>asc?c z2rf#AcuCGqxS1TWdNh9z^sd`n9(eG9jA>g4KUblhffoCJ=LSJnl1k_7-ea59{$wxq z@+JCp;^i0s!|BemvrFk>kyKEPy>+}cClc|~3$EYQvdJQ zmFP!^$HH}Q+!Y~_$g5^SS3dM^`{oRG!%q0zKjF*R%O-fzvVTPRwg_Zf$FNw&m9#re zK;eCTvgGje+|m6XVxs1s$2I+{7-n>#{{k=3gOg@I9$rQmCS~|5RC6au)Nk6xNe=f3 zw4V(N4Ocu=Sj51SGSyaqJwuRfdPq^>1J=27Y{=jnBHWwqDw2?Ck}#$x-|u1+JCqZj z-(r|ahL~UVRo#8TNY3oD4%TtfP$R9N4Etw!JL8@0QFyD%Jc(Jg$WX#qpTor`EG}nu zxhmcz!L=W}>ykhDjcziJ*RX*87h{BlKdAeCP%3|(Ay)J%RjqPlG^*8XOR8;yAVKl_UyK%(9k6cmv3G$W$S3_lq?NzwixvJB$!pTN?#8f}=+33Fyq=ar-9LD2G3h0badZKnjv#9yPS z>$fxc{(kBC4_vjRHLAL~%*1Y1pIRKnUg)qv+H#IMxOOtW-mBK*znB%8 zI0r2W1?l@yJ$@HM5~Ud3-9kc}_Iu18s}9HiPsRCv3ee~F=kqW3{@2%g%0Ztgj~7MM zt}!*M+8v*rHb=wsSMIegM0nmOU$g~OMmLAu9o(m&7zP5hSKB!Dna3SH9K4@P8#@Q% z^`0Khh4Ybt`=rM;hpU7vWp26GA#v5AdJC!_W}H_eQUfOh8ecqzX2huKyBT*D7vS$T zl&)~BxsyJUI;W2NkVFRvsT7cuUgfq`JRe|Lr;Q)moPWn_66Ixes#!z(XVFfTP8WV) zrHVq5i(MD7=KhdP8Fa&T=M{c#NR}|biz>Lt^d}F%eEiMAnPyAEy0i zH~eQ?_M3x^V%|spbx#pJl4ZNg(>;gUD=9Y4tsKz>jU4k<D^SZ8?W5d4TiB`&_~)&d96lNOyB?nj|=puvC5ZHz7l z7mSXX--g~6DL=`snP)xtAR>(f0nF{F`4@`#0PD-~8lQZ$6Sri{cL^^5$K{P5<6{i9 zRrJvXRY7f|lMC%9*ebTm`V91W=*1*F-F^W#*tth2b|=$Sxl4P7u9UBM%~ zxVl18aF<7A1LtU8I3M(9OI(Dk_g&VggoSYG32EVTKL?$z0@~hTH`d6`IkZM%Nv7_G zYkWta?!+w)oYMb}p;;X`zWLdMo6^JNUy?x@^AXF)fiQn;0-@e24Q z9P&3M*3buxRsAu*q16C7Zjs=9y^TwBpc!L9)((De_1%!j9fQaScUfOQ4A9Axi&+;~ z=`0}}^O!J*-g!*?jXe|!QD`WP6Q2il)?Uee(GAF2{?+QWD)G{WQ12)?yA(~YB!m4* zy#;F5_00VBJDpAIPII>a6O3Q@>|dU|VV2@6`GKT;fWz8(Ak8irRR4Tqe*<^!+&HF? za3%t9h=;rQyCNPcBkZ$|>Q>Go$$W6j@W7;)L5*tR- zv6Er#S5~K4NAyP*V@Ms($M|{7awe{`@!Ttb$HW(Z7UX zpX?8p{-MFJfS5lWwY}6?iE=`GLtpSNd;_z34UDoRvg(wzGC(_oswuMl>6kv|wzk<& z_pJI&(JaIx&d%d?VoA>s;PLWAySx!ENniJR;~nf@mw_OP8u++;bcVU84HH*neAO!m z+M!pFdOEKH+_eODk;QF5josmc z-v;@|SUBiNv5r3r?=Ud*V_o=f=Y`Z^XJv|>)!b&WjXN$qC7iZ_Ulvk+|L^)Umu$g$ zFcS>E@}F{50KrSCsSom(hA_#CEOVJ17L&PW^VJyoBZLW2rGsc7_+@k^|DF8^0FRNW zNB!^u-tlJ3j{lOA)8N)e@W(SP=U3X=6rx)!Jk=x2{nKmsTG0kYpF7xudA(&?Bs_{G z%KNI$o1Qa{%!Zw|4IOXw4PopI8Enn7##yq7iBsW`hsCNJ*tH;OF0?OelK16%A}>FN zwB9UC50!}M=RcYnF~yF2FK(ztP7hb@1fP0O0&+J|T=_0aCK^W#nrt7?de7H54E$Z; zr#Zgf`(;B2udR%yP)>c5Vfh=RYYzF#bLs;niF|OcTEeJ&(=FnL|NYn7I8sh6ibb`D z7OcosLE+I}VbBKsqDhB$fJu&qGQLG7i1B+mxj7R9=UeV)8?t#qh3(qEw_r(xTg6@y z&-WKeI83gz(!%iFbBBt$_FTk8{Pv?v>T8p`Y!?feeGyJ~4qfbjVpny??oNetKF*O= zAO6!%BuQ@tHPi5TV99pbOaDorCw+XK^t*f;P&2ypDM^!tlY@qqmU{?Hel)0xu@H(d zJ1Oku902Oj91h0S*23THMveRQ(wY?QD4!>lp(muDM&hWuoBX~Rac9WE(9u;2Xn&E5 zTY4b9A`z_*Dp?QezCm#yd>C%RIKh~ey_@*1f3E@iJZ1IenEyiMcJ9{RYm%Eh9u<`? zUD5Dd@-44fBN!W7cKdtG=7NF8yh|W7qG2~{vSWj$t`Q zks>NQRf8?c2RG2bE`S$kJrJpXB0HJtGCuNGhM``G+f5z`p44V! zSp=3~iKctfzKjV3WxzFS(CRsnzt60NW2XsPrtY*KDg=NPgVX7Q5eo>J`Da`S3v9pI zp$}apxQITVSL3r(>Z*}jpYI?i$ue~XiuRyPdCA?vAl#E>%~aCKLCm)A-OURk?1&0p zop*l{@gBH*xQ{Z)Vb7M47tZ1&$O^i#i%*W2PlV^zyM?*%cA<8^yF1YnWy*r*;&bzD z@?}6ansG2(WK5D-;GHfm){Oy7`vV*HXxBAMJJ(e`voM{ZoCEAw|x3kM`4>yDz)CE zrGMNF|Mc@z#rDK<7%j+V#*V0H>4OS97^2oA?#$FrE!BI}?`aSQR4r%f4N;PYygQt> z7wZP+FqKdn6_>*bY4Po1N3g=~QfYRbeDHE+$wZ@^$&;=O1w-hFMyOTl{xjVWKkZMF zT}Gd{!kuUO*dytds{HqTHEvkkao?ae&%dr~IPFLiem8Cz`h&D1Y{$pZ%3_n4h=V?6 z;Ft@L)BNgi_s|w%HRLPW;DZ;Y?9g>3P6sfv{jPQ70VY}{zr@VE2X%kGAG^@)g4$;s zc2)6#oh>Ry_LJTcS<@TWKO13odpD{~u=x&`&<=jwg&N4cVrTsecJ4W_S+d24l+PD- z>#+fy(@(_ve86GU1~>(FjwYX{X|~oe)<*>rbhrR7E)$Y}-24Y|4iJ4Ozy^9vcNqMa zt{&c9;l~=&NAszB(H&Sb29v5L%<;Cxf6XPQIZ{y$T_{<+UW}po^f&SLWponAHdA|# z%s?>KV(wWge9<)Hb@G!C_G{g`vFDs-*z1DAyAoltPiOLre|1stJQb=neNL>`Z{*$_ zwa%gB{-*N^y@D>p;Bsr3_T;sdUMtY4OD(>M3ZoRI^kjL-^SvY@1^W}`4Rfck9~awZ zQu}9<4AmlnqAu3IfwxF zYr*puvEvj$huROl$3h3L$&;Z*pNq_k4XUjSI?e{7DDz&MaO3&6XMEe@r*h5H0S$49 zvwfu)Qk1(VT@A3$^zEeH>#Y=h6VoKn%L2^h{KEqJJWI<-%UD)crxFL`}H`2E(AHlOD*v(nvG8B@>fjN0$$ zQ?Co@RP(Inw@c0OVZ_=Gu5GRGHiBfc>*cHe-Ro?AdcJQDbZpivme=Df!TjT>tSdOr zluHoJ5*{QQs#<^Vnf@373m7vXPy2x_^@tf^;rPh&0cwxNP{=y-BqF`AHW>|kocFlxghIV) za#kyo4v%xi8YGB2<@Uo@OulyWiL1U0#tYkBWU&4~% zW;}wQX%$~|i%&{FpRfC00#GfPp#R=+6U{>Sl!JVuerR2>PPw)NM^2eAzC%j6RPFTb zz3x{H?uB{t4aFB3(jx2_pnJ@aiD>Ihxpym+hqWpc!42Y9CwKZX!0W!A$@Lf-Bss>Zi67O;@LnxPi5r09 zG)?^hz=6ERmHM5T2yBs9&UXM{j#J`aGZ?w3i;Msew^n-NJWnX|hzajVKgfgGYqUl?cxD zvKk#_C<9dKY*y?>)V}Eg6~~JEe)rwOtc*~nd`F|~j}`&SPcoBL3e@wLFB z101v{G=ZQ`m{u|p6;e1vy!zcCfllBKhyV|jF*=$^iUhWr01TO(DBm=x zxXr$(zrqJ*%as1tmx_tiDvc^5NC0G4#MXUp#lUL6B>5bt13QsXw|&R=qB*c*EBcU9 z0j^jCm$Gkx!j50zKpv zq#WMT=8aRALMz+d+Z>+0yYqjszIy87`~9awP@$uv=4dWNYUx>lnl@LPoy4R8zd!P| zt?DL%YwbnCnSBPntoIOJ4y^1D%INvcXUl zw;myPJu}pfl^#wP#V~>#f7MCBRJZrnT)vPfHK6%G-pz4T%>lFi0ZQJog%hxTx$meK!v4q4Q zktl^qQliKT?zm!e)ZtCA8cINCwJefZS&Hu8dVD`3Jstota1zKea{>jGBpA}tQV@wQ zGitR~wi%V}i9=#8I|MS0;OYP(5WQT8bvNk0Zn0@mKQydtwfet*D}5Lqp8}}6N4q9h zmCRFcpRcHV9JalD!af~P6`^9mb-S)tZmSA|EX3*s=N=+_aIXf zR=d$Y8mwRK_vL%$8`^f#;;^&qx=!_pDTxDKY?bjr7D{DD`CP`8Y|E$}a6l1Yc zW+r3glZymIzjiR$V-tV;ut~Hyx3xGA9&|A{y_Jvvbb(NZN-L7`1UTks9k=hkpGSvD*9CcsO`H*5uzjgird|uPB4x4l@F#E>=j)-#OqAJX_KZ=)wKvy5XY#* zfTk5dBXRsR%9jXM(lbsT(z}NL@@n49$$jhePEi{3_coxwqigZL#|p74UgmbdM<93{ zZFTO20-{8O+S3R`kPnpaO0s_wq@D9fZLNC3T{YXAE;!MhuzAHYeFgChf-uUJTgu?_ zEQ%41Q$!8_{?SIE05)(8C|H^8C|@KG54daw&Bn}n6tTA;rr)Y=wU!eY7}j3BYw|$G8em z%z)Hxy0Iq0{1X1-CZ5FW3uW;)89mTgO|Md@xf(+KdXb@p2g|EBWL3xA9$2Bt6u9%5 z=OjU8AzqshoarR9X@E3FinP#WIvb(iD8)Pb>i-6<+MbS*MD`+3FI+#m98)7B@|U@1 z@PTbH?oq!#?;`@Id8Hg|iEkb=((tIb0Z(&A75ABhfM@WCdEbyR@L7ugaJD`gf{4-{ zox#HVXQO2Ev!lhzN~J$aJw%7+)}8F-vtZ3Nyi1a;gh3Bb^^t+;l90z`)hj$Uq8zfV35$UBc~-V+$6o% zs3x-&GB>_7mge;mEpXIfkZLE`#F3)|`VHf2tYaTx%_79jT6gOz*BHW^X?k(r&w%Ay z$%IS$jM;h3TPhp^lDsi|vzrr1g(X1$wnVE8w3bj;*4jiN`8BY*^y-O=NcEA)CEXe< zg}3Z)^y@*g+XCXYp9>62D$c#@a3X4S?~}e&ei4S2=&!#20`$XEV0~p-5GSYh8z<5rt9QLCHvFQ$hVVbad@*F7UaHW#Ko@;yvR|0(_l)`cv%T~1^t zu1dPW&kX#xsfcXf*Bl5%!NRtkIJ6gFg;9hGtTkvk6TwT9ZNyM}5zZn8gXn&yNZ~3W^FUBB*t(Jtx~yp8gQQHrS~`U+sA6=9q%E0%t;w|x)^G{%Spute2|gLwyJ*cps2Eb~mxstzM z)FJZT?6`e}U|lK&g2-~PH+_7UlL}s}C7*5h-!xdMO5h_e8DXsEO1}{sE3o?RO;}ny zCih?y$|}?_IKJ{M0~0FlBUq%ZPcx~p$_A&cS#CXBlDvfZoptoy zq<@6yqen^66#=W+dalvdxvjQseL8R;nZAaG3DJj(qYPp-W90o;`8m#c6;Kakomk#F zX!HEwJy%c?1uHm!?+Q4dyn9_y?x(PJAREmGY5rk&`1!hEzp9JImEtZL$6^){-LdX8{0+3M$l5-ncGUANGAZM&_s3^LZATXA_P&FE ziD6f0HO+R9POMhS-trXG+hh6cA2ObgB+{Sb!scBL7VIJ0@~6kLpp{M+tUAo_sZcHBCo5!s4zaB2K?J9iPw@=^qfr@Ozt2Cva^nGBGOKlgD{mU+kzRgNaLjX?Sln$M4mvo6z20k4d4r z(-Swxy;XjEOuTKbJYBIQ;~J@{c)y*A@2>Z9{jvuIQ-l^NUK}k)SaGbfzpgFIo&RmT zy{_FjzGU8B?cdvClW}WJHFieEORv$qjbIDergw0xde@xO<61)|=CW%uAQ0gxP2l zy+afAr9yYwd;N05UIGrBaVS#y(?y{Y!cq9X5*MSQGmg0SH-h*)3>PJRHzW~0GN@o9%CT1o`Y22@_1NUSz z$d|Nz$znc!WV&ZSW7cAeV%98#{qz=(lRIHmInxmJWt7K_^Wz^{NM3}#P0ms-#72|* z!yl0wd*XQml|@A!PnQB}%XP5olQ_HAwpfJ!`l|aOTnylX=Li4ZU#@ z5Y1mWBJjQEi2*q-4q80BsSzYY`+nl0pq9?*tg1a9M2W=9@tk?I zmVwr_X^KSPF-?MBVI1*^y{e*CS~lOEU*x0 zEF*F+45dD~WT2;h{}uQ=z!=dZ3_3CPTFf7%xgD$M+3tZoFFn#x{LAL(-624yV06@g zeR#nyZg>Cm%6>)pDDg07s?yuHqPW!s?cu&D-<{k8p)JZ)_I=v4`1a6+ zTx%6x5Tc=7*)+5o|2Gih;at1QakL2Vgnd|qHGqLYeflpZNe)ra9chGhfcbD(g!|Y^ z2P3>>wZZX$ZE;(wa=wol5LgtQ!t%-tm3z``gn7z8{XsnnBRMpPM|+pREm5L>(B6Vi zq#t=2gIHk_dI$cd^SCGXgjZB)T~{T7z1PZQ(l@9i?nqAD*c|qsSHKzhJKu*(B4GMH`dQ+_SPg*$u0A#8uvDd_ca9G@ z4Mk&$9V;^#$N^i3#NUMOLKnz0|br9&onUsP=iE4&g7z8+VE;B5`bNaK8bG z*{!#z&_!$5LuLgAUI4DYI9EPNVk3=~Tk}rqNq+Imots0D;YQYYq-J9j58j>ZvxE%~ z#f_dFDM_-Ts6ZamUdbR1Y@S9`%3F`>^{T@$awRohrK7E53u=`pYOI3d+{=tV@0xW`d?%U9=(In*eJQJD1&;7Kn}t(nb3 zi5|CVlZ+nS@2IIHMn?pR`-I*;r3ZM>`5JuFu7-F%>^Me_0RvV}u^qH|klNlAy8JHz z0V1r@T1-TRNg2|bm8oE|A2po`8Q6ujxz?|vaN&avzm3HE$qLI$ig zXYCQLy7lv6eD*o-UX0CKmyfjix^WqseaO3sh~@g56{ z6?*5vth#!}_8ItyZZyd<*S^6`dSZBl1n|F}aIY=#$wDrK*4ijZ!E4I%h9E`iaW%>| z?rB|+UI_Wx$o(Iv-TiyE;Z{nU2-k0Au8Z(dKaXy$R5o!-_+qg@$qoP7U*W~l5i_kCiKJt+v62#mm+|_HMlctrmCyDsVH?=@=KX!eMoAMj zhn8DEb=o8kvb;MmR`J_^i?FD@F7f{ncAFa((!p;rd?{Q`kC*jN1V6N|2fJx%6-tE&O*<9J) zYcZcd;JxPluh}>4;O5LkjD5ZjCae6oqOQ-JPHBIV{`@TlM+>rB`&{uM`~M8it`q^H ze|}GzgSjJLdguLDmxG!1e!Xl~?o+^VfM$%MCO!s~_+H_^bd)$!?Y3us<`dY!<9oPO+&;pRqb&W^ zF|L8?zME`@Dk8oa<=inrirgM~uurTUQciFi_`K!C z?@VWeFp>2-=D~K1&DS5_X7U?FR+K@*#g(>I0P*V|^Ps zX*qCAjSkfy>%r+GcpcbdkCjS`#g$GSksO!2|R06veMDPUPa{G=omEU(QE-&xhD^bDr)I(_^I$5n2iJ!JNd*ms&DK!cKOy=}EOPe(c;$ z%gjtd1`XWJ7SD*na10a6u#Lg0@z%HL6e7@zu(PidgQ8({{#4HLbEHzsk@&WewUWFx zF)!8ENW-L0WFG74ffM~20VU4dRvXBO1uG(dVUyN(qc}O<#QyP?sgOHeMbm;s8Y%5D z!TP_0;2+wtL+6e!h?LodWR7ofx^e62x8xVVrz=eI|8dAdq^kt_>Eb$S*?spIak>+Z zF{v9u;SJtB?_R9~W9Jy}9yP1s7Tj8#4NthA$hAGk*Igm$hemg2Ry3c^Pt9gUBmlOr z_-^PHbs-M?EV8I7U~-UeJRgLxzi)q%*B%dUKfPBeph4H4STBS|Z3Lc|iNAF)V2=%U zd7!^{0^h>hqf%`@%OV_Yt+^2=Y$&DA@s}>Zit7-3GmqjP!M~ zx{nhK!zQgenTdr)dP#O~Uh#(wu(j6G{|0bs`bHx=K(1D8^hX~n^GYj3GEAURQjl;;J=+KP@l&RC!Fz7eQ;GV-HGqs7WoC0$&>Lg@d6>L5*C8gDcMn+bl zG_OCm3Vj_xHAosl8YXy}t29 zoYgkD`Tf~p%%8$H-o}JjslNJ=SB`DAeS$y?(GQ^}uLYc|Ayy2QsdR$TTNJ~+P3IUx z@ge&DBN#*T+c}aQd_Gr3*GeY$<~vOBtT($?`FmZYV-_=oY|s7*8F+(6{K zTUQ!gDk_V9;ffT%6@UILyj))?uBRn$+D_k1S}s_B(6gP$#ewagk7eddZQM#H(8Wt1 z$5{&GD)NdOCPFiNp^El9qX5EaHRiboOsL->L~)enLwaRuESFd?%~~AfhrQ>7*7w4S z3_D#mT68x&Mv1xw^WB+W96%%elMcK4#*%*9axgzYBiYQjYH0s~Z*%Bf#tvXFmq`hg zRfWSQiUl8S#W2jK^cxBDJE4&-bz4@qABl3klAInEaXgG}NuNbK+5{r@V^9M9Nno{C zVsnkgg2+YIJgNT=`$t`NKso2N=lI2&`NGqf44Vb9KNV7Z=#Re)Ui1%CeBd$tg|XJI zJFeiVqiyfQoT3@%lrpUR-OB$v=~B^^&DBxX#YrJ^N>o?7`gy68Ykix1=to*w#>7xUCD#6&P$c zSN*-IH`zVG#(83lE)(mj3v>2|MzuE0Hi-}6xNIw*bL7&QMgA+$#dA41%3+8`t5P4ysas2ll*!oPL~RnOhM5w9hNYVAcVf#WHW!$mz|)? zUrSRuW6dZRli>KQs8X)_VaT&F`0cht&eq)Cm{{ba&8_pG_0uR_?L(fRXd@dXTcXy( zc*7$O+pH$4rs;Rq*3m2N;$uJPQ0n#a#X|A~j{84W8ij}+F_oxZdgKQd--iRQ(THra zU8zI$pG*_sE@R;wL!^4D(_hHyv1C}N+&}C}u#U?m6+|5@8r1%Ts*70{$7sDU#hq-L<8>O$nK#XfTWHnqID6R;J6a83ywzl|j8+4WBK|=$v>Igf`ls+PS`9g) zC3vwOt%f@H2Uv+>2EIIJ>56%k`rAoWY&@6hsO~yiz41E6OmY>|=Y-PrAhhcKuIa{m zWwdG*UK^#Jj#dv!a8>jMpjC-e1@}~K(JHyCrMCPDT3M?ei;nq+R_43Piv}}H=gei;HF25C)G47ezl^-Ba&B) z=nc`L==^x}K`XR~_g<%#c!?I~VX*qT8d`W0dh^o14`|`c&3-E`?0aSLuddfm5-l7# zaO&;rI<$a_h2KYiLJNYy@!q!+(ER4m?9X6kH2=pgTYBFCH2>~>^QX8=Xg-2a_SRJ% z&0j{glF6-TUX$_Hub=H`UhU-Um0VUdPo!11k}W~=97>TRlj#2MJbG|*#o%l#-&W|U`v>Th( zPc|yv_XTD_{+qJBXzs>?<>lD@XfB-i=eS%qn!DqYI&-QKo42gd&RP*$$GCYPPYar> zTT)56TZYx;Uignq9?kvGqIo3x1?b1)sN<% z9Zn99H%Ie-kNc!fV=gsHsLH=W^Q&*-SVqmzf_`Lxcx3|CH`H;lnhGsEn)~NkNkR+d z1459*?5 ziN3M&ngyVx_{RrTs;;1=>SY`L`-^C)|I?ap zIWJloX}?lz?TMC!yLpCr*3ok7(^R&FGPL{?cjlkGJ@)fXVd181BU;iUo(k+XqB^l<7hn-THUt^ud}w%>iIkPoqp`+!^T>2wuP06bJ_}K!q z)oZ=WW<_YjsyI>9TMuna^u?ymCZSE;nFppqFVLpdaKpZn zhtQ@^lp}+fA=-@ca8Pp@Mw<^Rc<=k(M4PkR1Zn~|+LAiEx5F+KZQZ<6w9F;C}rXfIHn`nvJw%qCD)&}v>H-2)ue zK8GROEx_Gv3N8M=47jLs@q1Vq0r!db)z|4`fNOpG=~8<*;7za0-pV!re9QGm9^E}a zRc`8(I$HzOLN_=J210>a%_ADNy@0xyQ^+$T0rN#zX$mV4sFQ=6quYRR^snB^MkNre z%?0PeUI3xMxiW1uA86&zF=Si#0x><*=Cn^K$0rGXxF9X0DITI*3G6Sr+*#)OO&49Jy3OaJc9#{ufEyn6gf%Wgj z11!vXz=oS2P+GeQY%1qw+CM}Cn>zJZwXKi9c9s6bg^Y1vyY8F!OY#n|y>}L5j(q}b zqvffniU{m7i6fKUgTSu(d^0F*4cNUd8hrRo0`_F75q};&V1IbUYIx-;aGXGcx*?gs z(J>os|62z*`S~U(Q)4+M=D{yYS|N4}% z5V&~Xc1B;m16=!mJg8f)1}>lVGiMZ@0N2Ck2Uz|70@p;$r|JtWz%8&`tkfO=+($xR zad|%mZiB8I)<5*X9lV~{X?rAg=kaB5@}JEL@FsNO0=L*lq9XR zh>%nUNw!3(Bo&eD`<~^0KKFkA``?>xJs;OO*SW6ub-k~1&Ujo8Gqqo&T=l}i5dOO6 z^D6@|q+Hj(7!d=5D3MsR`#l(TY9U*eYye~9!fi{&H-q7@$zIcx0_(Dyf7CRH4Ns4xZI--m0)h#MDr7-f_bLm zA$`LiFt2I!^9J~XdEd=DHMSbej2#2VR~nM0P$mQJgITqbdZyQXZrlO&HEKWkPDDU`8?!7!ZY|WE&-GhKQbPJtU zJ?B&e^=SIDvBT$~erZGRQvd5vkDset@_p}Tz{;?xnG3~gifpnj<`_ux`lP&v<$#LA1zb~A4 ziLC$dZk_jbvYoX*%;+MdLSG!a{GguZ>A!ddIgT`U%l6WRq)OdH*)OQ4PQ@flpCx?} zYf$@|j3?%}-{?9rKFz-LC&!?kJn3pc=s^9N{7>&fd#EQ$_M~ZML;dQSqS49?P)|rG ziRQ|M`sJFcU&S6!zp$rzB*`1I0!}60(NNK_2Q$sm%AE$@yC{=)d^reW))KUC_p*N#@zeC-FlU)X4{e zt{|CLiOL@>D^j7(G37oL>rJkYA{}SqHq?d>Hrr=Rr@&$sJ;F?9sO&pAYb{q-0J zWoY6TyT0%m|BXfK*&i>N*BXV6vFrMER-R7kWY^s(d7c`g#4dgoWnXo4f}K_ETyWbb zpM9U(L4Vgz260+-;UC$v6e8WZDazQqmUvOAsbNArNfdQ06SXsaO1w4P-!d`+qU?gl z)_#FV;!{ifC$`u*qTWL8kG#NT;`0gqYA%sj;;Ulk&aagViH6bW_RF2K#P`n6mn-CQ zh@U6ch{#G96Rn)|xx809i8fisPnj*IM7uRRsmh~^Xt%34wP3J@Xy4fMuJT|u@i#G% zZ*Ncu(W$|D_^Eya(P`-#_9oAU=ybh!@YPLEqVw9V!0F=aM3-@8a+WnW(PjJNz~$c? zh_1Y%!Ty{!qTA$IXj;K)qPt_N=+55^qF2@2({}GpqBl@u!SGp8qHle0XKtk<(U-mD zj%;fs(f7gb%EMW1qJO#h+LT)a(QlPWIsN(o(eJ-k>``blF{t%-*GuOSV(?&(ugZ#9-HnBulXxV#v)ReKs(W7`pIg%WoY6Vkp^PrADEF^vz7&_ZnhYMsBJo zo`)DcsIU69)Q}jxQyahH{eEJ!*>8#R!B}Fn+rOf0|7v3V+>UEv8A`;&_8Hd~GZMta zld#MCJS>Qb_qTQ(j;$mnK6!NyALk?{dBvU18AKA3tIwxx9x@^(Psi`Na9Ez0ytmrj z>Li7j+A7X`kGI6s+fN>D>g$QA7NZX?WmkxQ^szc4DSKkt`SW_IJW*nL55KA3aZ6&_ z=jKlHU8=-P;II0(5F=*GL!&camk@K&;_bh=oj?(n{;V6W35x8tXzIc|P!dA#%cwE{wE^vs6nm@4`1IHGsAV>Eya6ED{Dd%|) zPRiVgrGeJqG;+~$;1mVtmh!bO1y^SMiNF zGQst61xp~~FSzLyGjifi;9kW1Y|5noZi}Zw-1H;h-l+9^#oG~ZZ~u`w+1&_kubH-h zJ;vbn3wU57eHq+2E#r1-yTM(hG`HNQ9o+rp)8T{Hz&#XZF4s~79?{HXcMAjX=y~U? zS}_G4vzEpTy=?F}ajpDj#swaK9i@Zvhrtt?Y*@UH2A)UqPaeE}2cALe-X6!};2GQU z;^Pt-@ba9N-^E-8UcTk84(mJyFUv>WZf7)jO+|a$c2|us$;~d>^Bq*{zec8Szk<3^>%@Z1&p|z@#w`sC5T4OQz0td4ln=Qc?6i^$gw-J1o-`p40*bctCN-u+% zyTSL<+~(7-li=&@TDnxl9()6DHB)@`!8f}5^|@_rq`6njjMso~{JY?<+)(gM^D+Kb zEeF4J=JD=88SpQC`usiX4ESyARxVO{LmCuyCrknS4q2{mtbc(2c-zG@K6c;_tv&b0 z`wIB)PHaw`i~xVF@3pr@7U2JSO|;WG4gBA{dStzeAi$sYp=gl=1ZZu;(FgWHz$Dg(8ShGg*K*kRU9Omy>WhwxHGrHMTyde-cZ+z&%%`OPUrlp);dI16j&!Va}NJHSW z%~iDzuOZM&Ph6^W8G;=5U9@)0K~O4MW;CJ-f^xs)UaZQ7pjNnp)_y4nt_X59SnUGA zwaOkFt79Q(Z>L*NGlt-v+_UnjRuIhEwo#z^9t3k-MLR2^Az1Qq$tfQSgk;A*_}WH6 zNU8n77k4!XX-R68_@0E2!I1`z6b6J$n*C0v=|X5jr6VQd9)x^PY_qle2%*$1o%h$r zLa1S1{I&%n5bDT1o1ZBHVY!1ZeCI|W>`h&AR8`0fdjUU5dJafndS2f!vCI5R=CwdM6@n!NB(b!=sI+6ceaO!iBfgT zR53&X^w%XUO@OG2c2?wuT8N&HIB4ad3DLUj^=+S>AUfoDd*DbI#N>=T)?C~RF@qqB zv&*U=wms2o^w|`|+{!Fk_aA{+!2b76nl=zSjQGmUDN=y#-CH5G(De0WgaV|@^DelaH~}fEPlASK2O*VPl4>|$18LqB$4oD) zLt0O3fv!~`q#=CjTfr_!+Zu~aWaU6QaA?t>U-W-_%6%8w7C^cnZ{6!FVvw#r>eHAO z1nD2yB{fI#Aj7-V{Z&ddWR#UT+>7@@X6?qP9)5Yqc&l*n(dr-*Zu2I--x)HI?n>f2 zGa!?}mp-ifg7j3Py24w?yf00w$}NFR^X}p<6*0(~{yNSOT?5%I3)h#lo0GPPtHqQ+ zcAI9r<8v<3e=>hrcOdI&y~tnE3bH<3A6e@rA$xRXDJSnv$fktsd1Vm;*_$o{Zx8cA z_OqLc82S8{d%}D6)d6eBt0tV-9FTQOIQm^&qTQdZt6oRzcX~|V=$CnuDN|vZUjo*7apwi0+fxi zo%v)6p=|q6FsZ5&%DeaSKQF6*ve&EM9lQ9UeB{H3R6#M6gS8uCxig?#k!Y|*lmiS- zra3jy3k>a!+fH>NV7OXDPbs#6;ptwFxj-W`6g6EDhpmua6-i>w&1IOK2*$Q?l`~khl*puCXt)ppt5cEjWEh3(m31V z@5WFGcfbW#DX83dyU)k2A1WEw?{o~+LFL2g;KGl~q4F_LR@pfQDh)E#Tgmq-Q)3`L zH0~vs3(svFX!`H>m({=1e*Obfw^pyTv>VLLs=6%p5-_)AL@Zza7fg?nH0swYVD6zv zzkWepzpqbx%3%F}-%0M*bgvQ2us_d2m)LRUgcRU|zEMI#x=KGkPRuXyHOKju+MM*laRx z?#bviOTj#M9UHr7hM(U( z#@tKJi$Leq_;X;M`estU-4D#rsZNuC9bkrt#&n7Ff_dEG`{M&-z2Nu7^^aV@4BEBx z=mc5+psHQpnU7$47x{k=*$t-GwS_59$ohMBtbTC%1DLxhy^V>vWL^q?6~0pi)BXET z4{tI)=cDqOOE-eKH7wd%{wkPutR+{NW?-)U>XsRI1I$$q_w5o<0@Gq^0`YAEO!Id( zx*+2x{H`AmCFjL-PMk&~$8WmV*+S6+%%w_A>9b^f`qOKr70CD($<(iJ`0w}3^)>ID zO$3w4eMst22$%|1TnK#wro7Rn501KE%CZ*jJXH;*)cfJ5%4FW?{UX6c5ttGYr`Ykb zUOvyp}Y;%CljI4Z|K{*Z~`hlZ2we;VyJY~@k*O%L8Uo$vtou7 zsrO^;U>a0@9AHOT%t56|RXk+yB~-pA1WesehDzgA0mFbhqkr25nS>VDwXw%Z>_X|O4+-`W_!e- zQd0PL(aJZZnMV5p+M!bX_^?;}TFU(1_Pq1XJMX;n&O7hC^Ugc(yz~C={Xcu#MO@WW z32K#Fi?}S5JAQs5B@79o-z4%T5c--sVY zlyZH+1S_#3%HxZap&zA1lv{RfYZ$uhS%;?Xn4~uL^jFmtJgQIG({{Ogi>~*v|H-a6 zHAPKjPc5Uao9r-WPfD)i=8LssPi&80SE*je9#778IO(~GJ?>T>Qq!>_Nv(dsGDj*#jQ8diF+sWOplY z%j@z_usZ{|td?zg%5IlD;+!9B%x)Jpa`6|OV7K!)nf8|tvD*Y?3Vy%5z;3x#wDE(3 zF}ua5Xlb@=KD%WV-EOp9+7rz_*(HF~7m{MeG2(?ie#}recC!r!Xq1 zexjQF;cVTm<<;fv4|*m%y?6B3HL@Q0k8{_s^P~a-uWnY{y; zee%UroXUZd#GM_1TCe`45|3wjR-Q7V5Kr$XGP!Ej6HlMIw616c@w)ubeeMuF;_I8Q zR@!fm6W>&-BR+3DPBgxY4J|u6Kzyesvo@Z+K(sn{dwqJRO0@4jwZDDVo%nm6%S8FM z67hF-&Av|iNTNfs@U+sL64CLYtMOp%G|^cqletvuDbe-dURBv^Iig!*MVW6v0nuA3 zrgK%&hUoV;)p2-|L-f~s&{v;GCI;5MO6bs=C5EbAyZapfNeun^tMx+T4KdWyd(L&) zDPm-X$0YELH8GwOd(7uVGcmdGF4tp^bHvoevF;mZb`n!rJ3rk_-$+bX|9*Y!u_`g6 zC@miH&YhU?{k_s%W*sqeYjk7Et>?t7|Eds1x|Gic~{p_a0cE9;xh>V=d8*RSh$R>I90m6x#|_>N9N-SW&G>b_13bdLjTM)^fhV+2z4q7%@MO@W7(AKasaKG& zxqTD77NG|V2ZO--FLCI8mYlOZwTusdu$S(fN;oB$AizyAY5@hP?DAgk%d{_FE^S& z^VYXy|N+ZTzPEi&<=wBcAvSuguca;tVv`$+&b}*y z*bHZ~lGSU7E36WTDe;E5Q9;;C_>8~OrtmZCe?_3WF+g8mAi|dd$pyQvCH3x|(LH9Mk z?m?oSe#1N27!tonpKZ`y35o8sk%-_YkQhAN>m&P|^!w`97IKgnxu|?9T^kaU@1E`P zS_4V>z8Cw}e1)V%z|q&bQ;>9YdTXDvi}a$+c=9Vq?%E$tlRDuAGB+&7mm4BftI>nz$;4+w7aT%x)fi7Rw>e+EoTf`b1lb@ z@odmWKB)VRECZdV-l#G)5_GBNSP||9(B-x>ZgcX1uHLs>QQQIaCI6DxlO3R&A0I8! zodtcR-uY>T9?-W)>1>kz3VO6W*Q@s*L62R3$;c%Z^lO!3UzhFzz2SVB`Y;9b??Z)! zk>;ScrgTicD*(OIDNvtb1bRRFW~&}YwZ_Almzl-P*4+2k0c4CEzFY&{F9&Ci80 zxBh{Y+wbPki9kq&9-7cw9RaB)m-J5gS3;`#%B^*6Qjq$U&2{L_K}faQS-HL`g;XcC zU-;S+NcAR!g>AnFsR1t^``^nTO_?%!QECWjA<2su{5&D8Q0ObRFC5aWMZk<&&KzOMXMvI9Ayyok9A1$+3MYkd0~L+8VVBvNzY3@5zaU?44H@qmK_j zHoqwF;b1akzdm5~em@S`=7Kjn))0{Gysc2WxC63%P31nDvmqy;?z3fG6XY~4eRkaF zgWSTD4IjEcKyK5iaGm!VklViQcI$IL$eq8lsp7Z+`Mp8jklk+*C*SX*|TcBj1lCeBxl_k+95CB7XQv)6!Q9|E611If&3c5iQvD5kPp7Z zlR9k!`77h*MWI2E&rj>UlV<|?5?+b-88;wbxyJ4CyK=}k)V%ayw?Y2-H?$@BGqI;BKA_m3fTXPplB|_0kE?Bgx9E$6_lvit5 zLD6w<;mwO~Q1tcN*Je=z#b8Tw&yoo!UUFal&teFQsk6=jVI5F>tgY0%CKigB`Hx>% z1w*muqDhJrH)%zX*(F~neq3EX_<1iBzaLrsEdCLc_>O)4Ym)#a+O0Q9>wn)Glr*h| z(!kbBtl~&0%cXQ|bom8kV?#ssCkH6I)meY#egtLjN&enzrce&}xqDJK5XuK1^>HgE zL;0xGj8RP+lutie!sM%l@|7qDSD^tYSDjT|vzP|u_a0u2BLz^dSN*wsO9GU?svb9z z`U&OUbuW~Yqo6!_><6uz56b_ZT6}6K2ZPhzVqfYz(&6PFUTc8Ct8i4&*Z~ZohUw~f zfFa^+A}Q5pL{-i2VuJj@^@?ZJ@c@-oj321EIm%eU>EU}(v>Z*l7f zW8n|4{b@;H=xNeNYM+vR_8PFT0mI;!TDL$9Y1vCbl_g-9I=Rcr&VXSt;_N({0fuez z{zX5ofZ=fC!d>57Ft%8$*&190V;j9aVTTVGP6#|x`pNY`=JeJkNHL9n~hyG5x%CKWWxm#pm&0?9`wBvE?V(?*-YL z@tt6}u5UWcYemLA?Bwx<9G`=v=z9k$7#pKj*0t>*$1h*}Z|gEJbWGDG%MX$B)39%w z_a`v4OJ@_q$a+F8=gu6I2ZPUa_+xP=l&5d&Dj9Ev@`y-~>r6b9JHIcMdc=fsg-5Rb z!Z%QkdmnjCG6>3t4XIil)=>7(s6M)U7nBeD>TZ%<24&C9Gh??hpuA)12JMC(l%07RswWuYGDe4dq3Kx^IpdK&k(D)nO3|xn6rd z){Q4Z>64{vMVK;_?&};g^j-|5TiY$?0^6W;g}c2WW*ka8>DN9lih+{jf^@Srs!*~k z`Y!Mz5=yJ}ilSF|L&?(hy}lmVj;V-}vI_%Bx`)aKx)+f5oAV{sB0eYye7BB#{~LBzMP-qOXY*Yx!BF0j@6UT(X*D1Ga||7Yt)wWRzIPzbDKjb zwEzm6zqXD0T0sH6FIMrLfP#TO|5T9z6c(j97qd#q=k+sJkErcXP_s~e1`8;#%nvqQ zj)8*wB@yA>B2W<8At>iLM7lOHw(=Sj_`zu8+TIntY#Zi`Em|K)zq(HVbWYhy14v zTcg@iAYY~ZdMxrcDP>>qh8oD1mpUYOJc9hYUc)r6BcxYfE0CXGfZj?=b}OM|FIru47)}Q@@^OoYSSbJ`RuODEa)Ky1*%S|tmGsHGtTY%ka~$2 z@;znNq|;0c9eY=DaM?656iK_kKeLb+y4z0ZeorHYMyM|8;nu{^w3C*7ydg2HcYyC= zz)@n@UrRFZ-veU!?fyNr+9|}y_Mj>E=Pks@83Xp!_)KD?|3_4f_7pLytXoG3P$fon zba#xLDJMqVoo5ccEF(tue9eFS;tMf)?C{jHvwMlLUwOyQZGTFPtL3Ynv$rP3bx&w) zI6x!DuNwU{)1ea+ysv**-WDMy3{;iq!8*i*xs-X*u0N!^jYm{Eh>5&9&ncOE#MHpZ z+G3G@;-B)xg1)S!#J{aaW15+v#J?R?D_e8F5z}oSKRbV2LCmDz>x-S`|IMr*V)n%I>nray6SL1BYrTA5PRxFZ+-(~iM9dxO zZY{8t;q(L+K+cx#8+^+O&hm!bAjt#2bb>AmEh_=7y0Ez zHn^qMM^ouEaO=sd#%}Kdx64MU^tYDa_H}gF_F4+ucQ$ey{WcEnd~DZ!w170HD{0yq z+yw{aI!gn={pm1Q?2Qa?|GT8!w{I7C;j2cXV-C9H=XQ)weB62X#w&n0n0`P@Ntx zcjmSPb(d0xl;(X<_X=5f3%&$3{D#RN4n>)gLE3s9rVf66X-18SVa z!uI%PP_J_sZ!jXyr+-m>8}}I0XY{pewo^g<)cB=mVH2pIHU36!I6!*+FaL#epnh#C z9oZoXYO72Cof;~Vm+gCUSBEVYi82HY__k}$s`@bR6da+3ke9!gH z<(57L-^&NVb<#J$_p0)>mBwfAeYY)2n&<%E?})O%DsAxnyE4kEN(VnT-^1r&%HU_7 zx3Da@2>yj-uV;$0!LQe{+~T(>_zj~wjn-@g|As)97Z)tSzjHkDyI3dq1D|d-zU2e{ zaEtEo`c2@!th4?Ctq1%GtE~R@wSYhMbYa~2ec*p$9Fg#^3HJ)FRZ!@!SnQ<$4xB|yw|npl$8wxA1#l`Q1ORgPIl6OpA!UM z9xknFD~BLEv#!tm3IrRH?ZbcAL$LE~%z%U{gt%7v3u@a!NQ9Mh9G5hdLilY!s#SUoga@*Pm8&`-LcFzeI>iqW z^R^AIrlldW^SIy2ZRa53<@WFdZwN&4q>D4Ek3f{;6yZQYdi{6XOgBm|Ov|L-#a>EHoe%d9!kC;s(TGwho5cQ6TnU2? zPeMGvu`P1*48%`K{+Nw5f;hWmf#IQ8NXP|)-pUIJ=KIs{+x#H0_~4IJtB;UyHl-}y zJ_m`N+tMwrsY4=??`c%+ZAiqvcFoqzheX!1yccuskoa`7cJ1a{kW~40OE@zTlJ=?b z%FRWPJRQVNc0UfuxLf}JLN-A17SHy{GkYPKpQY%3Lkp6xf7RP}ZG~j@n5$Zn8YFv{ zoU4usgk;|r&atO1po#ZOi>+$_O`2gplGYCzW*lXBl|b8OYDvq81nueuZc`}fLHUV&`4>we{oe9y`s!Xt|8)?P+f@ST4iSgxpWTq|@_Z`#t_afI zxS!CR3h9aQ!KrhXAU#`_xaURSqSGA$vc`UY}ndvPD`?xViR1_P3aKA2ktj zYX_%jvJ#NHX~*7rBnzsgR$zeImdEkFjfae+1I&}ruh3Gt_QdP#mT4o)As;a34hlB~>S z6($%@#~&vyeG0~}Wf3ypO2O#9VAgu(B~+*jGjqQULWPeRZ)@00>KIGNSqhIiRBr8NJd-~HCLfnX;HAf4iY&}* zKIKe0N7JnXnBpe4m8qM-w2EHWyUY|!JLcDIPc6W7GA>Bz5Cqfhj2o{60p{-WW=#8j zFb_|iV??Wh8Qmd#WQIJSG%Mz?e7b^|l5 zE!J-JAegr=zuvn(1k5{k_zxPklh!RZj(Y=U`rd7PYZbxFyuRh)lUXneX>``CJeWm? zH3jO)c;A?0?7d3XtLPs8a`FL~m6;Vju@}LtmN&5vH3PG5L;j|}9bkT3oabh>m2_fh zKbI|-pS&tt&ysO}N@_20od&aBVLUbY6zO+6-uJ;^e*UBAYqSH*FP2AY2hvH)-yh;6 z$Mxm2jnUO6(wPGWKBoVfE*DluI;YmwQBC?UozEqWbYe#HG#}~vC%jKylBT^s6<0=@ zyuW9~J5nt>w^Pw%KUH$aBy~t{?_4v`OKRh|Z<`Sr$CH7x(UN3*>W&8g+q5z1h`A9NvD-Q;-Zew-9=C)H;~Et@0fquMK*Aq3{Tv8A^cuLQH? zPvKvW+obHHM#E%&*&+uyEQ`T>y|zC2Q9UVz$C|4P%$J3~U@ILCZ+xt(;CT z1oQdgnAS{nFmoJg1HSu#nVo$(wM~W0OIus^zqMdKRGU%B9|80Jn{n}-sie#iR{d8n z@BVe5RF0AP4A<7)5JcvArgN)w37EHrQnfe|z`XJ3TF&ri(t9`d-q!*%`RqZvFn@CW zs2??W{Ts}yp=Ylxd<15^cj$>#?g*@_|?cBQmGv#8oS7KcTVVQI+@Q4 z9y^*}hJ$&o*(9crj6d?oR^do;-G(1s)}cFwTO6>ZWkOgMwm%aoE7ch@;1uuB@9L!*Ck<37H{*THj zEYv3Rc*JT!v>z{dALO~Z8S8@?c)nX-os2)=g7C4!jijgZX5`3q5Fqm4z-D*K{NDDw z^Ugc(yz|aG@4WNQJMX;n{_p+2d)q^d5sokeefB_RXsDyWCicMnLY4mYVeGy)p3W)v zpR+rws+Qcj+RyGtQQ#UdOJTP=EV#QNK7ieJDmizz;SP4|WUImg3NO3$W$fOY-1_W> ze9f;f-F(<}o3#3$eG6s3ck$<+j9t$zj_#haYP`eFnmhg1H{&D`>&JMdx{^X`xJGZMsDEq70(jF0=O(^C;1)&3p8W&s$>PkbYm)TmUf;bpM;1 z11B*M!m-dqTbvk-w`GM=z7RuQp~}Rf*mG_g@F*f_FTcP zZX*O=-YWFkWCy{fM^9Q_nL%){qyO)(Ef88Y&XWLB2nC%k&y3@O(6|Y+JSYjmaY+{8 zUwt65uvO=r!+nTcJnVJzNHj#s|e4O^D?mU%yy`bVR(-Ag>hS0=C33cNN6tJ>;8JEFiA=v(1xxAH)}Tt~$13H^j~M zZ%)|}1aS+S2u5NS#6xChGnddI9@}H~;-x9XGh07i+jn4OXg-3ZU*d@sdYzCA@@zPeqzB2P+e40S z>VstP##6>uUqLc#`5z&f3`j;kQ9tKB2+4TL)lZ(gA$jfciJVARNIvOzDcZLel9~4{ zRM+^Dws(AbbrX_V48M=7>>>G_rY>nfg=As1l2z3*NU|@hKDl2C$+vQ!mwi4A$?~UW z#i7BF{22D&j%++6>#Z$%w(N)GXWK#c_I%QDfrIB|A^C;#sF<}F>H6xb968dzC&hxA zAlY~&e_8HENdELrlslCK$>xKTH=neV2Avxg;e=$%*&Ew8%|i0e=FpWTD@jjYvpR18 z$&M_ov&j!3*`4WabU+A_J?bKD4&;3GtW5p%$P|+OQnD9q6G@-6heRBOO3X(H#xIKa@NgEDVdXV{?H5=E6(gBU~x;@e;p0st*<#iFDaV#?w``Szzl-N(u zNsG5hTnqz^)7Q-W9a)dd_UnT@bK-#qrCCgpx;=2qaybd=qWQ? zUPskIf4usv={I}Ob8qB|R*r#QS`rf3T>|<$RX1*5vRp6Nx3%aU=-;osZ29X4`j5R& z(h|->ibw8}QbInYm}g|1g8U$5AZTfQWgJpV$9AkYvW1i>^KYfiDM;DAe>nDD08*~P z25OsEL28f9)CD3HQob_MqPe>ubudq85tk>V!d)WbB_beoQ9z*J3Ryqpxed=lKq{lb zL*-jJq;foOeYzhBsXXt>vOl_zdQ)51=J^6rr5yBsU&-q}Dz$4~RDsmDHz$?|vADbX8C~+f8VL7D5&RfQ8e+FrZrhn!O)aJMBav^HWRQ`Ft>B znhR|&XpF|=~Xn*M2@i&+TSjl}!U%4aA4o`vlGZ?_kpsfX<0^8tLi>X1F^m#N<~ z1KHr~rM>QbkiC3f!-Sgx*?h%&<-0~9TT(b-$axyFAJQL0S#&`5qldywPIe6QUf0Xas;`^{JMAh*`DO}NPcawj9rrj&dkcYc$ywtzk4Qo@;E z%o&ioHys$BF9Ep+0wdk`V<1;{yWJ&oJLEp`-=5v64Y}_!ZL`nvA=lKuD1{acxgU~^ z!J}!A8x&O4t*IxCT=;O|DaiBbJ_**hg8agB&9QslLEcizFd+I3LB3zY`Tfi;$j@zKREF+`!lLaR z7F7XISbX#J`%QPDVEoyHp@}i zW?IzfEEGAV#@3SSNKw+dO7Zv-D9Y{Jz&RBRMdlTORUqI2n zv~OwMVJHS3GvC1{K{`B~+2{qu;LGisgOs2c@>JF0J`IYed<8=`@If&wV_QU{2oz7> z%=Jy{ARU@=yb%S(i&u2ktjmI8()X`Mzrvwd;Oj};J^;m{nDMKhwV+ro8^36iB@~-V z19ug9K=Ids<$^~ipxBnWTVSmW6#t!mQ_vs;C5o%@mXd5JagYD}r@#j#>W`x~1=djF zS6Cye^#DpjZ|`efJOw3*q7N;CrBG7brWP{c4<+W_V@_uGptLYUo;p|$C0*6KtXC_b zWOOj}#m*7ZxTo$5cR^`sj@_A!7Em(X^Yt@lJCs)JNH`orhtewEg*z@)L&-X@cqF_8 zN;W)(Sq=eE+PL8Q!NXQi+UlF6_oV_#+jd(?@U=n7^>AGEo)b{oS!Chfw*X29{#jJH z89^!Ri>StK7bu;H=G{-{gi?&Z^jY4=P`aEpmAzOWN>>}R^TGk8Wc?xC6=eJm&e;0y zbB0n@^vmh1WSkY|5}L2j|a0HYUH{H)0;fJz8S=#l2 zW++?u{qTCX6w0f1R^;YAg|h83oj$uJC~x>Fsl(?0We2w@WsPT0-oE+D*{w7vAFO#K zFmRK!_h8|9UML?ec+T&65z6NuTOMH*K{>v-C%QHj%J*~v)lTe(a{lulUn;wxT)N?8 z#4QGt%ls6tR8~Q`qB|x^O%BRmr(zVI8$f_tvs$ei&b?+t2f}s*@ z)qQa@7)t_Q+kamIhOzr4kquK|pgXJSkrWtqMyEG7o&{sWrug>{Z-TLNm8^rcF&IJj zoU`MOgK?B=sebH9Fiz;q+}L=DGQYPy@4WNQJMX;n&O7hC^Ugc(y#IUu&)zmsJEj}& zKDmvke{=sb_1H8~-@uuxcP55t(8)_U-{wX9Obu9&6B$c1OFY?qM*RcPa;}y4MY26sCW!?r6`0#ta3 z;hi2l32%21!`Vk@O|_=Ph-_Yna@l%fBsxz<-1`PGY8|BTwY!-Z?H&@kxYLjrFOoX^ z?oKB$VRdCL`kwhTpJR$&S; z^>RabQIak(^-g`sTc=)Psy!oQ<6kZcj&;P0q^zab!#rY!=sNY;%qi}eNh0Pn_IhXfMiX<3lH!70NiQu#^YAb+ zH&L>r%X|SSV#i~WN?(8??RmFiWIyQz1D@pOWX^lp9=vX9Mfj09@<;)DJr~gX`Frsukbl!44X#pC#k(wZq`mHwr)^w z#@v-ye3*11{@KQ-px)t4dE`yTbHCovJ-8Rtbo@yXlm_)-sGa5!Cr}@a&XRaxecVa1Y}G9=^p2F<%1fI@){~z*t5`!`*Bi3`{eH5YvV+D8H<0bFSCQKE ziR|a%I+ajeP*a_)@7^H$Pii^VY5tasZ>?(QL0eESY))<-odEUxrSG993ds1aRBoA& z^~1UP6L)ZuUNNMa9OBr*);~LbL9BklqslNlm-1d^g!KkwuFD3AE?&y0$YU*K((Zl913v& zb+OgJhkPx zPh09K8&pN@Ibn%RQ0e}5_1)xo+M?Qmd>&9GPcEV#w;~l?b!ycSQtBspNlj2CKC5oJ zC`fu}n`A&WsAAjhoa!OxK_uT~zubD#g+Bb}$oz=o4!c!6CG)y%%hH==IG9fINy6#G8^hTz6e9e3y)5UdWj>7hP> z5T(TU6y8Ee^rEfh{sRzNrxV&7UQQa?ys!Nvgn0+~%j-WuctJ$Hy{!j?msBskQ*au> zJG}+p5!w)bsJDn^A`juB*h`wcc@X~mROnppUkLwJRdPLj8zM^&J~UOagoy7PAGaqr zM1nr?ta-BoBHwuqCx?30AQsw|Aa8ORVkvdR!i8T+JcRhMFPTC=ZbCdtShuP59>h}*DF4XFhxpxCt=Fp*Af6K% zy`w}M;`M>4o=e*y{zbeg_RB_yPxRk5OO%B8tn6Fuf4Pv*c)tlvO^^VkD)T@XB)nhi zrre2vM8MT?hDaPFu3nd@`85HF$ND>qVlP7?d&^Fio(v?JDfz7^L|b6R4n>*SK$H=!3SY zyl=z!2GBxv)02E(f|j`6znc3JXzyC;^g?4n>+tj)`}-7hjtT#)ThX9Xo%y~GD}$~r zesu2e5b34yP;Lp(H%PCR*clA^u2HVei(f!5=PG(&yASkMGmnQ^r$KMyP`Y6+0($$Q zhMa@@LI3NRv+HO8=%ZOH3=%>?|5y4^BjgXH_~itjuCRiXzWX_<%U(zsY%D2jBaiz` z(yr`xgtSwc_KM(QNbgiB`tJK1(mtGpYy3Y!IaYa?WQ&0dO}@PN$Q@{ix9av-}{I3dG#4P>`&=^1P;gshJSFVU_A+5Jhn=jy4D zJs~l$FepVR$_npd(evEfJlcCVU^Shqc9}0s8-)=tK{{^+2iph;*jCB9uC*tKvL`p}ct6 z`3gH4lsBxL4ySiPc~@n}-SbbNywA+g?d1p3tJJp@1eB8oKj}28LHRl(dc15Sl7}qYG`BiE|TC*~B zi#HfwpC|on6aZsx#fIC~Do~Ml>G`QB5GrdW&(CBTKxG4~vD|SlRJP@7?e%DfO7p8l zm*wlA(y3T&p#i9LnPxU=y?{!u&6Y*aiojgjns1+E0H(QzjH261Fdf1=t}o&N(`D;| z_-}z=?%vcn)yD+$L{mdbzAu<}TiTY`bAg%f?wcYH|p0?YnPn^Zq} z-o7tG;vxaoMs8-dXA@YPp6}=^BI|AHy=nb!IaphMneZ)(1!llLu?> z<|nmNG_dyZaqNB70G3yczj53YSl)eVOIE9bMgB>k`)3iU-O!uNF|hmsx}BPNNq^P- z7`GuE$krU+0oDNn&G>%>r2DU}Ykf_6T*$9fiL_$FEJ9N1okP7^sDb9ti%lUxTr7ZaC8-yn73-6POKx^?9? zLoyDZZD04__^%vbHhgf1^yEURrDQ&ResQ1qxRmTSu{4^WNt&GW`)oRC3t@K1fHJ?g zJ@35p&O7hC^Ugc(yz|aG@4Wwe|G)1f&&?jRH@e8KIQY$Tom(=yV(Yy#Uq98eOYh#H%$8D?@1Q5Uz)YmYXC_#`HF zWKkxAsJ~k^`#VjQ_^eu3sMFL)d_Vff<-+sO7kA=+~}{U}~vi1z25 z4|RW~5$!KyZh!OBCH~&^yJ7AhM|6}lJZo5?NpyTIwBDN8PIPp#vpL{QbkcVh)$bl8 zI?t9IyO95m=!_fOvB&%i(b=pk^jqOO(Ph?k^VjbVqN{+g4!s*pbYEMVA(B!;bbo9$ z2-|K=^z5HppJ-L|Z&!}-cTCkVse|}d&aK@4t(DeM+b9)0ZaCGdI>5dL!AnBQ!-gPZv;7;m4 zYv(r7#+N)3_Qb%{^R)`s9}z>>V?JbPBoaffZyiDd*?C8+tJYuBg?$zTOLBvSwjm>p=y~N1haLJUQE@G5FY1zqpmBi?hr2TT+ z&l02CFF4+FizY@7sn~|xwIW8lR}ub&2Z*sHl+2*b(Zty5#XdHU0mPV>5s@sqnHV?U zdiqNC2r<4!Fkm9ui5OqIy(2IEH!(iBT#NbIo|yQ&=0+>CkeGDPc{qB>KQreMojrfo%oU%PfSHdiGTcMO-x-~E0DA5Gci?ng`aE33Sw#` z%JkpR65^k26>CRpFYzz$|oS3fOJJ5bX zpO|j14{k9(PRy7-SDtIzNX)oM2hXi=ApPJbD72WEaf>I7 zwVE6;Gj-Qa*yb}aDp%nlQ?#k8n&zSYER z!x8I}_)=oFYpP29P_)lyzLGZsW%XphoWKoG0(rzb{W?H7vie7O0$Kl*^5v3HZcxHnHNs6kfD->) zclCuzQ0_{cHrcoal$@;5zvG)gsUX&I6qJI}mip}H(qEvANgR9sx)~gF@3$vp+QA_` z8Fc8g6gU=Go6r7o1;^q?0mt%hfMdz2B^3HsaBQlsDXq5!htt7~tZQU_FUO_5zB%CV z7dg1);wo@lwWntlq<|xxXYZ}Y$H4KB8hd^f+1_L7WNiOMa1<_cFN{_I$9qMdVm?1` zbb7zKc)<`H|F)((+UJ4ORBOZG_&9Kyy*<9YeHS>1$D^g!3&Ck=Fd+Wv063kumbg4? z1Ltw}BhL_PaGu+;gN zObOCAamf;9;5rb%zrni?Tq)J|&t`Uk>lQVws5BB>HI)ym*EEBhGI!_0kd=xJh4A0 zw-xQdb7j>~&icjRN&myVaB~1W#d+)fo^A$Dz1r!@a~ggDf+DTzhs~ryQtP)qPJX6uJq?}IOL z*X`xYjKNn~7s@#D5qzVKuRTPKz&9&sb~JiF_yuK(xKRau`l%V#dOq;W&-J`nzX1Fe z#*scd_JQ9;=B9L0KKR4e=e|`Uz#muiC;QD8@Hd`M514R;Al3YMZr2J3TGCrfe7qr; zV!&LMJq*Ee1?er)Um&E=(IMI*2_a|IwvLP{2vysJ{L0-2p%3fttqhuh&>Yh(@l^_h z`MSTXV6A{~pejB3i~)pyu3A8M`~;EI9q!MI7eQpm;@_%MG>G!A^)@k{fT;JQTlv9v zAnLQAuy|D{#4u5ra^WDvoSrZKoP88xJL}HT9Tq_B%o)FMn|z2BD7rmpR)bi@lYBRW zXo!8|8C^cK6k@-Hwl(~AgSheuk7v{0AZ``-E>0~3;`R&Ft7=9d9(OJ6T6-VF?@Lid zi{&6b`RwFk$;Xg55W3T6&s|6y+t%GHoCk?Zf~JiLoRBCj$>%WOhr|b)0=w{4keIDi z@#_2rNdbwi-%A%k(l9N8ThSkq?wcj@cyb|Gn$vPR!55MOY#6k6gvaeIuRyD?JJH|x6135) zIiCiSK$~U>oF4W8U9Vo(jl&-Fb=I#|`51v7p%`;$-9^x&pNtx3+JOG*GsjVd3DCbj z=pITe1O2DqGH>$`NbNo0u^_YtQq^_8xKeE(%^^^j=Isq>+NT{OBM%|Xd{vrgsSN2Y z={v$2zd}03o>=C24$_YgsFn3@hV+{=3%JBBAl=aWX|6#RGJ;mg30d5b(K6zfS)2?R zk1Y$2*0@6xCuF`Pw_nM=0GY1_&2yJ#AK_R^TzO>t8D6|<5 za9{3(qSNBf-u)CPp3+?B^Unl|R}UVJG|+RVqY+<+&q6oRe%u~d`@@+6^v7U4H-wjf^kXZifxZ7 z81Z{vD|g0%k?j3IogxXwjh}+f^+sUS#Br;XUIk<5!ihS=RH&$x>gCa5q2gg-appJ; zD*GRNdCA`mmD5SKyKBgDw3(a6vH+;W_?I{`9HElUTRwV!4OG~D<1R8jP$?f6Gq!sL zmCBjh;j`bMQl%a#HxdYymd%;BtTjlRX*L3zp)&Qk;C}5VFq!+CzV}}S)1=5>I{yur zJ^{UQCw#y>x>ZW=7zNBLQtRHXw*vDjeVP1~E>b(?h>4A0R_>&p%?JmxE5FC(aUz&g zUUbhda$sqkS`gIF1D3X@E32aPzdc^tq%Uz`#pxZi@+bi-vGmfpJY%qu!t4Sr%z}0O z%$uE&TfnM#d+E0AZ?HZX2&4)81nXOo+_Cka!1~cudFR_7uzn{HqlTPd^~ZeObSVU^ zxfh4IbuL1ccSCrp#tNuX7Yi=kIYYWFzD>FWs{Hh{SC99R&aK`R@(ikig5N(qJwWQg z=gRIS{c9Si+Cw_S@$>CAYD}*c6A?Ez04==NPGIIq@Y8 ztd79di_JHI^~b$VmTNIsZA)5oP9%WUQc5p6&_d2{r<}l;23VgXlrm>OlX=LS9{#cw ztar`E()3+m6)UQHywn4$utO$(Lj_nb*Jxf?r3h9&@l~Yl4p^C&x65yw0V{n$&%0rN zGQZZsW9FB@y852uZPy2|F7VtsJG~LChzMoREk0nKxyq6|QwG+l9J!57I$(v|xz(1Y z3)b;;oBkya!8%wo>NXYtmbconn8)Q{?J?uM_k>(0u0IsQ?p*|H-E05Xf^@J}WvUi$ z$pLF+?UHE8Vz8iE@*&R(ER#8pM5|D+jQzigO_S@%aP!|@Wpe&Bj_2e#rILDGPY-Ng==|HafkLEMIew71nMyqDDHiJcnonfj&RqGm zXo7h9NNn?mV{3`Gy5TF(AYe z(2%bq1#w;wpa^7D4$&)n*cF(W0Sy*Q{sgSbg_ zta^6q^U7GFV@;^=;$Iy^hwa?^JH&dTb76k%#w)*wF0J~qVu8oy17e07EbnOy< zY$n7ax-Jgg8uFAQy8hj1-&(Sc=%#M!5&Wc1bg%clO(;Jlx*x81UOE>>^r(0rtO%MT zddB~r_$joE=+#xri?FdKdf$Y6v02$d^zq~tjlOUq`ebdtGImW9eeSJw?_c;3efvh2 z-@0~%=!>Whk2y~#227VugsgBN27CqQZW%C%frDCK;u1WGfmfRBrMG*CLH@5xBcFQ` zgPOt*th1L9g9d@mY?q%PeV8Hr{UkAX+GUyF*eYUJj4QF96-Er}t=3SoF(Zbz{FCDJ z3UB@h4EQwJQQI6SF?!>6G z;=%&G!^G(6pqS#30Ae(w|C2?gGcj7ks!gp+B*t_{b~_#zCdLA}CAhQViLo<6@qN`= z#Ms>$)$j{jiShjzmUA{n#CTxm#_fy#65~OGgs|{_VnX)yk0!A}V&cz(^&2D^#H3SI zu+)MIVlt~qRiMF$F=g9iy6&tuG3EX}wL>nCm^#$@c2tW=Ooi{rX`bUF zrt*_E>~t(9rWy`ACg&Iv|1`dTcrKbm{EO@z$kD1L{{2-CR#|F7OfyAZ^6qydrdMU~ zG{hburo&pbjZN%{>1${EyS`Zx(|;F-lC)%lD3MYhw0zl3p89`ssD5OV@NZz3x#GI{gn%kvxV$NxUxm61f zF?U3`)ZxlOVlF24f>+8_VlG8|(Whn8#M}o-kpc^#*0>-`d?S)u62MU!6%m0m@cui@BaKQ2bP?gBIw466!Xf zH@X*;q~_dHg%O}6EB8M3l>+6V$LG01@_5cAGt&lXQ1bLd&z6{hQb(t*-7yEsSI(_> zHSgvKi}lC5gdxQ{9g2RfJ6DnpRoeR-a0pPtz>ZAsjUiMr45ezD+(XoAg_BMweWWOE^s`u zEm^;%9UR4f3XN*g!O>zkD(C+N9Bm1^r`y`VF>7+*UZM~<#k?Q<^Bn-EO$2@9(-&}V zxy!mty$(*-59~$RVc_)0SpTq!LOQF@A!QHF-9%ON`6zJiyPNHGj;w!{@8E}@$HAF? zWqr=m7I41qKOV(d1I|Ka&fy2wz**tO);4($&N1cw@R2@nPOLexc*7jHRBxD3B6GpD zd5@j)up_u!bGsaMy1?aDXSTfi3Ahq=IIdGOrc+;`<$8hCR3M+(n3fR|Ml`|8;m@M_VvGHnXLyUgvafRUOB$k?H2@krK3YR?I9@bRQfSR6@oskCziZag5bkUw;%6cK}fOv&~Jk?&c_x~dN}qng#oE62cxFu1RzzFzF>QpH>7@j zbSK9C?fdb%CTaewZ-oa=^il0eZ^b19Uw16l*e??bus@+J1k^-vyD zXm=hXz>qz1=FkN{Fj&@&qA{Ids88;@I+P8D=8=3#qX`&RO&+fpx?mh$H1N+}6^!tZ zf30KIV8mT7Ie%_F7+1zmu3-m)adUCs4#s9MQlC0WXBdL#}=L*;5`=puPFs3fT~9x3@k<<+~f@8XZ3 zQl)q|-i8X5dQYx?wggnZg#WW%q)PfkP3rs_sPsmEa|w5XN}pn4yMYXt)E^BzZ*0NT zEBp~(bPi0L_N!|y#DW<@^l!Ho0rT9IM+F}>!F;f-GV=E=Fw=L`#ykihy`C@Jnh)mB z*ylg5ae_r*=4B<*z!LM{`-U$FEMoiP{C^{0t=!*f{HzTu8*5a5sR!#RpE2U`c2{kI*g{*Y@P#7D5Eip{ca4?%Fx(QVEFM3qD<&xez?r~~AR1M`1Bn~)0b*U_K-REGansO;^ zJH$ikT{byTM*8&K5tnjOsnC*&GmnCHQA`z-O0k<-*I+5czJ;ymQ1XT@N z%k8q;p{joGM&#BBs4{;$(Zw&3elm|_ko_`kS6#oZ3snZ6=@W^IP*uLj&Abo^RryS= zX9onKD(jRY#T8B}d~xJl2vlj;)K3^mKvn#v>8_3usEUQ?YkOruRYcKlZu?rO3b?$M z%h!Y|=fa)A(Ew}g>e5@uFTolqx4a;_5Uf7seKVF!u)2p7xA;4P)v;a9+xQY#f82Qd z49dW2DnHJDpUm$U-`}bYIbglLx48Iu2&vZnO?*qidg0x8^xZI6&-&yS9Zdr(du~l4 zV-;AL3SqMa{9rv4O7=Gn1S>;a^sewHux>5pSW*!SR$^G>(%;Qs#a%HHv7~@?UTe2G zaR{vAL%aL^B*6-(+04QG2iAeEp{p;v6_Ey zl@?eImW>~+ev=x6|IN7u*81W*nq7@xS*`PszGn!QIqTrQTt%>!?$=fn^#@C5&!ou7 z8(?Wzvw9~x!BW@#wQ~chs@uOPuJ2$e>WkN}@dZnUKC$ZGX0SxdI^8%=gE{lbep#p! zsY~)jBTF#HVpS)5zJNJ=VI9v-UoeNvn)bFQf!W_7c7a_=8eFv3+yKm;pUyVhn!xPt zci!V*4(9jw9+?l~!EB(UwvI)C`AIk~=!FfKm10lbIa|Ser?x6-(-@cq9jCj)N5Fi% z}^AQ(HoxM z_7xCM`DKxyy+02@M#SvEtFC6qte>M>#FjzkoJ^NQvIJxoIB1WWJc8`z=x6qC_dxbx z%nWyHHDn)Y8(zG%pR`Y}<)RH_e`xtqska~}<&!_TTD z%&=L};ymQ-h5uL_y#V?3JSLjPCn4{tXv^jH5%QsxpbDDERD--0^Zf6b`KC94*-ig+qLey2;8=I7+X!{9Flz zV+-$Ss{lXR;z0@(PhzX-8rp*Vh?;!7vSSP0M^*BDx@V-AHY&su6Oh-sFXO zIFM==p1juqxzM(of9@nh&ULkioPj#zSkd|gQ__$foLqbLK^tU$9{R0#bQNT)SYxVH zmmzzlNBCFHG-QpBjI1%|g)IH%@IJ%8keP5fQdM^ZGR+UmGw+aAH*dd_p$eH74-fAD zRt}l$D9sxVhLBk?XfevW4>D3N-oCphA^q`2#r->6kbZwiTEVUl(h1_tg#|j0-ejL` z^lCGtm+V^mGj|G7|7to)%CAGJLO$6~;2fkL3To`Wng}WL3yxJ4fuJW$^ImQj06ntj zTp=+F`VQk$S4#Ckcaqq5zswYLaZz=qh5~5s#d38fSAceYb9mg_9?%vyyJl#YLb8xw zB)D}MBm;bdP$>k7E`_Lv7YZQpi({!p5+5Yu-YF`t;ey1T*QT0}Yap@x!|@QajSz3L zq}qj%&lh%eL)uab#E+|Kt$su5_FD9bUnj(h_;ce|PebfT@Ydrs^$_!0uOE2F17e!Dqdp#+Pa#@JZ-Ej%*MFUT#Tk{m}&hfvYbTwRbN$KE;czZf>#vVL2BeIV_p8@x-nCLd$J>cH`w+7}4fiRVJoy3^+`rjuHQg zPFek2xSyDsos^=*co9?1QpK-E4-%8l3x6H)-bYMc*(>LFq=cAM%6(JixQLjD8D6Zv z^%^n3S}%5*cu!17t_j`SD@}~==v;kHqJtQ9zEo(w@ggz0dVAUc5!&D z;U3qM?DD6Z_n+R;%&w?ffBfv__3TP*aIG*(Wmg@W3cjBu#(uy4%H+!MRQCHCySG|m zC)qWY$D&w{MeLfh9#=Usz^)aM4co_4#I6nElQ!jB&#pZ;{=DPc0d}3t`oD9__1JYr z=}sR9#MpJ`1Fi~-k>!gwX&mP%?7FkOUEg(1vg;0?T^o2Qm0h_rywH)W(9TPsuejoidd|+`AyXvP8r?NbST@k1M zmeTE;sx5c8)<|zoX~yYLfAnef)Wm^Am$zCiFPb+Ks|4-DI}xkxweS z)O7Q$o(;|H62gT#uz}9%_|B!{ir+p@7j~>`{P{>X08+>;o*sOE*~hwGixuOmUaqJ(AB_<+esl_ zw}eiaPf!Tge{Gf~A?uz@{91h{>_?_c380q%^ab)WUK!Cidw;a^>Da98$4onN5| zo^w8jW6~1A`|8Gb1CL5jY2h+m#zml>q%Db#YXbGk-9niO5m0NEMOi=K1hrw!Dpsl! z`1N-TRtx1pVA+K`>!xfV_(~^gd9W&kuj_42?j_$h6rWWpihxMo5>}sd9z?08zpNOA z5EXa(#DW*Z6a}W=y>5n>laOCl0vE(i%}g%5HU_ctjIZos8`7_vYzkjOtiNk?_?kxRVpI1PF`T0jDMEhuR!wp>FWaz%OTmEJSuUn47AWr=N(KY zXs1spU4Q!?v@DmbR0FeBN{^vJV>D~8 zH-?JT4rd*XEU4(O_xV_+0~OfIJMhUsWuwd0V^nXbIJ#O`o+Z!k_@Nzd_Y^8S{iB*L zmO|y?<*2M)cc@fyjqXbP2Bz=klY%Ql!Mt$1;mqbzFtgjNPv58kOCir;on`gEi?B@|{6CSM;_WOQ9;UIcz}e z9#r)b9vUSdf$HuLSuPI>p?X4)!&rC?RI`dbxB{O-^##{^Pk{`mwnSYG-h2hBztysz zDz1g<-|K(O3?-mCYk91kq60O~iGs*K8c@^l6|(vE7HXzWG^hTpP$M`P*{@rmwreU* z%FhaFA;x0M6OThJV%d1S+!m-M=Jcv?Jb_xyB*lXr0=51{jdy0spl;k7?VXqbbt~<4 z+f@sozJFJ&{_Dd~Kc;PWsr3xhW8Q098jM0cweVkNEDh=(-ukzH<%Rm7N$#TQ@6fQE z641N11RASthsXX6K_k?wOKSW8G_G!E4W$M{<9c-8!ENiI@#yD)eJ94CQTSp*pSwCV z-f(;;T24TtQ%ue9A_JPj?%~yTpP;D{&2jIw9yC`TEG`^yfaWoYwbD1&K=ank7Z%41 zq4^+}@cS7J&Afbl5J;J_++VG8r7x|sUnjuTa@3{u4+4+wR&&#eUz(%ixVZYVkze^0S zb3SH-jgPTOR&bZUo{&-vEWU*D|1WE4M~fnzZkt~{Jv31>J#*^RQs6+&$eNA_fXIxS zqU%*N@P4+^o<4w{CxHJt+Ij*y^)WCSq^0@meC?F_>M*l6ne%4sSqs=|C^+erDu{Yj zeyBr(h7d@TlcP7y4V@!55BpRq(PwkzQ#Z$f-l_Ez(4npipf8Q>eq)6zV{mb>zRH2* zy!-7rKO~~!Fo~bSg4CNj{ZY}~3FFJ_!#p8~1Gn9hNf(ZK*Eh4>W-$wob@THy%p&!@ zFPG(tj;$K%(`ZZ!;K?PvBU|7Vx}t^PI%xQG!4kOB9Kbvn&?x%1+{7S00ShL(5`c?G#`{8almr!iz8l8!kQ* z|9MieGK=feJ8f2kDP3apS*u`{!z!uHH46lF((nWGQ?Zv2$*Ths5(FCGnr~jM*!_`! z#F-MKu$!nFYj-b9bo;eK-Z(Y5-D$#~^i@y@&*gAA^LEsnn-9*iR1$+)y8WB@4 zP`OpXGN0)D{k#a|W-~+$66!#;x`U6{XmRv^g|#uEgus)t?!2Rf3G_|h(@doS*$BQm zi{mSzurimJMm;$c2@iK-19N_e*$=*gc;!+u??JoZ;9bH9k`|^;LO;ZU+a)<9Lvr-4 zWR2ymdXxeWp$8cEGBJ+*iu0M@91-2fw4YraLyn&-HKl>3fT?r2G&Cw1u^n*pP(#O2l9tTw<3_Qyo(Yc$naHUEHcgoyWZ zJv(1IQgS2zQkO?9@dJY-*7Kh%65q3lwpR0D*9wpd%0NB`8I&2VMF>R-)lfp>UA*d@-%6mw1$ z#cx;?+9yU|(!QYRDue6CT#}V!=O63Ty8U+X5Tx?ulUd0h4Se{2igS;O?pnakh(PR! zK=uHuxg5}HWn1mH5rLdc!;gfxA8N83WXY6NN#&SSY6%KJ_0YJu$@?TPlAMoDpU+>% z#ag*G)m=~R*PIt!Gj5kICtdHuT2|1We!L<68n}VaJIZy^_3(X_JHsg7Msbj8dEo33Ul*j!qISO3^eoCtMJDeKYRyxslMnVhlUMxR%T7Wp;9zyk)Z&Z2_(Ec3EenPH?llLOEh;tXvzEUjr2dmF#u zSp{5rv8VC*oOyi4LC#0LHQk-P8}s=dwLPY57_-s(a}klroLv;|PeM_{0R}WWaFcSc zQ&9AzMP6qeSU+otv4wLsQ(Xi^W<6Rht`?ww>!zlg^s&&6zivzc?jnnquY2tM1QZ!x zQ#-nnU!)ijeK<5S(lDc-G0JH=Vlkph>+6>vu4r(hPYBH~sv?FK8DiIUR?ws5#7JXt zz?jIn%7aYQ=jh0(c2xosHCV{Q!%D&7-RQ^()PI)O%_Cn$iJ#wYTn2r^WhbxE@Jzb@ zc?>-7@k~Bf?Ss<>dLq4g3Msyast&#{5})b^TtvPa`&3-UzHaWumC#Q-1z!qn{T}K4(B{yV`yCB6;QbErY?K!548X#6mg*}3| zq_e9frWK=sSPd@BCOvZ1BUX%?^_t4u53e-{iU-qkAJtxfy{4`km-yeZ(j=zTSnQ4b^8+|n3 z>^~zij~zAglOV(PAGLacllwU(U3s*uK5tf^woc@%gwnE`=Tb*l*A83XDMTjC`MsKW z!I%xNk@qD_J`tZQyr=89E+s}?vn)%ydBj@Vi-^hT@VdzUTkzl<#U*kd$!FeZ z8E%!q8|wI3_Bx%Ek%$*Zz}|mBXlae}Rrc;V5c6S?|9x=4v#bua(1kSw(`7u%C|qK& zP^~kiu(2kB1)p9(*P+I`Yu=p~*5A`mOW{&ut|0D*7KNv%VuC|yileQ}=(J;2Z2#h1 zz{#Jgo$pZdX}8PEL1*apj#qhDx&Qc9#izTQ0pv9{I0g%Rj560=DXw+5e+t(MwbjsS zVgZ)QgtqE&s-6M0HI1l!qsoo1wy)Ovl((R)jSX+C2P@3QCpRjv4O zbp;SIHfr-RI18jP7A{lcNtkguY33Y=V3FTe_-W!H$i%%LIi(oHT0w@>gKrR zfg<}t4L?0tEU19S-#1kFpy1C4uYcUwk4ahuuT}4Olk^j{)qe(sWWP8tQ*F?@dlF(p z8jU|31l3yT>WU+A^(!2VSTk(qcXL4}|3~nHK;Zc>tDdK-7Yir#pH3JlXP2wxn%jD8 z2IF1%c}XgGxrq7rT#xm}JFI5+pPsh6uqq?EQF&P!hcdm8P z+KUYTE3p_;6oQD5+iL$3^6pD1kY8zDW{6g?SBR~(?yVB}HlJLYF3P#r^5r0jSJvzh z^O$`M@wmj)EQrCE_bC8Yp%VB;o*s794tIz?_GR8CcSR_%##Qm$<}7aN>9Iu6LWsUu zdbN(Vj5a$$w9(_g6=Iq7pW(v2SH$O!=<-cY#M$kseE1JxaaXD7N_$^ilg#cvC(MRn zDow(=OeQL$0?@KoU z%#zMwJTtGr3WPkAc2?%(9s{%S0`AOMNsD?cr+Jsy$Ode5l%MeeQF?TJ%stRdW4_bc zr+6W!2as1Ezj%|`jB}4)pFplkmgFRyA&y#ofY^?ag7tqal|{%29+;S1Z7e5->R%j2 zXV@y{wdLsZ_*}qRsw?nC_T`GCHvL@HdBJquPA%UWxfkjAcy%UPmi|kz(5@>U4*V*U z&zERKy+h>Rj-u5M^xfmk2ruS6Q1`7F%hC+#|L6Cs$eB@DNhS6grGi9Sb|BK8#X<`W zw@3ixtipt9brv*J+2s8NdJOBlljENQ#)X8aVTWaB+vl>?ja&UEFZET?!t~~M0z>DG zJ%t6U8-?-yWS-YVg3RFew|3jQl8^fkcx7j|-tqoOS9+zH`N-g5xeHA}?ngH|g%8=Y zbl>u}(oBk~)(70HM@rFF2u*z+WFSip)V3|NrK<=uE!Et4b7If5T2|<62k+q=Qxjhk zt0-_XDI%>P3^8)`2Jh`!|m^_YhRxkx76eXmHgwQ6LO0bo^jj7D7RHp5^|9+SqqgWrvE7HK5xfB}{fR6{k*WMqSy~;tEX&?cFTs=u)Z2j>2E%K`0ititWTs&p&vnX>zB4 zmYZ(=O;{r*a#|Id@k(PyYhdMb$(sRF48MfL!OcWVB|P_@BsT1Wx2KQik1FRi=JyC? z>ThJl_>=rX<*i%w_kJ`>QiW$OEJue}xtq0geH}0f&WwPk5YlY=gNvJpEq{`#SoHCG zP<_%h+(7uR`hMzWNGZZ3f|e1%fFW_6Cf2HUMYwTYe(o%xPxSG%-RolM^SsWO!s$77 z>~X!GPPd0u*u$?q>s0ChF|V0h?#>$Gd|!o!^1&!{+K!T*!((5_L-rXrXESE8*Q|k; zH%bRuqs{@r-*W&_$a)i02b3_Hw0uPl&0_s@6Uq@P;2TX|l58hGEEqAhfagF#s04;>n^H#oIReU4c3vH8Cq*r)|G?E# z*s)J58|^=x3usE{+7|0em@jqYohO2~n{pLU$C-R_%D*VaR z2ig$V1e1Z`v=aGM4W3tv%Y#~l;l2e*LK1XZ4t*rJ40|IRW&7DPS%Wio!Fcj6!4Yel z-Ze_!mN8J*T}%lEW+n6ja!;;;x+F#trLS$reIu@36X;@!|0@U&oj89X_;+>`Ufm2N zOOVP-9Kj?f;ydy#@v?uU<42V7>glpeq8u<26_wFo2H&yAtS4(?h|jeTYJG8;$kZ%^ z9BL4-E?By{4W(8N_E65y9mRGH-h9Rses+vU#&0r&WE0{=#)Fw7#5w5(Po&y3h9K1j zEq7XazpJyFa2%a6kNLR`o_OL%xd*bdwo__#$Z}-k7mj4Ue(@+@b5Quy|_xFIcH=;V?KhXDoq{O<%q9WCJLcx-MMt=Ju5QZBnWD3v} zgGmB}YlVGN6`_k|$DX@`EM8lyojGNoy-$UW2v9Yid#!rBQ6Wf+$(i$H>3~+)VtQzh zz7En6IVUB)Fc#9W%kc1_O7m;ZYIbpia+!;Msp7${_4Q?X8~w?xeMiZ`rY_KXw;0eN zkPp3dQcY8WMjL$D5ZAC(VP`Dt%X-%^q+ZMYlylAt#=7vs(YIAU+!nmb=sj)9eIXz%KTKkYl|!+#l0Ta6dMz@Py1wg*@dvd-q*Ty8=|Hojd} zr&FW9_+G=^PC!F-1zkkjuak}59&fv4>L94CYRr*Xi~l9_6y5bFfZ5z?xS`Pz{Y%lZ zH}!`f#_yZFwQm&J$;erMtuIvHh`-e2Pd#ATk6P}?Zn&UT(rKHtQ_)&#&C5FnJcO8s zQU|;ZNMOqESR|<`bTvoS1tX5IIFn0IRTeeEspg8VES#uiVdLlYsUJGIkkb^uhlpiO z?w@ggHw5B$E&W$HII+^Jr>p~+pg6rNC5s0Z#DzfXZ6HO6 z8};_M{Ri}aeu}V?L8Sd~GfUAmpzzw=Bb9thlDS|n-)=p!&KP^XFCbC>IVk}tf@N@R zopwPK&FVC{)8gcOB6_p`)5&DN%^WwiQ6)g!(_y50|8xLd2&5#zYx#bCy#{Y>5KeXh z@}^PX$LQa>kT1pC7JWJElzFn|LI8WN!XM=Z-4G`(5OV7Qi8{RxXi3S4x@*JEb`f`J zt8d4S=h2mFz4AzupE5bDJUMUaLbiz*5V)QK9q$OEe7;MQWjVQ-oyRC391F~`>fGb? z!?I&pEbIaG?`paGeotP9=TCk39K1|4y_>|w-{0Qrj9@8BB7D7Bdp0p3^t6fT~(iX1wV7IS>SB##I&QaV8X2yDKf3Qx@Yy~WSky9Y^snQPtWgsieyEj5|B zCbIZ@y?XtL_(yOo;!~hlUPdiLtgs2Z+jBA>b!1cC8Ug7eZW6Sc(T$3?6=fNG&Z5h6 zHT2`(l*Rmy{yY+{CPKs?(2p;mg7z~Wm24vMwHn@_GhB>~?R|(doi5^30#kj5wi8Ip#(j zxxj>|MUib<1Sm5{(`_QC>}SDpv@j{~Oy75eH3h5SSR1}OQ~b8tP`a25Dt zb*mITk+aLO9ZWum4bR|$QX{G$_%E}s0AXTN;4ukXEI#R2SPm9tkFa|KD=thxm~?Px zNrISzSL~74uL&h1c(Gevo$kdi2FEl(c1C3GuNvbOwCWMBGZygfzeO$x`qaHHSO-mn zEzSs(#4iT2dGE7L-#asn+T5stn!RZ=FN!3&7HL9sw?VCH>2(uLQ|Ly|j#Z!kq&|e4 zTtc@l;jOacj{wwobYa)@w|Q^eJv>{~g%~N3_x9T7v+8Z2|A_2)tSQFez;}5|;mL4M zwf#$6I=6^`y_Fig7l^&&2EmTy_z^w3JAbl>g9%W_ZT9BU{{ z)I!E!IlW8-+ROzJO9)K0MZ!=60cMIvK{sgtN~E~%AF^PDIiJ4RLT0f&$MlC;@WHF} zl3)yB2MnV02;trCQXJ3W)rof`5~4>s9N3~EuC?vc@;5o*DSU^Cd%eL%RlVH=myFyg zbsdg>SW%YUGODVB4E=$EmC^UWqV7ZwtzmhYj5miLJ!$Z=gfoU8ZMHHwjc21z>EWi6 znT^=7iE;0uu@9DZ!PqW0OKUxxahR)}+IMHfMF%l0{>+m>*q5rsHPhHdKMF!PW0FM2 zjYt3Exfd*|lIZc{KY=R`Y0A&{hm4b3`@YT4jI4H=>S_6wOZNDxR_OACBhz$NCViS6 zws0^6Ss7{(mmw(NT5ty_YOBT;&U!<$+DZklKZlFy2C+6Syb{jw?cH%@K9E&^amrl2 zW5`_B`}h`Blgxpe!!%Nbe?9b-GHZ|ji+x*~3y2)?6fsMZq&-*vdWf2w&F%Og`v7?j z$*0=N1b9*U7HY%Ig(5n2dMCtvg0h?JlIe>AHoA3QR*2_Z+`%(KL?M4JxSG#AY{(ke z{lMPR+@l)_sgF3*Aqt~A%ICGTqn%Z^ZK`qb=|5tySf?rCyh`J}dwjpKExuh|7zV~! zwRzoE=#A3tr9?`MuG(6M4d<$R#E-y0`8J>C%LS%UHr31K$?o8)qFNP@J*+8W zLE1+brm0=MP&58!=mpbL%#D)LsE{YNikCZny@R@8x17~4Te*VAXlZ5{J*st*O7Uic z&j;utu^36P_+$n}92V%wjOY`dmnBEI;W2Onx2|{KP9ctc3U8A{7q$(1sRo0nhAeeD z^KflXZVlbjvJt{Lx3y+#(jUG}6b+Sl1U`U!R=`MbgxV0sw|87&R| z6uE`4WNYtxxkYVUgaz|;nu@HyRQ}j4A+zN1;IP}<{LsrIP_!KvFhW^dsyeEC zJ z@GppI)nc>;e#+yZPwJn;?%fvoj{Kh`#Xs1L_CHih?pP|He{nKgbTj@qh2buy>eI(` z0squzpT}^_Ib<}o(lLRco)W}irTCO>?+NiE7bC6}dNR^R^l)|;8q#=bS_L6aI3|uu z(?D4WOF$-*z`wQ%?r`(*L6g{D5(Xo|BUVJ+7q`NCjV}?O{;MzUVn8E8#VU#hQsd~t zTHV-lo}|1g{vpiTy-Upy;kbxA`n*TiXOL^sC7K6^Wh6L^E2KUs#ns3E zb5itg!ZFFXOIcuwH|bCyzsN*HOAjrs*cur{mQoCZ^ukE@5v=0-rkT24jW7x4< zS9IP~PB#ganVk3O2lXs-9#a|K#!)*8pUYz*{XNOwRc$;Z zSl7NGm*PWE9`a^)(&#Qid#&`{MP)!R#1@o`j2lH_vI0wvl zD3zKJ4ewgaOrZQ5t+XH<{|fQO6-%ns>>X?m;xhTUh1`CqWwT^NC?Z@dUYy8>_C}Za z(Rao#LyEMK=MTTh$*IC_7+n8u@3U%_YT*9A$Jf_~@O5+Kq+iZ*rhPW>&S+XHV^fXl zt|#Mp^|=9S2;e>Sp!hRFt_5?In>!an7#b?9*}@fL5pgpq(qL+kIn(ucJ}Q2&CSzv6 zLyH=#=^Yc0VcH)#thTJT_Cu#Yawq#9&I`Wa(Clv=zBSb>p8*!@-_9UQLSy8Py5G4c zDvb;4qD^FcYdZYXr9^e&CN2H&*%zT(#i1`Wo z8sie%!xPs_s=^q4g3_SP)_sWwWy$p1%19vGTCM?hjga_z$4A2vxiSK4)t$gwrYQ>R z#xd&+-4&2^V>>QsCPfAXAazE~`v;u@K4rWAkir*yM+%=R^Hq|d`09eeQ zJVd2-EXsc_)j@~WNaVwNJsD{ZO=QE}B$isgpD2duX=S&Za0XXS&f1VP=uB+cfb&m7 z{3cmV-X>*5f%v)ZNwJwVG}J%n^gW^rBN3+}y=qoF217=QhPw)VA|eIWZ;g(N1kuED3cDbkYyUsQZvEkS8xdBssyM_BB+4n(<~1SAU)67lg=9_b8CNioCt-bVx`^8s5n^>H_GMDuO3^m+RK$10e+=&B_`QO!UeTk%pEvf}fHMD7 zfIphu=hC$Qkm?w7r2ui)EuO1)t;tgw3&j9YHRLJZiR#kJl_*m7Z0E52WiaGdJ&+7q zRx#zf3U%`jc?aigKPnr`-11~r);fhSP=CLNI8>yg&?04MbuLc__8ZH(pq9f*+US1_ zxwxxvY3LpK|FeYd&HlQYAycW6M4SKP9#}t9;s&2fKpV5Ya`iq3Go+X7r*Tb7%kAw9 zC4>{?+;JhE0KrY$_tdaT;~s=bugC2*^estxhL>ZINYqQ<2d8W#{9#k(Tw=q|yiWcA zfn{4xS{;UIq_+T|UA~8QQLvh2O%16`&a+^_#ql{|-VbXjcyxul1>Cl>Is>@k*>}^p zXnNYIR3#U$uwQc{Q#&cC5N1cwCq_S=eH#uZYh2|-bo5u5-I-z^GOs5|9a!qPh<@Xr zKwv#@!Cn{Q8e_K3#Jgp~E0~N>QSoB+N!)Y3F3-YHQ*{vY9&-g-Q8kGD-Gwf?)bn-l z3X<*V=qsVbQV4sFJ--PFwA#!tsTq`HA+Skt`m+#h?qT_$N*8(AZg^GnV2HT1nztPJXp%*Sf}Hn%lH7pK#89+n)pq{;E{0 z0b}kh{6ts@qrM59$_I^8L8p&16bAkp#@-D~7T}l(V{gKzHzO3hG@)?9)=hW#c|eWc z$q}@A=z8(S{9msb?LkfT5NU<6atcY&!EHMdK~+iEY4Qd&*b2h%E~`II z4xIojv7|e$l9Xw9%OLxIC>G=ozT?9b+FDDQVjg_dpdsCNv(h0zEzb!to+}ShO5)T% zli5npkeR-CxivoHe_h%0+wOr>htr7_T6%qI@2k6qW$@ace~7?5bqFcDJOgQkOvVJH zYk4euXqrpCdKU>9#yEi0H}*-as&R0(D>hSa#W#Vyhf7>-Zej(3BqZ2#1LO&HAa?E6 zvo?2fEppW?Nd`%YqH%WYrsca1zO916(&P4H@37X)w)21ZwkAEO3?A1|gnldBZDgdj zaG%|!;EO(Uzo|7UdOTYXz9cW?_THz{|I=>aQb z2r)RBVtRN!y>;^^;>Kfyju)A0e0@wXF%kFtLDwBY_f36~J!+vlwxnDRansPL{)ia2 zKqP&5{h0;BZWvIJ6!hXAnxk7-jd3kv;JWR@X~&GzPV+lG{a^>-#+JQd1_)!P`|+gT zUs%);ph73!6tu&7eTY5r1i>6WuL%CI= zXkBu<(Xi1Aml1#xK3~s$)?n*pE+OHZOj(3=-pO^R zJE=Mdh0x+oT=Jnn(BH?#;W>v1ye80hbFoK%NyNqMa>oqf!_$MC2Z=aN6fc_7eMk3g zjfqzCgcQ>c&5E}wBDaUO_VYqlW55vDV};89Am}?yxkcv#YVN6j-4(hW*=I21&jjNj+^Ed~-ufP0y4?zn7gG`lLHAFnG zvi1e>Bvq(3J;~p|BE?Kp@5dMrXV!?=2Vd77*t)`}`Jfj#)FDA@Q z6%K7(;~VbKyF=gRYV@WQAl@^V#`7FKSAH)zN<=>Ql!*eAmc@#{ODgm>c|@bn)O8JE%TM`GR`MTSutctzVR_nS>PL4T}E z?I$m>N41;PVgw9-O^$WxKpl4h_ZctkRd=BXt_K^b91KP~Uy`_&XHn9pD-F2Y#mK;H zUuytv=}~H}PBm7AFk9Kq!G?9}xa!&W{jb4q&Sz}#rNz>~79+bw@KkXee+juIwmD+k zFVOtELVa9E3!VFPAX=LisWO0ONgQNwUL2K=c@WlOiF|_)SYohez~PD3$dr#K9)_^*Zef*(2VCO5=)OL8gpEc4!)f+NU})GO-=2jfJr(Us z@{#3EcqC1|?0U{Yz0&hx@YHSGf+ZZaVGG7$kHakl<{2GhxLmk zX3Kie;ZJhA`xyiPP_8JX&E_)uT2sD{kIw5@Tc^L#>}?+PEM3pUZ!CGeAaFSn7bG=`r~)v9wA9aLa)Ub!eA48 zZ1VXk=a*qO+9^E>T1AUoj+xU|j47EuCp&E@Yu_S-mFXQxW9*M(hQXb#ht*FsQ&ss`Ic*LQZCJa-$$@H z(s~jiLIqp78$19>d4j|)n)>|Kb>3^Se*3wI$4l6uA_r=NBEVOTiG3hsQH_v!onxYq zz~bjS%BlTp-LX+#>jW~IGpebuL8STX^{9U=jk*?cJUs(EJ+J8O#i!A|PjgYr_j5{Y4|}^U9M|Y1i{9%IO6)In)Gg~X2+73ql@Nec5st?~)MZ}l)R2AZjt;Fo z6aB)|t5QW=!0xaY?Kd3R%k5gU-Rqww|=&q-AE`lz(?d z)SW*#ZVH*A(qXQv_h$Y26`!CC1vSrQ%3od^ee05Y@ z3=hUW{MnBJ)my|rqNS3nHciH^ZZ$4{|G@4m4~YjSkMx#(Ccm|0;{Bo5%dh)M+FQoM z%X;69`R5vQ?^2x3IB9Xd9Ba+kmpDVm(-H5_%qPP|Yz=wW32fI}So+mKHUEkqV_N#VtdT)6%CR+r&tuyIJW!q^x;qLgL(Mdb*S@kTZ1 zs?!=(%J`ynI!e#@tMIR_+v*?-<B-wwpzi#Z_pv;x^&d4N5I*e9UXnnW(FjTS>>irR)FS zj@EyDeQs~tDQDgL6;vI>^DAvuS?Ru#dt{Z4tBRT{Us*10x5Tu^w+(vD$i{(7X$lSq^62m?#-Y+7EbiTtRU^Y?>b$mJUmt}#;dQ#?D9+@iEU`f+{ z5{0Uk7QQ#@E8pys;el?e2h!|r&ph>g8s%)E14S0thibM#RCVZc)T+S3=68x@2kGqb zkN7V){RsR6&UQ<_w+#G^n>xCk877mzvt0Yrsg@?S z=*7r@a`PGUh55+;u$Td<*svz8tX^~KDXI9U={bLDD#)ccUj=(+($NdM6aY&rZ|FbI z#TS`t;V^&txNi&HcE{uUtb0+t8`V6!d>+>rSe3$eB-^Dw$7Q?Tl2y~ytn z@w2XCJ)GKzF|a=R9%hu3F`BFu`yUtu^0Q_WpEM-X<)(q;6W)Mkath0YhD)+~ij$Pw z1P+RZl8j0I?8)j36u75tKk=rc(4!zb%!8O`u%hB;!r%IZg6>|gOFMl!`VOoP%zkb_ zlw^rsLN{OcEucrzWHR+FWaZ{@rX!kf2`4{_bN6-H*?~u9^o_d{+&^BY{aK`w0$PjD zpmD`#;jjIE_hRDImi1_$FrG5-DcQdxrA&KfK8R}8-pb{ED_eriJnqw{-F!<4Z;(&UkIh@21iY4IxQ&93d+m6P9 zP^MEWQ72^TpZ%KKpcd_%LI-keU%qHB?|G%2^_C8B$_&#@Q*n5beU6H80-k>3rEdu%4CzPm@S4={CpQQ-}-kA-vMNO&x+kq}B+5i8Somgv{U z77K{M4KSz#m<7(=yO4KF);b1oNPz+lN?2OUP{}T5TX^{rDs6xhLnju9WEyU} z{a*rQdp>;h6ICL`u}C;pTkvklaN$bpjAiG_pX==}Pz%uUn@<}$c_i<}j$KypW#L?H z-k8mKBz1oFdSwV_<=l(h*IvK8SywDK4S%Y1;Wjh*GQ&R(-+s(adF8=f;(>Sl(HBl2 zq9KOK%Wlzt*^MkJMgoPUU2kaCL4WE+c7LjMJ*1wS$nr1S_-R6M&XTqK+oUgec+unP zA&X2U{PC(FhdfLDT3bZ@CS%v#e(4Es4XiG8UI8rJ(Qqpinut`RuMd}=0jv#@jNOBg z%k22MU5nzq8e0~8Zxi8~23GFQ*6i}o+Sb^r15nQ#+cnos0A=%;J>JOc!F-u-=AVk> z650|)uqGS8{uHBnof~qAl>jaq&L^=DiXNQ`8%XkZzw-_zVeyc+Tm_FhLW#jsc!w_5 zu!seW=h;FX^!Vs5En9y)a%X-W4QV!@SU?L6LpTokpB?{wCH4r~L$LEfq?m*bN0Rj} zEJjn3$3un&`m9^dH#uzT>gyl5oiG?5=5g(>we)h2t~pd^~L*1OXR@Y&knwenEdmx(*eOS0%ptiM!ON8{JF=__B-`{QN3`F z%!2sA{;NjjG_2?Wa`G-^7EF9i{s?L;r)ZHtkGLBw?{?4C(-GW?SW$GTts@2hX}nQ< zZYyvun`Fzv6`5S{Fgt*F)QiNSXRLN2m=ta&Zz$_0^3OB=icSI{a{M z*&K|%IL*1@#T3=(%ip6xEWs3|HtCB=X5Ep{9k|afaXB6EzNi>p_F?=$n+hYb$rYvR zJ}AEMbMup5O^fWTydB#e3jOg8GZTpqcD5I~vS_dq`0bk`&EYp1iGiz_M~hRrnN`V#r#-g~_JnDo-}4#(>)a7dxEBwR*d4?e5BlYJ9gqe| zBJ4=zv4gcAP>0p?@6n?kFTdmQLDqRFi+u_`g{>UlKE8tV$ey}%=9kH^OmMiNT@nCd z7uVaBsMqFXOHD%kFXRM07Mq(IvLiqxyCs456_mZo4lO#;%bzx$``&Tjjr6$6jPj9s)Zzt&RLl*|Eg-8sQ+~w5%9Qb5^1c%k!CnhYVFU9o zUBg-^2r&6@hVOM_$?BxyI9Dx^Fo(r!e(U>?)lDh56W;@6hy=`zJa4Ed>#?^lfVqj7 zZ6LZJis-n}uNKXnR#M7}e$!`RKZwZY2I-8lS{+%ZI7Kx7*Zq@mq2S$V|}op&iw zLP=sf(b`g+fL3v#$1@dWjZ0*W%2J?dT(hUZGL_7h>cZVkf%u)Mw&>=NUfiEHdt4VA z0HrX=9qE0ZnDcb4{<|_ACEnJeo9)ssY#*iP2Twpzt9-}NlccDe-Fn`E1BDF18z|!P zB4{Cu(kZ^uJdO?3MBtgxafO( zU(%8ZT;xjxVORmmNlv#ieDB`3I5lHAz`!Zeg2_`L^eK)Wk=p#U*xKC;&hj@58Swk& z;DZOoT;S)WU-deW_|`kt&5^xm9|Z-AhY3hrv)13SiaOV}-qXTIDB3=`^WUl(ZBc+O z(WlH0Vz|HXa>8SpgBp3YA^?#-iRZz_ zkSkj9Qs}$2>O6{4ayQDGB4QrW#>UZx#g;e|AvZ4=w|P6B@7ly_%Jfx6z3KGp0+d&Z z$H+itbC>~|ctoyW_Wu^(cLKkvwA;wi7^tOGYI@&EH z!09{)QUA(q6}yfN1P{pc)Bi-OKjd_cZ%U7=j`L+Apn+Sh*xbmR3?tK{XtR(tucAf`cJVk5;ZR|V(P58id&IjIXIuSS9ly4TQO(W%r?hqbW3cfL4SwI>+y|r+5#TA{-+Zkd~ zmmVcR!!AnzOWSW+uP3H&1Es6hGRs?F+7!3%ZBTH5Ep26N9dv}wdj6eE%9$Y>&4^CX zK6G*H^7bD>KcIOt338IdpT+F2W%CtB8p%9Z7LPIkyfFi%Fuq1~;#VgndLWakIDTBc zq^1!9=V`4*MdxBNkE5{`;39C;K=9l5Gy?_Qr565C6lcg+uTr9Bk*ljIgl7lD&9EK3Uo zzRHGRQI}G|S8f5w438Bmo9*j7gOTIVJb;(Ng)V;V-+h zb|2(i{)!D_0zNz8*L-xWl->CM)<2DLOMO6Adu}&uFDr`J`~bcE%N8}d7rVJRgo~D< zz$m0B2P?UCY8B9mzgcCL*M2)m*n?fd`>y_fW_LZ-=R08B1%|mzhV_>fzdor^4o4zG z9kd$xmAQiY8+v;*C83fKgPvN z137pfX;8x=jZLj`_*4(T6gE80v||8-yrZo{oB7`}5)n2b7x7Nnq{`d3PUtLtq0QgSAh^S(m!^&eHQP1aPc z&pIvCD|)}cqd%xdwrO^RDqO7R1CD$B+V{k>I=Ne!?Y^Ua%l`#VA&u>AcXr&?FvD26 z1#CEw>V`zu2Xz=D&(umlwMJRw%5>epdzjg@ZUrvx{MW7Jd#A|fsZG5-@#%pnP!&Lh z1z*}%=sNR0kw)R!%!auVn$i1{z`v$O0$+gZkzfE1l4O10E#UXqUAH|6d+4{hMt?|U zI<@py zeH6I^^-G0l0(;ffW+lU>B)Mss<{Q0&q$hKknvho|zaL)eh<8A8_x?Os;%5g>7C}T` z$`fan9}RM9FoJ1qr`a@Mp4+y3(>qMTU7O2)IJJWH zB)P*{cutR9(t!HeW#zrkXwhvy}#@8B7wHPx*Y`f&_LApnX1Ca|E^i>d6YI& zYrml(C;b{CsPf9H#e*?$;>dS<9E0CchxZJ1%NTCCg3D;2kZ5NQan{R=7CwtzIs3>YhB-D{CxRtU-~57ix1==|wm2%~+lu z#eQoQlB*|dd{wX6n7W8}E2SNT3ZQHh8yO~>UZfmQ}cFkmLo2?0(ZM!yXwr#tqrm1J&J}-WM#X0A5zSnh)fZeq* zg)+EIgn2XCaVMP6dMCTNf?f_ThUbo3ik2-_uQmGv0xHWUWpufzN`BOL&A{Gg&0Bq0 z7v*-}RyAasK`u$0*P2WVF6uyi!?WpI0CmrgPr|9PSPo8VaP+5;``!f1330!Oml+l} z{#RlWfwb8;`cz_8v*4d}cv)@pUL}Rjs03E;Z!I*(HSdO_`=*Kbr^)k|vW%_!*NHp> zcm^gf@rD~xX50AI6DuugUkH`VEz>%K35Q2rCETIub9GPFW4^H`dQ4*s{J-z*-eOn6 zd~&W9?ujuZt6sl_o5;k?}PD=p8k#)KJA2%T#m>LTWR%c={A%$<97G` z)Il>$d$ERs6;46i-j2~5iHF-Ulud+v9_a1?iXu?5rlXk!>R)gMyr)I|w_Kc<YN={M#8ajaze@)@-WG@45%2PRZ{B)u50$uUfJU1a;scvglz7ZQ+*XAahP#>#~>_KLmA#ZcvtUeoTIiU z`0A!_TxypHX+5)bpKBBOn)Tz>sHiqnm+$#e5X-BM@@jjr8c0%Ax{wwiF5hQ(XTt0~ zf>+mK=CF)SS1WhE-dr7O(>K)weSZRR*P&IXXdLUqb;kYjrLjRG-)-#rpDe2e(SxmpspP>`QSZw;oR%Rp8^64cy;7(*Xl@uIs(y!(c zn7}^`#D}RVR#-zl{^*;e<16-VK;Ibol5;G z0Qy0YXi|el30&F?a5`|`4?fI%f!o;Wz7#ayPr&Gz{L?~oC*McpJ^E~F3iqtMV5$8x zqJNo@&2P&P_U#iV7AM6%0`M+;Xv`3J<4trr#&YRSOpRaHQJ8Tkg)DI;p{?JPXm`CrwMrs&^NDoCU5(0-+A}5YdwaQaw?O#F*^! z`Kklzxni&F`(QD74Kd_TX5!JPLRKm`E z0=Wt(hpY_m1PfF$&~P@7-vlRP3=zcrYArsM%gJCj7_mmX&Fxq(;fK6i}r9+meio3%RQLJ)%c%`fr9T?;r*5jpVg9cjZ9>wS>%_vzGDud*a z7&@-=8R(CoF@U_7NP455fVn1p-s{6SATJ6Lklix(?tu>6Qf>Mb-S z#aD2?wK2hhTWD=HL+)>1kHUuyL(vkRfiwCrb?SLx!+{v4?F$u5L>f(k`s|zMr7Yj~ zC$_X`cx4P)!SM}EL5XBaSq?#!3b{CS1B!z zsnSl*XC2Ajfij&!x4$b`h?=GgOEj_xWR9f@b8m`KJ!Eb#%^aN)Oof&Fk6}9IBT|pi zyo2B0r0VS+zs%g5#Ss2WrJE`*-XcT(J2+(OeYG!^F z)o~snG^UGpLmxuKNS4~776$z{Rw*CYTrm4-56F`tjY4^NeA7bzdcp;1Tn_kRU4&J_3r3eb=YlTdb?V4Q;N#_}1qWI1? z;>H9W2tQ>?drInSgZ2W`6zDAAf6_EEDA^gW3W1qUCvc?if#kbY%RyND6T2g)r1jwzVmAM;+$gkk=a zWaXrjCTd>1y!PB*Au?l9_;WlyA>)52sg#O!NACTan{Pa)41VJ#ZW8r|S5{R}XHhxS zwCH_0+?ViWzU}@Ia9c#8%p zmFl6u;~h1Ak%ErdWM!f5rS&ux76{#lCmaO zT|1HBDn=fv^6Rx=VYBWvoI2AC7?2@z#X1LO3JV;{=TETI{e7kJKYvNR*MYT)gp>q2 zbcPBbyNe&Xw1$U=vS!t^yqDH%FA` z`$Ik{OYuxJjYIMq1Cjr_6j5UwNM-37IrNN?728>PlyoKd;q?-qvocr=XdspYu^Fdb zw+-z-Whb0C654si)h7s78Y>YIaop3c^|}eUXpTH%^c5Di7>{fUD0p+_*sEE8226b< ze|>G9*=-!hO%ZFwJ0O>kY0sW|3e06;?k64eqF9$9aZn3v+QL_jyjxXenD0MOBzOX$ zA|{`|@{~&e%O0j4^PSs)a#z{?4?3ETN)vdh$zaZEJZ#v;zfX?) zOig_Ok9X7f*__-`6M-Z%*KkJ_yJ?QsA^qY*rnz~@7t@FuT*`k?SrnNt%6^xi4*Dc@A^q`SueU*v8tj8 zwB}c5&DC^R;{&MV?F_)I5bm!dW-q3YC-{pj1~nQ_IrHt|*6})V%8QYSjFgAM{;P!s zW|mEqxMm$)k$%jbDBo?u-W}vP+=2~o9#+V{P^C*rfQ0bb_|;wIL6Bw2<`+k=f00u? zXDT&8xYD#QWn}AuE>2&y)7ydMIsMycR=Yx2J*#x}cNmWA{Z7#cwJ~{V! z-cG;xlX-`Xub(-0m5R01RJSt)QsWt04t$fVMeh$>^mhIEinbwjMsgmG-aq)>ZFQMK z?DPEGHizYe5dYiTJ>HMjXUgPf^XM%?{B^XAl#^;G(~a*G%o5=ZeOe|c9f|_FxWK*b zaNjxoD0LJdKruxK?Pj9_A=NHUZR#W3_n+4g1CMe^e4w)6zaM-s&P~Z`dF@0#$;AHv zs=s}Zz-DG(2)PdsX?63-mIjJLq(%cNXDe~s^hN73xf0BKeC`(;F{585LX>pc3>A8+ zMa+}_k(cwx{45WeS=;jpj(;y6cuqrk_P7HL>sbXk$A$&S__IHwvjtp>SqD3ZdS|*x zGCfCSZ(Z~*_P34|a zTUui>9ZDZg?@1+YNR}f$1d-wMX2%0->fv? z1-K^nVFNJUb25Yoaj{hQ31D>Hb~zuQt@V-JTl_KIN59$9KM>TA!rU@~4RJGG+Uc&h zGX6b4(#3?HVp@hD0=}t^RLE-Ww|8CAUHX-yk$l3_9sHkLuB^fYs60e}WdcAMoP5 zaNfMUYJCzui5fI#jBR2?m-6ujp`EA2BXL;nJ5FDdtS8QskIDslum1Dy?wjXYWZ8Mw zZ5Z+ckhR^{+=z>vz+Qz-{5)-B*ohOaV?O8(PN~cBpGUgV1U$tMvh`mY&{}4(U|gXs ztB3>QLm=kx`U|dHF3y`Drqx3j8`&)s0>1NzPWjhlBAiZE4*udom`<;rjlDf^J4cY> zg9J?&r#Rpxn|BxNa+}lN<!3o(lp0he7!kQVltZu46T=i&d<$V%tzK+i!h!hTmw$*R9?P+pLKC z%HV9ryY3=&+u*{a9c9C6+jDi(R*hAWa^KQ^g2$b2y4%EUv~Tkn#2h=QTHU`pSg?)3 zF&NDwS3zt(M|*8PqUHCmlhvd<9blWh`)zfX&B^uqE=Rt$s{n~(jt$ic_D0zoB7<7o z49~KlCKsUQHD5zsWlC{c=#F0iBqwf4gV(7dWO;|c<)70cm1d!zpf_4A{F1#5l9?$x-)YVW1&c8{h7pLc*i zAD)c`wlNG0sbpe_msU+nZQ3cF0b9N>P>HKuV!cdXAx(!(Aq!TjYob@UbY(0C96KJ?Ss&P-{;v_cc8`1 zOFmv=&-AvXgN%m#rLHgUpJhyLUR>@1&|WZle81h2>ICJ{4Kr7{N<1F|4D2@_k$OF? zUqe3FZr0BORVa%W0)zTW zi8yYXO|ZXra=#j0V!kP%~GHJ*kc(gk*JQ4HMH%#4%>eZs##Sc#}4>j-l=4Y5E4z9=fg-y{Vd1UY99(3CqWkXc-GeZA|B& zv|6m4X3aZ>-BXI5`U!a%LZv{mnO%?}sDr5~@;}dmLR3f*e%bF5jSu9{a`H+?p+;Jw z@{IiODbt{TFxAdF|GaBd1EnM8Ga7}Q-+eW%=vH>mGYh^yBAPdYGWWwl;|>NDp~UrR}PAm zJra$HFJeXeV%~~j5Lr z%RYXHZfr53TXfeQP%HHP^P;ycm3~AHw!OH0lH@@Z(AP18BXncSF|y?=W0GEpNX(&3 z4S;%y!+?OFcIqhlVOpY3W`Y{Q$3stAeyh z=Kb-iF}_`%I?wOB1tdazwDgw9BbRYKP_fe1=!N3$^rt-pK}zObCGog7&SzBr6zyE& zBH|4eN`waiYMSHyo!>G=KzJ9ASrtTLF4LP8NFON3FUbF5WC$Cs+xm=wH7?ixOQ`bO zwJGz(yYRj0H7owpU7WSYiQKo3-SpUO;{ul*B;5!GeALg35;i%e()~Q`r-e(t%swj* z4YhF*1AnedQ%n8wU7!Yp#VHRZXUScp63iQFGY*IP)Er8lV^5(2-S1`VfI>~=*o(V; zj*x-DNW0)>LCvVW%#X4(tZ-r-=Vc@`6Z(5 zP`Y4J@L;UAQS-#(-Tzt>10S*Ty|e!o8`V-Ry>Vc$-#iZglEN1a5l!VTF=N^MM)C)l z$UP={f7*DBJUg*$JQ9}ZN(hac)H~<268F$=4e0nLOvF%+7UsJQ_W>zAd=C|ZTy%Ge zJO6*^i;c&{y(a(3*)LY^)livNMW-cZI3QU5M$F6Fm*I{Y435X0>t9I`A-^_)8BUWk z6=;w%ci3F63+#eHPZr2iH_1gDOnUC#&!Ia7S_o->z*&NCV=O4XOZuZ}&s#V3t!(QG zd|Ahg2;}ipvlAkY>$M3XW$kyt^t*eZU)??x=xyWl4BoZSa^2TqCBAYVuM+eNajkjl zpce1DIr}Y%zJf8V_6n2DcdevhLNsW}4SW9H`@ft2Q*a_zW9BE4G#^=GvsD<)mSI<>UMG zOD_+2<+EX3f?@m8z7PII7f8N+7-t8_J`fDyFtVbmb(HaGuP9%UBg+EGS~e-Px!ll(>6>W|9+5$uepi+%EoX7#jtwzW|cT|-N8j(RG)m3*boo4#+Uvk&A z=IEHhjZG>JUYQ%=kPu^1AY!QafDqd5TG7|X*IFh`{n*MaA;hIT&agbj1kN3LPNnk5 z+em5GdLbZv*ueLKQkDk9Y!v-o1cq?UxaVEvc;+3AjmIhyuo{Sx^xQ&6XNaH~%jz_D7s>Y;+kDh_YQKMPxA@_{03YIdIL7Eu zk+xjzhMbvt?1YR`=h>rZTlh~$y?y@~_uO}@wh^MwjKwM`S`DMl`cXVPn&GwBpjMFb z918i(OnZezB8jNiKs!cMB%P?&qL7PZ^7!aip;G(OjJ@bj&8gL%r1$b8i09!@S5o=U zTN;wNo%`~~G{um6j9K|(E23GJeYe8ar{@r-XKM@Tx&A}-8(|*qqXMt-rDS6MZ=Kkb zHwLPiqKN;Q~r*_tR7&JsgUs)cWDD!jDHb} zuv%(?88e7c%Gv@HJ7|1U_5ypWy?(+GJ;hlsU=iukzJm_o2Jk})%Bxu?MpLZRrQ)=p~GME`5ndWTS0OM(b>K7Jg=ZjkNdc%V4%5w>Cn3(FS}3dY~?ZwbBMs2tJP=Ll+?+YEg2 z5NK;t??EL^{%`rTqq`$SWk+-w&&?`bsLeD6wRf5jaT!cd!cGJVIkzbX2c%)Q33&U2 z2S8x1)Ktlsr38c57oGh%lG)n={kJ}<#{UCr1{^x6>D-KB#3DYyi2rOMuQ@~5(Sp!F zdZcpsIK&AuV>-gegU{56$PfB-=pPvUHSm2tafnXWTp~K}tkWf`HSAzu@5De*Fm`&0MBN7U62X+h|(Vgad-E zRsNS{W~7Byp{ixaE5zoB?^kP?D*18ZCoFs=a$yX)sZJhnv=!*qSFn~*4gitlEgLi( zZ++{61LLS1H6vw!E>@yZW}4L}J?wUq7jAPEUU^=Jl9Hsq)N?&6PPWRSClz+ZL%fbr zSL*sizs#^^p`mGro9Q%uCTF8rfmKCfD^u15;RE4{4$(rmgiF_`+6BGkRe*!8C-nwNs}SDD@gZ%8j(c zh_6m_#`98yQLzG9>HOW1!i{W?ht4EXc!5bJGDy_#ql45lC(J{6A`L?6gmQ0}dYxE{ zKe1~w{rKDmsPN;vMBb31tCzwf2eheOKWlLlCwAalikP{n8@X*1JG2G`Re}+*1x%)(IwP~eD@j@Z-1VYiCuH7|VtU{rG<=M0ykM@D+HY110>Uqt;)50{`4XVTRTAw&WDO?OwX{oO zvR={5&cahD?H^TuY-66V4UEV3$6F~Huw%MNvL5ll8vB4z`v^67+7nzOf-s6PeR76& z5x$XQr5@XY@I#iSn5%s$w4@U>SmB7%RCWg}CX$tj@%?VosR_TfuA}-XQAiqsU9n6l z+hPw~zkD7iXhMh=(vPD;%2hhhcFVyz*{Jg^e&#XX^3M~chn#o4TJW-r*>yh4$vyl7Mpo~gnpbd-PCvAbf$L->NocW? z9AR^HI#bCF*CT%8ndxUuex8&!i^U-JiRtu9DVjzw;IwU~vMwe+60u!kGaKPGrlKg; zb0hzl;^cS4a`3y58Hf1^`N^fypp_r`Or&rxD$o$?^+y6E?q9JjUP)+6&;Z4kkVZF- zg>ck;b-PRN9M!jn?|xtQE#X+|=4N>FvZzL`KrbR8of~*(keJSYQvDjsmtf;F(R+*? z+I6K~4eiC00a${Li-?&Hyisa(YI#Gt9+Uk4Az}ydU4)%U{OG>^Q$z6%ABtAP0jpke z?-x{(CR>D~{`M{)V}I1U9!JPT>K-*v`SY6K`RA^(#-TWwvT5xP%+Vo)!4QRM>4#QnWe=4+8aSGY!Bw6SaaX z9!kV_`U|XVsPxo85#!hqI+VNgEtDmvEShddE&^|?J0fy3m5#)hyn^z7#vRO;(1A$u zK@MtXCX&)3>8W$d_meeMp;0oU&GoOO;}yv|Q>h6y6%baMYxvhH8P$tpJ?-)_q7hl?JRFD7+j`i*HyxK*sL+Arv+qMt zmBcG4QcdzS~22(S14oN4UGGVvgxT0J2| z31w#|#+VBxdYQAp|JtdXV}AV*8V>?|GZ#H<;wv8%wZ24|$;HjdXpRrMn(11LP2T{2 z?o6S}`6DB>aHoC;mY4wtzIyM$WR{v(qx~5~@EAXG{+BJ25pu2JgFItDa2Oz7wbG59 zSC`jzKarlWiGVnsdSOkhQjb3eqTRis=eh(oB6uJO#o$YE%p4**Zx#B7azZZDrruCy z7_Jlnoee}Dfa;S2EZQQE`^Ccp&!PQYfPoE+M_RVQ%ZQ`2ktj~BzzXcz=-5TaTEHE^ z6)?vA6|YI^^{SwiGgvQ=50uCOv*z4c6$Zke`McT;Q5Uy+TwlO)yslqLV_4t4P)|1uI7h(=i1=7(RJVS|AsLC`1aV~ z24|WtL7u?=T#mLj`6)aB@*M~$SY?wE3-MZXKRABZ$oG8}ejQ1Gf~07fyWJ^%aF#e? z@{q}h_4s&Md2`qzZC7Lnkr>njH4>0{kaW@`R;?J z=_E>>OJf*S^AFe<+gbha0WNbEuhH2p&@p!y>`rt0*6Q$&3;PAkW{%o;RTi8 zqNm?sPI#b99`9%LWu)glSHMcNl;D>da1%ohW zV``uURJmjRsCZAtW#hKD%gYCueD+!uOWQPvE^V>_p6c%J9iIdvI5EDvFl<{Pd<0OuGi3Zl6CoMvm%{RyiYTEA@%V zb=A_CB8bMG$q$ny{dS%KJH>X9_`*F58!e~|kU(9x%(Tx(L`mf!-)$^%7}z~_{qmhQ z8YB1PF%%bLsfQu%UlYg5OPS*auRAx-dcNCBFyvEv<)-sJJHj+(2`(X3AI^>Y!+Itz z#6MhW{NC`%D|smHz37A&t|*0Hi%2g_1c1vO-ogKrv>K4e<-RRWpPmUDhL!ym+>+&= z|3*6r#}kO3>l$&WaP{aztL<#ow}u((0;OzwoVnUHjMcxF#VLedYGNKcd#SrorRHWO z-@&X4zNhFeGn@b3Y<}yPz!bz(w>(djFy|n(Ht~4J)B{_>IB6_}>bkirEc@Biy#=PH z_;VAnlaQKunV`VNj5w1p5}DLpRCjs^x?@hn9Q_=YW$Jr7*1U~5{mv}}zujBgL@?1i zjkaZuhUi{cXa94}kelim5X)eQG0{M9=Va#JHzCUO`aGz{jUk@1okNaNQWWIg&G~3< z*m`L^GG1$rdn2gsQ3Gd{(4oUs0+*6kGjAJUn*ZI;>^q?EKL&tQcAgg;bK+U#)=?ge z0aIkmr7LGt1Vv_%EI=*Lo&2Zw3 z`t_ZWu%_8XfiV>qP5ZMDefuHKJ&2xj&76qwJWW5{^X6MmZ|Frnhixq~;$4D1|V?PjeYS*9W*o1817b{nnzCz7&NM8hy zD9y~c$Rzzi_=}No^+{)Is+yK@xX4r>I}8^Or14g?WWvO#cczaadQHPf-0D5gF&X7* zU(U~UNo^4j{#~YNUd)31)PAxh>kDHIYd2 zU)tLNhvfVD4HZ(khh5#7+tn?kV>_y~_+v*hn2Mr+FY`2`6eI7p7>|@yn zjgh_htmk#M^Ov3 z9IrpoeC`=1+;1FruDyt}GWS|3D-B6MxEe*ZeJ=%O-!huL5G0T`G}hd&VuzRKKFlss~_qfn!sDm@PW^#m>n!RlYZ#g1S_jDvAG4u862L zu{lT)0-`STuX19Kr5d`~bFTo+p(&-ZCzqBDThbyIo8JmI`*w8JB4G*xFMp&urO?jy zwA+61c=Rficn;WOOL)Xe&#;K;#k;J>8$3>F#lCbNiqJu9jC%UDR!!H>AP=d<<>+<4 zj($Rz7TP7;mya|6+jOc6xpl!^uo_X~Q3znHS?hu1k6#0uCyZL~a+9<7V3Yl#IH%>? z7xEJ2m#6P9{H9T(Yg#74V%|CAmkV26E^3qujf$?OGp)75mrTy%J8(9SMNVr_U|(ATebA9s6^wYEqMx(MQ5h$kTlD~kzYlf{8sCVP_AbiLdhnhoSM;> z{s*h$2itajZs_fktyn+GQEcdTndqK503>)zBS*zv;C1!dqtVYQ)?*Z)K>HP~8cB?i zqF=P-IuB?=yYhWl#Vpk`TC1%kxhe@I!)mM&hO-NR2=(>9xRE#cBs$F7la!cWg&U1LG3JmiQa<$m^gD01@~sk zb=@@Lz>7QkIv7}D1TS$X;xEW*DqrP&?V64|`%U>Rv-c-gMJOiM|L;_=qtKm28kad7&&Zv_ak^;4@&cMK3s> zA}k%}r+!%aN5|$8$(m*6@~a!jWI&^hgT=7ILUWWBouiLpYo#J6rrD0~QoMD%3e3b`bk$~P`w^L%-SJ0i{ z%Qzqb(CONA+>*HWGa@d!N57H^1j6zD%wmGoN0dE^IfW_S$W9<(C&To=gg5xK z>`3l|Y~Z-LsKn_{Z7*u&uqc3KaNjOqOskWSYZdRDw~pB!W2lin`dCt}I?==Uj^pv< z?TVz6Et4MmcI~_mn2FVJ>7Mq6-&}IE&`rfW@hb0vO7Y3WXUt@Z4E`qpHGWx93Nn5B z2Axl$oay~@E;%+&PXYDN)j)d~+u&sR<~UQ@Q`_3W9n@8EY%^j%mmszM#(EgWbzr6& zqrue`0c+-IVk1w9|3$@klP$Zzg}s@xrx*#9sbUiIeKb7e_i4@pB@Xi&fT#wTgn;g+ zcp<(_$=%YGjXOGrxbG;Kdh?1t%(Pe2*luVH)J ze?HA0MQS=wL0s;Vh*CI-$2MbTBDHr~)-@=*g0z*}E#^abQtog$y*Ix{XzTXgSKlZz zyF32e^4y^K+u}b}Q_&88SlO}-_Z_bwK<*^0bX<*j8^5i0)B*Dl0;J7BtuA=;`FM2L z;%ENMM!#ig6y$aR@#ldhD|p)*A2MzwOEK%<4mXJkzhipD2w|brd~crt6)>U^6i|>N z6ufCBj*)gXPUEn$U0tcXS)md%iezt>&ugv*(wSFSQ^qQIhO*QeateuI+UXK&d;nIR={IA+wVP%VI;O8>j?L?MfwPwZ*SXA zP!v9$!S7P&95EVyHFYp080FuKL*O!`!B@VdhT zif+>AUu^l7btnyz;wX$?*5W20_O8X9q+g2tj+Tzoq;>beSK>NIWk2b+H(KH^%o6@Q z*F7+Q@jYHR@A#ysVbbmm@K$JSL{TH?c-sMo&gA$_-8aUn<^SU~-pz>>oa>Xd!vmf|Ez1omZh}~%Mj{Ok4Sy;Dp4>gagYBn9qi6oD2{P2{C&xxG+NT-rX*Pblu zWnhq9O2G^JzW3=7i25cyA*6r~WHpvyzmdRb7FkwcFS9BYxTYItgK8+(jxiAmwnZJk z*E111ZN8{Kq++ANP@UezBSnR;|BI3NYe$D~z=?W$CP#;tPgO2oEJiErN>!Q#1gNmH z@@o77W-t(@_H0KeIQ*IEvTYXMTNd-@4PSM5s@2tN4*|PgalpS&7?QoraLI zR;4FAxnUcXb_I(XTETwfPsq9+TKsIP0+*%HZ? zWiP`t1%U7A>hs03M9AcZiFkqUmJlloz`qGr7%(w|%BOpQrcY&J+1e3voSo?it%e97 z29lky`2jL~jgQR0;uNP9?aj^Del#-`vn1l_x(!3NN{&QB8z^(2sp2phR3=8 zRr+n6HxKW=tCSGlbc^nYk?SnaB0=y*d5j;xcqEx$Wx>J31AegWd^y#$xRPBz>?>{_ z%J~faZ@Y_-$Ga`*R@yNxV_i=5_A40Iy)zmcTUi&kZG3>-?u<>3ax>zt}*xsBG4!_#o)?ArOzMLL&5=E&&lT9!zppO{6s}ti~K+Iik+)&Oy%37XSWVDFo)_~L@>Ci^YTJz^CJsfvVL2I$n4{Y~DPH}?h zqT5^Wv79%KJ6A*A{PS^iyIw4L;vI^`m6_&bQvxhct)|ZsBtnFz*8kS4e^GAe&G#^k zkyK^^DUfuf$TvL$_|?qH2~TlCis0d(VwveE+tN&Orc;^SW!tG|&RLoLgkSXw*#$LW zRn00w@hCPLsIwU<$r@G(fN{#p1UeC=J-;uabKCsl?qH1}=$@7)8ho zll}A$s)J<^N;j}i!(<#&L@O{OF>hGwDlZo&RW;R0_vGj3^KdM3-fYe`@3`-3lNljZ z{ibqg(JI=HZ$RcLQ;n|LF32+`a%o-xbyazRB~Wb)Zq^6shGw!gHO@QYPLvpk*er<# zAAY?*q9qmjS{O@USd$rI^>^$tWxW$as)f>C2HS(>%o(N(4yx60y*>OUcVo2e zByMqu^*-;sHiZBQ?)9ShP}qgJ`Pi2mejjOa zL$L){S+6}WD8g#LLqIFf_ydWIaL!bpq=h-ZYK?p&E6Y|ELE~Z!eFb!E3G7mo(ajy^ zbiHEl5}QLC-LPr*_~Jet8DOtU_&$34m5CBZS6rf@RE8l8t;xj}K)Ll9v4Wjlf2*8!l?*=_A*VvRmW~o!$RO`7MxPagX6c}2Q-9LU zQITqnZ7SJZ3`etA|I%}+*C0Fb-m9Fr9Z$W~*{xW4fH(A_=AH^dl{GeRO)Lz<9|||C z7Tc;tbv-l7*5UG`uCYjN`iS5jY91s7oE%68%#)Et|8AwZYG=`{NJG7ifl(r7-@xX2 z*=N^GLr|Ks3BEJ4qE@P2X)DlyO=`jiN}$wO3e|ESKZdDB9akY;|%0Xm?)}iyL`{_H?$u5Y) zO^Zp|nV*NkJ|?)!Z+~*BTRFk3w^#xsMs(*NPmihV9P#D~El*O(Ns!WNmnyL#IQWR{ z7W;@igY5t3v^~sixjp%dq$#@ai-%cQSc6J2Zn0((!~gMhj?Z;?f!6+oC$?>~v8{$p z8e5HR+l_5BwspeBwrv|H$qC+myz|c7`(^(Jd-lv)dp(biERZ`DK~A-qfr|R)pXTq4 zsf~5ojW^o8pnswq)R)iGvXg^NpXrVpkoL7g`~!PFUVoJ^BTwKf*+99q8&-z)kiE@P zZ%C$}l}aUgalRBcJVM|r<&4%DG}L51INqaJJB07p)o|tsPm4e3B%kO5Ij#Eu89o`I zzIM(Viovz7v(B!Hy8>w$6nw+wVGyj|xtqtl5Xz}Ay9B1^Ov%$(Y9kF9&f0G&j0r2) z`vjf3-8fqod+PVL$iNcBU&<4-AJ2|D6P&FeK=|m-{q3qBFalbu`?xa(bsL|ASxl)K z0sR=u(oh3)kByw_oG@2ep;pTCaiM^xL7(1LZ1s%(^krxMFhF~;zwmB;^ zn-@3!o436%ZGQUD_S&j+=aZG+AjP-1!_E*1STj9c;($*u%yi}uM?>3Zu#2y#$u{%1 zn*$7Mi?1HQ$!M;rQn$ESPvOj`J=w^~?Hw(-!ne;55fj~KUufF)_XBfuC&y>x4!`AH zfCcS9#4j{iG0&qYI8x=PeyHDh%xKjtz&~HaoS?YvP^b%HYNbIx$F!)ix{!o? zOzO4YfF$bkQEGJ0%OKp}S~ACxa4ORDURxFFNlEW?J{#dL7hPD1?bZ6?98`&fAnHwZ z0_3mW0nbN^KMi##Rudnu%hHyN@?U%o_D?D5C8n8E&^V!dR))bpJa7{ju3GM!U^bez zUyqYS1e+{2nx^?Ls{iNl_5}(ENcK&-nFLKwL~X)1<$p9V&N$JkRE)l(j}yn+so5UF zIelpp^xT^Fnaa&PECC$3j@084V68I4gsfs zUpwB%?7wP1b*esQM{UcU-ATo(8Mbpe;Y)Q_%ipj~X}g`ON#6`N;2J3nSFo2jVJ(S1 z#ITpJvAl?Dao+Uq$UL=Tm9T%>AWb3uv%Yz5ipfAyTg;u0%6qEmSk+T4i>YP!_oJKV zb`Oxxe(g||{1=7Lz$w5>0T?e$;KZmnRo#7J?GoUt1eC~7cAhW?k4J~Jx=eH}LVE(f zwNuO3Z<8cpp7m|;5shlf*YWIb{@sm~X36g^?w&sozpWd6dO zeQVL_lIlPD>iax}e;oYs_T)7Y{_)`Or17REU!-yU@;06(T%>e;(%kJU{No1Sx21+5 z#!~B|Wn=fmy@>oZtty!>+wy)%h~|ACcg~mPWpsN{5X@{oWALr zcgn-TX~;k%g(TRU$Y@TkfaI#*{WRwliMRMt)+n+|#@^2FH?-#wH@F*rU0@pD998(r zPdnqPj5#2F)M}ikKNx8u*Li^e%ig&gxt3X@89CRvs#22{Hkk3$U_;clF(|^07DHSV z88EF71a-_j*gmBkr8-1p@?JQr6TpXWBA9ycIx?7#7x1glq5Bhuon3~dRLe9W+xcu5qt}em)utcs(qjm7v+*c0S`K;hcnf-E5Zu*$FRS(a ziQtR!gp8^i+Xq@-{Mo~f`JNX6|N56}cLyBeVFCJaYp8anNTJXdaBu<8&S$?}5%@}F zxrqp@Z0O%17DjXAIzDv9CUfM8X1RS4f~GfY5{mx{Etq;UwTACU^Ib6e=_3pmoWFF$ z+bd2+b?9BZUnv}V%s0lo>>QC`U{(6^$pW`!c{QDZAE?p-k`%%+hKss~@`TYg-1ZAPKBOau!hDh3ULnT2cH>0sTve9gq9cZX1vbvzbyq6k z(g_Ur`t~#cuiVZ}!=HuI|xrb(2`JXkqV43=R;K zrQ~{LcG@!lPQU`V*!~){nc1yo9SYoi?KPqG%m~pExjF{$2K;#sUqnFdD9qF8@rhy! zqo@#m*NFB9dbuBU8)-LpaOmln+cD@w%%o{ueJ;K$0j?Y33X)j%y%i6?yNeLR)LiD1 z*NKe2-RU-T7DaZRqW9fCC$xB_MYl|&RN|YM%?*Yzm#lyH;<+O^YLbMD;pU0Re_4{n z;c@w#ma1N~Cn++4!?sQwq_MDy`EDZ8A_$ynv3qt<|3sL&)-x+Kkn1#>%xObZmU0~; z(jV!8X++On71g+w`0#N65@0a5eqjsiID)G`aTP*?SAp8A)G+DyAeN@3(}k{sf-1eT z`6t7Wp4*_YrfrN_O~cK8R|6<-QNJfYO@Ud56~Qhv5jgL+wDkdo2+=QdM=qxsD_Qz! zuS3ofWO}uyE}rA%1ZNj{#>TARMQ&O(#9W(%dxOu@QBT_9=R7nW@EDqEkWbbW)^9R5 zcbl(|`9BGr2DS!C)~FR_Nkkn$jf8PO!WWCZ|B7{7SALd3i}F`GUn~BwlC|&@!ByV+ z?`&8SB2ko~c*K^euCrJ){DFCS@(=ts9L0|GBzKA9jIz<8KY^2XKYVroF=WXqHcMoG zATl>T0J>(;WDh=PQ~idO38~El?3+`F+Fw6cXdzn?x@#|5`ch%nQe+6vS{kBhtu|N{W5`R}*Zn!1-)fQwkc%Tu$Cs{4eU@`JF>FH)`Y%CJM^zTt^(LI@@ zNd;$qtaJT8(l#xw~$p7suUJHm!OB9rPvEkP$Zme zr4olH(COgq-dc4fF}|Nm=L`3|K~TF_b~s<6(47HDKuml9YTP|O!#oC2E5B!@ia{ef zVjMP{9cSF{GCaNABJ9v5Bdzl5)D(q}VyglhP%bsD1JthT1f01z()Vr+CyZ(R`Pc`bp0`8jNkE+bqZHOv4a-di?m;lK)Cto z6_+ixB=zLw3Mx6npnHukFm#NY{@w0B9LV4!)l|B5g@LT^sto}wgG^`m2E&nz7-Fkh&kndhg~Pv z|FjbCg+$)P`}kjbRA*^Xt0VREb$57zu$SA?M7gy9x{ugU$$j^zcQ``I!yVdR(Fys& zTF)LV@!gpa6VJfAU$P0|_#(Pa#7q}2VdAE+W(FI;XFH0Ade2Th4ksk0hZ)p?v`v_a z$&MA*4+7QK0KzcOzHh=bt_O-DS}~Xr(a9pg)F! z6Xl1AlqW|MT_V#EM(#*E*Xzy5lQ&GQ22=8Ey?9lC)E($1GVjv<9c+c`myzg??0(;- z5suR=*bF`q0k6|NqhDD(h!Zp+nMs|F=0#W;QTG>IKe-m=Q`e_@Vhg_N}kG&<|M}IZfkte4^{!nz4!76(Wr8G z#4{t&i%zb2i-`hUQd=qLS{AxV>rxfW><~ESVbbr}Pll%!3`O4y>^oJ;`}$6c`@3{P zqw1$X-wR%bM&=UAaD>dU0}*EbXtn<;ttrAVWz5-wFK)l*Z3w~j3*m2p-mjFv7IO%#Jm zx!-|Mur9THhJUH>zGV}A)cOA>As(ypvmF7}aMBG(C139Gr6kKV7Vhnr>-?8jyLM}{ z^>Ko}{L7%b#$N~N+z>}CtXf(8!>w&?H3i|-pz3Vj^+@z1<+QIcokT^1-Ul{cr;w!4 zHLj5o@f^IG>~ir`cAKDpFJ_%)`TVAKS z>2pf_D$IrP>d_VB8^A)q<@6ysZhhyiuL|R~G-Eh4KKd#7%KH8EGGu+%IyJeBRMf5j zRJ~11TkdAMcb3GPx7Ku}ZISD?{6CM6FK}-_+ZNH$Kc<#QlBNBFy`HmBzU4LBo!e9n zxeii~Y+mNh_hw(uNkN`t$>w)@Bi7qqiDu_>`HBlx^qPw>>f?`9spe~=5%&B9^PTp0 zw2=5g(kXzSPsx0w$et`qn>1PUSSOVRg-IQ$)IB_M~0M z^h*M5t`B)=^@~1kd+V7w2qb;pm3!^xS|oio7P7`%s-m9ZQ~&WuMj}zT(C;k&K+daY zD`$g~3|>mrawJ_(vv_sR%rJV#9afW}7K6V5qftGm8~7lb0y zEdhIbOXfLapillnw|mh5J6Z4eDe>H1WhPGN8}3}gs|1rKW5(%i^lh%iUBc;V%fhYJ zHr`x=&%M*A0C~~Cjn`i}V*a@X&6D%YIUmW005M^oJ>Ijv{QMn;s5rlo{TU5)bmIO8 z!Q}KcG-5HCo0M@T@~2BSJuXpK=oh=^{Z#UenY+seOmhBbz0ucWyzkEk|WcBH8B^lk#Qye5UYDgMW%@ ziawgU#$G{6lHiG$#;OSG$mhu=|7JxTNwAufIO8q$od3-m#>q}u2yas(z_r0`t&LZOq|Y;T!k;v?|rNMcyun(f9O-ZA|;G!MeT37gEf)d z5ZF3aX&aE#?fF?0t|!R1qe^+4qCc2_+_d$Y^nEZtMzeEL!xA&V)}HH82$k$J<0-%9 z(@Lrthn-rc$}4g?XCnXT`+d~159?KhVgHzl+hjVHtsH@&E| zvGT?Cccda}_lMfZ7;MQ2ag&9>W%;64){(nL?2hS&fG?jl;_sX{E9G$>FH)R98W#0Z zL+UK)P1qLs+{n^-s*r7R{i2G)1vi&)k-5h!1zT%gV$8tN`NE)9d{`K{ANzCpS ziwpaJqPv}~dq3_(NmEP?2U`!KxeVuhja!|@uB02iE)C>4x?V1kOAU;<+ncVa>S5EO zLZ{u_xCP^)!k5mz$(RSp0Y>EXhJD$hy^f8)0E@{;*z7((pjj&>@`DCA3u}`0T!0n! zjNu;bNioVFROEsF^dk>v`H!6B2SpG7mM>hgJ7W;AJ)JJ8@89}sx&^7|`sKGLEV|gD zojiwHtUI+eK%EB=_fBEmMpF)3+Jf1_(j}Q1#PS2^TcIc?LG{CC*Mg{cR&+5srxS;0 zNoKLRGRo_>4hB~~A`8hy9HlkM!xa$@#l(sdHIBiH)S_M%hM}Pnr8S0Fze2Ym z9xKv&Cy`a6O+NCCRQY=kK@Szd{YEKI%6#NM@B_V4jC^FcLr@8U`Qg)gy32Ta@HvPK!ygu3+dl%RDpZ@ZQG^P>Az zt+aF2{KE80pUUUd4mz!R^?Ei@!kJsaZrvz-!JeCOBH@f*A%FAxTT8-QD*8yv&SL3S ziT;85GobYi8xyKa#PH{1Hb#i^kB2EC7W9zGqCTQZ1on1e74wxXJd@M3rOk-(wy44~ zeYxsv!>Gb6FRao4NOsP-KdXn0X?PmF%{(r{L3k*h_f8W)X_I#EadBW}FkXjtQv0Va zB0IsMbCZj#QmyUD)AO!Ph!X_VYEC?#-_+~nJ*L;MF3 zqDiCW4OlmheQ@zgQ(SMI^>*;InDNLvsI1pbEu)Rb6SeCH*Xaw~c6xve>E;)t@Boo_ z%qZ>cQ0T&In^xCcki445kub6zRN^IQ0e>GHQ$zKWt+?&TGo$m9jPCzehL@j&S`T%z+OL(Ecd zH+O?y@E*;M*P9XzMM)Jg+T4xB$7>WC9YEBw#9GD;6>fyZMRwO$rPX1J*$*eVr|JoB zUDZ)>zhqn5cksJYzJ_d8Byh7v!b-{jt^09N2=;r==m*Y;MYEs_8_*t2wcMQL%l3b4Z2H*GrY@U@$K zT|f!f&9>R|t%Q|b&5+Ro3f)?#4%;8X!sdmyf*Eocx~qp|@5K+|?`1c00zEO}6>OiX zgW||^*i)#adReGPFw#KqjjQ;PmHVK)vQN2Vx|=RGjl|K0Ibl99rtrHWulH&{RON;A zvf%P@n6>3fPhH5p%9JnhT}T~_HSk^F1Hq(_`{m(-8YrcrEJ!9;vI2O@muihcCK31h z>8by5`lCEPJ+l3X6iVWEjb{ThJkm6BO(?EMe|^l4*{K`o0{|n-#0xrJuMg~^&S3uw zp_38(1ukAlZ3NEGh~SDQ?ZG-Ay28dq;aop!pQ{q7w(B``hCgm|wPIZ$KHCl@xPv)^ zmdc-=E@_2Sy$1M=>A&M9T1jID%*jr)pu0FGHlT(w=}`=1lZe?+ZjHGSia{0|Z!ilXvg(Bd%c~)0(tzO9tOJv+e?!gUmH-;wR0fq! zKwRG<`dD&bAZ4qUiay+o#|Nx*hyO~~mzgj9VfoAwqxlcQ&)nS!i|J0&oVI1NQ1JoF zJmH~>7i~YQlg{-?c}m@!!z0Z*btqh>T8+JuvDx*)QT{c59G&cdG!f-B#VoZ8rxget`x)(^ zs{6vDPCMQfawwe(5J-5#7=~Fuedv0|c(!p`=l$gzpsKO>=T^%yv&RWbj%;Kk!|(jL zfy%N5P0L??4qHc_r90tC2eu~c#B*os3x*jMqvhs3G;Q@yPFqXIEJo{E@!bUi=ZJ0^ z7cxN1<#1%+YGb`{jYrcYh!r<0SJU@YX{SKj?fEmyPJ5QgAFY-18-CWA%fd`Ek|@Vi zin+#k@UNVrzKJ=D*{)lK^rup+tP^h{8&FR0aTH>RDgkYQSNmVO>bd{201~@h$ldSmB|oU9LV^95mgP)_Vm`a8y@Z~0oT!79N~i#}gyI+Gq!cec|69_(ayJr3bG zw)*|DYuAU2lh03Y?&Rk^c3~N#`Wf=4l-h`<0g*^Ot&v~~hX{UY_&CYLF|<2Im^<+U zo`?gDsT|tpmz(AF07ZQnac#Or4YZGKFVaj5j8S~M6|iKXpQSsAu_%+36_a4fv662c`jlRrhaD-%7<^}i-z6r4tw*-u^2Vo8> zDAM-xaKq>EIpIogrv#lebeGSCao$G5KWkKshJa2n;e$GGc9~r%v-IPFmAB1rv?L&3 zaQJx@y7pnder4yOqEqgIw1MnDH_+ZSt3Vb{F@e32yj1N<$dD%aQ^(!{5`D^@GZ@Ke zbf+3EvsOX76N=v(rtZ*ky#Lg;SrUksF+j!SX^EY>S{;`;`NQR+YfjX=hN&E-**y@~ zklCsjxHy&r{z@x1#iZeht#bO8(@v89btmrb&0Qqx+If7+n?ryj)vHZh1|j^NTR8Te zAs~C_e0{7OFh~2e^SBwxenR|Eiz)XmWQpwLAte487kv7Ri$S}eOh&+r z9l%O~S>#ZKXfQMxVL7yZuHWT^R`VSPO+AIikJR#67sq7ZrBOMIOVpOEd4gJ<5G&{b z8G_usfNm^GU(byMi>tx$>or}}OI0_kjRiSHY^OeV#R?5qIrq0`GxWamr%r2cuc%&- zmVa6g;l9oRru#Mo8c&i|ukugW{fju>f2ygl_KOma2&KHB7q5Pa^xv&wg6c)a{K7E% zne2jR_TSNFZr*EBU6Fof))eXHNe3~2Tn0WEJXEmVchuY5A(krMgVj%|RStZEPx9sd zcnl^f~^+cr0tr`0RXe>b)OHt+ePD;4Ej zN$pjwh@!xL+1k!i@%Rku%goZBqMTb^SV$fn)-ASK_-;9zs161UiJNG?-Tu2f0Ev8i zbWD%YpJ3n3Bh26-Alx&k&-FGp46V26ux}n{NbWDy|4n8GVZUE_`wN-;#sNV?)%oQ= zr;B*de&w>bp7f$s-8iF4qy9q4Q?Tfm)@ACG7exk{JNcVT2ie)9Qsi)((nZ#|#G`G7l~BNcl0v8}y4}<_0+j?Q z8!e({DU{}4DzFqg?|e5N|3sV|AP{ng6q*++xU<)fRT5*q8c*oPM{iDJ#m`wNdH#2@5B{)MLPK4sVRl zUU+|{gI1bnX-dy2R-X3MZbySAUI#7xDOeMdaFMwQ4WNX}eA?=;=?kB29L=R?IYOJa z@g-r~mFx^lqE-%@4JM_D{YwOArKECV_<_`aw^h=Sl8^TO&c;00K@uFFTukY1PrLQz zNKsA{%%d2v+(bZj`YLxi67+z!S$b(hM+nvbI@~4rNQj1~&3onFfC;&kHwhB9A-nbP zzkdCsfit6_uc&zn?-L@Ikja)p<0W#V-gzQ`e&!ea(vt`ZtcaM5I<|*9t$PF3FQ7s4 zd)Yuacc5iFNWkTR$;mA9KnEtsFFvd}oeaKE?=6CWp%8)oFXo1Q#|o&I9liMG>-K+& zvs2nc@J^7(pA@5BPRM|0<3Aknq%Q}(UwVDtAikcuXC(5^gT5|%Ko;8$uwShmOU%Dm zc6YMgHC9J4-)qqmw-U{IV~PdnB9sCR(+6_dod925{A=Ey^1CbkZd%J}DW*Q_+qBs4 zmGO2rKf{9!X@n-c6^E}!*2&8>PPs3&}@`!{GAc2yt)_W5_!qZ5|D?8Soe%T4w6vVl~;`EHbcU?T5y#QB$UHS+rLEo@9W2H{)aR04p>> zR;(<1VTgXFHO(2#c!}Fo6Vk6$c{uoEU(};GG1-b@J|}zV(C0d#omC*ZI7g6Phz?wkWT~y1d7TG#m)_g$d3R z2A#QMeH^Th=JirL&EG^oF_0X-9Caw{fv4`cU4l3#B*2Z5VIO)LMLHr(av5Q{9^@u3 zF*;LqNky&m&*D3w7q01l5Q2B~kWYoo7%69Vf5W97wz{sYn--%eVcY#&I+3@BCeN+a z5#<=R3c6t3d?6Aw)p3l#-yL)fuGme`Lmjz*gU$Soy|SUsC2G{@t%Dn*BwNpBQ6KLsQZt!ja->QF6J zlj{gb+X72>H8HviFgX7dA8s7_F8twl^ZH^qO}0OU{CS|B(XLRBGf z>+m_As802vBttsHnN+37HuzSI-_Ofw35DCt5?Sqfp)i5(Vv7m87&_BJ+&bHDi(IY! zN$=w9BjL3)&CNTW$n5;)u@F#OR~f65Hk;?|L&~>pj%}GL*KzSE|IRNqX8Vx^H)>BzGESSd%f`m zWF9Uy@sp5rIfp!`z3vDI^c%IznzBLSdrKvC!R0D+!0KWrR{^X~rcQpRO(X>)2a7J4KESBMee(XCT0`<$+N5Tzq$r~?8ShJAI@oRP0#kM_NUB>e|Wd)phIyU5V zZF)i1-s#-9yt|73>%H93{U4QDk>jg>BmQyIur-qt%mP8b2CJ4c2D+KsiBe{q;Akfx z1;-7^=oCw%IvDGx66*&RC-uPjh6`Or)!z3XZ+xn zhq9A{o_hN`U6;#vYtgC+PaHgK-JmX>w+6CNm|-sZM~m9p@Qg~l-#0S+@Twn6oPM=l z$X2~u3mx{2&(s(cvcW9ZrDWm;+Z2!oNPZh1Mj{~aw#GGd2n^ruUl9>RDBP?38SuU* zVrh$mQcFZJVQ|8YCu18nJmjMfz?3LJFRQ@JAcTmeni5s=LEyZ0zLtGa6g~LNqUJ&o zn)P&k-T~{)UjkxaZs5cZV&=kQZb-!ca5kH~&k0#_ej<4SMTrTR*MMLxX>v*Q1bj8{Iu6p&2 z7)uR4J6~W{f6GB>b8*#k%}4DQao3-mf)+Rff@^RwGtGrzThC&zmGOOzfI3=7U+@1t zm-?;!A(rWX9_KZMgsS&T`@+W4g?`?ij+C_*SQY!xFW;5iFKm6#)o%p9YN6>ZbTkDc zU^SP2d-bbWY9rQ%zhBA5f#pX%H25_MS2NT;_~Y;8?YT{f(aEqfqj2kg+498gTrUKd zzFZ-Qy0rbD7;|&L7Q)L$#V(o2>p=Yu6S+U~bgNI8oT-==6@I>i+ zzvGnij6yTn>Cm*{GnG7+Zzr=4GuGqudLo`zp z`AcrI8S-I0-&+5*S*hPgoA0^0y*V#!v?4Mol%nszJu_!J2SWB*mDJKq?(e@hq`qUT zg+$%i2|Cq;Kn%W2m4G;*X3!4kdpDVp^rG%o#sN)+Gn6!2`0*ls@)R^2AoHUgUr~h~ z2G9K?r<@F(^;^p&kpAG$>)viR+&oOREzFUd9zO+zsT{*v8en#_#O19-fXSPJP4!`- z*KWssBg0ic_HFS34Cs^TzZp>Y9}OABzK1^}M>8-kw>{PQdN_X&dR{wUy>O5E+Vbo^ z-acS&uP*OP0StjNn$?*_yYM|~&&Ly$etn=@UXQ38#1{m`DNg6;eofPCS6?p7_X&<` z;fisH0LS9BrA&?6e6$s9unEeGL+oL`P%{DKviFHi^cq^dz+AiQE(A1D#5}f{uy}#S zqYCC19rR4kddFHHYOqjtIOQd)*r;PHA4d|YIB(a$+m$NZQR!>uP={#wsE_3OGivDh z@g?rp6Qnq?Mfz*)XlVUrspMF!GupE0#mif^C@-4?_lF%-=+21E(+6W<`b3$!=P z6q!bSW__n6(frgLl(B*&3HX|}$+`|bo%~C@a@-xB5qS|&6J$s(jjLmPz6)T_l={}H zTut`t`10~}29;e#;sfBvhxU-m*yb_k5P5YitG%`i-9VWw0D>ouSWPv`bgMW(lUG5+ z;cARnHO+IzBvg+)VsadprXRe&!M}^_jaYT)>5ey<5w{gLFU=-EX{gv$jJSssMZcB3 z|Ds2ZHhQo8_k4*JMx2z`mH#KjXUJ_l#YuPhBWlN%PsKI%^T{Pzl>IY}iFXb<`gO_- z%DAx`O5VF`2n9=q{>ppZM1{K?oQIJNF?3~la&aLqw#FpjICsiPC-A97Gn{zcWyoRP z42885I?SWfQE)kDUh}38_FA5Vy15c-DKFm_iQij#4zoeDh;VXm=J>#2g`hHV8_ z4#Maey@fJ`O)(|Fgi66sQMz=(>hUE`adBA4m2NM{!HxUSa|!y{eW#p9Zj}RXE{c>= zzDK$8h!c!qr*6N_DeCQUAD6~Xx590f$9InKy?Tf=yDYX~v#aHyES-n0%`@#iaz|c= zvu_A+if42b3n6#Bl{a_)wy{UD3TGap`y=mPkVyJP zH-xp@?fJwakwyyCom$N&271cQV*_ox&_oj6J&U{X_xC0&D}SMq`*TuexN$=6)7E9@ z+H^zSl^2x`cR5Fn?06^7^y2R0tLsCkijWzMc61AJLG71#NIe%@igtDDR!cHt{v4|m zz$Zs9nC|GYG|%EGpZMd#lLLgPbPD^CDZ^P_B^g#rNDAThv~Q@0At0)+_U^9p4Qmm3 zu;94{Uqz_52gipF!rDl=D9TWz9MI9)W1}k?`=DIUEgKX%&W&z|X(fx-XwUNJMASsr z&Q04@geq7$3;W|8GAg@{Q8yQsJTcu@RNtP53icldm{%P!iX5@^u}e!FIDXD5fR|e(bR&gP^d-3%_UE?D5>qx)jF2;} zzIZeY#M#v_%4UJn8QhZDAi09MGHY!e$>E&cFZ#T_^9X!4xwCLm;h?L}_u}PN#bzJHLE2 zEPi93u7S*4O$o#TOmjSIwILttKHD10y2ZX2U)Q>{5FS6(LL#(4WYl*;_kYTmi_Ju8 z6LNoqrqtFRop3YCY6Dnu_uYaQ*9bSxKej~~YCNu}DfMO5{kXr5oiJ4G)<;aIPsFW7 zooIfq!&vptwz3M$lQCy~{I%IcoOgCMAw)b)SnfVNZXAG`_YN?C6-*C$>=X~Xn9@mb zFW&KWb|x+kN&ZQdfuA6p{47~gf;6w}?VnmlANbgm4ZJyC6YrdqJ_i14T-#1d2n|(2 zU40xUVObEr9jCuOZ5@!g94|@cS<{*2L0?57IHog5(y_(i7M<8JT0=RK<7e`}@e5_(w=BK7K~n~#17@c~IF9p~S?*OHGqJ@cHL zZ-(p14o{UFdMC#;Rx&wg%dcbqqWL0pPL~#3+D{j~cK&tTTfmh7^crw%d7>WO>hRz- zx;7sb8k-hjr~q`_WNF|}yvq6TloIHO<EGNaSg{-3sT=woVZ6TU=W z#I&-MM0D&Q>(S%-zm&L6UENiV0@q*sUtS83DLvoQ)uX3ER2?GjP7<-`Vg)r8CN`kW z=`Bt?Cx}(jHk?mG1}NxeTJrT+uprD&y7Fk__*J&OX?5z_Fvf9v>&v7(Bwo`-DtCx= zRC<8(%Uxf>DL1tIN_kp5;0!BKD4_+3^3$nJ7hcF~bY@@j4eZkCA`sZ76jR zr3FW?jIaCjKNL1z_*bv28>)<%TfO(F!KWrVRCeJ;6m+(No^fu>Rs6_VclSymmg=Io z=ScYr)(sydZm0fDd<;l^s+tL`A$vL9ttKR<4omcaEu@Rw_NrPv$NY=F+z;{QIO0?B zbrh|9L5pv3dz6jaEz=T0{DLYmRtP_E55aq0f>*SZ0C{I<$ zxQ1nB5+7q-*5hjs}*PENu=&>K~BcvuZi*mcn3GC^k)HmhsX;;{_fZrzIj33J2=7g zw-2#_BE$-MY9PIOY=sH0b1~t=kEc)5T&^G^`{~(8wrdy{pB6zEAbAGB%Zx~otN%C0 zn!5J{%%snU%Z4vZpD!Ipm+jE^`9Av)^%5iDif=ErP0*7_E;mq_m`1`21iFrr1d~ih zUAIXJZ23E*{$l>|#=>>mNSAoSq>K|n}!yS-mj~}rjq^rTyx^frl-hi~EM|Jkxt>XCL zWv!%2Zr`t6OqunigEk6CrWWL^QVy(oy!p%xptsz|G8~gNth@x53Y{4olRKnL@|Cg< zmH&b{EEBUKOdQnfCSQ?KzMhwCa$0Qf8_M$LeD-2>uF+JyJP}4Vw7ll>PyOt!+Fof! zI`X7u<6!SLxN2%Y1LGO_ejS3XS@-ncBe#`H5W)iWXN;{;&1fpxZV8uYKO79OT7Q4UO)M4Csg^2z~u6}TS?Fu z;3D39u?Sq^ELb_r3vVV=LJiy$!TYkaz?;I{p5!vDw|ds#*ma|+Jo8!LDv z7KK@)-}$k!P_oBrFUTe`|Pk4LNaArBYMfXYpGuaDxu$&W}i z1^vI}@P1|Yhta#u)lO++1r(+>O2GODVZU=5(*Dn+hlA^}y*33Xn+>*s@gP*Dcv=pg zMf_q8L=8R>hzSmF>xYY#Vyn_9#!MqS5Bv?m8=5oqVUQMKz57(L8B+4Y#lWr5z#a4i zXxqH?9#H>oqO?d73uEJ8I}A^QZy8$pn^MAkDpPs>8c-z0u0$)+->*p9%c^~)|#yt9+sny+IwY;n}yj^L);tB|Ay8M zSDU*JQ3CCnEK1EU3?7bdZZk9<9@hn8Ln?M1$Zdv=kIuidx!XMY3f>QLN;bFoJ~ntH zxt)OBcTU$KGn*{SINCkL8k^H0y0P!}t4;#{AQ_X+#qC$wxSy^VtD|#2w`!g$WvLLS|}1U#Ixw_i3CShW7y*bM(QhvkSWboB`JpvAeh897O))Y&#hPf?GiNz2J^O<*g&}f0J#A>Q ziP=x58^M_KoN1y0lYB6X29~q*b z=qM;UbC4Lg84|WL>^3p9^IdT9!@0z8NVu%_V>M#Lyiv5tLZ2AfEP8w6j0`dQT6pQ$ zWD_ykPsIG(AWn>N%H;&&^NF$5nIQ>!XNj@my>@!+hr~bi>CVCX>xh3nCf9`g+lleM zN3?!X6=Gr_`oiI@I>cn`?YV~Aj}eoTfBZ8pq!3e2zM5{l+CxkYO5fVCF`1aIyw$JH z_lB66zem_aXge{Z<38Uzy_=XZ_!Y1_%!in{J?-Y*{~0`UQe`DKHh?EU{;$>oN$^~F zW3D=+2c8Fydq1W90#ENw!Nic~;Pn!4avo!V_sXKHW>s^*`@$~%ocufRmYGNHTW;!AQ6^_@)Fmr^l=W zzrh;y484os57vA`4KxS;<;3(~UfSUQ6ck9%-M~Lws~>5169Tj`i(`-GKwwX4MNZre z2uw3x9V>YRL6Ps)S=nJ(EBa(W=>P4yR{>O(NmHg#H30D>jMFHKVC zK}dRDX45HI2>Ar5dt~i|(CwW(8uJ4o%y&n^wRj_h#e$R1n+ZXfP@i|sE(yY0++p+m z9fUorZ;W!gApF`kg?>60!X>v=m6{0%Pp@5k$i^5V^lg3H*7ZZ=P@eC#+(i&cy&>s$ zjWlE2Z1w9*h`g}xE%IhVr1|xUnlD8V74vJjYhwmc2ivT3Z=E0-{=%}Y?JC3+4x5@} zOF&F5NZxtw0K^!lkD5H#1+lpm9Tv~I5Zh9fqcfKQvHMj8M~hBDEdA2A+GSx7>(G8| z`a&BN+Vtu2-727*Q&$|)Qv)SAJ$r23DNr({mTYf)07~B52N{8vKzX$*{&USUQ1V;8 zkNo`!%9k4-3?Gj`oUgsRV@@N)&DL)|a7YB=-a{hcw{Jt-$6Cc>0UP4sB~<=7&mmqM zJ+9?+9^z#i?%HRLfT|W{l)ds6sC)0;U&=QFYM9&{qO}#&s-Q8(vT;y* zwZ4hi`a{BCm7n=19Z1-?q+d^Y0*RZkCo`Y8L*k`IhX!jCB;GyU_9%1}B#M;dpI90~ zQs%znbA^MDG-(Rc-@Xx&-Xn|ooW~$}-tO}XJMwVOM_rk__55SCu32 zp`fK$XjezXgZ6+oLQXgrvFWb!qT{pR0ZR92BMh+j0HO_&)^=a&xz0IJP#$4W!c|9p=t4%`m71BTQqpTj~LPj`9ckbOikTG2J zNsZ?*WGzyInh)BpEtDR7bYJ>c_eY>8EG(kR7Y{1*92=aMz8EeO*AzvHKm$D}V z3OohHj}lKq!Jf$!4t0S-_&wiwUBghw>OcQW*$xWt**P&pKNL#OQi=!Uq0ph}{cQyg z6nfUZX?B``!jw&nd0!?JRSmyhUbq~JYUMNe(x0Gc;&Fa@ZU_`D4y{sq6$iz=dk*xJ zy@BFsp~DF)rl9zAE8jQm2q^KJ#Iz0ww{M_Kxq7Ln@>=Vy=P$GR08ERKN{cD&rq&R_FTF(6Uu|P49m&)vWn>O zBTXH{P?1n+S}`{mD)W!wB9~3tYniEj6e>24*V?=ig39I{wL=z_P)VPlR`(r*%Ey4i zfAh{l<&)Icm`{07`J!ONqsJvJYZ_~O2bCWQh2}0Vpi&h#vL{6hDy=6n3MQUIRcNzD z^YcGY6=n%66F3IdCDG3)}wmWNKcHbYUy<0YUm)z&-{1&p;FD`|;gT6q~f&r-SmQ9uvQ-J!x zs-JiLilKfu#wx783F?tX8-(QdLH)M%m*=ftp#IsVP*^Sl4D~0HK_51P!TfIab;(CC z=G^Gl)A$U=0@*j}hvdLmt-N*l@hmW$AGr3sEC<8Y?)28zonUxs#BE#U1jhCkj#k^B zfU!Ho{r1fZV1((v`|)BI7!fn!?3*+&uB>INe^vnFx{k-p#eZPj@L1u$awQlE7N_1F zHUJ~d)!ez9?5A)Z&ExD&FiQVgn!gPJqk7ewZTE%1sMY7%*4cp3IBdTWgPm*WXHFl82Y9K2czrk>4bV@p>s9U9!1T&@IjLrQu=mN=L@j_YP0{0F8_hG2ZD z7nr_I2hW!@fEjjAJ&vmj=82A&Fvkoq&s@7$6n+rQvnj7McBPT#RCN-Iz>HBW3cOrE z>b}g%(-6!%BU9UJ8^L@LTqgVW0+{dO#9W5D!Thamd)Y$=%(|B4ju)PR`PZ+-Px>Zl z_29`vYNUg|w~~3Yct+3dlcRw}wNH9EVFs2o?{7gT@;Zw;^>*Jgury4R-mkp`7RM;$ zCPxjdUrdKEiTV)^+jMY-mDR@tDm8<2o?2mGEE#{}qHgWA|IMf6 zj@W}aGq)cHb7-PZ#rg=Cz1NfXjn{)&|7FTg@;aEcclsaPD<;RwquDY{SJ%WV7?l2t=jSl%v_5nEn7WeWb(h10Bq} zk8U36Bfw00#5H#3C+BCo-&?24U|wxa^4&!N^Su8OMO$xDTa#%uKQPZ}CHh5P0`rt( zP28CnFi+YCC=8mB>%e=RWjPsdXtB+6?O&uzN4rw4fw?z#ng7aUa@{Q3prD%w=B~Lh z>bJ=_JUg7{HRXZ1*?DMs@;8{aXZWrj5dqU!X2qewSTL7cD`}W515Ta@`NEtpDQ$M#HztmV5GG)JO*9+*1RiQcFOl))0&z|0rM99t7iSaM))#7ckzs zyR1kg_YwI$Nb)PWk29@h#~7Jl+{xAIoGSuGZ1-Dd%Nj7Q^^dLI-vmaqbYYjtRxmES z@i-Di_J5waWp%@LFi!sX*7_(GjL@0~i_%j`3zPMf)4>Sd9e4IQx&M6K1}}i@-z&88 zTYD53n*$@XDwl)dwDH2qCmb-=b?#mwZ3@QP{tqGZrNFS+bmo)TA}}l%R}y8&eQok# z%dwMuU@ZUMVerTijQQ(_&OLbx#=P;V9XkDBXl6GaxzGv*d$;M8gDfyK{4En!$CK}= zv?rbhM@cvHTrL$O-(R~OqprUKLoKg9X+OY_HZWNGjf{&Hzq!+yjF)PW_GvX4kFek0 zxdZRP5R84{wdN4iCwKmpZjOa|_lB1TZ(Sr+W391V2=xy0^XK;r@ywoW&pPX@v(7r} zth3HK>#VcRI_v-6|NTw!4m*BnSCx9=@13|07i=F9f7AJ&?qc~7-Pwk(^z>7SzLHTr zsppAAzr|+(L!(e)VD7f#W{T6qKwUsKpW`lKP%8OHk>V3#aPF1Ie_tdK!y{eitala@ zqw8D0m24O%Mt`WJAzhOg>%1ctGF(jj%Uq^*bIE67{Aug0w!Rz0#M;M8i%-5FCI%_1 zVlPhQDP^}OHncmn)fv##_HFTme1pYty4z@{&u^QPP(kmfk5k?9M80!B>KR#ym2uDHN{wg`f<2WI|W zVnI-)SL<2v1qd2yUx~SK2!bo(txgm?fuO|&+M4$#AjCUX8usf8gfw@3u)CBBp}C`f zJn$Pr+ZLI>ilIR$KB2gdVGW^->NY3e5eU6J+WTCug!GZ~0rP(l8anljHW3REx~S=S zy#a`5edinV^@PYOkv9_6XCY!q$$ETb2%@|SJSy81AnMj2_e1C#M8i}5=&y=|=(&$8 zGOiRuG|FJ$^dfhNChuQ!Jh&I4Z(cuSTq=ZU<>+whw-kuBmTa^b?S$BZeVzJGlOVRi zpELC?Q{jD zh_9!5CeAvJ8Bgl13NWjUi;?~(arKM&6 zmK<^(3#}El@Hc~!yIdkBG!~R>&-JecPk<7+QhIggB2dEWf`p8-K-r-XcC_9Il#O?5 zT>@1=Q9rb>xDucUczNkO+6xM=>(f8NOCUDA?((5yDrnjqL)yePVIvkicB^(2>`LF8~Uy$ok^Sz6(6}b*Y9(`G?eIKHA z&x9u)Mnkm9N_y^?21IjCI;FeTlIxp#k@2+;qFZ!%t-X#!u`G7ZkzdA%-REj@h@Dmo zM7*kVm*+P^1aGGHZ83(3q2(q1@)ZzKIh|^DfeR7o=PE~O%@7{`L(?ptgm70(Yk8hJ zgxd#d9Ta6D+?xCFrFasAzy0`Ux>ydv+=7AQF`FR#>_=GZ%{B->;`3aV83o~_Lw+B= zM?g3+T5nGs0pZwU-K14M5Wd*^Ik%Dx;j@a{M-mkve1`bw*FmxAsInh44bLe9y)v2Qp# zq#$hge(~`ae;{n6r@EX<);E6FUbK`P7jrL7$0jn*pc5Uty{*Xno|Uck{{Z2uCg$oJ zS|EJ0uOo3ISh;dk7|Yx_75ZtUjYcAFfprou<{LcXIVF5EoX$%d%ym$gdwuR(NuPQ~88QxFXfjjOv<1ksdHOS+UAM4y>&xD!II-?s-| zdYF>y^h@KbB_Ej(6Ob9&Vi*sxITg*{kF}EfVr#1B5eCHehssD>i;(-pz*Lwe0I~X* z1#$kbQ|icgtkw!%kHj=fy>b#Ol@ueM}&mrsH6dD(uGnFdg%^>jn~=E-O-#M}5atU6bMI{(45V8&ZekM7?e)1C?H^|N+6@0o#` z)_6NoOA6GA4>|5b&p@qJh)X;=4(hN+QH!4}B<5VzaynZCiTQ?~`KT9twuZla1xSi^+Q5t=OMZ92DQIY29kTe?xJX`K{DDP#eJJS zB;(r_pWJ5$+5$1>ri1%I3;Z>jsdE;z>jr0*=5+)4evwL6mnvQIgtYgQK#VD*p0ckUSe*x{7q83LzF7#V z0@1mya+e|1Zj!oW`D#dYF#iPC`$Jkis;4JyAEc*$t+abQ2pOUGo10YkKt@t`LqNtk z$msW%bZtKhnN8UZ9_05JnIP`6Gu%+f#O{=vyete^!5a?kXQd&#DSUiI;xJ@CuFT^! zvmx8j@U>-=8f2$89ZTIm0y&=d8rLr!h8&&eP{Pfhkki**FPC;4a=sTmzi6C>ykdw< zSX3$G)qh(~h8ID8sYRUcwTF;5DOhIdvI6p#m-^0=ISlzXJJh5M6{~`N@^;P)-+GVG_FvDm*uT39Ph%3bRaY(U0X&SsK`@msJK8BhQob zC*S|Ph( z`0f>`j-1^7GUX}M%+5{M9FBq7YD;>>242#}C&PQTK&^7e6;6*G)D7xyzRr9H_3f?i zuerHEyiIreHFAvf%`3gpU`%}u|$6&nML9a8h1mj~s zs@%F=V1YN+~eI)E`LO+;Sf^GMj7=ZcB z@=CXzGnk#bzM6z*gW2;^K2iDv3uqqB4*m14FsySyo=tQ>fJUiaqwi~Q|#jPJj4udtVzBc+g8?2cz z^Lux-pdqGTZ=e%L>L#J!n*$9>?&I=tX=uX2pfe#gOM(D zq3{4Sm`)G8dOV>qH*#p*t6k90-6Wcjwj3IZBBr+p#z14qpA~{tqR=poKKt9v9~#!I z9WXlq4Y%FLFWbI=#+ISh7pnHq*g3eX{}n$pe7>mI>wSjC-u0fxl*^$JNRtxZaU2?9 zHr6{@tD$isVwr#M9%#fMWNO`8(pNKqyG}ym&e9vAHZIV(zd7Z(eg-riEVnCJ%`fbi9cWAV*^o~S)gGQ@`M|^W3G&=I4<~4nX z#=tP8Om#0b26;Q!yh_j*_E{jY@F_GV?`s)vs|1^8@%!%bVX%ctxC%ixz^2BDY#(X{ zoBsT{INK9!slct-Ywm$9{b-e1lmXZZhbej|M8H;V4^>pF0GoN}Ot0r$uouLfc0GHa zv`u_LixJq1PA7abJ_fdaY~*^`TCfccYri@r4fay`o0ZB>Nj<7NKau5S3xB@&8bJDk zc0W2CY;#tc$u%jkSO1ES#Vc>|NY;y?O2h9l*#e$ zL=LM*#$o?*BIhjE^r*rR@nLmu<8`lmqO9qK$?XGUL`6mOdmZa&;@9;DN3%Zg5!JB^ zr*+r~L``r&F|(9L)KvQqVWfa)*=>CyKyQp_^SaZ%sy&=&-!Ct|;_WEWS(+}h(~U-S zojjBf>JUTpJa1UN>>iEi6Efw$fAI>@_bMgyo1iPvH=Np$ChkoP7VULZ;8{-$b}3U$ z*7*@bjx(#|H}Vlf)diObK`&xBxbRclxHU1do91F=mPU-4=9MlUbtV3#Us!*C-b!NJ z;~MP@b0snH*|somt~)VN*!cThcr-CltnyKwHcm|5q)A4u@+YRQTc0gyIZI5Xavwxq zm?Ea~?!H-YN|Kmr()s-&K9QJSt(>dDt4U1TSFdqyjwGh9Df-&2s3oS`Z`ll)J|||J zt$8LYy1_$Tp1t0_0z8^pr|h-`g2$(zDSONgJZE&6@g6zgiJm_i@YoqV&!{gsE5yK) zy);8*n=*Lb2e%xJXaw(riZgnb3c>s1rd3wxa`09!pQpBN8~D^Tv-jvd1>X+WB8!4t z@EsN2Ozg7--`R^2g^|9bZ@p!H$ARxhbd7dc0R)K6DW&bQ5O6Df(7HYW0udT#_x#L& zz^VJD`yVtw@Sy2=c9}H~G=DG~LQfZjAglz!vd$M7#;Oo@y!|q4R1Lx&6ASy|Mj#w_VjMLIJ4??WndB^W>TS1Za=@4#o2Ss<) z@2{IwK?z6>SvV31%DZG$Nx^pzm#9g3s7isjar*ruoIQAY}7hwbmSB~KEBo|0* zukKY1Nryz>&TgA?29O9^5rBbWNbEo1(cEf6+QPLFm=B4A8Zz68+aPgxS(?x4MUV*F z7j<=XHECBD#YUUFo_3i1Nsz4fL$hCA5)#3Qk5yLnkSYYZH~)gfzWJ@8XIdfQ7wNo< zP4?$Uxpq&*3KBcio5ce7A>lE)?pNtHNNheowD0#yNNk$p`_#OSjQg^~wTJ;on7h0e z`9$Vrc2sP{XB{L~rP@9eC-XJhPWLJ$%LW5qiS@RSn6q!mC*w`zxa{O>3cm;m0V&qH z(DRVsYo#5yy^8d(ft#%#BzOY8q%Qgh>WGxX&V+BEwyo=3VW$jg>ub*DU9Uj>J)WK2 zp#o}YxzpSr2BL47J-;9t-NYP!Q#M%v1u((F9@zlUArID^FxJ6TDw6#Bj>C)_yyF1KFQ+W z_JDfe)sMd^LZI&667hGS2GlKoo?I%t4ys$;_vsxLq`E1(yLmxfccf%b#VT^09ea9x zr8TG~^^fJ+vp`*0Pj#yf0#$#yb7F|hYY|`R7MGu(>Q;ZSY1{1s_f})dHP#Hm9kj)ZTKze;<~`yyFjIPotYclNtQicG902v zPc(L>lKVxfrt-|VG^o_n&qqL&Q~%fc>jbEZ%?ttR3Q*N8 z%${yGA>)+ZQmMTYR4s#L+isHg7t7nH?z;l&iXIlv!gNqgH3FXn`+~a4?Z!HuU{K9n zUS5cE2GyeP^o~#Dep)^7?aG2BHX9r01}*&KcwyyK|)_>Z^c(~eJ&NMw^JnduWQO`YEL924(Y|^>?POb>*Jcow{3+) zRf?Uz@(3iFhAKFg4UiNT-Df;1M7p$dzi>Sy_jUUC3w?#;slCtG)NV*#cr%uG&m58u z#Y>p)4nVTP>(Qdcn;_Y^Q@<|Q1Cl*fo6FQaAvxSGt$%(MXtGO%nqKRGrl~!!B5E0E zbIv5Mc1#1!a!XFH+E>u**;z1l18skg-=5vSKufE&O<7wGS{B{zO1dp*Z;p-yF3SL| z@{WB)ehFwbh2g=`yFnXTzB5EM7_@(7l1CklL6=liUy*DHI%iJW`!`=fcTJ7Rv8n}q zf28!n-MOI07lyc$^@4tvE*#SC4SL$#Mz)~`=x=PJlW&`V{{pT!+-b&kti8%peu+-w1B4HeR1DlQAFCZm+5pb7CQV1Y1`r-GlVy95qIZ5u|U~ie6UXLi+JZUR*x` z>94PiVzwJYx?X66cytLee9I2p_(H0*(MGO+DP$IGvbb~P8)Wo03$$L6g^cx>XEFN& zWNciQhdSs$X4mG0#g{iiCS+N8{1Z#ayuCgrpAih1pK8v_`SVDh>QCV{WPY6s3R^S* zncqudwfhf4rbWzbPh<>a+LK1y_!}WJ@T@tU=Ne?`I`qDKrlhS``By!I?8=?qhgTRt zcF30Kx<+0ff3ti2ts2PjUZc65GKL((@cR7Jt&k(`UlMyg1v$s=J5~=WAh&lsXmXAT zW!GliV^EY&7e04n0Th*Q@m5)#gW^KPG`?*tC~mlX!M5)`6g|!P zBx_8d7#%sccJMhAZ`a%3kl{e_e)7d4?~PD=I4)b+GYQ4t`EFIqo1nyQuFjhng3@xG z*HiC5K*>ouvi)Qglr|iW*u?k+iJGA8t@h?H>=k_ZX@lYP)J5TSAQ|c-dV+0&0B6_?A84kPdTNJ^P^M zxA0`Peks(lJat4mte{qD@KIpFG}KpyI}chXLw)s=mxE>LP+xDhSiK_)4DG^Q5#%~$ z=)U=3<01ft-uI-{g?GWw&pvd+e*}!feHVSdo&e*NFyHx9ai6DDwczwg-j!rMUHQHW3}eZ4Q?6(sHw~D`2@e&#PIt4lLIbOQf}`!P+=J*>rLj zSex49`+fPq+IsrJft#IR?VM{i<+Yd8fb!{y7+BuRhx1H-fwg!0?kx;MumXbJR!wXJ zD-`KJY;3^_Undh-eG{x>qPJ~~uads_dACd&tmEYuq<&U_6}fuj@n2*f=MKJ-KDi96 zOYinXQVPIIIC-7_rw{3m6~3MOz`DJUM`jHHR`T)Jw~oI8E5+x`p&trb=FyDopsh(XPtG{ zS^xk3?{AVf-o91Or?ngW0xzwsG;_3sd1#cbvi8taqB7&C4 z5CtIzul(vPBED@|t`}S0PL!FwZuSp%Cw?~f^%?M8B7W!SnO7$#5jAg0>Q-615VcP! zYo1qqAX@$muk$?9PqfZ08{KF3iufa%G}HO{8_~94N$bv+nnZhO{EL5`>xj;C@1v8) zmJ(fVs#!mLYlyy5Z3*Qkmx%tW&Hgt}nGl1j`;R<%7ETN@tWL0A?STVnJ3e2L+|7wd%G zI*5@awig~;NFYY8m_0t(%O*y}y;8nsyd*~3bK%9=NQ^Pg+vKmjL5$@Fd|F6-PK-@| z`EcRZeBz%p|CN7P2E;$NY1t@BAMwv?%Yq+flf=IhdS9di?TCrUZ|zwHSBQz8JM%Yx zJwi-O>`N^rvjn<{_q*JQ7^|Ntc+~FX^x@eTJAi_orFdJ%^Y&ztL{@u|34J zAuG%;Um85z0}gvahQZU=+j%?vr*wseh zo9uloh4oxV4um!2dvFgZ;gC z5MU{XKQz{ZfZtv#n!zdv9JMhoS-%_tcW@MHJR=Z1AMKY`I0?ba^4bqR z+=Y;ZoSK~8dI&H0sLk6J1>t9t8!FG3LPWu$e^aeJL^S+wUBAPENa3gP+qcd@qq23O_2+X2xc^&2HU-4I(D;4Ch{2eBs~ zvb*M=fY{(MYDdjaP*k5DFK99X#ml59X&8AN)Dt%imJ4kJHKs9PLELpv?|w6}J7omwv#A8n)I?Bo zbTdbU`5+;xp1V9f6cVgeA*s%!)(bRGiD^P&oh~Exd^IHe79CIfv=4u0~(u4T&Fzmlmd;heY!Ved*ggkffFP8D}Oy(qSej)UgJV>r+oT*i1rl z#}$ekHxiP&MCzLtheI-Aqe2p203@${*txfIE+ilN25#S|0m*mb9d63{kZgEv5GK(M z$$^p6Ors~Di9A&JcE}hs(Fzl#j3m(LVP>gu@u11peK(Y=15GZ;PWi`9&{+PRuU-5= zW7mFkyPyZ!+&xNlBUeG2|K#Z5U-v*WJk)Uf0v$BtoeUp^9MZn~C&#QoTN#?ZRcR75 z)B4OcJrvL^LY6Gf`U#rN``)wP?to^u_l(=#zo2dE5-2#`0GgY#Nq@Bq>4EIh2WFsc zUU0Q@+g#AxZwVLQPXukpg1#NgkC3K(-E~PDG;aaj%tfJ~`I^dRiPnO)@Ab^8f@7cs zOg?epQv)sVxm{1H253RLH3@QCNSA3RDjAXnXzpBTL)viKShxVRkkp)oUoV4puyAco z)EdwZUu1n8KT3LKsey_oXkn3^OJBVM?I>Xzx{^w|d!@wJ!=Rn`x8>p-a(p6-zWwh1 z4%(T3jh>uJ(uCCxewLtJm|%(&M}T&bFQNbE0??wPS3KRq2ilbnzQK-#pv9^4i^ckY zc0K0o@^rFY{DNaW_Nt`MDNY`1K}&3gq{Q~&G+5PyAMep^Iih5r)+W$7tJk|JC4+9SUZuCC3iOS8#x%Aog1#$sqesJC z(Dy2Ns(yb1`r&N9uq9HUpQ;P_c%UBi>#2Mm`5!=!U!dtE>IC{7ldUY%XwZ}YQs&r3 zfd0ZIAfY+|^v~U?d9ezh|1DM9k}VAScM2B{FmlS59HkP7p>vgx%Pq>kTc>(in@ z>hx+yIcpZAl0r0eZjfdqyj;1e4pPs`?7P1(AXPF+`KI<6QooHq`6`p`ClivsYsW!a zH!#&|R|}*KR*ux!ghP5|m4s%xJfxlfs3tB6hV;gp!}e`rkoM=x{FcCkbg0L*{g=QzAJJGIx5nDi`WN=Kca)=?{j?8^yU16|W%k^$>G@j4EV`Q%6`? zdmt+l@a1vT3}jcQWkvlhfUHNfUi;0pklp>Yq+He?vVk)>AGZC0Y}CKqn|_x-_VJ~g zy|;WI`)X@fTn_1{soNv3yC7R`QTH*=6|&tOYdePBAUnN&!=B|IA*W)&E-~?dobKD! zvNTD^p{~f`;w0qER&~AkodCIwg~Ws5I>>EOc2K`XgIqu%k*ZeBtk(j7!10Eg@IBGCgD-*}k-Rz1k6X$W^r%MXXMQT;1!qxBWekYtt1- z>DUQ*o@|Yd+kYX?YxnX|T{z@5Pa1e%4}<*ctkU)aw;^93yk+%nDae0L7he6_3i6FJ zva)YtAV1M9w0Es36vUJ2`6(_jG@_>uB7`bY#6 z3suLbtUg2WH)Yu!4}K`tXP2GXw*^X4%$aphv6h%CzRG~W*0_` zLdhoFz$W$zls1igczf;>l){o%-ru|dN+<2_!NUVekJ1JkG}b`rMd5m$q-Rjdb9vor z$$-*pom|tKo=|G~R`+p_J(N}7kGrM(gtCs`%bvsEp=_GUh>aJ4vPH|GOxYeN+pkhj zjM@cdN7k`0Lw6`gA70D9#Tm+PpYR`3c?K21L!J!9$Dq*0hOKWH&jMQLggeg zzhCbTRH9c`sqwI&a^>%lO7D266l|Opd4=R5Y zZ~E=XhpNDo!a%+wR0ZGcTNSMWRqcEO&7F-?RxR*ts7M9 zTJwU(S3^xSewp~C!%(BhpSvd(qtG7AEr{(NQPSB-^G&rx6esr(rj z;({-&B|^ZEk`)n_t_4HQc2NGJ5*Qkeh3P9Q!I&d|a)q-k7|Z8bUaGqRhC^lDoQ>DO z*fJD*_DC}r?ztHibtzzM6FszmtPxr3fKwkHHzS1D0gMHgUnYs%1C7+#HNs z>BrX-I$+#pHC?MD>nC^bXdYS(M*8;!Q%}!=k-5U|mn|7*R>Yg$L@h9$cc#8QLI>l; zNhj6y31GamEV-;814f>D{g3(OVC0L)y0;90@y@2~aU$v8@T@XPZ(R}$yC1Cvh{vkF^9gMEZ$Xy>FgVA%ecP#oZ7`+WIE38bw7|is=6gloAd$*K) z(FJ45EA{G+deXSEyYj$GWL%3)ZFd>`qAyM}Hdn4Fkc-KZ%r=jpdTWF90n8q&9j0(1V` z62pV3VCwB()aOaITl_0KMrse3hJLxu93e1`ompCKWPR*vxykrUI#!|YUInJfA06NO zd0?8~&GXbr0@Kp{;f75SVA>4u+zz+^=K38GsS{*8>z|x4EAs<$Qv+k&KqZ))Kl9(N z{0`=pn?fdk7J=!mHWT7eOuD1L^i?^S9?G;A=l7GoeBZY!0n9yB{%;PEDFdhCm5D;rr z`}gA_1Zf#R_a)mwaBWt6r$IRc3j~}sSx+FOzIKkxt^f!v8(CuP$AFN<{OO$+j3J!P zUBhQN2$8LPzdgo3LL}k&#(iH)Aj&=)m-lxXq9^@r9-TW2F`mn@5pNGd%vyL(-^slY zyMCRyeZet^WeThtjK~J1>Bp*(OD{p`t-KVu^)SShHjJN7dINF$lN$4VTp@n(O5Sx7 zBZ&9MM^je_fNEZ$qTF~H5{tMmI8gK{9DN>b7qSB<}?~-m%DlUlu-Z1kLbZvvBP$&~U0LZRjj$EmP4YSwpnuaA8Zh2Z znzLnH<_XZt61TrkB-{PsvOGoIL9fG0Yc)C08}-}jZ_9w*n>smqE)w+7@(l;)o(BD2 zp7=~cHRx036TA21LrT)F=pF40>H7(t2P%-FNs7dd+d)cE_rYQY2U4mocEe#VkW$`9 z`3iN7W4w?sFV;gzRa-w%#8s3{-v5b#|uEeqUg>q zvI+FFalIFPr$FC*E%3>gB+%VcL$8UG`MPhX-E%z&`d0hVvddba+Xnb_9@_@`;y;^{ zf8GFHc~YSM-xJWKj{o&qSPHtR%7zh_WYBt}ULM~41+=%V%lA34K})~fIu`H~w4~7~ zuWEJBuBkP~-(3ybxy4;=Z_k5v^wNd!<9?upP0ahcPYkqGb64KqApzP#rKmZUy`YId zt~&T78#FQT$V;~cAz5|P(`n}bBx8Nsov+tIGPF2eWQJUi#@~jIa7rO5`uWYDP#H*c zw)gLkya|bL|LKA5I8eWFpScZrf|_q7a_*rQsIl&W&l7S$y~HE+t^6IRX0Lyn7I?NRv;dw2Ry)%W)SoP*<-=lM93v6Lhv(SA1}sf1`iQW}&rNGd90k_w5U zL{f^1N+dbbprptUNg_j%d7j<-`|S4z+z&l^U3;yyKWkpwb*)6d&Jm)nKcxK|OCa(m zA*3dy8Y0)*gR)C5LPT8r=l!}gh)^EpTNbQ?aCQcLQR8a}pGzv8xJ`%fnb3*auGxVbDwk zREPXSal7n6wP3e%yAgS)8!h^`sbh=D%faI}=096f+CtKkXuBJcAc0 z3V%_btS9V*cM$(Rajj)RXUpS*FDFPWj)T0uU4Dc33gcb=FOsa_Zy z)k943p5I-hX+TVLoYv1679%FUd%1o3*Fa3XkFv93EFdNl?n-Lets*A&xC^9SA0Q^g zG=}LXn8bKiR+{~TeZ=^+6yZAaVPf27iKyG!>%`cf4Mnt99mH6Aw3*5$7h>#ObJjt& z5HS|uWcMOMoESUK>@X--B*wf{YOjWx5Mv(m4K=>C5@YK%kIs`ZAjV9!d4q(Vh%t_R z)3c=K#F(N0h4Wc~80{W8x zEZ3W4Nlnm@uQ=Ui3+un0QvZDXZ)oF;SB*@$=UpF?l#!op!T|nA#qC zJ@QxqG3B%HV$$4lVk)Iq!AjhUn3mZW?RZ+0n4TMIe5LIgF&z{9Oqk9frXSIU1D?7P zGZIa^9a6f98K3Cbt7?0}W9Z@OqmT_A|0}CZ3njtx?O@nHP7!!|zU$@ImVuXgIJBKl z6TG_5kGK?_2Jhml*FSFx2JgmD*QT{H;5{E)6)aQ_-Uw%L?PrbPEzxVt(pn7O%6$vN zy)KaZd}i?7O!Yf{1>^v1^fdeJcmy|c~E3bybftG9uQAV3lJ|j1c~Qm%Jg1CNUqtScioc<$%>Ee zr##5-AWzE@iPsOv@155)cUuIc7?+#$b+?k=!P}Waa~48shvT{B6^f9$9}^@nw+PY~ z$G1oc9)Wc1-dEZh&mf(>Lt4{uKBV6)uc}{P1DSbG_S=6AgUsHhvQsdJ%+XOd|4V>O z@^Oj%M_)rGjZx1&4aL!)>CJpbWLL<;o~%vZkhBs zt;!(%uw{sc7fM|UVb+=sQ0ks~Abimm$`&WiNJt-pa*d_s#<4$8F}#`jrd0_ly^Rs; z-b910_Pz8`mI&x^b(-}*{6J6WUMu^@3iKP5p2d~pQ1zaR+Q5Zi@NGUCT|FO+wPL&u zqp4tWBDktg8o@N|ICB&u z?JK}}?NZ$8atxdgy)RrZC4y73{L9wc1>k%i9XMfK3(oJX4MIs7;B@JvofD`5r#H3u zoSQp1!|L@O>z;r!B7R#?f(L36o7_*$yoK7r)}SThQ&7A3R7v$DpqALbz-TWEYR}|j zSDEjITGxYf+DD|IHYB!-f9pr6^KBgyUl0ZLsT&4)yruo$}wv_wLE6Cg$9Pdf|hHr0XxB z{&vIV3ZGq2uf3EoW&WS_>pV62p#I~^`!^>Cq2Bh@A+BUE)cIJ!ZD`d~r&eQ9VY&C#QM&W471o7tR$H=!}dZ2z|AmC(@Vcvc6+LW9UKC`%NA z#x@(ygu@nSoc?GeBDEhH!92|^t3#m?8+~OVO%WP54k_F?MLwrCu4@-O42_4^UZuSH!&tcn8pGom^WN)2V`OI8)l=)CDM_6S%gKSJ@|V)%+sB|uE}-Q} zF3?mL{cx=)1DZOS%{Tp3pgBKyQgibJG|e(4{hd9bX+4=~!v6`Ho4n*>ezZb!=lQ$+ z7T(Z2dBm(GmxRN?p?^wA`P_{gqq~t)pcv z+n)AAE9l%Sz2)~vKgNu|c?qpBRrl>5j`GajZO=OEth3HK>#VcRI_s>n&N}P=zyEW$ zT}avdN8F-6tdJu7K8635Um-<^skK(jqL8;}a>JHqf`z<`)jU3C>lO0KZQuFatFDlz zQfsPAZ9yT=&2Ro+mzx#xTrvrM-M6BU=bT7&{;pW=jIE7~d%|h%wC5?ipBsj`)5<9$ z8!{cZQ`_ry&{Pj_C%+X=t`FPKom6`e6=C*+JMk=DjbC1xJ7FfWPVbKfcS6DS`#xSH z?wHQ@14|TixMOl2@s5VqxTBxtmIdxz!5#Jd=DQ>^hC9mhq4D2-7I(yELFJ-uMegv^ z;UB&pvfRPuqK7Z6do?NV{r$T>Fa;a3*h!&x40Fe zs?P2EEVb*n(;sf%t4Yr?6@G4C=GcVWz6fq#l$+WT+Iw!_vZd>nnyYd93?1$CRwZ+L zry}e8L~e6?bN>29#+z_^ozf&6SA6F7c=-I-v%iJgBPZCtVrm|@Tia+Ju$qO+jg8^kiJ@z+vcUS;&2H=)!zfD2w~Jdo|-;J`XqDXdgr`6>@LON4s8s$wNGSCa>~H(Uo|X_()Ue zBa6s3T6z7X3W)a)ylPG#WD%84m+<`)4^gZ4tvj}AGx4LP_k_k~Nuqv3<*RMIg+$ZV zgo2{-w?tF5N=4E$U*fk-?n8C1BJn#ZP)_9fHKO^KhjAEy^c^nJ)Jbula<`YP6(&*l6k`ki&%2YVujffWhccN=RE12dP+Yy9ZM zprv%=-W!p`;H5vGUt~oSLu(rE%qjFChC>rBTo5)VMtC;F7PfT|Bin6C2sc||B;DZ6 zNab~6tm;lv>np$(ql^)O~fc-4_dpsS%%A zj+7NKBXF`mYKbR!91Y%%`fmr%9tpFSTz&AwPKnx648U_Mwlks58a%@pE7UGdgV+3( zdQbju@LpMEIyXiXydyt-!MX*C|NeVMe0-o((AFH9RtMkSoGR`nI{3WX@Jp%~e8mz1 zKV%faH!_w_{k0eTJW=x|yZy2ZLt!koR}xA<xQ}n-g68_vB;5QBXoua5iA5!#y?by=plK0=O!;($W`04) zGI;Hy8f^%r{$r@9jhh)wD^3*o92rd|`75dIh8wDf%%geR8#mfp4> z!jqPYxxO(F;R`>0NBu2Cr0!HN&iW0JgEm`D3n>t(nQ&~3@P(*sO30DLMi7--@axXH z=MXg_nja2QAo~1Lnt0MZi00qg>ycFeF{7H{Ts9M8xhK61sVWfrBJXjRIt;PO3)b-~ zcR}3EU%h8p1;m5wU;bKm9OC`!8D?fKkdS|+`QBI@60!GmFaCH8iNcNi4bQ(oqWs5C zt=)4W@hhRJB7+4m;@?*=Tp$T47r*H?{Ygl< zNqT&=c>t-S!d=QdIgqO9T{3vH4^ltR%WJfhLaJk)>OZk4NDU-iyqvfeQqy|O6BWB5 zEq_~F=bu43&8>5_LeaQff2(-%%lx{=9VMHyg-g-cS$M_JYjkHTqVC zVvuPJ@3^P_8!}VDpVn@lf~-)i27K6%H4}4N)jSC~3CF4Aath>(cW-ciss}mmon|63 zoshdcf>pQVAy=#&p=hiQxgH&@$`Kmmjham?SCbllJSrD(9r6xOyJh8iA@5Xrv#hdD~ z3euqbNHHQ#^b3@8D^6T@iG}hPy*R;>icsMxy{cc52Ne-fXT8-Ns4S8Aovs)Tm6h#B z1m2MO2Xdc=eUpYttWEB24KjZ)J1*_XGSKH#NYaiKg1)yp#QHx^?o;jHl?MHMV|p9N z{8V{9`^sj}(*=wdcK-uCA4i`x9s|9x?s!Nl9rWK>bj_g_s0!;W__%ivsuJT7DU&u( zU3OvJ=WsH8i7M*n;&7&m9K4y$H@@sYyfyYU>1??zP}-^k~dn2#scZ3a`k^t>}Q3{2BgV)p_K zz_h>hfTzL<%-w`V+Ra^H9=8yCvpo{bTl7oW-5y}(c#SWX>HxFZQuMFJZ?JfLc@~_{ z083Oz+VAHSSmHj580O!>V)!(7*IANg>iNkefwjPaN}GBMma*JE1!E_$b_&d$HeC+Z z!6c{J(h$-C31gNLSYA_o$=k^1LoWKQziPnpIlMM+u?<)!D25(Z(qNsw_4{+FBUqP@ z4;2?NNb9rRgBOF9Cb`FO&Jftt9XbsrqF@VM%~gEg3%2Nl^Ue8_VAEv>n?s&~t>ZG} z=6MfnLuT}OloNT{%Lmlk>71qGqhVsv zx~>5n?R5*^?Nc1Vmml%-&SaK6@ar|a!c~8Gi#>j2?0?y_aUkfH_;B4QT zTbvUIj^`zd`Qg^!94g$y{3#F4S;-B$Mt{Kx?i0CD_5+;IH{N#72EjRZR-Tn*3Qnw@ zbFG&XI2i?&r$uzZdD7B)Z^9OwJiK+3Vu17Vz1Z5(IpADfEs(D+eC92>Ggn` zxfW2H_pj_-cplUi;=z%ttDv@Mvi$P?!%#DbSG*zOO?ub%wn!7ymMV8Vc>I`jh4AO+ z>QGxDUD@v+54E*FeT9c?ptjLt&*Ph9y<4}1uYR)xYEJ99e*!9@wtaZ(obqa@xk{`1 z51k=ZTv#md5o$Ysh`SC*Lv7c>w;EykipI z3OEx=-(9oP!5Q4g5ixlNPDA!91@|m)UOeB`VW$kvo#!W}vpm5`_Azl?Zx2pVOT4`| zKREH!o0)gWd5qQ4TOfNKoTx)NnhNpYT&_=_6HLy_#jW~t9#nu6(L>=I`36ovqWK@D z1v%fpf38124h{+*9Xt68oW=5~^DdCqJ4dbyzI@X#=a*oQX9~qB z9s&F7na2lO$aVT5-1ScGO0c;@@5}9Mz|K48qI1?6?A!&f9mTm|XPJABbF9El{cHSO zoeg$W%;UVDpTIu%>3ZGuAh3_t++HoW5$r>QXDSQdf$jR_z=PH)(xY}kqxxXGm|b3_ zNA90Z)Ra{<;b7Y-pHK7S1$&j!MPn%wu$S&`xjRknLzA_^u8L&&xeil7Mr3@JsPu(X zn&f^oToX6g2e#}Q${b1;*fd$cs#`o@btgQ#oa_KrX<7N|CCy+J=kx#NjR!0H(CeQR z8d#5Gzpz){1?#TT-j5Uyuo72&FvxcWE6jN`?+JOX_})$|;WmI}Q}krIL=~(Jsr%DM z*kBn_OMagZ21~nT$%B(!U}=8WWz?vX=hLq0mpcZ*lDoUExXKGGnF#l};@#xAR?+^7 z-2>*&SK8xS3&8xCd)BM(ESUFZZk{ae2lLRe=9)RTWxm-Um?yt3L z{rC-xIREdz<+p<26S_}6><}26WVaq0YXAe|%g_2Q0>jKTU0WyujK%)W8z-c}U|C_b zVFV0`Ny@6@_ny8V{pqiFlU2Inh)msJUzc?;{YC`k; ztPTE9jhT#e3J`&trb=LoX|M%~0kCl1GNv)Y8CTQgv%Q7p735m@%tDp4~ldQ9g z?aHqa)AMYH~vtD%QWS0kc zU;SGAHoOj$!^!C`k+(p}(iW9YcmX~$zs+5TeZY5{S952AEciJqUi2u-gZ~giLw6nz z_>0czTJOsTfBnLqt?$)AWehYe>gon{Ue&Aj)&!_qmu22K)Bx&L`>MduKu~LWKJ-M) zKyZ19jN-+52;S6@cMhY2mee*ft^5zPj)3)3XWSrksxTr>PzyqSAH6(RUxUzTc|xJZ z5<=yD9d`yTAZ+m3&iYyjgiU$fA0505;T42n$Lie>-nb?E;p<2U`xfbc=8b@`U*Fos zEy56vlX#rzxemfP&N=1U;}C9|8(CFm3z2zttk#!e5Fr+vjNm;2kt3f~o?aG#$ocav zLy5N`5=n?I7EgdkTGq7n#yb#6|4{H{R~baIuN7S0Gz3v63QMKuI7Cm)WF}PwL-fqF zS_{V*qK`NGRe0WlXwzKp(Y(759d!MBRzDG<Gc!(5i}i0sAZH>*Lpz0%q%jI`5O`z z^gOj>Z%A17UdTulfyCwt*>ueuNO+1aTiC7ui8FD6|GJk#;`|e*qkc+|c%|9<`|wLh z)KivQY!A9WoUneeg`>5c%Fdd$)V>{%Tz=eNZF&_X4bGijZYv2%`oRnLOKKr0 z?Y&al*$a}wyY~2%$U>6ugG%bZn~<2?)7$jz8aYmW6;z`NNObM}zAIi268Gl>^SRxD zM3jr9+(I&a&(xNig4-dn>r0sRRT?Cg7wAUXNkKvp`&x7|At5lo^LwN)#2Yn4uhwja zIM9C(2Xm7>_GCml9_R2eZ!zwChFZImtc9A~r?MSiu4chUw z3%chDQj~G{$5*uPGtiGb9z*FbGAd!SU`XC&rS$3vM$6Vt3yzt z+x|dtE(ECpiw%;-Atk3I+(fV#44rP9J!2#owqPrR!PfkEe{pMj(g>k~AU)+T2!5MMelLOF;9oNxurr_z{BnC9M=W>-zM;1Y?%CJCS9jvM=?o2gZ&C*Nx(|Wx zp}JCirXKjxVwz$LUxDx1dc7EqKKMf9-{=(>fY0YfUYe^k_`Lm|2D$-!&U59HrZEFnku2)DBa#Cmc{>ig#2E*n@IBl(Tw1S$^woe7#)(itRbt>*YnDn9Ak+K9&dy zJ#qzg&p}W`tV`D3umy#8?Z>`jz2KcW9p^Xr1iX`(AsuZ8z&jpzH>z9~ykqk{oc;2_ z+xKEfN2UtAU6P?U+YW=bEo$jsW;b|SL{6y&Ujc93nQOa}{(!f*;ZeG}J9s~cGM4G< zfwv_5F8j)R@RnYwo$^=(-U|EH{fUL(t!c~iHtr$cuTW_Y%LH$$QOTlz zL)N3?D{b`vywfX}UD{Isiqw?xk-TkWKN|Y7<+-42JSLuWkW6nJEcM1*++q(NzNKcsxSAC$2J!**>4!N>B8tbrQ%=I!bFc+(bq z#_RhQHwA-_*fHe(@CNt}_5I^HeinRD*AG9t6F|@^ z_!kAv^HwI;QCdMCNA?f+pH_Fw8@mJkl6j2}d50muvsX$vARYoDH!nxM(}2LTCaa2w zV-Q%YXG|R9fxt=g-8-@;A&?$?l=wCeROZa?g;noC-F0aEXp1JOxo#@+`YwT5Zl56K z3Q$|Gm3&)K1woM`!SS0dAShETXQm$x!Fdc~VCe-2x<*gA2IxU>r|F?f#c|~Ko63yK zSqZ_^WY2VmS_uBTEOt_C95h*fy(lRTXxrtR>_fUi^Qeo80}p5qvXc%AT7gz>xW}_^ z325Kv=~8$5LFkst@LbE65MFd}?O?bzgaZazelC0h;ah{1e|WthoUP`QHpUAP{xWUP z#?ugSDtlXI-VKomx!$U3Rfs(54v93ULZrNrt995AqHG6!U4ferwKKfE$eTO|ADtJ{ z7h*xQYx~OX9sUqwOdk(&y#cW~zL$I)yCLSKW6o3Q3$a6*dFK27LhQxIvapAf5Nqr^ z;YmLL@zjRTER|#Aci3M(S$zcJ4gAL!w0iva_t>4?7>gm^k{@J{=mrVi8~M%a+#w-W zzt+Q75)#_)yz}Q|L*k^9ZVulnNcdTry|I}GiGe?ql$Yf9vTxq=tD=IC9Gl6hkDx<} z&yCR+;s~kvXCLR?egUb?-)fdOJcg9_58LWnmmrn!tR>^_R!A$Pj~<@q1!>b#_ zuMR_QcTdo1wGzl3$jjQ&ZUnjW`(G}J@`2n3^?iRu{zC5C*=U{*vXG~zsPe4ygZv_& z%7tz3A#W;nDMV&HfjMQ$NY|5Fo`c3oQ_x|knI z=R`M}wQ`{JHr7PVVK)FDq0;V{F=NL7 zJ@lf1xb=C^v(6i(G~a-#%#w#EGSr|dpQg6hL=LJ7d)pcOlTad`F;e;9J@*1Qruw_%L#W`GEk9xvbrzg8&CJ^TcyMf5c1VRD1ZT^7=AdpH zI8KUjZRT`vTm#;eiIe4bm^p|f(7^G2_WjYQ6F8AO`m1>Y!TFv(|08*>asKSy`EH~N zoYBR}XG40RrqQkV?Y0xtbUuu(-v1nGi&ZCLyIY{P*V)3a;}q16Bq&^aas_IBtEDbH zvxQoqO}=jDFw}zoH2jTXjOg%rA{V{l~4JuhnCr z{!?UouR{XVf47c(PFM@|_Kv)DTh2heV_ST4=Mt!o&@WxP>>~VeaT__P6o>ITXH=01>_^o)2 zjtXc5I!*5>T>_1;n!MhU9nc8p-QzXv0F4XnIZA9pXk0niQdqkh8rQg6Q(PB8BiXUn zHN+blPq~kjZWKY|nQ_^GQxY^@YK}esM%GtgT%mUEAT+oU26EVfNRqsZy~ z&iO9Tc*kGkxkia}l&`}r5E|e1N|&2%hDM#${nHCxLgSb7ep$X{&}dJBX(-u_e|PUt zSXs~*Jv^yBzXh7qf7fq>ErzC`_6NJ&z0efV>xokT%`#YC({_pQ?^NForzgPTiA;sr-lfLrg}hzHJm2Ks6!NrMYBzk*EabVn zV5F=`uaHNF#Y|r3#GQ%SVANP4&z*7np?^A-!<{iZx<<<%+)4T9y3i_7Q@YAFS$cctBaLwDcr%9Uz1g3L)^iX zy84*U3~t}nxpP;aILGZX_&2pZh05*C+t+G!#)R9ebguA$MK`zmP30?#E7si3qpweH zr)6?GJd$6h8uoHq4lJ_VHQvGfegEes+7cITgOTuLf=Vv8LA#cbBv8w3P+XpD^DUVB zz0*SU!r}~W)d%;MjcdHQReR11UH%=(t&-_KvwRfX$~ANPPOF!4zZ$IYxGemZTRyR+ zs;Cm&viar~!v`X{pPqiIk35mYE!OV5w8h_&`zo7AOwVU=Uz}RBCH1N+H$6uC_Hsua zZnAc4Zde|RdqZtRsY?r79|-}^_uV{Pca8T_e+_tu6O)ghz7ypk-WEHEhtKd3A6^r$ zxant!kIVHv@XbVZ#Oziv%WfI?r-Vh-ox+j|GjZ~A|A0tZi_8nb!&~lLI^LnVez3B_l*ZN-J!LBbv zzt)_1{rtJaz*$#i`{4J);MOR1%!zfxVB~Ag$I2tb;Fz16-6LCKL&Zi29nS_xSRj;DK z(`bF-`+5`b3h^uP*d~HkpRdO=z#F{Q2hVHn8USy0Xj{s42Iur1SM83`dPXc z__pURa0#^nzjpWK_B0Ck@26!a$M}MO^hOEuLLvkLkDZL&NP|G`{!e^^98f*hMul;H zgPO6_H^A;1s1Lcvb3GP=`t;(jeR*LJ6uipY)Sm;vD5F<7rgfn49-BO#%LQ%Ts+unY zw?Ny}`=R{SP0-#f>*Eh!0il!fH4{{02yrhT{rhAt780zrB6o~5AfbIvQzz6N5`M1=wGD4V;^W+tL+;NZNz3*<;d~pC zixae15j~LfuCkNa83D-zUh|nVJdpfZahP_-29nL%0mFkHkfOHg?|SnIQYynqRyWci z#Z3M9NeYnKW_2l1c`u~)imiUfD+#Gkkm&{UYZMOy~%yUUyLB_ysWKdVH%`;mwDH2dIIUnC-#OO zT9B^MbtmdGAzi!6&2i&JNH^?Cs{3jT>B$r3;h83o(Uef)W&MN9+`Z3*X@QWjx?_US z(~xmZPv~Co3o^Is6P8JHAoI98%lDxvWO5?>@7ni3CjY)ofv6T_Uh&#_{9F$iuFJBQ zUzS4V%|MFM&!doO`c{6Xp9)#NLuaG@nL<|nY|3tL7HP)i75_d%mNlcGy;K{rmN(}X z_XR@M%6FN~=P!`;x^Q*T_&8)^mqh21li(gzda9KAp6yC zP;aLyWc#dA;@j^+cH+*uzPsL#W8Q8dyoVvDLwK|;b%fl4no7$dCCDx69@?^=3OPHi zZQ}=HAh&zlgY>Xo$Q?K0Jy~4?xsdbs^m2|u?#izt8W&iQi~VA|(@6qy$=lNG0t_Md zaLOe5&mG9++#c)tED5<6l5%wMamamW39egT2)U8msJf0Z-D&D?CK856_8&;)!guH5b~R>?y3w*LVj1={MK*X zkUuN)kozwU@;4)88^m5hK6TvZ?MDg7b6420cA7!HZR%Q4M-=2|ie5kX76=82;4P22 zNl=jX54ojCg@S@n%=}*&P*5ImNYQ@_1y$?H+%YnLZhzijz!xYODBOwUUkrui6{ann z-cYbOxANEAIw))}?JgaQhQjNS;kZ`v{i;#vqqoDL(3_fTx|#!pDMuZDO=&2~XBw$d zS3z-(fZqL^bx>SWs?DFH2}P?10+%n}fa2!$Zt~AgLUEhiX{(`nD4sApnZ~w+V(giz zs%k*7q|&I_mIcMeBj1GP+C#C;@7~M1RZ!v)zq>NIn^bqen|ldL=7}xJrzN0dw{PCX z`)i=&*unX0IR{F61N=^?OhYM9T{(W^K`5P1FFUhQ5lT^#y&lh&LFwwAr?jafP z=DJL>+&hL%-=)7$`tVA^_0~Kn{Z;h|ZYT5m8QWNdGL#j%R-~JTLwVhre6N@9p=_)2 zll96Q%G;htOp6vk`N(nR%;~34J}&)7v{)R<7v2WyX^cWSGSyqsiVw;u6t%(+bD^A_ zXJDqf3(Ad4!)j!nLwR&g|JD1wP?3#3pEGy`D)ckW2I;$@qIP0<+LOWDU41NjeTS3JtFU#~j4^-A()|)ixfQs`@`ho#3sJK#wEcXjS<(L>vEZQF` z0cu%}g8Wd4eN(+O+7v4BY`zrZG^k|EUlyNT36?*9C6k1QD0A)59E;b5#Y zjV(}}0>f66KU&oi45!V0?(TYE9DuoBelHja31MRE1;MzvI_~K)budykJu=)u1LH3B zx@p61FkTEE;mC!6@wW3!hU!@`-v7NLab+nOUq;2!*L?@0oU`B#Qyz@!@9~UBY%qR{ zo!qf128@=H1p>+R$nMPSCv`O3qsj;7xwY4S z+N=XJ!bLB&l5E$d_ZeNr)nG=sygT##C~4G^?c=qi3nR0tev@j~M%C;j)%>m?w;S0`oV5dHnBc1H(UH9=p-l>Awa{>`LeHCHnKk2se6x7u7b%cHD@Bwg&gliYqEBc^V?x>`|0ruaz3=h z_xq6Z|ADS;x=)LoXX$@lXUKUES*t55bq0)pyW3BP7?JYrjgRMmabm0R>i6V49}|7F zO=&q8UR4uU*yQ^M<=^o7mw~b0cAM+7YhZZPue+HU42Fw0VYYmdTyN_r5=%3|P_kUq zbY%z(iDi4cq!YoQ6ktMh2&%slv&MHCLG=gEDo0K%RKHFNirZR`Ay_LO6Ie) zA0_wKwa=-dlAch#lKhY7_ED%t?Y&*5RS(thhRtga2}AYlg1ygrZK3LE_32U$6RNwc zQx$}ip=ztcGdy$-|T~1qG#J3fyC^sq=8iVSxx<&Ov_E0r?p4~bm4OK&` zVEU1Ka({NNIqysEQ`R1a zrNRDRmY@$UxTB}JAN0o4d(P@kf&Q*8MbFKQJWqP;DmBUcr!#MyXe&T}9G{>bCJ%aA z_@#$!ZJ^(N?=3t>8uaLahkN5LgMO}|^7khS=m-A1X$XBzI-jEVk#w7O3?+UXbh~ul z1s3L@+j>f$n$iY+-KM2}PD!9!YOm-#+yJ_HS3vqVJ#WiJnDLpwCxo zq7oUPtB2S>7g+_m!ltIifpXBr|30kxy$5tLFUihYanOZt{M|cI2)f|K+?xzCpL%$` zb~M?3%JKrG#nw<6-+$#OGl+DDZ@$q%sEmfWF5GhsDg$TojrAB%>9cCRC3Co@mIrxPlFKkLl9xt=s(p_degbc2d(eI8WW_hqb&+(#;Y&O{*$Du1S&v$`6f z(n0rM@%b&Oq3``0pU60^e=k~FLZ$PI#NIp#8Q(;2{ngXtcY?N4T>LBPg6uD6W}woe z6Dir{LK^PzXTu(-j6^TJQ%RN|>%QMd8G_1`)j#pidqL-4v5>Er{2ox>y#VcRI_s>n&N}O?v(Ebe@BiFw zb0=RIdDlvO#z~o3Qi`$WCcCJmYgWI9AJV#}PD7VFB z=Rw`gEN%<^+hD;dac=YK4Go$f8o0mbp7Qg!a+llqXS_Z0q9*s}>ur)rhIq}A!fYNKiLzDzav4sC*5~X&#OgB2yi1J4!59bo<#MjSe&Zc~wL5wQMo1SV{A+&Q5mqP;iOzGQ8_*M{>87oM15qswbAASM8m2(k2p7IM8l~A48LF3 zh{ljJ0`W%kh^Ce&#K+(U;1-F+BI_oKJNJh+)TmyZIq<#PH+Q)*a-yjh3?u?;5WsMw>S0AD-bSMmvuSE|>`? z#vcyb{(cidOpZ$@C7e^so4~()#W>?nBlyFwO*1a)+? zeJ|w+1kc;eeP(+Uf`v9WZvVXl!H(hB$><2sM1SzO1@?ia{knv8$QiViCqrLE6@a#G z<8~r@321*N+OK%vHk*Y(hvir#N z(e7=wfuA8V<874f{|%zc#o9bmH$&9#ew5?JNr+}s)<`EQLv&gz;LNUn5OcmSLod>T z*!888ZdO+z&KtdYKf@W~LhbkKb2}iu{Oz05Ir|~*mV0C=1R%cGPx5&{F~r~fmd&9o zfcW?3ed?)Bkf8Pd{4D<*67;|lE$f?*2s>{0v~36yxjwWX^K~Hcs)8%2a}g46G+)*n z{|1TP6&LPJ`ax2}@OjzWOOVvHi&hcLfaJ8-Tb%(QdiqEoOf)3RIJ#;((TcZN-S~@oloW$I`rv8AA;2DfA+byJdkQi zsO^8h8q$=$zMCTHkfxpJ^Uq9!w9qf3n$W$F*0ngVncM+sqxf%*>+~UQdwW{?auuYv zefin4;R>Wrwem<*9D;P{hW)}B1f;_c4Ua~sL;4ca-D%t$(hs)j4M~ydFKZR3)p?Nq zwCdiV%oj-49-7;d+zaW}^kZ*DPC>fe4X*iXAl*OrQ58iC(o-F`zggXZ4E0~=mP9Ma z&`?(7Apsc$`IG*;OChszN6h>#Nyw~LTi5sVFJ#u8w7C^!2$?gKtxL~@Lnh#L+>g_{ zA#-kM6G4fGOvH7o)n0ob6ZK))`92n8ZWfQQMK(hwc=aP-P62+b-xp`KI|=V#s?vL=2@6;bt7aiu@|QJuZL`mdRo_YW5_TgDq(VMWeW@|O0_49fU;HG)1@f)wFLjm3_y5sFvfAcB zenxL-Mac;$Fr2PQUOWT^t%$~UgMU!ai%of?5)K8!)@D=xTqtb$bFt}!FBA^Nci%Bl zgu*eo_0oQ;pm5Wo+3`IE3TXk!e_nopLQR9!mRw&bs@Up9yh(#1`>6UkZ&fJHe`sF* zXd4u*UVh%QLIjF7w@>u@Btdb%z7LVq3&q1H!XFKnLh-y-;_iXtP)y!&IRE!6DAqow zm%T28;;6)-?5Dm^Qa$FYE1?Y~t?otN)1O0Wp?2G?$qFbf_e`>`u!Pd82~YcM2`Fu_ zkxQL$g_66C+R5n0P};pe;&J{*D4jMlZ@ZWXrGUcwFBjKA>E^`TIrWNAdW55Kjyh2K z1vPeS=ObVYvWjHNsYI!15#+9CLc>f1<-jtl+$G)H|ZW#LQWIWb z`jV?33ZF`V{!-=0cMCS?+{oHiRe8|gu1$$r7YzFM?FVw33DCR0%uyc?1AQ{IqHNzr zs7mZuH6-8+RjVZuach=B)u;P#-bEXzK4ch(#actPpyAkh(_2veF#SpJ>^!KJ=)TqI zSr65Uxp7;YVxii+sdnbaO&b2zEldvj{D>B zo;+ZLD4Pm-ZUN(3bLT>)As9E#+N~Ym_`R~ zwJ9foiR$QqtrlRe+itR)+`1rsXxId z*$cpukNZ_My&o*4cup3-8d%DfF{ArCNFC;GDOCWAef!X{yA`Bm0b_&VV9lwyowP9y zETehdiaQ&?GJ9Wd)};#8+NU!o?Dl}QVTscGBkEu|d`jp4FTSJbSkF^oQWZ-hMn70P zPxKmIr~}L6j7^-nHdvmivU`-vz&aM^L|4BAmd`>*nbdZ$j?bGvT9X0R8BIlT&LAnB z*EMYusS?Z^$T(*tg*Oa!f_3s+(1pZ(V4e7I+R^Sh`5tlczREf>j);b$vp87ZVaaOA zWc$6A2yD<{gXJz>8mjOaESIWvT8ffjIoE7ado4x!p!@2xe_(C9Y^-8S*1y$BmeM8$ z*5>BIntv9g?(|mS4P-wO*v7O#(i7Vzy6VBQYcly7Tm;s7-*uOM>4CLuxAT$TXTe&k zRFELVA;+n^-_9rmthp_n%~>ks_?hSJdz}cDrs94TM{=AL0i877k`+P-s)hBQPI+DgIG+11h(&fFu{olo2*9;LZp9%XFfR+xji`{Bx;+!!$3a$jnw4uk2m$?24m4!M5i zkB7g|1k>`u=f~S5z+7fx-1Wy7O!avE_7&thR%>kZFfKDA zx?bdh5kWhwZtw++3ug~48odifcdI zGF_?;vGrVZ+82ngxnX%BKkR)=>(~gJY+DA1J7;p3Y9^y;J`C{`P9 z{S*E3Z$2L!cB7XF7JT8T@92&y4|87%@3)M_0xQ~OPS+_^LdcB^9gNHe_tGQ^9Y$Y- z^aC##);t3r^nmIzFg~T!>zYi4x4;YSmo^CLb?dh#=E-1L_x;=wl57zPSm(XC1k9iP z+R2{Vb!$qZP*b7h?dQAX95M2%WwK1V_ut^@dX2(X7sw_u=tH5JUUkD|In`|IMU7Gt zSgz2?%_glRg=-e@Aan`cxEzpx{=8T1%Nd}qVrMZv z@_J7Tz9`Gh^kp#vw!IpOx@51j(9@#AT3Ptt?-KRYpK4p9RD8l3xGwLHV)4|w(yAh_ z+(YmxJA}QT$(feZ)RAT8e|2HX19O+sIou&KV8xXC$wIPqmRfAH3VGkF_ndVECI*Jw0r1Pf(`a}&Xve_1{sphKcH(cD(?K|GG$34&2C*6%{MiC+Q|5CUMh%E z`zwDqbMQepLOoX1!`>7!NwU0$GFlS*747m`+h|edYPwJguWI6rs`nhxPnE@&f<43(PTzPYjlub&L#g)l{-6Z{Y+$|Uu(P{6QZvtv{saX_kD z5=tS0q@B{SLDVS!sYTai$jVTfEO+%XPHctigw92%Ze~3i02{htpG0Qr^I?~D>F*<8 z9pic)pBpRy41d}bf-zWqi~_^~Zi{aa28_wkZ04ms zw2QntD7SOn5bL8#(T1B2SmIy8^W94u$LB7pE-w4!@Xyt)dL!dfu31J$q`{-lRg@t?&*k5ib2&-}s-7B5h2>26oH+$rHZ_46EujApLW zql@v5CWpZ0oQVPB7_!56@M)UHu&%G#h!1ZLAk)0&{gs+dm*Q$-o6>yWoMrX#fTsT^ z>7ll#wB;1z>L+5j5y3x5LF-hA89e^Bd#78{44*~Idif~1e_`FO6WdCZb{WW?R?(Rs z01xDuGo&BPTh`%TTt|=>Bj)rvsmZF^Y7|B(8h}M7bIYaDEdxc?zrhqE59{u-251py z16f4}@m&dKly9Sza~Yne2c_nv-#!Z`M^^P0$paYu$7@oJ5z zkf7m@#2jQJ5}>D(F1Odi1Sfk{zQxAy&?oWOpb&ob1oV$=L@vSq=B9^}@bC*vSQ~Z< z`vjN-9c?pX8iW50<2DySmGb4CHokzDP-BRaU-bSsMeH78HrxpFGF`x~Oh@{OW72n@ z!^rUqo@{;I4j9>(0+Zcsr!x@-J?CfQ_BhnZUqFxBY9E;@aFz13y(C6?4Lcq_LeIXr zSA-LymN++$uZfMRcf7j#L^V^UT)fWKaBRSp;HBlX%Zk|iOM0?sRzDHPF@sjZk9B1o z%13rc`gF=GhAwe1y=={9pA}0$2bSK{nqLb1Pe2KK4d0nwpk65y`ltuD0mP*K%K84# z2Rd=kCnj)yy8W~u%E7Xl<|}wby8VcSAb>;KM|lCyP(!_9gc~I17OF_W72uVPlnSn* z`U;5(Q%xmX71@D*-XI%hEcTH!rg_-i5+R$}B=_k|Va_K8)Ss&fVQROl9PD)#6`XXh zIR68aR_dtsbQerS*jBFBGxS%fcSGd#lWm7-<_L05-3>_goN`Hbgsbq-)(H@3WeD{aS1#tZh z-;lwv?KNP&Hd3U8SB@M;S>npD^z}(oELte_aQ=*w*|4=$h_mA10jO zjC>&A0H9k!$A>{bF}_$C)GG5|ASu;YG?T<`9>v`qlFvFagJQ_`S%uwYp@*RXU%Z{d`V{IAu=Lq{lh8d+_+A=N#(M*+ z3p;43;m%rP*(cq>Ne`(an)ZExW!Zb~zI-bb46i*1etkP)3sXHaaOAUOoIYP2dNW$< zFJ-3eoQY;W%VY^{v&GCiTy9~qlh^BPj1<8jVa{mdqb{+-AolX1~Xb zX@0nZWf0zD;~ez(caQFsP>+2xb(f!-WO;Pih5X%zA$$Uj=6* zAjc0Lo2-2m7OVtU###DgxlS|mTaH5_A*f8)TBT`K{T7v z_YHPT;hU?KcDVMo|51=TR%LH5t2eRSfZ>u+zBbEaNGuDl4_D|})<5(foY71Bi&_^34^$gj}YnM0QGAzb!|1T1fU+e4W z?pp?ikTY1L8$tkiKLkNNMkNz)Acrb2)4;8rF--Z?RoDRGfNW7wAfz?aTjmFKYC~!I z2%%t&$zS}h`VAothzB5q8al>ZiEJxTezP50?uaFrF+e8SIjaiZAxk0d--~y?KO_2a>#J9<`5y z*;in3M;=6kCxLEBMHRb>IDCNIep%ZDp?2!2SBhn=qs$c{&WHyCN3kx$AH zGjpx*!_ZqRD^vM#!sv-HC!6P^`oyz5sECPhq*dpPYt=sCOB0JyWqH)a(GS%ig5oz)}C{FZye<;&UMd9ZDQC+tcAL(mWjeDej7mIcL*d zskw%HinM`&EKQxw?vtqK>Hk!+JjT(?StUCu!)4Jnt0-``UP{q6khS!G7VQIfqx~^C zOTq(p8Ov(=m!tUef0T7h#52G@&)yn~(*EwCs;ZK8(O6zVEBo(%4=8I+4d#cFUX_3R z1ysgBnTG$fR5JQ|`#&N2Q(M~Ii)WRZw$L^ddYPT!P3ld08Yl*>!|%#s5JFz-*gluH zr^tVWLrUorW20A}dWx#$=)qJxT79Fx_men|ZalcPL$r7%R+3%BPlkR9Zy|<$qB>qx{gfYts^=DIfr=`i)J!+u zlW7@BNdqRU-4sd4|0p^3`hW};MO73VZ6#xg%zyUkk+m|XDJOOjkb5IW)Y-f}gq?-t zL%HAN5hzjDw0Mn`Fhla`v^!3V@el>7uAX1JvHJpu8L+m5F(s$9aeugBOUy(%$!(CM zpytX`;j&x1|Y+)zg7 zrLUkD#aZ2ZIBZ9TCVumXp@7MSENzHX-Hx;S;}lsjzz6SWnR-RgB#!4?N@dkGrpPDWO(8#0)=&BW(UZk65)d4&2VH;J zNYA9fI{7G+#Ir_ntK49iYZ{xW2S9-kOUv|9y;j1eX0@9&e$}wUyCavO%gg-pz}07Q zCtRC@H>-@ne2SG#7q71vO}%HoI|KG5(OG7V=9>wcyoZwFJxQ(AA{?tfJtOJGU&oJd zrsf~i>TBGc(^xM?p0U~igTMDUERzTN%^({lN#%Nk@gMsY+PdO~r-qo(JYk1PQ2!!751zQ2%V_{pZ-lZmbA`K zc*}J97#@MVb#Qn2>&x`VgMx5TR89e7bv+ouzbXd3mY%eTs}8Y(+kIoHmD+9XPHDvO zR(|^`pknydn|l1|q9tnHbLbm z8q?$45+^*=L^?Yl*@BMLzUeLuUX3$KM#pY)nLk24bcxvqIEkacaeku;`;fTsmX;75 zgu^WOnd_ey7OjN_d=~k%bnzy1J}v(h=hOD}iI44vZ~TJ{2ZJ0@Z^z%2>co+_M!A8> z2YJ*j9Pg)VRR}n@x`jn^T!{4|_RFV1rZf)+k&4<8%mdoY8==4PaI7i~UebzDTvk5% z``;q$5@n-c|E`r3&1|_$jm8}~oj0AHUd4>w)IVH^5{s0X17c(5IZ4rupI1TtV^@Ct zl%DBMuMmJvvM55+E`0?~lY>tXeWtU#f1yhd{p5S+UJ3UZ$VO!&G#9F+Gf*BR zVrKYu{_*p;U8>UUrE~+sozFa(to%po$$DX1Eas_y7wx`@33De-*yx;L3oQjMJ>c4e zo3=Nuus-yPrk*CQFe3TedcNgHbV)t)yl+K4g2mcH592kwA$Ma+|JXH+sk`~1Ci#wd z#n=_s-6ic(YmbdBByTEEn%1NLvY(os9GJibvKaL{)b+&U1gRQ?M{AN!L z6nQ5!=TWZy!=x+4KmIn};Yu-5Z}7fo1B%?((Vpc3a7b~`SVQll|0F131Bm_KaQ1V9 z&O6P;u-b>}scf2&64Dd6KYrW))%Cq$7M+Z2gtJ`);z5pbV<$w3SETq~NT(inQymE# zY)T~qh=;?*vzY*n$ooOohOp)X{(ThCrn1oz0+egbPHGwsjYa%FhB8#)g>PL>Kne~I zbEOgPzNWXXrTH#=q7Eze$;xnXVYk zpkotG6HEkeUDdvxIAYIa-P2=r37`ZhYmMn`;#aOgw#uE7B2Ee?IXSAoho9t@ept_? zDSv)D$@;<_dXjOFTh#rSPpaO?d9hORUk~g)Ov8q(H-9leeBlxmS;@Z@?i7!t^x4j2 z33~`_)PHG2>Wh6mr=bcne81|Aa&K`o0dR+_@r&n7@UOGBkSA6Jcxu~AT5He~8obJjo$O8lx07NwG$5*hM zkURg3%3Dkg)>$=|O9hV#zX;cn=MI@z4GQ@HTCzrgu-nN2MzdMUhJd72`wIv9^_*3a zYUQCCT~D7AHT+e;#Uo(XTx48C>oQSJ?PD+VCZXOJFHXV1OV%;= zjACYkJz)KIm*LX)oVy6}9{qRQ8b$?y$J)e9c*uR|;gez7{!_fQ_a+mAN}lm$U>f=3 zYe!r?F()*^>yPcvNNsJ#D5&q zdog+BxmZkbQ>P|lPbj`;{uUeapM|SyId&xHP@Zs|tWTl%3v;)Z-#G6-`Vx!kxWnG-(MUoR9yu5E+64`p(71)rQ^pQ<+@Xm2M%hX|pyI4e-y z)u(I$M2_kd)%^mA{3YsMndgtp%d-aTnDAh+b_ljb=onQqofsd|!k{cqM_*Syhgji@ zSsr2exMK{}LjY0`1s{Z&xE_{$nLahF^ef*nndHR!1 zzyU$%^Jl~TWe9`1F{m3?^9aQ@^^d|4e*=uO@jjUq82ao7#G1^ATfb+t={`nM_iJ%g zG$WLtI7%M3QwyiQJ~lanCqi6)W&fyGPaH}{S?*Cw624tqf<6@XMD4x%x2oe27Zo|& zb$tp=>dOjksO^&K33dIKOLRma3c*pzvy`*CVi~oc0OD{M{{?Y7HmU5sOG7Y%wg1b6 z+2=oDrOW#?O)1E0ia=})FSxbL;HG%#%>0^z7A;}LFw2^NjK^qvYqBKocqkBl@*;Lw z@11Rie3LM~b6ptXA;xJf|l5*4~dxi|G%Bb0xBi}Ccf zk>!q$6bnkMg*|zE!?1P?avCsNRUGQ6Eh+a!XtLl=cU15V;eYSb&;8{mF|V+PK1zF9 zlnUW@aHUxXv~hdhBcQ7CcM4^#IY{}25e}f_T`DR1S))qG}+nZ9gb(k zi9^>GJozdyV|Kl?KIcYbo%&KNam{Ycv{O6~nH^D-p2e;~Kk>tn#X)F6?OVoOp7Q+jWl5F%n(s;Q`8NSbt_pUNPT z!SlmyUSs9p)MWMh)6?w@VI}elx+7b=C3d|k-HCz=& z5Ae=2OmcE44i@=a={5{Zxc;=UJL+jy`#-%z zjkZq9=0$wRNd^i4MLj?{e<%FCr;cc`xsJ)3^V`Z|{vHvG=R#W&{#rMYr+@mKH=RzR zkIxzvjk%TQ@$gDFbZJfw)7O)aLs@i54&98pmR6C@t)3rv;-DLL@Ct~&&QYCSR%XH5 zn<^mI7pBDBYblK`{kk*IHWRybUPTaH-_;2+)f66Bu~>UOe~gK)SE{JWQ+~lQ8^%6t z6I{VDvyYg(E*3Ra)}DS^9rHA8>auE5mdGN(Y*wx))xs-c49Lp!-^VK&4l~a1f0Bti zaU@8}Pd<(lVfW;_8IZRc?+p8{IWRK4pgR^pV*1%EudH&%!gSyA;4016@pziAuy=`(=Z^8I_p&>$*xbG&+$!kU%?2*woy` z`aH)@bs)+p*2s9sz|?%IZ1!}RF$xzmCUy)@%v2^|9OfejjmBN93@Mf)j>gSkeI}T7 zDBdC^7qXgz7TVOX4@4;*qO3Zrn1<&T=slqgplUikRsPdA4QIc99BDN*l{tSpzOFGB zfe@tZ=jeWoW5W}A_~sr*Qg3agh1iZq*J&?1Ru@Tf9fuA(pZOXmV-V1G>x0O31M+%S zIifKwcJdQ>)n?^lF?x7fyDl0ix1XpnM8F#;KedJ*I52XK0X zox__l@O!Q!CM!-1tUgcH)Ar=GV(#CfkN4i%I5N7ZQ;LFbhp~gK5rD-hYOFiRTbrSD z1!u|IVwzXOO&FDPM7APoV2IM`%s*#%b2qG>>8AwOBEijM1*ZM-&JDu8WcFAgZeRQ71WU> zht);@U{Rnyc1qA1Mo4~4E8k=cPC2Qs>r*{_`I_NZZ0zUYH5-TA!470et4%kSn=u@F z2bK8BSQHiB=g6gP(HZxisL7f&?6p9!g{diFJ`|MaDdLLSq(6Ht6tnMD+>>v6v_n4= zfzm>jryMaebU34L!-2DQ(Xm#^iz8KH6y(uqEUmjA`TJi>0FLk5&WEuAz#L_F}}zXrrhe; zQItq%J`~d*_kBz%ZS2I;A4=R{8JWQy*O+jhF~8Beg3)lzi8B2gP5Pm6vXd>(bi{|q zAexCR!eIFO>s>C!2ns|fUd&QLT*qPiXCVE4)#Y%ix)t?%4i8W{p6aHX2B7S99vn(q zb>_bZ$3*UP`lkNIL-5#o$0f>|?;Qse{|2QXFjGSvX469$Th+M+T@cq~)E1#f;--t6At3-#j(AQ^K^2bQf+djyaiM6$vkZmWd zK_~FP7D7*jf1iJ9|H-2|DAU~ZZJly#nKdbH2~(mSVtcMU>r(#oWS6eZDt++vLTlZO zK}-CT0Kfm_FGX!mO`c|CmYlr24Ie&YmVin~Rv5Pg_S*HiSw7uSx5p_{9BsJ~sb?*4 zAHgiA^VER~_e)pgIQtZG==I#`Sj~X)mlMY}q%s4fq8&CrrxfbHWGxoy-ycJdo!m#~ z&glMrOcIIA>Iun!*#Xz4#Z0!g%=EkIQ75MI?{=+xO+44BU@pZ}Y%Q;`c|nW4u3+c( zf<^f1ayKtvv32kwDCp57TSS)!z?bSn8R{_8bnN_(z3%sofN>ik+Josm({<3FUQo-w zklkkDvrPVZgoj;|KiOj@Wu3u|qfEm+Q>f&SSjG*6KcS89tEst=81;4Pna25EBHJnP zP7X}5h&9j0Mlsdkwc5L0VmTv;bG7ik}_IolI=j2C^x6aX#WcON$^Wh0x`SKuhPKH17J(ZPKAa;s$_oV-5>wRm% zR=Z5kWj*==3b}OdoK}JOow?QhiHbVaI;8cM@l%k&jDc7uGU>mTn0^q^jLGS{>Q5cX zeuV`e&?u7iSs;}tV>s6DqDyej#WV76-7FbBynNiCN8N%G0$xWo-Pm^a&>=rfzOUT? zUU3oG<}_=`qL}x|(S2^~1zT6ChpAsfk3B3Mi^|q8JaN$RG=nwl$8`a>%Lh{F7N@eb zBT2JDdwNJ8zEG79yye8vi)!{ywwOvGnh3-q2e3n5$j5ea7AI-0N%`#rncm zz}X5SZhi47b6@lNSE<~LLL+Nrfsgm3z9efy_i!aYtKmcB;cEM7%PDU%Q=bEBp_Tf7n;wAC(R94{gYN$8tn$Co*+tai z!IO%qPn9-vleIzKZ%LP4F0%7Z2}?JIZOTh-d!tIHg}53!cNBS}fsEPOEVId<*Y|qf zyvA6phq_;(*0%w36VlvVhUT3C40Bumxo2!|%`!H>6}PI1b5O5)X-5Vv3VhU9E%hMw z9|<(7yLDQk-fS>O|0WSH{k+;I!M$~`ahU@ig(yV^KKT2gPNMI9BAb*^SQLn}r#l5e zez+I^r_~90pD4y(lee3~-58(2K*f(w!2Z8kyN@kkazdN>PS?<^yyo7AtV0IJw^6f= zyAri_wds>N;s&%fE1+Vmr3WFNl_4p3fnE{M>oX$bCaG_3Pw>OR8s)6=6=)oOjT%n`(FDqi1|X` zl#|c{v0?|zl3(>(WhHXVmTJ_BC7Vh$y^^%rG+xoH<)r)? z`hJCT&T+puKJ`kyw#k3}7bPAi$c1r#-j%V?tiMPYx^y5jJY}+}^NC9)(hIg%lvfxX zFHHB=m=`|(U*^UxD1%)TIgPKQk82Mm( zpped5q|i07+tSTyH#9ejrzyI}rs%8X)-rZv+~zu+GBb8;zO+naYch6Vza1~t8>_h+ zuRNA`gGgsPc|o$~=0dZb?=Sd9os2SVS7?!rgGFvZ;UNURHiN0oP9TOs}_J&R_4H_UnU9XH(N)F@Vdkt*M6N zVOqNzE?0X!tiRnjpd()eY-F{OwSZz&Zvq>V^)g+mZ*w=WuUF9IBluwg8d$)3w`OumDr7#v9$6l zpBptO183f!eD6dJG|&_Z8&VuKGS$1ax{V?1j5?Mzc3np)inf`+HR1q8{WZET*0G97 z{|l-sV`WZPR0gMw)fkvdD-*wDb#7JAlq!7}@WVSCa2H_=N!#N9*E3|n5JGHSFV&o&@9JUc=b=Vr^%8I>7G>uNW6JRVk&zuCK@ zGlH^n>}zrclv__w8mqzE1(o`pBPwBXX^$o6J72HrCjFK$kiz8N!;0TLHLrA!{c6DH z$hqvdL7CbnGE_hRvxleSY&-fGM3nO30Z)A_a~a5P7Q)@mKx6tM zdNrBnCuBkac*0Nv_}BH5`p4oQZn;4az%&-?AH?XdpqJgwHg{N0bCc(DjQpXTob=0~ ziyuIsq`lYC*uH51$pWPudmxOAh&Om`daG1q@q?sf z>U_MZ8nyM$ff!A%(Ct0KNGB>_xJgg^Qy1VxQWG=p&HMqM_xD`v;#@%fG4`Mcdp!K) z8Hro96?~I+SBzw4WxkKhv%r2;7?FR_?hy~q3^(d|!iW z##W%2y)OE!?CCv5O)-tFrDwaAAbuhCky~n>x3uyFxNq;rKb)6(Z`sr%k^v93AI-|o z(*E~g9{W`1C~#ik!`wa1TkrJ4?5JUax0NgP6((GCeN$RD1c_Qf+cy!`hnuvPTR(p} zB{BD_FcmK!TVXn)Al73(;STW9?RKdzA0gg6<-d+T>h(ZD0V+s1!xP(ua*!m2{b#Mg zn3A@&nd(I8w54vQ;Wwb$WhvGO3^c^|gPW_2@xU_%N$ctBFkc@r$a6O0uY-6$&BMxOw^c*jbXT$o>5`$rw<)!u0silrT(~->EUrs=7+$&sRSRE zJF|>>H1nYa*K~1?&}!@Z#UUyxnsME;dk-aEbCq}7y2SzNPHqKQUWTwa1?1_yP9frK z^|?976G@8S*?TV=dY>?9@aAw?W|a^i{$H@6k;Yua&go7qJ2;yOSZnMly#Jj!a2-Dp zQ|L5rLF^GIIi)srd9a{AGMLlzT+4&w8a+2>mq|wry!~dqCjRMW*6JP%6GDaVUZW0b zvnK!rZi~+aBK#x4fDjuqrY}6+*&XjMeg|s1Sb%3ZByhPVXV+eVv(HY;NTr{;yv03` zge*eJq4v8jH7CJWY*c$g*ivNoRrp^HHka5Bll!Y*Bp;I`mcv5o1DXu2FukKrY!<13M}cOCK8? zZf}>e=Oxk*J z5~i{b0EuPZqW6juRCQE*!LWaSgld*7J(gQnM&=LQpVBX&)&IXpXHz+ZO({ac!Oy|_Up+zAgP z*@I5sIg;y;hQEj6<^IG{y`saM9!uYrVa@g>75Sjb@P2YM!|mKKfEK@DENjbU`ojWS zb-jH$HhnUT)M1iUv*+CoqP$lC+X4iFAM6_w>=i7(Xf~v>4Ysq$Fn_Zt!YOQuBGQv@ z`L3@=P@qzx!DK_@04^4@qgP;38u@Piw*30~N(nQ5AAXOd>@vLwk)2PkIFWf1p}|7`R-oOx9v2ln{R6o zg61@b(d}9g!1lZIr=81iK_>$~%=6^m(*OGwPoRJXLn-yU7@yKEe3J0*gPl@8%Q1lE z&bxEDpww4o^hcBrV&T4A)&`ihR{giS?-Eo`Ja=LM-lq@XKzs8`BDIATw`9vV*#M!n zrx2>jA1UsC5UP|xjIsVtacKmSV6YuI`6dMfWX`=)9 ziCs0*ayvLe;Em~aL(6suwyQdgIk>!0U|a~xZWqcZpoYRmH zH=L`8R@>~YBlNDfB)lCq;_dsP&XmkC1Ynhw$VY>ZUGaG~HSuiQd_ryeWRxgd5KdBx zb+O>bhM=iJ3ekl+zgG=H5-`uLX&CeNre@VlnmxjnAx-zcuZUezrQs_*Gx zdE@hstUR3SZpY3uUiva_l+0Ym3;5Kx%7k?&x>|o`(=m~Z-nnzFi`C|AYVux z-W$2&4bspbGW^~UZ#RS5<Gy&@nJACp{$f>2EJnT(w(^AaChR^AF|7$zc z5;B!nDA5|+pMSgl{?AXpx+m~QTG@l#%(2KZyv1PtZPgzq_}TJZ>BHq3$+8_h3o%X- z_Y>m{0D42zw_Rv_pc zWgSm_X3d8E{fVE6?MkcJbpr919rna+yKny0@YHtjq?)=pq5n(P8y3N0p*Ef3N-sB+ ztze-alI|cyznU^e$h}+c>q`lCu-NSVMA@jni3ngR_x+H!&TDXZVf+y8<%u)#?~RWM zaWThjTqVN8>vq>k$H(3bXJ_s5COGFff=kvrOoZVMrqZ`MOlP8Es%#z)E@%HnKPnMM zI7WsUr9CGq=Z3GGYvMQ`vpuD2^pzq)l$^>tZ8y;jUgHU;FSD+G%I{Oi@&7qm($kd5w@L0WfodXCy)dwvKVi-TNvUlMw zp>Fi*mpR3xA_%krs>WDx+B)w-4bdn<{G!%@Y=&qX;TPKHDA~b&t`F!%;ac0dQ=Du{ zV@Qq>^5VHHh!^cVK)eO!?cCP7yp;-!4f|g{RZCF#$8W-nHwnznd9v7+B+GEE_Ss7; zS#G@no9Tph>j)c_jcx|n2EqE{^?7qS;m;Nz@>aBa{la55gEG+6UGsz1w&!y2QV37) zE8$!tC)w+abZjFcW_i(M0m0+Cwn*a!#3it%dRs#sb(XMNx9@s z_@UM2fHryf2ndA39n<^t1Y6{eRNd?FsKEXGsPo~`a6SeKeClN{Nm+uwj`Y(XNPw)jMzU@@5cM*TNvZ|$?|m*HQ?p7r$$$^OzNjDz-H zVCG0?QOP{RAJDH>F8D;%(IUb8$cr2UZOKS-I^P?l_J_L%zak))1|^dw z+D(tULly)RI(;sKFSNx++J`GWvbR1oh$YX(Dl17maMkP*`@owoA3F5Z?SC4vC8*WG zQjPp}o+*8O*=@3ry%z6K6((ufvQQ!a;+~K}UVPT`4YwHO>$%VOZFy?@W=~*1STG&%_$Pe(@59&Zqd6nsLvVjirwRdqUbW;m)Rfl9zN&Eh>6)j1@ zs7XhTpiXO{8Oc#TtYwYh!xa_JtXmB0ikTP2WQ`EguIZP8hmYlPcRT;G$b$8(`PXd9 zGE zEIURqWYd6pI}G{h@Y12LP~Mv=i|0)$j?vN&$YT0G%EYPGjL6Kz=8i>%Z#fX zUJ9p+Mzce;NX3i!|52z*=c4lthN8McTtRUesm@oqk8x-<8^w+P3sZ_RxSbI7-EKd=%B_NKKZKS?lZJon>19p^{*8hB44Kb{E&2O z5&1Gsede3uY*OFhRy^81m(-WJ+4}A2B=uRR-e#>IAoUJs1CMQXBA;(PJ~3mB1*x-5 z?dpErNj|{NvfNqJi2$6kZQka5uaA& zl4@ro?Y;6cq|T8EzsKetVOadKi<6FoQHXSvILSRKKoj^#G}O z=6g-&N(rfyoF4w6C4p2X2c1scT}>*Fy;<=3qy?$0uShWtW|PX!i&rY<$C0Y*Q*%_# z#F6Smt(5xjain$!%P4;ekPmBw%R03S$%mX1cjccrkdI$a-00HqBp<&`?rqDkAoadg z`g83XN&WMbPu;tHNPVZplWz-lk}qLz%&I6K(%?R+JY>ZJ(vZ>nF2%@#G<-YPI#8ZL zzAA=Z7&BgmG#c#tZo-i#jo+oaW;SBn6uZj<#E{qR}x>-EN>ibZcp zk3zw@t4D@OPgtpmII$o-Ne^0=?mtL+s_P$Kkd7n08wXPj#Q%`qZRdAth&7TvE!9+k z6_@l)ZSWpSTtxaQyRt1?Wk~;4p2uC&QZnGwm7f1xo(ybwE!q}ZN`C8IyqA4-Ir*KG zer8E+1Nog3*rJjpO9q>|c*|^B$lpXRr=r1u3 ze3^aBa5aeKKO7yI`3J;?gb6F39tUx`>6OmG^Fe%L>|F61ks!XQYg~81SP-vmK4Mz4 z86=d*AB$pjkTlFb{HyyUNba(mlbN9clHuFaGDp1y$(ZEwhrZSzxsSiR(k~4pZ{+Vh z?V1OYj}|{a(7ga8Te;@PPP_mqqA4^M*BYDcA)b~iwp6@EgZNC!q$oxaoe)f+~2 zDa_q+br;CWtIob3?g+BcJ7g4wE`gkw&;H^iqd;z?UhbwE zP=wn`QgG7uZpx=kDmo z!2Vok`0m{%{CSI8bMo46;L6>NcZ^8^uIaZp@6biSwcYei#?l{uKFD4m_!19FqtCc5 zACm}5yv(cj?|Xuhhm6w>w`x%GUBA6Idpjt_(;u4)VnOM9hmO+Wy`VH)k{ps@49Y%X zWsOlf-3F~=`#dDrRxmEh zblxef5lSf2teHv-SOWp|e_MN+>1;FphX6<>;2Y&CX?-vuF0)NPB{2u*b;Q!sedVk6f&{f|&)>qvebZ4c_ zA}b<6H+KVnLC55Buz7X`rTX3hx9RWRIZIJU%Gtjd-6w-C^59mey zxYBI08}t%?d^p)S74$L`$L<<60D9S92PHNh2fdt}Bh5PFLGM=a*xo@o(0i8sarKT2 z&}*sKmbsxD^!h_uPCj-6edYZdYghP!zUt+SV9qe;8znsKl{Z3d2^!}$7xYbkk81X@ z1$~lr#y{W;=+A^^owZv*-)$XHRXz;*UX5SNiakJo^^)&7lqTqJ>r)H1E(QH4Q9zgf zCeYvavQ1-g66hzNAFnC;2>Mw^`UE|5K)=(mp=x*_)&1k|A6 zhtvWPNW;cZtq2fsoO^twY(b#5cVA*08w5s!Z?4wUk1TJi|i!(Y7iu6kNc+R2ZEC`mGoR*gCLDNGr`Uj1XpO~ z^-e+%+-X@&d3A!|5o@zbx&#Q`9B9wVu>?W0YKS%G2MBskJZo9k0D=Llaie4SAo#l= z^SPxx2*vtJ%KZjGD5-Ef5Ogp;}_ zZS=GP;pA7@oU?2Y+JuQcb?^b9qwL($=aWF_Y^&{+eG-HVR&fuDszB&!U^&ZRDhQXE z+-Y8j>#bDWH~+o{2z`tFE`Lo2;g+oudek6Z>oxYtrkgLM`4SAy5ll^{&uNN2un2VqiKPorcX2#?wo z6`N&&@RWB)qMs)S(--uaEN%edd5xsL&YK{-YWzoX-w#xmt?5&AK$yFJ=Kb_iYUI1^ z5gpMH9nldT(GeZd5gpMH9nldT(f@z__q%Q8cW#RQ@0>*FRKZf?AJtAMgS;%N>~fwFkz^^l4I%CO;JS)(LSdgmlGADII+ z?nmO6?d3qJM+Lfw!huqmDRrtl0w``*>*Za6K(W0uIG-(nQd}L!-LMoW`NuCUR;>X_ z&cnWtm;xnB&kgtX14`!5!5jVpprjh!EFOpjN}~C!c+5(m#NwJ8dfbRe6mo9y*9IaQ zXiu7TGM9+D_E`K(QX``8vz*f+yospZ?Nstx0TETU-IUNWAfgv``{%m6C8CE{Z)Upj zh^QzsFGSpyh;HcDEh~FQM3-3sr80&@bS~e@HS#VIWu3S^H^3NmPS(0WW`4=r`%`0x zC})Xgs!BW&-D=>qyXz3qKPk4YYt9hSXT=!HFSm(kuwTAS_ibut+V}k-Tx;>;$dN7 zC<_1niG-s5K~+KSqdf<;0trMr7AZnI2Kk6~BWf%10Bs)xZK@L4h&(~&BRBB%v8XAi zQxG$>nde?YJ0DqsNFv)2oTK(2+K4)i^-ymjX=ukGw#Z(DdG=joF4|vF-BFjLenRy{ zH9(Az9mqMP9_Ix93M|2V9dG`9kYpT>L1oT){XZpwj;H7vRQvyy2IK#ehy$XD@R0@h z9wCCEqQwy{oNGs&h%ozZ#<4ZRygnOQigr4(0_~NEJ`#*D@yJ1zq5TGxiRBCAAdYc; zdLH786yjVIYB7Q_pwYh+^QSZP4aLOn(Z4A}QNNIAG}j=^GcO>|ac&Fp1#K>}6>TQ& z1IRHP??KHI+mOjfD8j@k9*MxuDxtDaOHngXolx;Cv>(Fc787gc zSu)6bw5<@#6RH3iLS`T~2$RE1{xWM$KxJ}^iA4*t4mpnVOipo7r=wy%QmfD&hcGoz zjxg`>M@Hjoi%?AwJ7g1%T@g2=6UUd4YGfy3f^&I@29k|q+zWjQZA(-p&bJV0Bo!G% z9wI&XS`{LN_FLo{+L$ktF@pI>F*%5JK;e05rart8i~+^OFB0dNd_Rq#?Ic865kwZ8}Us0GV z6cbmhTbil4UR1`PNvIeL`Ul#-k$ni}Fva+eP5r0Opie2re^^^I?wdlt)2k64+WP-V zH5%)HK7%lMjs1eccu?pYia8&XgJ;p+jmqQ&6Kf_{n4DUV%IvobZOls={Z0Kuu;%Cx zRAzl9=W#C-^9;-@V|pC+Gm5F-$7qM6VlLC@LkjDG!hE2ae8SJuQ*kVh97UME#Pp6J zw6PCRSJ7r-gT0QPg)lvp$q(jwZ9vR%%;Xc(yO?~!K20(Gk?93kgA~*IFb=dD!sIF- ziD)Y$o(L0HrjIcGY(g8?rJ3BsI;U#UX8y?<<}!_+qp@yi?DaI0la2`XK9LpxH2R#venw$EQ`pmJ<{4N^6jL)8Cz@H0xeKw@DW?BoAEKDv zg=^3lLmKmhX3m8%qOtxd<}P7+GWKYS$ph>UG~-*Q*6>cDuuoE0Gc;54OaWjVXvVJ@ e2y?e#>?pjWD5l>s=fxgG4gU`m!9^r;XdM7kK9gVo diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/gene.dat b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/gene.dat deleted file mode 100644 index 31c42d1c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/gene.dat +++ /dev/null @@ -1,4441 +0,0 @@ -5641 3 1 -0.79346 -5641 3 2 -0.72282 -5641 3 3 -1.1507 -5641 3 4 -1.2593 -5641 3 5 -1.1293 -5641 3 6 -1.7204 -5641 3 7 -1.8905 -5641 3 8 -1.8289 -5641 3 9 -1.2071 -5641 3 10 -1.13 -5641 3 11 -1.4441 -5641 3 12 -1.406 -5641 3 13 -1.1594 -5641 3 14 -1.1599 -5641 3 15 -1.2878 -5641 3 16 -0.85163 -5641 3 17 -0.92525 -5641 3 18 -0.78914 -5641 3 19 -1.3369 -5641 3 20 -1.5664 -5641 3 21 -1.2087 -5641 3 22 -1.6093 -5641 3 23 -1.7531 -5641 3 24 -1.758 -5641 3 25 -1.6204 -5641 3 26 -1.8012 -5641 3 27 -1.9443 -5641 3 28 -2.1064 -5641 3 29 -2.1235 -5641 3 30 -2.0531 -5641 3 31 -1.8445 -5641 3 32 -2.1241 -5641 3 33 -1.9314 -5641 3 34 -1.9622 -5641 3 35 -1.713 -5641 3 36 -1.7509 -5641 3 37 -1.6296 -5641 3 38 -1.3865 -5641 3 39 -1.7515 -5641 3 40 -1.3763 -5641 3 41 -0.94793 -5641 3 42 -1.2154 -5641 3 43 -1.3163 -5641 3 44 -1.4855 -5641 3 45 -1.7739 -5641 3 46 -1.1058 -5641 3 47 -1.9344 -5641 3 48 -1.5353 -5641 3 49 -1.0951 -5641 3 50 -1.7092 -5641 3 51 -1.4659 -5641 3 52 -1.2541 -5641 3 53 -1.5393 -5641 3 54 -1.5075 -5641 3 55 -1.3383 -5641 3 56 -1.5323 -5641 3 57 -0.76116 -5641 3 58 -0.020631 -10888 3 1 -2.9237 -10888 3 2 -2.3027 -10888 3 3 -2.5953 -10888 3 4 -2.6431 -10888 3 5 -2.9831 -10888 3 6 -1.9908 -10888 3 7 -1.6091 -10888 3 8 -1.9276 -10888 3 9 -1.7989 -10888 3 10 -1.979 -10888 3 11 -1.7403 -10888 3 12 -1.7994 -10888 3 13 -2.4304 -10888 3 14 -1.7085 -10888 3 15 -3.0015 -10888 3 16 -2.2597 -10888 3 17 -2.5687 -10888 3 18 -2.9699 -10888 3 19 -2.6344 -10888 3 20 -2.4365 -10888 3 21 -2.1965 -10888 3 22 -2.7078 -10888 3 23 -2.4194 -10888 3 24 -2.2789 -10888 3 25 -2.5334 -10888 3 26 -2.868 -10888 3 27 -2.7163 -10888 3 28 -2.2781 -10888 3 29 -2.2212 -10888 3 30 -1.7868 -10888 3 31 -1.3285 -10888 3 32 -2.3139 -10888 3 33 -2.1579 -10888 3 34 -1.3323 -10888 3 35 -1.1929 -10888 3 36 -1.3453 -10888 3 37 -0.81118 -10888 3 38 -0.61914 -10888 3 39 -0.5528 -10888 3 40 -1.433 -10888 3 41 -3.2909 -10888 3 42 -2.4675 -10888 3 43 -2.3171 -10888 3 44 -2.3398 -10888 3 45 -1.9107 -10888 3 46 -2.4868 -10888 3 47 -1.9697 -10888 3 48 -1.9728 -10888 3 49 -2.222 -10888 3 50 -1.2862 -10888 3 51 -2.2955 -10888 3 52 -1.826 -10888 3 53 -1.412 -10888 3 54 -1.9418 -10888 3 55 -0.91909 -10888 3 56 1.2252 -10888 3 57 1.7191 -10888 3 58 2.5376 -2916 1 1 0.012875 -2916 1 2 0.54291 -2916 1 3 0.39255 -2916 1 4 1.0531 -2916 1 5 1.8504 -2916 1 6 2.6788 -2916 1 7 3.258 -2916 1 8 3.2666 -2916 1 9 2.8947 -2916 1 10 2.5465 -2916 1 11 2.5699 -2916 1 12 1.7148 -2916 1 13 1.4883 -2916 1 14 1.1486 -2916 1 15 0.95165 -2916 1 16 0.60407 -2916 1 17 1.0956 -2916 1 18 -0.39961 -2916 1 19 -1.4592 -2916 1 20 -0.97673 -2916 1 21 -1.0708 -2916 1 22 -1.4571 -2916 1 23 -1.5132 -2916 1 24 -1.5329 -2916 1 25 -2.1501 -2916 1 26 -1.9411 -2916 1 27 -2.0356 -2916 1 28 -2.1392 -2916 1 29 -2.2907 -2916 1 30 -2.1826 -2916 1 31 -2.1945 -2916 1 32 -1.9167 -2916 1 33 -2.3744 -2916 1 34 -2.1768 -2916 1 35 -2.6607 -2916 1 36 -2.0388 -2916 1 37 -1.8542 -2916 1 38 -2.0915 -2916 1 39 -1.7683 -2916 1 40 -1.3575 -2916 1 41 -1.8819 -2916 1 42 -2.0613 -2916 1 43 -1.8365 -2916 1 44 -1.8292 -2916 1 45 -1.9567 -2916 1 46 -1.6103 -2916 1 47 -1.8209 -2916 1 48 -1.11 -2916 1 49 -1.4996 -2916 1 50 -0.98583 -2916 1 51 -1.4011 -2916 1 52 -1.4696 -2916 1 53 -1.2322 -2916 1 54 -1.1479 -2916 1 55 -2.2176 -2916 1 56 -2.191 -2916 1 57 -2.4955 -2916 1 58 -2.8947 -4602 1 1 0.6648 -4602 1 2 0.71952 -4602 1 3 0.69399 -4602 1 4 1.0951 -4602 1 5 1.351 -4602 1 6 2.0205 -4602 1 7 2.0547 -4602 1 8 2.1753 -4602 1 9 2.3976 -4602 1 10 2.1094 -4602 1 11 2.0807 -4602 1 12 1.742 -4602 1 13 1.625 -4602 1 14 1.4568 -4602 1 15 1.0819 -4602 1 16 1.6432 -4602 1 17 1.1584 -4602 1 18 1.2409 -4602 1 19 0.3143 -4602 1 20 0.58087 -4602 1 21 0.58163 -4602 1 22 0.39639 -4602 1 23 0.094816 -4602 1 24 -0.1501 -4602 1 25 -0.29 -4602 1 26 -0.20552 -4602 1 27 -0.78168 -4602 1 28 -0.65061 -4602 1 29 -0.36965 -4602 1 30 -0.6619 -4602 1 31 -1.1946 -4602 1 32 -1.1276 -4602 1 33 -1.1635 -4602 1 34 -1.3549 -4602 1 35 -1.1001 -4602 1 36 -1.2154 -4602 1 37 -1.3714 -4602 1 38 -1.6283 -4602 1 39 -1.4729 -4602 1 40 -0.67314 -4602 1 41 -0.33132 -4602 1 42 -0.39986 -4602 1 43 -0.33167 -4602 1 44 -0.83143 -4602 1 45 -0.89797 -4602 1 46 -0.75742 -4602 1 47 -0.55735 -4602 1 48 -0.41359 -4602 1 49 -0.38334 -4602 1 50 -0.82859 -4602 1 51 -0.25305 -4602 1 52 -0.88527 -4602 1 53 -0.7697 -4602 1 54 -0.49219 -4602 1 55 -1.5014 -4602 1 56 -1.7083 -4602 1 57 -1.9584 -4602 1 58 -1.5321 -4795 3 1 -1.7925 -4795 3 2 -1.9611 -4795 3 3 -1.976 -4795 3 4 -1.9186 -4795 3 5 -1.9686 -4795 3 6 -2.2917 -4795 3 7 -1.9044 -4795 3 8 -1.6386 -4795 3 9 -2.0419 -4795 3 10 -1.6748 -4795 3 11 -2.1899 -4795 3 12 -1.1541 -4795 3 13 -2.0625 -4795 3 14 -2.2392 -4795 3 15 -1.9201 -4795 3 16 -1.7523 -4795 3 17 -1.8647 -4795 3 18 -2.2165 -4795 3 19 -1.8356 -4795 3 20 -1.7325 -4795 3 21 -1.5851 -4795 3 22 -1.6729 -4795 3 23 -1.3059 -4795 3 24 -1.3808 -4795 3 25 -1.2628 -4795 3 26 -1.7965 -4795 3 27 -1.7009 -4795 3 28 -1.5518 -4795 3 29 -1.6073 -4795 3 30 -1.2234 -4795 3 31 -0.91518 -4795 3 32 -0.76311 -4795 3 33 -1.1418 -4795 3 34 -1.381 -4795 3 35 -0.91266 -4795 3 36 -1.1619 -4795 3 37 -1.2233 -4795 3 38 -1.1135 -4795 3 39 -0.85427 -4795 3 40 -1.2815 -4795 3 41 -1.3147 -4795 3 42 -1.0157 -4795 3 43 -1.4202 -4795 3 44 -1.2221 -4795 3 45 -1.1709 -4795 3 46 -2.1365 -4795 3 47 -2.0055 -4795 3 48 -1.93 -4795 3 49 -1.8437 -4795 3 50 -1.5225 -4795 3 51 -1.9601 -4795 3 52 -0.4449 -4795 3 53 -0.94623 -4795 3 54 -0.65994 -4795 3 55 0.57873 -4795 3 56 1.2035 -4795 3 57 1.6094 -4795 3 58 1.5759 -7269 1 1 1.0482 -7269 1 2 1.3086 -7269 1 3 1.6183 -7269 1 4 1.6691 -7269 1 5 2.0618 -7269 1 6 2.4132 -7269 1 7 2.3888 -7269 1 8 2.3113 -7269 1 9 2.5517 -7269 1 10 2.5471 -7269 1 11 2.629 -7269 1 12 2.0421 -7269 1 13 1.8806 -7269 1 14 1.4594 -7269 1 15 1.5782 -7269 1 16 1.4648 -7269 1 17 1.3702 -7269 1 18 0.93122 -7269 1 19 0.26492 -7269 1 20 0.58102 -7269 1 21 0.1621 -7269 1 22 -0.089822 -7269 1 23 -0.34356 -7269 1 24 -0.55483 -7269 1 25 -0.82152 -7269 1 26 -0.94071 -7269 1 27 -1.5533 -7269 1 28 -1.5751 -7269 1 29 -1.3185 -7269 1 30 -1.733 -7269 1 31 -1.57 -7269 1 32 -1.4701 -7269 1 33 -1.1053 -7269 1 34 -1.4502 -7269 1 35 -0.59434 -7269 1 36 -0.7028 -7269 1 37 -0.52149 -7269 1 38 -1.155 -7269 1 39 -1.1425 -7269 1 40 -0.70915 -7269 1 41 -1.1731 -7269 1 42 -0.7073 -7269 1 43 -0.85389 -7269 1 44 -1.2348 -7269 1 45 -1.0732 -7269 1 46 -0.64193 -7269 1 47 -0.94265 -7269 1 48 -0.32552 -7269 1 49 -0.48599 -7269 1 50 -0.49183 -7269 1 51 -1.0672 -7269 1 52 -0.92053 -7269 1 53 -1.1667 -7269 1 54 -1.3988 -7269 1 55 -1.5481 -7269 1 56 -1.9106 -7269 1 57 -2.0763 -7269 1 58 -2.2972 -1078 1 1 0.79292 -1078 1 2 0.9523 -1078 1 3 1.3392 -1078 1 4 1.4554 -1078 1 5 1.8893 -1078 1 6 2.2347 -1078 1 7 2.2338 -1078 1 8 2.1101 -1078 1 9 2.1066 -1078 1 10 1.9989 -1078 1 11 2.0791 -1078 1 12 1.5794 -1078 1 13 1.3979 -1078 1 14 1.0516 -1078 1 15 1.2115 -1078 1 16 0.97424 -1078 1 17 1.0062 -1078 1 18 0.20274 -1078 1 19 -0.20633 -1078 1 20 -0.20398 -1078 1 21 -0.46979 -1078 1 22 -0.93601 -1078 1 23 -0.74061 -1078 1 24 -0.67741 -1078 1 25 -0.95927 -1078 1 26 -1.047 -1078 1 27 -1.372 -1078 1 28 -1.6804 -1078 1 29 -1.5373 -1078 1 30 -1.6602 -1078 1 31 -1.1499 -1078 1 32 -1.5344 -1078 1 33 -1.7358 -1078 1 34 -1.2336 -1078 1 35 -0.93484 -1078 1 36 -1.103 -1078 1 37 -1.0708 -1078 1 38 -1.1203 -1078 1 39 -0.61519 -1078 1 40 -1.3955 -1078 1 41 -0.49976 -1078 1 42 -0.7862 -1078 1 43 -0.57059 -1078 1 44 -0.90059 -1078 1 45 -0.56299 -1078 1 46 -1.1129 -1078 1 47 -0.64078 -1078 1 48 -0.48783 -1078 1 49 -0.62334 -1078 1 50 -0.26929 -1078 1 51 -0.50791 -1078 1 52 -0.73632 -1078 1 53 -0.50362 -1078 1 54 -1.0207 -1078 1 55 -1.7806 -1078 1 56 -1.4889 -1078 1 57 -1.7085 -1078 1 58 -1.6877 -1745 1 1 0.84809 -1745 1 2 1.376 -1745 1 3 2.1127 -1745 1 4 1.9301 -1745 1 5 2.6181 -1745 1 6 2.6503 -1745 1 7 2.2885 -1745 1 8 1.8839 -1745 1 9 0.92443 -1745 1 10 0.92023 -1745 1 11 1.1347 -1745 1 12 1.1064 -1745 1 13 0.96041 -1745 1 14 1.2286 -1745 1 15 0.88536 -1745 1 16 0.92572 -1745 1 17 0.80553 -1745 1 18 -0.076896 -1745 1 19 -0.31587 -1745 1 20 -0.25326 -1745 1 21 -0.46411 -1745 1 22 -0.65685 -1745 1 23 -0.92195 -1745 1 24 -0.64383 -1745 1 25 -1.0379 -1745 1 26 -1.216 -1745 1 27 -1.3579 -1745 1 28 -1.2745 -1745 1 29 -1.3508 -1745 1 30 -1.4414 -1745 1 31 -1.031 -1745 1 32 -1.5037 -1745 1 33 -1.7109 -1745 1 34 -1.1026 -1745 1 35 -1.2745 -1745 1 36 -1.3144 -1745 1 37 -1.7634 -1745 1 38 -1.5522 -1745 1 39 -1.004 -1745 1 40 -1.1416 -1745 1 41 -0.89195 -1745 1 42 -1.0741 -1745 1 43 -1.1459 -1745 1 44 -0.89495 -1745 1 45 -1.1294 -1745 1 46 -0.67528 -1745 1 47 -0.72801 -1745 1 48 -0.53878 -1745 1 49 -0.1955 -1745 1 50 -0.3293 -1745 1 51 -0.55041 -1745 1 52 -0.9832 -1745 1 53 -0.55637 -1745 1 54 -0.81295 -1745 1 55 -1.7716 -1745 1 56 -1.5527 -1745 1 57 -1.8052 -1745 1 58 -2.1866 -13124 3 1 -2.4971 -13124 3 2 -2.5373 -13124 3 3 -2.4136 -13124 3 4 -2.2974 -13124 3 5 -2.2307 -13124 3 6 -2.1471 -13124 3 7 -1.8089 -13124 3 8 -1.7506 -13124 3 9 -1.6594 -13124 3 10 -1.5625 -13124 3 11 -1.5174 -13124 3 12 -1.7709 -13124 3 13 -1.6885 -13124 3 14 -2.0027 -13124 3 15 -2.1217 -13124 3 16 -1.7514 -13124 3 17 -1.8223 -13124 3 18 -1.7503 -13124 3 19 -1.1565 -13124 3 20 -1.4987 -13124 3 21 -1.4364 -13124 3 22 -1.5246 -13124 3 23 -1.1547 -13124 3 24 -0.85294 -13124 3 25 -0.97046 -13124 3 26 -0.4414 -13124 3 27 -0.27693 -13124 3 28 -0.29009 -13124 3 29 -0.58615 -13124 3 30 -0.53882 -13124 3 31 -0.65488 -13124 3 32 -0.35291 -13124 3 33 -0.64562 -13124 3 34 -0.70815 -13124 3 35 -0.68461 -13124 3 36 -1.0094 -13124 3 37 -1.0507 -13124 3 38 -1.071 -13124 3 39 -0.84101 -13124 3 40 -1.0441 -13124 3 41 -0.85233 -13124 3 42 -1.2883 -13124 3 43 -1.3098 -13124 3 44 -1.3918 -13124 3 45 -0.62437 -13124 3 46 -1.2385 -13124 3 47 -1.7198 -13124 3 48 -0.84072 -13124 3 49 -1.1826 -13124 3 50 -0.90406 -13124 3 51 -0.99757 -13124 3 52 -0.92359 -13124 3 53 -0.88185 -13124 3 54 -0.76023 -13124 3 55 -0.36434 -13124 3 56 -0.029165 -13124 3 57 0.66863 -13124 3 58 0.66612 -7397 3 1 -2.935 -7397 3 2 -2.8941 -7397 3 3 -2.595 -7397 3 4 -2.9575 -7397 3 5 -2.7484 -7397 3 6 -2.6137 -7397 3 7 -2.4772 -7397 3 8 -2.2623 -7397 3 9 -2.5435 -7397 3 10 -2.301 -7397 3 11 -2.513 -7397 3 12 -1.4675 -7397 3 13 -2.4154 -7397 3 14 -2.374 -7397 3 15 -1.6868 -7397 3 16 -2.2708 -7397 3 17 -2.1148 -7397 3 18 -2.0927 -7397 3 19 -2.3797 -7397 3 20 -2.2327 -7397 3 21 -1.9034 -7397 3 22 -2.0437 -7397 3 23 -1.9306 -7397 3 24 -1.309 -7397 3 25 -1.7931 -7397 3 26 -1.8825 -7397 3 27 -1.3705 -7397 3 28 -1.288 -7397 3 29 -1.8199 -7397 3 30 -1.627 -7397 3 31 -2.1355 -7397 3 32 -2.1393 -7397 3 33 -2.6322 -7397 3 34 -1.9628 -7397 3 35 -2.3385 -7397 3 36 -2.0218 -7397 3 37 -2.2874 -7397 3 38 -2.0252 -7397 3 39 -1.8153 -7397 3 40 -2.3615 -7397 3 41 -3.1811 -7397 3 42 -2.5212 -7397 3 43 -2.5742 -7397 3 44 -2.3961 -7397 3 45 -2.9316 -7397 3 46 -2.8931 -7397 3 47 -2.3292 -7397 3 48 -2.4506 -7397 3 49 -2.6527 -7397 3 50 -2.3129 -7397 3 51 -2.6529 -7397 3 52 -2.3822 -7397 3 53 -2.1897 -7397 3 54 -2.8689 -7397 3 55 -2.0812 -7397 3 56 0.32188 -7397 3 57 1.3789 -7397 3 58 1.8227 -6866 3 1 -2.2204 -6866 3 2 -2.1197 -6866 3 3 -2.0283 -6866 3 4 -1.7947 -6866 3 5 -1.1938 -6866 3 6 -1.2809 -6866 3 7 -1.6594 -6866 3 8 -1.86 -6866 3 9 -1.9558 -6866 3 10 -2.0185 -6866 3 11 -2.2633 -6866 3 12 -2.0099 -6866 3 13 -2.1414 -6866 3 14 -2.0686 -6866 3 15 -1.6393 -6866 3 16 -1.4278 -6866 3 17 -1.5052 -6866 3 18 -1.2922 -6866 3 19 -1.1492 -6866 3 20 -1.1816 -6866 3 21 -1.3116 -6866 3 22 -1.4018 -6866 3 23 -1.133 -6866 3 24 -1.1776 -6866 3 25 -0.92822 -6866 3 26 -0.83618 -6866 3 27 -0.33538 -6866 3 28 -0.55901 -6866 3 29 -0.47966 -6866 3 30 -0.53473 -6866 3 31 -1.1856 -6866 3 32 -1.8321 -6866 3 33 -1.8238 -6866 3 34 -1.3965 -6866 3 35 -1.2294 -6866 3 36 -1.5218 -6866 3 37 -0.51136 -6866 3 38 -1.1256 -6866 3 39 -0.99192 -6866 3 40 -1.402 -6866 3 41 -0.62486 -6866 3 42 -0.38479 -6866 3 43 -0.7805 -6866 3 44 -0.80139 -6866 3 45 -0.66597 -6866 3 46 -0.3756 -6866 3 47 -1.0019 -6866 3 48 -0.47293 -6866 3 49 -0.67972 -6866 3 50 -0.47457 -6866 3 51 -0.65573 -6866 3 52 -0.26031 -6866 3 53 -0.3687 -6866 3 54 -0.56012 -6866 3 55 0.75234 -6866 3 56 0.54986 -6866 3 57 1.0801 -6866 3 58 1.0315 -1744 3 1 -2.2727 -1744 3 2 -2.6149 -1744 3 3 -2.0871 -1744 3 4 -2.1624 -1744 3 5 -1.8717 -1744 3 6 -1.8731 -1744 3 7 -1.6399 -1744 3 8 -1.5838 -1744 3 9 -1.2569 -1744 3 10 -1.2291 -1744 3 11 -1.105 -1744 3 12 -1.3092 -1744 3 13 -1.1471 -1744 3 14 -1.4367 -1744 3 15 -2.0917 -1744 3 16 -1.1912 -1744 3 17 -1.2659 -1744 3 18 -2.0436 -1744 3 19 -1.7859 -1744 3 20 -1.7299 -1744 3 21 -1.8774 -1744 3 22 -2.3822 -1744 3 23 -2.2119 -1744 3 24 -1.8291 -1744 3 25 -2.0212 -1744 3 26 -1.6686 -1744 3 27 -1.7595 -1744 3 28 -1.7209 -1744 3 29 -1.7115 -1744 3 30 -1.5953 -1744 3 31 -1.7217 -1744 3 32 -1.4696 -1744 3 33 -1.4471 -1744 3 34 -1.0806 -1744 3 35 -1.5074 -1744 3 36 -1.2352 -1744 3 37 -1.3727 -1744 3 38 -1.1228 -1744 3 39 -1.2331 -1744 3 40 -1.1951 -1744 3 41 -0.29478 -1744 3 42 -1.3315 -1744 3 43 -1.5556 -1744 3 44 -1.0823 -1744 3 45 -0.87551 -1744 3 46 -1.3008 -1744 3 48 -0.19811 -1744 3 49 -0.45936 -1744 3 50 -0.27704 -1744 3 51 -0.34483 -1744 3 52 -1.0286 -1744 3 53 0.4811 -1744 3 54 0.72541 -1744 3 55 1.9851 -1744 3 56 2.2727 -1744 3 57 2.4818 -1744 3 58 2.0396 -4294 3 1 -2.7475 -4294 3 2 -2.5094 -4294 3 3 -2.427 -4294 3 4 -2.0922 -4294 3 5 -2.0596 -4294 3 6 -1.7612 -4294 3 7 -1.7399 -4294 3 8 -1.7083 -4294 3 9 -1.3598 -4294 3 10 -1.2163 -4294 3 11 -1.4821 -4294 3 12 -1.9341 -4294 3 13 -1.6585 -4294 3 14 -1.788 -4294 3 15 -1.7361 -4294 3 16 -1.4663 -4294 3 17 -1.5466 -4294 3 18 -1.3588 -4294 3 19 -1.4329 -4294 3 20 -1.4414 -4294 3 21 -1.5503 -4294 3 22 -1.8134 -4294 3 23 -1.6691 -4294 3 24 -1.7187 -4294 3 25 -1.9935 -4294 3 26 -1.792 -4294 3 27 -1.4476 -4294 3 28 -1.4945 -4294 3 29 -1.9585 -4294 3 30 -1.5737 -4294 3 31 -1.5261 -4294 3 32 -1.5481 -4294 3 33 -1.5125 -4294 3 34 -1.6459 -4294 3 35 -2.3148 -4294 3 36 -1.6525 -4294 3 37 -2.5251 -4294 3 38 -2.5696 -4294 3 39 -2.1973 -4294 3 40 -1.3856 -4294 3 41 -1.7097 -4294 3 42 -1.4321 -4294 3 43 -1.2026 -4294 3 44 -1.5029 -4294 3 45 -1.0703 -4294 3 46 -1.4015 -4294 3 47 -1.3826 -4294 3 48 -1.3404 -4294 3 49 -1.4686 -4294 3 50 -1.4942 -4294 3 51 -1.2091 -4294 3 52 -0.93255 -4294 3 53 -1.3839 -4294 3 54 -1.5552 -4294 3 55 -1.3285 -4294 3 56 -0.068597 -4294 3 57 0.63569 -4294 3 58 0.78854 -6020 2 1 -0.72444 -6020 2 2 -0.76817 -6020 2 3 -1.004 -6020 2 4 -0.8603 -6020 2 5 -0.78179 -6020 2 6 -0.41719 -6020 2 7 -0.53807 -6020 2 8 -0.53256 -6020 2 9 -0.67077 -6020 2 10 -1.1659 -6020 2 11 -1.1104 -6020 2 12 -1.1296 -6020 2 13 -1.2649 -6020 2 14 -1.1946 -6020 2 15 -1.1507 -6020 2 16 -0.75183 -6020 2 17 -0.72139 -6020 2 18 -0.47571 -6020 2 19 -0.48232 -6020 2 20 -0.36371 -6020 2 21 -0.16425 -6020 2 22 0.15927 -6020 2 23 0.32528 -6020 2 24 -0.044916 -6020 2 25 0.63644 -6020 2 26 0.35244 -6020 2 27 0.34664 -6020 2 28 0.63471 -6020 2 29 0.31018 -6020 2 30 0.41415 -6020 2 31 0.13964 -6020 2 32 0.11521 -6020 2 33 0.50556 -6020 2 34 -0.17909 -6020 2 35 0.54732 -6020 2 36 -0.34159 -6020 2 37 0.54648 -6020 2 38 0.25057 -6020 2 39 -0.56087 -6020 2 40 -1.5746 -6020 2 41 -0.37623 -6020 2 42 -1.3944 -6020 2 43 -1.4232 -6020 2 44 -1.7043 -6020 2 45 -1.586 -6020 2 46 -1.2329 -6020 2 47 -2.2449 -6020 2 48 -1.5766 -6020 2 49 -1.3626 -6020 2 50 -1.9903 -6020 2 51 -1.7058 -6020 2 52 -1.0173 -6020 2 53 -1.3015 -6020 2 54 -0.76902 -6020 2 55 0.3175 -6020 2 56 0.74246 -6020 2 57 0.87454 -6020 2 58 1.1087 -12558 3 1 -1.9098 -12558 3 2 -2.2504 -12558 3 3 -2.3542 -12558 3 4 -1.7173 -12558 3 5 -1.7936 -12558 3 6 -1.925 -12558 3 7 -1.935 -12558 3 8 -1.8081 -12558 3 9 -2.1531 -12558 3 10 -1.4244 -12558 3 11 -1.848 -12558 3 12 -1.1934 -12558 3 13 -1.1576 -12558 3 14 -2.0252 -12558 3 15 -2.3111 -12558 3 16 -1.9399 -12558 3 17 -1.9278 -12558 3 18 -2.3593 -12558 3 19 -2.3845 -12558 3 20 -2.3021 -12558 3 21 -1.9214 -12558 3 22 -2.2228 -12558 3 23 -1.9805 -12558 3 24 -2.235 -12558 3 25 -2.041 -12558 3 26 -2.2422 -12558 3 27 -1.6459 -12558 3 28 -1.9747 -12558 3 29 -2.1425 -12558 3 30 -2.3564 -12558 3 31 -1.0808 -12558 3 32 -1.5839 -12558 3 33 -1.0907 -12558 3 34 -1.8253 -12558 3 35 -1.0533 -12558 3 36 -1.059 -12558 3 37 -1.3892 -12558 3 38 -0.93776 -12558 3 39 -0.8534 -12558 3 40 -1.434 -12558 3 41 -1.2886 -12558 3 42 -1.2159 -12558 3 43 -1.3142 -12558 3 44 -0.68278 -12558 3 45 -0.047018 -12558 3 46 -0.47469 -12558 3 47 -1.3302 -12558 3 48 1.0768 -12558 3 49 0.59085 -12558 3 50 -0.84664 -12558 3 51 -1.1913 -12558 3 52 -1.0452 -12558 3 53 -1.5946 -12558 3 54 -1.5418 -12558 3 55 -1.2384 -12558 3 56 -1.0844 -12558 3 57 -0.98738 -12558 3 58 -1.1304 -4550 3 1 -3.778 -4550 3 2 -3.7013 -4550 3 3 -3.4236 -4550 3 4 -3.8591 -4550 3 5 -4.2063 -4550 3 6 -4.177 -4550 3 7 -4.1718 -4550 3 8 -4.2285 -4550 3 9 -4.428 -4550 3 10 -4.0572 -4550 3 11 -4.1206 -4550 3 12 -3.5574 -4550 3 13 -4.2401 -4550 3 14 -4.12 -4550 3 15 -3.6542 -4550 3 16 -3.2404 -4550 3 17 -3.3338 -4550 3 18 -3.7621 -4550 3 19 -3.5018 -4550 3 20 -3.1215 -4550 3 21 -2.4137 -4550 3 22 -2.9459 -4550 3 23 -2.9292 -4550 3 24 -2.2957 -4550 3 25 -2.3441 -4550 3 26 -3.0366 -4550 3 27 -2.4036 -4550 3 28 -2.335 -4550 3 29 -2.5374 -4550 3 30 -1.9795 -4550 3 31 -2.1784 -4550 3 32 -2.461 -4550 3 33 -2.5887 -4550 3 34 -2.3384 -4550 3 35 -2.1609 -4550 3 36 -2.1472 -4550 3 37 -1.7959 -4550 3 38 -1.1212 -4550 3 39 -1.6657 -4550 3 40 -3.1536 -4550 3 41 -2.9683 -4550 3 42 -4.4004 -4550 3 43 -4.2828 -4550 3 44 -4.8756 -4550 3 45 -4.5265 -4550 3 46 -4.3486 -4550 3 47 -3.9635 -4550 3 48 -4.9043 -4550 3 49 -4.0765 -4550 3 50 -3.6007 -4550 3 51 -4.404 -4550 3 52 -3.9554 -4550 3 53 -3.1806 -4550 3 54 -3.6648 -4550 3 55 -3.014 -4550 3 56 1.7581 -4550 3 57 2.3147 -4550 3 58 3.1392 -17907 3 1 -2.2106 -17907 3 2 -2.3216 -17907 3 3 -2.6404 -17907 3 4 -2.0838 -17907 3 5 -2.368 -17907 3 6 -2.4199 -17907 3 7 -1.9293 -17907 3 8 -2.1786 -17907 3 9 -2.0776 -17907 3 10 -1.9324 -17907 3 11 -2.4206 -17907 3 12 -2.0579 -17907 3 13 -2.4495 -17907 3 14 -2.2969 -17907 3 15 -2.9193 -17907 3 16 -1.3253 -17907 3 17 -2.2407 -17907 3 18 -1.8839 -17907 3 19 -1.8358 -17907 3 20 -2.2464 -17907 3 21 -1.952 -17907 3 22 -2.048 -17907 3 23 -1.7441 -17907 3 24 -1.308 -17907 3 25 -1.9929 -17907 3 26 -2.0884 -17907 3 27 -1.9483 -17907 3 28 -1.7738 -17907 3 29 -1.7972 -17907 3 30 -1.2237 -17907 3 31 -1.4877 -17907 3 32 -1.2919 -17907 3 33 -1.5378 -17907 3 34 -0.95394 -17907 3 35 -1.4501 -17907 3 36 -0.81707 -17907 3 37 -1.2893 -17907 3 38 -0.96707 -17907 3 39 -0.20339 -17907 3 40 -1.6816 -17907 3 41 -0.51592 -17907 3 42 -2.4516 -17907 3 43 -2.0551 -17907 3 44 -1.5648 -17907 3 45 -1.4546 -17907 3 46 -1.7113 -17907 3 47 -1.1216 -17907 3 48 -1.9126 -17907 3 49 -1.5625 -17907 3 50 -1.7861 -17907 3 51 -2.0267 -17907 3 52 -1.2595 -17907 3 53 -1.7043 -17907 3 54 -1.2201 -17907 3 55 -1.2529 -17907 3 56 0.5353 -17907 3 57 0.87361 -17907 3 58 0.60546 -9772 3 1 -0.38784 -9772 3 2 -0.71272 -9772 3 3 -0.58395 -9772 3 4 -0.58439 -9772 3 5 -0.45742 -9772 3 6 -1.0198 -9772 3 7 -1.4433 -9772 3 8 -1.5137 -9772 3 9 -1.4051 -9772 3 10 -1.0695 -9772 3 11 -1.1391 -9772 3 12 -1.6012 -9772 3 13 -0.86499 -9772 3 14 -1.2874 -9772 3 15 -1.066 -9772 3 16 -0.60874 -9772 3 17 -0.59527 -9772 3 18 -0.12706 -9772 3 19 -0.55067 -9772 3 20 -0.46257 -9772 3 21 -0.31258 -9772 3 22 -0.52803 -9772 3 23 -0.54244 -9772 3 24 -0.67885 -9772 3 25 -0.76104 -9772 3 26 -1.0072 -9772 3 27 -1.6537 -9772 3 28 -1.8046 -9772 3 29 -1.3995 -9772 3 30 -1.5469 -9772 3 31 -2.078 -9772 3 32 -1.8745 -9772 3 33 -1.673 -9772 3 34 -2.0578 -9772 3 35 -1.5238 -9772 3 36 -1.5538 -9772 3 37 -1.2933 -9772 3 38 -1.7632 -9772 3 39 -1.6508 -9772 3 40 -1.5172 -9772 3 41 -0.64418 -9772 3 42 -1.155 -9772 3 43 -0.99452 -9772 3 44 -1.0034 -9772 3 45 -1.0511 -9772 3 46 -1.0011 -9772 3 47 -0.97482 -9772 3 48 -1.0189 -9772 3 49 -0.8697 -9772 3 50 -0.66891 -9772 3 51 -1.0655 -9772 3 52 -0.10921 -9772 3 53 -0.42596 -9772 3 54 -0.52896 -9772 3 55 0.17541 -9772 3 56 -0.50596 -9772 3 57 -0.48372 -9772 3 58 -0.62951 -2088 3 1 -0.54359 -2088 3 2 -0.65546 -2088 3 3 -0.74479 -2088 3 4 -0.61564 -2088 3 5 -0.86965 -2088 3 6 -1.2706 -2088 3 7 -1.2448 -2088 3 8 -1.1392 -2088 3 9 -1.3068 -2088 3 10 -0.9382 -2088 3 11 -1.4724 -2088 3 12 -0.84077 -2088 3 13 -1.2435 -2088 3 14 -1.1408 -2088 3 15 -1.284 -2088 3 16 -1.0574 -2088 3 17 -1.2419 -2088 3 18 -1.1373 -2088 3 19 -1.0329 -2088 3 20 -0.99262 -2088 3 21 -0.70482 -2088 3 22 -0.82487 -2088 3 23 -0.55322 -2088 3 24 -0.52084 -2088 3 25 -1.2845 -2088 3 26 -1.0749 -2088 3 27 -1.0902 -2088 3 28 -1.1671 -2088 3 29 -0.75964 -2088 3 30 -0.87079 -2088 3 31 -0.52594 -2088 3 32 -0.017274 -2088 3 33 -1.9159 -2088 3 34 -0.18597 -2088 3 35 -0.61599 -2088 3 36 -0.70537 -2088 3 37 -0.60526 -2088 3 38 -0.66251 -2088 3 39 -0.32633 -2088 3 40 -1.3035 -2088 3 41 -0.92662 -2088 3 42 -1.6479 -2088 3 43 -1.2818 -2088 3 44 -0.7126 -2088 3 45 -0.92059 -2088 3 46 -1.8693 -2088 3 47 -1.3506 -2088 3 48 -1.0264 -2088 3 49 -0.99432 -2088 3 50 -0.59921 -2088 3 51 -1.2595 -2088 3 52 -0.24357 -2088 3 53 -0.43002 -2088 3 54 0.083507 -2088 3 55 -0.033828 -2088 3 56 0.46972 -2088 3 57 0.21572 -2088 3 58 0.97072 -10417 1 1 0.97492 -10417 1 2 1.0717 -10417 1 3 1.2324 -10417 1 4 1.2593 -10417 1 5 1.685 -10417 1 6 2.0139 -10417 1 7 2.2429 -10417 1 8 2.2013 -10417 1 9 2.2248 -10417 1 10 2.0139 -10417 1 11 2.4604 -10417 1 12 1.5907 -10417 1 13 1.3883 -10417 1 14 1.1179 -10417 1 15 1.0831 -10417 1 16 0.96327 -10417 1 17 1.0842 -10417 1 18 0.4454 -10417 1 19 -0.024521 -10417 1 20 0.38816 -10417 1 21 0.15865 -10417 1 22 -0.21118 -10417 1 23 -0.48191 -10417 1 24 -0.46717 -10417 1 25 -0.47723 -10417 1 26 -0.40083 -10417 1 27 -0.55778 -10417 1 28 -0.74242 -10417 1 29 -0.37738 -10417 1 30 -0.63417 -10417 1 31 -0.48312 -10417 1 32 -0.65404 -10417 1 33 -0.79972 -10417 1 34 -0.57369 -10417 1 35 -1.3658 -10417 1 36 -1.0051 -10417 1 37 -1.5472 -10417 1 38 -1.461 -10417 1 39 -1.4412 -10417 1 40 -0.87002 -10417 1 41 -1.143 -10417 1 42 -0.9128 -10417 1 43 -0.66796 -10417 1 44 -0.83015 -10417 1 45 -1.0066 -10417 1 46 -0.93714 -10417 1 47 -1.127 -10417 1 48 -0.72119 -10417 1 49 -0.76209 -10417 1 50 -0.69445 -10417 1 51 -0.62477 -10417 1 52 -0.68916 -10417 1 53 -0.63353 -10417 1 54 -1.2612 -10417 1 55 -1.6555 -10417 1 56 -1.7668 -10417 1 57 -1.9891 -10417 1 58 -1.6532 -3966 3 1 -1.8578 -3966 3 2 -1.8985 -3966 3 3 -2.1196 -3966 3 4 -1.7855 -3966 3 5 -2.0354 -3966 3 6 -1.9596 -3966 3 7 -1.0689 -3966 3 8 -1.4064 -3966 3 9 -1.4869 -3966 3 10 -1.5505 -3966 3 11 -1.8055 -3966 3 12 -1.7008 -3966 3 13 -2.0745 -3966 3 14 -1.83 -3966 3 15 -1.9553 -3966 3 16 -1.6857 -3966 3 17 -1.9451 -3966 3 18 -2.0127 -3966 3 19 -1.868 -3966 3 20 -1.5625 -3966 3 21 -1.9624 -3966 3 22 -1.9119 -3966 3 23 -1.9749 -3966 3 24 -1.6513 -3966 3 25 -1.6689 -3966 3 26 -1.7814 -3966 3 27 -1.8707 -3966 3 28 -1.6933 -3966 3 29 -1.5086 -3966 3 30 -1.5261 -3966 3 31 -0.16813 -3966 3 32 -0.73535 -3966 3 33 -0.9151 -3966 3 34 -0.40462 -3966 3 35 -0.48592 -3966 3 36 -0.39817 -3966 3 37 -1.0161 -3966 3 38 -0.24353 -3966 3 39 0.10998 -3966 3 40 -0.78803 -3966 3 41 -0.52916 -3966 3 42 -1.0944 -3966 3 43 -0.90698 -3966 3 44 -0.36188 -3966 3 45 -0.64918 -3966 3 46 -1.019 -3966 3 47 -1.2155 -3966 3 48 -0.96465 -3966 3 49 -0.85491 -3966 3 50 -0.78928 -3966 3 51 -0.81293 -3966 3 52 -0.64781 -3966 3 53 -0.78736 -3966 3 54 -0.48355 -3966 3 55 0.39936 -3966 3 56 2.5213 -3966 3 57 1.2019 -3966 3 58 -0.070349 -8606 1 1 0.86305 -8606 1 2 0.73865 -8606 1 3 1.0447 -8606 1 4 1.2953 -8606 1 5 2.0084 -8606 1 6 2.0611 -8606 1 7 2.4025 -8606 1 8 2.2306 -8606 1 9 2.5086 -8606 1 10 2.5674 -8606 1 11 2.5404 -8606 1 12 2.4038 -8606 1 13 2.5399 -8606 1 14 2.3899 -8606 1 15 2.7886 -8606 1 16 2.5011 -8606 1 17 3.0747 -8606 1 18 1.3217 -8606 1 19 0.092391 -8606 1 20 0.19143 -8606 1 21 0.16806 -8606 1 22 -0.58406 -8606 1 23 -0.57016 -8606 1 24 -0.56912 -8606 1 25 -1.2479 -8606 1 26 -0.89981 -8606 1 27 -1.0149 -8606 1 28 -1.0868 -8606 1 29 -0.71627 -8606 1 30 -0.88356 -8606 1 31 -0.76246 -8606 1 32 -1.1053 -8606 1 33 -1.6964 -8606 1 34 -1.0147 -8606 1 35 -1.4891 -8606 1 36 -0.85 -8606 1 37 -0.49243 -8606 1 38 -0.65674 -8606 1 39 -0.26814 -8606 1 40 -0.26076 -8606 1 41 -0.26291 -8606 1 42 -1.0745 -8606 1 43 -1.047 -8606 1 44 -0.69626 -8606 1 45 -0.4487 -8606 1 46 -0.44785 -8606 1 47 -0.084818 -8606 1 48 0.48961 -8606 1 49 0.48843 -8606 1 50 0.8026 -8606 1 51 1.0675 -8606 1 52 -1.6418 -8606 1 53 -0.35512 -8606 1 54 -0.57959 -8606 1 55 -1.7847 -8606 1 56 -1.4698 -8606 1 57 -1.5665 -8606 1 58 -2.2529 -14722 1 1 0.35404 -14722 1 2 0.20618 -14722 1 3 0.45756 -14722 1 4 0.8705 -14722 1 5 1.0183 -14722 1 6 1.4905 -14722 1 7 1.5019 -14722 1 8 1.6652 -14722 1 9 1.6308 -14722 1 10 1.5357 -14722 1 11 1.6721 -14722 1 12 1.1555 -14722 1 13 0.95899 -14722 1 14 1.4377 -14722 1 15 1.0575 -14722 1 16 1.1023 -14722 1 17 1.0022 -14722 1 18 0.64513 -14722 1 19 0.32201 -14722 1 20 0.16842 -14722 1 21 0.034455 -14722 1 22 -0.090135 -14722 1 23 -0.4606 -14722 1 24 -0.6877 -14722 1 25 -0.71392 -14722 1 26 -0.65058 -14722 1 27 -0.66523 -14722 1 28 -0.54618 -14722 1 29 -0.82859 -14722 1 30 -0.86747 -14722 1 31 -1.1282 -14722 1 32 -1.7028 -14722 1 33 -0.99836 -14722 1 34 -1.2961 -14722 1 35 -0.56379 -14722 1 36 -0.99903 -14722 1 37 -0.92851 -14722 1 38 -1.3723 -14722 1 39 -1.4075 -14722 1 40 -1.2459 -14722 1 41 -0.344 -14722 1 42 -0.98982 -14722 1 43 -1.0033 -14722 1 44 -1.2384 -14722 1 45 -1.1863 -14722 1 46 -1.175 -14722 1 47 -1.6308 -14722 1 48 -1.5412 -14722 1 49 -1.0187 -14722 1 50 -1.07 -14722 1 51 -1.2885 -14722 1 52 -0.80448 -14722 1 53 -1.2782 -14722 1 54 -1.06 -14722 1 55 -0.99544 -14722 1 56 -1.1429 -14722 1 57 -1.0468 -14722 1 58 -1.5905 -5711 3 1 -1.8451 -5711 3 2 -2.0949 -5711 3 3 -2.2672 -5711 3 4 -2.3024 -5711 3 5 -1.708 -5711 3 6 -1.6447 -5711 3 7 -1.8971 -5711 3 8 -2.0226 -5711 3 9 -2.0946 -5711 3 10 -1.5226 -5711 3 11 -1.8791 -5711 3 12 -1.7306 -5711 3 13 -1.4611 -5711 3 14 -1.8045 -5711 3 15 -1.4203 -5711 3 16 -1.6994 -5711 3 17 -1.5835 -5711 3 18 -1.5248 -5711 3 19 -1.8595 -5711 3 20 -1.7914 -5711 3 21 -1.5399 -5711 3 22 -1.6443 -5711 3 23 -1.2062 -5711 3 24 -1.2156 -5711 3 25 -1.1959 -5711 3 26 -1.0254 -5711 3 27 -1.0114 -5711 3 28 -1.1722 -5711 3 29 -1.3578 -5711 3 30 -0.97305 -5711 3 31 -0.67548 -5711 3 33 -0.47264 -5711 3 34 -0.29619 -5711 3 36 -0.4131 -5711 3 37 -0.74616 -5711 3 38 -0.8259 -5711 3 39 -1.3027 -5711 3 40 -1.2955 -5711 3 41 -1.5403 -5711 3 43 -1.5539 -5711 3 44 -1.6726 -5711 3 45 -1.9712 -5711 3 46 -1.2532 -5711 3 47 -2.3553 -5711 3 48 -1.6145 -5711 3 49 -1.8022 -5711 3 50 -1.9177 -5711 3 51 -2.2349 -5711 3 53 -1.8872 -5711 3 54 -2.1151 -5711 3 55 -1.6481 -5711 3 56 -1.0895 -5711 3 57 -0.11998 -5711 3 58 0.82429 -15634 1 1 1.0031 -15634 1 2 0.89532 -15634 1 3 0.18505 -15634 1 4 2.6189 -15634 1 5 4.174 -15634 1 6 4.8863 -15634 1 7 3.6903 -15634 1 8 2.5679 -15634 1 9 -0.5557 -15634 1 10 -1.3196 -15634 1 11 -0.91746 -15634 1 12 -1.4929 -15634 1 13 -3.0427 -15634 1 14 -2.378 -15634 1 15 -1.7144 -15634 1 16 -1.8245 -15634 1 17 -2.2278 -15634 1 18 -3.3753 -15634 1 19 -3.026 -15634 1 20 -1.982 -15634 1 21 -2.4781 -15634 1 22 -2.6698 -15634 1 23 -3.1143 -15634 1 24 -2.7738 -15634 1 25 -2.6823 -15634 1 26 -3.3244 -15634 1 27 -3.3223 -15634 1 28 -3.4011 -15634 1 29 -3.223 -15634 1 30 -2.8073 -15634 1 31 -2.6632 -15634 1 32 -2.5265 -15634 1 33 -3.0611 -15634 1 34 -2.5951 -15634 1 35 -2.7975 -15634 1 36 -2.1079 -15634 1 37 -2.3848 -15634 1 38 -1.8038 -15634 1 39 -1.6098 -15634 1 40 -2.2318 -15634 1 41 -0.7009 -15634 1 42 -2.8811 -15634 1 43 -2.5688 -15634 1 44 -3.0257 -15634 1 45 -2.6368 -15634 1 46 -2.5873 -15634 1 47 -2.6786 -15634 1 48 -3.1108 -15634 1 49 -2.387 -15634 1 50 -2.0863 -15634 1 51 -3.1362 -15634 1 52 -2.7512 -15634 1 53 -2.326 -15634 1 54 -2.3103 -15634 1 55 -2.4037 -15634 1 56 -2.8056 -15634 1 57 -2.865 -15634 1 58 -3.0461 -18404 3 1 -1.7452 -18404 3 2 -1.621 -18404 3 3 -1.85 -18404 3 4 -1.8237 -18404 3 5 -1.9213 -18404 3 6 -1.7725 -18404 3 7 -2.039 -18404 3 8 -2.2283 -18404 3 9 -2.1167 -18404 3 10 -2.0428 -18404 3 11 -2.4272 -18404 3 12 -1.881 -18404 3 13 -2.1481 -18404 3 14 -2.0699 -18404 3 15 -1.8183 -18404 3 16 -2.1091 -18404 3 17 -2.4895 -18404 3 18 -2.4064 -18404 3 19 -1.8772 -18404 3 20 -2.0244 -18404 3 21 -2.001 -18404 3 22 -2.0067 -18404 3 23 -2.7635 -18404 3 24 -2.2521 -18404 3 25 -2.5578 -18404 3 26 -2.676 -18404 3 27 -2.5018 -18404 3 28 -2.4063 -18404 3 29 -2.9202 -18404 3 30 -2.4185 -18404 3 31 -1.2527 -18404 3 32 -1.4148 -18404 3 33 -1.9804 -18404 3 34 -1.5345 -18404 3 35 -1.6964 -18404 3 36 -1.4762 -18404 3 37 -1.3606 -18404 3 38 -0.64196 -18404 3 39 -1.4378 -18404 3 40 -2.0101 -18404 3 41 -2.5716 -18404 3 42 -2.6758 -18404 3 43 -2.0284 -18404 3 44 -2.2688 -18404 3 45 -2.2123 -18404 3 46 -2.8862 -18404 3 47 -2.6285 -18404 3 48 -2.6445 -18404 3 49 -1.966 -18404 3 50 -1.872 -18404 3 51 -2.6848 -18404 3 52 -2.0878 -18404 3 53 -2.0086 -18404 3 54 -1.9586 -18404 3 55 -2.3817 -18404 3 56 -1.919 -18404 3 57 -2.0213 -18404 3 58 -0.23672 -16901 1 1 1.0269 -16901 1 2 1.1906 -16901 1 3 1.7092 -16901 1 4 1.6832 -16901 1 5 2.0055 -16901 1 6 2.3466 -16901 1 7 2.3787 -16901 1 8 2.4351 -16901 1 9 2.2659 -16901 1 10 2.2475 -16901 1 11 2.3215 -16901 1 12 1.7972 -16901 1 13 1.7221 -16901 1 14 1.6965 -16901 1 15 1.1247 -16901 1 16 0.89712 -16901 1 17 1.3231 -16901 1 18 0.63019 -16901 1 19 -0.3615 -16901 1 20 0.20156 -16901 1 21 0.013578 -16901 1 22 -0.25303 -16901 1 23 -0.55243 -16901 1 24 -0.48872 -16901 1 25 -0.50075 -16901 1 26 -0.42621 -16901 1 27 -1.2565 -16901 1 28 -1.2993 -16901 1 29 -1.0358 -16901 1 30 -1.3995 -16901 1 31 -1.5251 -16901 1 32 -1.7372 -16901 1 33 -1.2306 -16901 1 34 -1.5274 -16901 1 35 -1.0723 -16901 1 36 -1.6023 -16901 1 37 -1.9799 -16901 1 38 -1.8196 -16901 1 39 -1.1328 -16901 1 40 -1.3123 -16901 1 41 -1.8708 -16901 1 42 -0.78702 -16901 1 43 -0.97184 -16901 1 44 -1.1106 -16901 1 45 -1.5558 -16901 1 46 -1.0278 -16901 1 47 -1.543 -16901 1 48 -1.0516 -16901 1 49 -0.41008 -16901 1 50 -0.95468 -16901 1 51 -1.1978 -16901 1 52 -0.75432 -16901 1 53 -1.1044 -16901 1 54 -1.2133 -16901 1 55 -1.4844 -16901 1 56 -1.4492 -16901 1 57 -1.9265 -16901 1 58 -1.7604 -5107 3 1 -3.2018 -5107 3 2 -3.3843 -5107 3 3 -2.2362 -5107 3 4 -2.4237 -5107 3 5 -3.694 -5107 3 6 -2.9812 -5107 3 7 -2.5195 -5107 3 8 -2.6642 -5107 3 9 -2.8177 -5107 3 10 -2.6846 -5107 3 11 -2.8251 -5107 3 12 -2.1831 -5107 3 13 -2.7414 -5107 3 14 -2.1354 -5107 3 15 -2.9456 -5107 3 16 -2.0017 -5107 3 17 -2.4889 -5107 3 18 -3.1887 -5107 3 19 -2.793 -5107 3 20 -1.9506 -5107 3 21 -2.4753 -5107 3 22 -3.1781 -5107 3 23 -3.3725 -5107 3 24 -3.0194 -5107 3 25 -2.5735 -5107 3 26 -3.4571 -5107 3 27 -3.0161 -5107 3 28 -3.0851 -5107 3 29 -2.1181 -5107 3 30 -3.3768 -5107 3 31 -1.28 -5107 3 32 -2.3247 -5107 3 33 -1.9758 -5107 3 34 -1.839 -5107 3 35 -2.0688 -5107 3 36 -1.7895 -5107 3 37 -1.6746 -5107 3 38 -1.0105 -5107 3 39 -1.6089 -5107 3 40 -1.9377 -5107 3 41 -2.4127 -5107 3 42 -3.63 -5107 3 43 -3.2126 -5107 3 44 -3.2969 -5107 3 45 -2.5532 -5107 3 46 -3.8899 -5107 3 47 -2.3105 -5107 3 48 -2.9655 -5107 3 49 -2.5128 -5107 3 50 -2.7894 -5107 3 51 -3.0372 -5107 3 52 -3.0159 -5107 3 53 -1.6996 -5107 3 54 -1.5095 -5107 3 55 -2.5096 -5107 3 56 -2.8045 -5107 3 57 -2.1336 -5107 3 58 -2.4208 -11988 1 1 0.19607 -11988 1 2 0.48623 -11988 1 3 0.32146 -11988 1 4 0.43916 -11988 1 5 0.59019 -11988 1 6 1.5428 -11988 1 7 1.8111 -11988 1 8 1.4385 -11988 1 9 1.8449 -11988 1 10 1.5088 -11988 1 11 1.8077 -11988 1 12 1.4713 -11988 1 13 1.5026 -11988 1 14 1.7863 -11988 1 15 1.3992 -11988 1 16 0.61646 -11988 1 17 1.3488 -11988 1 18 0.47486 -11988 1 19 0.025249 -11988 1 20 -0.15009 -11988 1 21 -0.35413 -11988 1 22 -0.3152 -11988 1 23 -0.81424 -11988 1 24 -0.77863 -11988 1 25 -0.70491 -11988 1 26 -1.1233 -11988 1 27 -1.2515 -11988 1 28 -1.2304 -11988 1 29 -1.047 -11988 1 30 -1.0364 -11988 1 31 -0.98892 -11988 1 32 -1.6361 -11988 1 33 -1.9184 -11988 1 34 -1.0295 -11988 1 35 -1.4788 -11988 1 36 -1.3412 -11988 1 37 -1.4026 -11988 1 38 -1.582 -11988 1 39 -1.1393 -11988 1 40 -1.539 -11988 1 41 0.62259 -11988 1 42 -1.1183 -11988 1 43 -1.3686 -11988 1 44 -1.2846 -11988 1 45 -1.2138 -11988 1 46 -0.79284 -11988 1 47 -1.458 -11988 1 48 -0.5518 -11988 1 49 -0.68496 -11988 1 50 -0.92185 -11988 1 51 -0.80494 -11988 1 52 -0.79504 -11988 1 53 -0.5305 -11988 1 54 -0.91446 -11988 1 55 -1.055 -11988 1 56 -1.5522 -11988 1 57 -1.8499 -11988 1 58 -1.8077 -1497 3 1 -0.83347 -1497 3 2 -0.60602 -1497 3 3 -0.50768 -1497 3 4 -0.12228 -1497 3 5 -0.089261 -1497 3 6 0.13937 -1497 3 7 -0.28999 -1497 3 8 -0.63059 -1497 3 9 -0.80241 -1497 3 10 -1.0125 -1497 3 11 -1.1906 -1497 3 12 -0.70604 -1497 3 13 -0.76433 -1497 3 14 -0.47512 -1497 3 15 -0.46089 -1497 3 16 -0.89103 -1497 3 17 -0.95839 -1497 3 18 -0.85265 -1497 3 19 -0.53415 -1497 3 20 -0.73143 -1497 3 21 -0.53766 -1497 3 22 -0.55648 -1497 3 23 -0.84211 -1497 3 24 -0.76137 -1497 3 25 -0.74501 -1497 3 26 -0.84287 -1497 3 27 -1.7811 -1497 3 28 -1.4792 -1497 3 29 -1.3465 -1497 3 30 -1.1287 -1497 3 31 -1.2442 -1497 3 32 -1.0138 -1497 3 34 -1.0155 -1497 3 35 -0.83597 -1497 3 36 -1.0295 -1497 3 37 -1.3312 -1497 3 38 -1.2932 -1497 3 39 -1.4636 -1497 3 40 -0.91007 -1497 3 41 -0.7217 -1497 3 42 -0.91422 -1497 3 43 -0.43768 -1497 3 44 -0.45618 -1497 3 45 -1.3501 -1497 3 46 -1.0353 -1497 3 47 -0.69839 -1497 3 48 -0.912 -1497 3 49 -0.86292 -1497 3 50 -1.0496 -1497 3 51 -0.80288 -1497 3 52 -0.42316 -1497 3 53 -0.89189 -1497 3 54 -1.2367 -1497 3 55 -0.59829 -1497 3 56 -0.82854 -1497 3 57 -0.17422 -1497 3 58 -0.13364 -5253 3 1 -1.8305 -5253 3 2 -1.3747 -5253 3 3 -1.2648 -5253 3 4 -1.0548 -5253 3 5 -0.80461 -5253 3 6 -0.62518 -5253 3 7 -0.79874 -5253 3 8 -0.9037 -5253 3 9 -0.61828 -5253 3 10 -1.2379 -5253 3 11 -1.3482 -5253 3 12 -1.1932 -5253 3 13 -1.2876 -5253 3 14 -1.2727 -5253 3 15 -1.985 -5253 3 16 -2.0099 -5253 3 17 -2.0247 -5253 3 18 -1.6439 -5253 3 19 -1.4805 -5253 3 20 -1.7065 -5253 3 21 -1.5958 -5253 3 22 -1.2129 -5253 3 23 -1.6271 -5253 3 24 -1.8869 -5253 3 25 -1.5425 -5253 3 26 -1.6397 -5253 3 27 -1.8794 -5253 3 28 -1.7913 -5253 3 29 -1.5403 -5253 3 30 -1.7086 -5253 3 31 -0.99957 -5253 3 32 -1.1678 -5253 3 33 -1.3357 -5253 3 34 -1.1386 -5253 3 35 -1.2081 -5253 3 36 -1.0198 -5253 3 37 -1.8859 -5253 3 38 -1.4049 -5253 3 39 -1.8191 -5253 3 40 -1.5514 -5253 3 41 0.023271 -5253 3 42 -1.4723 -5253 3 43 -1.371 -5253 3 44 -1.814 -5253 3 45 -2.1164 -5253 3 46 -1.563 -5253 3 47 -1.5777 -5253 3 48 -1.9931 -5253 3 49 -1.6801 -5253 3 50 -2.0626 -5253 3 51 -1.7401 -5253 3 52 -1.382 -5253 3 53 -1.7373 -5253 3 54 -1.6044 -5253 3 55 -1.8285 -5253 3 56 -1.5251 -5253 3 57 -0.60472 -5253 3 58 0.64566 -18020 2 1 -2.7715 -18020 2 2 -2.9358 -18020 2 3 -2.059 -18020 2 4 -2.4567 -18020 2 5 -2.178 -18020 2 6 -2.2988 -18020 2 7 -2.1034 -18020 2 8 -2.3327 -18020 2 9 -2.314 -18020 2 10 -2.157 -18020 2 11 -2.098 -18020 2 12 -2.2676 -18020 2 13 -2.2741 -18020 2 14 -2.1313 -18020 2 15 -2.8338 -18020 2 16 -2.2703 -18020 2 17 -2.039 -18020 2 18 -2.1486 -18020 2 19 -1.8943 -18020 2 20 -1.834 -18020 2 21 -1.8851 -18020 2 22 -2.0213 -18020 2 23 -0.61385 -18020 2 24 0.069984 -18020 2 25 0.070269 -18020 2 26 0.90947 -18020 2 27 1.5968 -18020 2 28 1.5699 -18020 2 29 1.2938 -18020 2 30 1.6316 -18020 2 31 0.16238 -18020 2 32 0.22566 -18020 2 33 -0.12398 -18020 2 34 0.41864 -18020 2 35 0.11115 -18020 2 36 0.27903 -18020 2 37 0.8615 -18020 2 38 0.1493 -18020 2 39 1.2974 -18020 2 40 -1.2458 -18020 2 41 -1.404 -18020 2 42 -3.612 -18020 2 43 -2.7087 -18020 2 44 -2.2865 -18020 2 45 -1.1036 -18020 2 46 -0.98605 -18020 2 47 -0.54312 -18020 2 48 -2.4153 -18020 2 49 -2.5295 -18020 2 50 -1.8163 -18020 2 51 -2.2852 -18020 2 52 -0.57137 -18020 2 53 -0.63458 -18020 2 54 0.4624 -18020 2 55 1.6921 -18020 2 56 2.4776 -18020 2 57 2.8338 -18020 2 58 3.1303 -14025 1 1 0.098804 -14025 1 2 0.56716 -14025 1 3 1.0031 -14025 1 4 1.3854 -14025 1 5 1.7936 -14025 1 6 2.5883 -14025 1 7 2.3739 -14025 1 8 1.892 -14025 1 9 0.99601 -14025 1 10 0.44224 -14025 1 11 0.94348 -14025 1 12 0.37037 -14025 1 13 -0.021034 -14025 1 14 0.053731 -14025 1 15 0.21842 -14025 1 16 0.02306 -14025 1 17 0.066196 -14025 1 18 -0.63761 -14025 1 19 -0.35125 -14025 1 20 -0.26844 -14025 1 21 -0.58678 -14025 1 22 -0.65438 -14025 1 23 -0.71807 -14025 1 24 -0.62297 -14025 1 25 -1.2239 -14025 1 26 -0.75573 -14025 1 27 -1.0756 -14025 1 28 -1.0586 -14025 1 29 -0.76954 -14025 1 30 -0.95455 -14025 1 31 -1.7038 -14025 1 32 -1.843 -14025 1 33 -1.8669 -14025 1 34 -1.6253 -14025 1 35 -1.9312 -14025 1 36 -1.5826 -14025 1 37 -1.7684 -14025 1 38 -1.892 -14025 1 39 -1.2066 -14025 1 40 -1.2372 -14025 1 41 -1.2117 -14025 1 42 -1.1063 -14025 1 43 -1.087 -14025 1 44 -1.1207 -14025 1 45 -1.3447 -14025 1 46 -1.3718 -14025 1 47 -0.35295 -14025 1 48 -0.79913 -14025 1 49 -0.83841 -14025 1 50 -1.0848 -14025 1 51 -0.35242 -14025 1 52 -0.97423 -14025 1 53 -0.4607 -14025 1 54 -0.87531 -14025 1 55 -1.4323 -14025 1 56 -1.493 -14025 1 57 -1.4178 -14025 1 58 -1.2133 -5962 3 1 -2.5466 -5962 3 2 -2.3681 -5962 3 3 -2.6224 -5962 3 4 -3.0472 -5962 3 5 -3.8854 -5962 3 6 -4.2686 -5962 3 7 -3.8078 -5962 3 8 -3.2147 -5962 3 9 -3.0718 -5962 3 10 -2.7762 -5962 3 11 -2.7236 -5962 3 12 -2.5308 -5962 3 13 -3.2928 -5962 3 14 -2.7877 -5962 3 15 -3.3594 -5962 3 16 -3.4924 -5962 3 17 -2.9802 -5962 3 18 -2.7203 -5962 3 19 -2.6798 -5962 3 20 -2.1874 -5962 3 21 -2.0187 -5962 3 22 -2.0023 -5962 3 23 -2.0047 -5962 3 24 -2.1081 -5962 3 25 -2.5776 -5962 3 26 -2.3074 -5962 3 27 -2.3492 -5962 3 28 -2.2424 -5962 3 29 -2.3186 -5962 3 30 -1.9346 -5962 3 31 -1.1333 -5962 3 32 -0.88048 -5962 3 33 -0.9283 -5962 3 34 -0.4244 -5962 3 35 -1.9794 -5962 3 36 -0.54051 -5962 3 37 -1.1824 -5962 3 38 -1.5526 -5962 3 39 -1.5425 -5962 3 40 -1.0785 -5962 3 41 -1.7195 -5962 3 42 -3.2952 -5962 3 43 -2.4553 -5962 3 44 -2.39 -5962 3 45 -1.5981 -5962 3 46 -1.8299 -5962 3 47 -1.8514 -5962 3 48 -2.0582 -5962 3 49 -2.2394 -5962 3 50 -1.5851 -5962 3 51 -1.8478 -5962 3 52 -0.13488 -5962 3 53 -0.80823 -5962 3 54 -0.71257 -5962 3 55 -0.64596 -5962 3 56 0.5024 -5962 3 57 0.98108 -5962 3 58 2.0211 -1760 3 1 -1.2527 -1760 3 2 -1.6417 -1760 3 3 -1.2375 -1760 3 4 -1.7768 -1760 3 5 -1.9944 -1760 3 7 -0.90744 -1760 3 8 -0.48887 -1760 3 9 -0.5059 -1760 3 10 -0.86994 -1760 3 11 -1.0363 -1760 3 12 -0.82948 -1760 3 13 -1.0376 -1760 3 14 -0.76698 -1760 3 15 -1.4402 -1760 3 16 -1.5172 -1760 3 17 -1.8798 -1760 3 18 -1.3748 -1760 3 19 -1.2218 -1760 3 20 -1.2795 -1760 3 21 -1.1563 -1760 3 22 -0.95514 -1760 3 23 -1.2946 -1760 3 24 -1.2071 -1760 3 25 -1.2071 -1760 3 26 -1.3576 -1760 3 27 -1.8372 -1760 3 28 -1.5284 -1760 3 29 -1.7639 -1760 3 30 -1.2731 -1760 3 31 -0.81087 -1760 3 32 -1.1205 -1760 3 33 -1.6408 -1760 3 34 -1.0565 -1760 3 35 -1.5893 -1760 3 36 -1.3715 -1760 3 37 -1.8063 -1760 3 38 -0.99967 -1760 3 39 -0.88289 -1760 3 40 -1.2689 -1760 3 41 -1.9939 -1760 3 42 -2.1569 -1760 3 43 -1.5939 -1760 3 44 -1.5194 -1760 3 45 -0.78723 -1760 3 46 -1.5329 -1760 3 47 -0.99591 -1760 3 48 -1.3906 -1760 3 49 -1.1312 -1760 3 50 -0.60552 -1760 3 51 -1.1972 -1760 3 52 -1.0801 -1760 3 53 -0.74178 -1760 3 54 -0.70749 -1760 3 55 -0.032406 -1760 3 56 1.6001 -1760 3 57 1.3215 -1760 3 58 0.71199 -10233 3 1 -1.0143 -10233 3 2 -0.80716 -10233 3 3 -0.90052 -10233 3 4 -0.91978 -10233 3 5 -0.86863 -10233 3 6 -1.251 -10233 3 7 -1.3839 -10233 3 8 -1.3124 -10233 3 9 -0.66518 -10233 3 10 -0.80787 -10233 3 13 -1.1763 -10233 3 14 -1.0807 -10233 3 15 -1.6122 -10233 3 16 -1.2668 -10233 3 17 -1.843 -10233 3 18 -1.6732 -10233 3 19 -1.632 -10233 3 20 -1.7119 -10233 3 21 -1.6041 -10233 3 22 -1.5334 -10233 3 23 -1.6946 -10233 3 24 -1.6099 -10233 3 25 -1.3759 -10233 3 26 -1.4808 -10233 3 27 -1.6325 -10233 3 28 -1.6107 -10233 3 29 -1.6168 -10233 3 30 -1.4689 -10233 3 31 -0.9167 -10233 3 32 -1.1712 -10233 3 33 -0.86935 -10233 3 34 -1.3319 -10233 3 35 -1.5854 -10233 3 36 -1.0442 -10233 3 37 -0.95923 -10233 3 38 -0.9685 -10233 3 39 -1.1301 -10233 3 40 -1.3559 -10233 3 41 -2.0001 -10233 3 42 -1.904 -10233 3 43 -1.5139 -10233 3 44 -1.4099 -10233 3 45 -1.9853 -10233 3 46 -1.7578 -10233 3 47 -1.5256 -10233 3 48 -2.0745 -10233 3 49 -1.4741 -10233 3 50 -1.6102 -10233 3 51 -1.6673 -10233 3 52 -0.44619 -10233 3 53 -1.3883 -10233 3 54 -0.9464 -10233 3 55 0.039786 -10233 3 56 1.1473 -10233 3 57 1.1929 -10233 3 58 1.8366 -9668 3 1 -2.8022 -9668 3 2 -2.7567 -9668 3 3 -2.6208 -9668 3 4 -2.4485 -9668 3 5 -2.6207 -9668 3 6 -1.8639 -9668 3 7 -1.5712 -9668 3 8 -1.1596 -9668 3 9 -0.60345 -9668 3 10 -1.0266 -9668 3 11 -0.28794 -9668 3 12 -1.1413 -9668 3 13 -0.92926 -9668 3 14 -1.5798 -9668 3 15 -1.6448 -9668 3 16 -1.3155 -9668 3 17 -1.3594 -9668 3 18 -1.9011 -9668 3 19 -2.2338 -9668 3 20 -2.2802 -9668 3 21 -1.9042 -9668 3 22 -2.4548 -9668 3 23 -2.7236 -9668 3 24 -1.6292 -9668 3 25 -2.1842 -9668 3 26 -1.8546 -9668 3 27 -2.2061 -9668 3 28 -2.2971 -9668 3 29 -2.1818 -9668 3 30 -2.1488 -9668 3 31 -1.8793 -9668 3 32 -1.6506 -9668 3 33 -1.5604 -9668 3 34 -1.6285 -9668 3 35 -1.8928 -9668 3 36 -1.6833 -9668 3 37 -1.8787 -9668 3 38 -1.648 -9668 3 39 -1.8299 -9668 3 40 -1.8796 -9668 3 41 -2.0378 -9668 3 42 -2.5248 -9668 3 43 -2.372 -9668 3 44 -2.2715 -9668 3 45 -1.4612 -9668 3 46 -1.3099 -9668 3 47 -1.7588 -9668 3 48 -1.9286 -9668 3 49 -1.9729 -9668 3 50 -1.6712 -9668 3 51 -2.092 -9668 3 52 -1.7958 -9668 3 53 -1.9246 -9668 3 54 -2.0138 -9668 3 55 -1.7633 -9668 3 56 0.37726 -9668 3 57 1.6916 -9668 3 58 1.3501 -12750 1 1 0.27515 -12750 1 2 0.51283 -12750 1 3 0.71669 -12750 1 4 0.95748 -12750 1 5 1.3638 -12750 1 6 1.7739 -12750 1 7 1.8032 -12750 1 8 1.6298 -12750 1 9 1.4504 -12750 1 10 1.2996 -12750 1 11 1.5536 -12750 1 12 0.91621 -12750 1 13 0.64563 -12750 1 14 0.30894 -12750 1 15 0.52025 -12750 1 16 0.46398 -12750 1 17 -0.49047 -12750 1 18 -0.25551 -12750 1 19 -0.73395 -12750 1 20 -0.71207 -12750 1 21 -0.62867 -12750 1 22 -0.86447 -12750 1 23 -0.77196 -12750 1 24 -0.83368 -12750 1 25 -1.1805 -12750 1 26 -1.3374 -12750 1 27 -1.6298 -12750 1 28 -1.3922 -12750 1 29 -1.6275 -12750 1 30 -1.6827 -12750 1 31 -1.1139 -12750 1 32 -1.2841 -12750 1 33 -1.4273 -12750 1 34 -1.1431 -12750 1 35 -0.75992 -12750 1 36 -0.80388 -12750 1 37 -1.2353 -12750 1 38 -0.5556 -12750 1 39 -0.67353 -12750 1 40 -1.3565 -12750 1 41 -1.4599 -12750 1 42 -0.95032 -12750 1 43 -0.8221 -12750 1 44 -1.2258 -12750 1 45 -0.7137 -12750 1 46 -0.69885 -12750 1 47 -1.3797 -12750 1 48 -0.57731 -12750 1 49 -0.38457 -12750 1 50 -0.61111 -12750 1 51 -0.46575 -12750 1 52 -0.47485 -12750 1 53 -0.68962 -12750 1 54 -0.71412 -12750 1 55 -1.2092 -12750 1 56 -1.2743 -12750 1 57 -1.3927 -12750 1 58 -1.4753 -7107 2 1 -4.1022 -7107 2 2 -4.2534 -7107 2 3 -4.4378 -7107 2 4 -3.7574 -7107 2 5 -3.801 -7107 2 6 -3.4211 -7107 2 7 -3.2858 -7107 2 8 -3.2989 -7107 2 9 -3.6529 -7107 2 10 -3.3334 -7107 2 11 -3.4396 -7107 2 12 -3.2918 -7107 2 13 -3.3722 -7107 2 14 -3.5124 -7107 2 15 -3.3288 -7107 2 16 -3.1227 -7107 2 17 -1.7678 -7107 2 18 -0.81458 -7107 2 19 1.8906 -7107 2 20 1.1111 -7107 2 21 1.5919 -7107 2 22 1.5818 -7107 2 23 3.2307 -7107 2 24 3.4077 -7107 2 25 3.7184 -7107 2 26 3.8384 -7107 2 27 4.4754 -7107 2 28 4.072 -7107 2 29 3.9207 -7107 2 30 4.0182 -7107 2 31 2.922 -7107 2 32 2.8843 -7107 2 33 2.8827 -7107 2 34 2.8448 -7107 2 35 2.8126 -7107 2 36 3.005 -7107 2 37 4.0054 -7107 2 38 3.5281 -7107 2 39 3.8668 -7107 2 40 0.9327 -7107 2 41 0.096867 -7107 2 42 -3.3952 -7107 2 43 -3.06 -7107 2 44 -2.6703 -7107 2 45 -1.9956 -7107 2 46 -1.9027 -7107 2 47 -1.9665 -7107 2 48 -3.8593 -7107 2 49 -4.2911 -7107 2 50 -2.4844 -7107 2 51 -3.669 -7107 2 52 -0.43768 -7107 2 53 -1.0939 -7107 2 54 0.95939 -7107 2 55 2.39 -7107 2 56 4.2534 -7107 2 57 3.6148 -7107 2 58 4.383 -7028 2 1 -2.5505 -7028 2 2 -2.4491 -7028 2 3 -2.285 -7028 2 4 -2.234 -7028 2 5 -2.13 -7028 2 7 -1.988 -7028 2 8 -2.3272 -7028 2 9 -2.3893 -7028 2 10 -2.6542 -7028 2 12 0.22354 -7028 2 13 -2.4932 -7028 2 14 -2.4512 -7028 2 15 -1.0397 -7028 2 16 -1.9016 -7028 2 17 -1.7318 -7028 2 18 -1.0406 -7028 2 19 0.59166 -7028 2 20 0.08764 -7028 2 21 0.78481 -7028 2 22 1.0425 -7028 2 23 1.4651 -7028 2 24 1.8966 -7028 2 25 1.3582 -7028 2 26 2.1972 -7028 2 27 2.9122 -7028 2 28 2.6157 -7028 2 29 2.1388 -7028 2 30 2.384 -7028 2 31 1.4098 -7028 2 32 1.9567 -7028 2 33 2.7662 -7028 2 34 1.62 -7028 2 35 2.9011 -7028 2 36 2.2204 -7028 2 37 2.9271 -7028 2 38 2.8923 -7028 2 39 2.5272 -7028 2 40 1.3125 -7028 2 41 -0.47399 -7028 2 42 -3.3681 -7028 2 43 -3.1407 -7028 2 44 -3.2044 -7028 2 45 -2.1731 -7028 2 46 -1.8413 -7028 2 47 -2.1645 -7028 2 48 -3.3795 -7028 2 49 -3.4742 -7028 2 50 -2.3603 -7028 2 51 -3.7444 -7028 2 52 0.17153 -7028 2 53 -1.3046 -7028 2 54 0.15857 -7028 2 55 1.9574 -7028 2 56 3.0514 -7028 2 57 2.5748 -7028 2 58 3.3268 -18251 2 1 -2.2682 -18251 2 2 -2.0378 -18251 2 3 -2.3661 -18251 2 4 -1.8691 -18251 2 5 -2.3196 -18251 2 7 -1.8782 -18251 2 8 -1.9847 -18251 2 9 -1.7841 -18251 2 10 -1.5515 -18251 2 12 -1.6619 -18251 2 13 -1.7558 -18251 2 14 -1.8905 -18251 2 15 -1.8175 -18251 2 16 -1.146 -18251 2 17 -1.1364 -18251 2 18 0.38376 -18251 2 19 1.8603 -18251 2 20 1.4784 -18251 2 21 1.7256 -18251 2 22 1.726 -18251 2 23 1.6531 -18251 2 24 1.7097 -18251 2 25 1.5349 -18251 2 26 1.6342 -18251 2 27 1.4803 -18251 2 28 1.4754 -18251 2 29 1.3678 -18251 2 30 1.7578 -18251 2 31 1.808 -18251 2 32 1.0281 -18251 2 33 0.95571 -18251 2 34 1.4594 -18251 2 35 1.8077 -18251 2 36 1.5619 -18251 2 37 1.795 -18251 2 38 1.4462 -18251 2 39 1.8131 -18251 2 40 -0.18738 -18251 2 41 -0.60884 -18251 2 42 -2.4798 -18251 2 43 -1.5005 -18251 2 44 -1.2006 -18251 2 45 -0.66347 -18251 2 46 -1.2924 -18251 2 47 -1.2758 -18251 2 48 -1.3807 -18251 2 49 -0.58783 -18251 2 50 -0.8918 -18251 2 51 -1.7464 -18251 2 52 0.29046 -18251 2 53 -0.025449 -18251 2 54 0.46437 -18251 2 55 1.9269 -18251 2 56 2.2104 -18251 2 57 2.3196 -18251 2 58 2.7216 -5596 2 1 -2.3757 -5596 2 2 -3.7815 -5596 2 3 -4.4686 -5596 2 4 -3.1403 -5596 2 5 -3.5073 -5596 2 6 -3.7768 -5596 2 7 -3.8978 -5596 2 8 -3.9283 -5596 2 9 -3.5931 -5596 2 10 -3.7889 -5596 2 13 -3.9335 -5596 2 14 -3.8209 -5596 2 15 -1.5319 -5596 2 16 -3.2229 -5596 2 17 -2.7382 -5596 2 18 -1.3633 -5596 2 19 1.1983 -5596 2 20 0.64008 -5596 2 21 1.0222 -5596 2 22 1.6351 -5596 2 23 1.8606 -5596 2 24 2.2717 -5596 2 25 2.818 -5596 2 26 3.1313 -5596 2 27 3.2944 -5596 2 28 3.2181 -5596 2 29 2.8944 -5596 2 30 2.8381 -5596 2 31 2.9004 -5596 2 32 3.3313 -5596 2 33 3.7637 -5596 2 34 2.5325 -5596 2 35 3.2123 -5596 2 36 3.2608 -5596 2 37 3.963 -5596 2 38 4.0358 -5596 2 39 3.3732 -5596 2 40 2.1083 -5596 2 41 -1.3061 -5596 2 42 -4.0378 -5596 2 43 -3.301 -5596 2 44 -2.8992 -5596 2 45 -2.1248 -5596 2 46 -1.7525 -5596 2 47 -1.489 -5596 2 48 -4.5086 -5596 2 49 -3.8503 -5596 2 50 -2.6474 -5596 2 51 -4.6998 -5596 2 52 0.97213 -5596 2 53 0.9847 -5596 2 54 1.1808 -5596 2 56 4.9464 -5596 2 58 4.4504 -8154 2 1 -2.9647 -8154 2 2 -2.8465 -8154 2 3 -2.7535 -8154 2 4 -2.7667 -8154 2 5 -2.9503 -8154 2 6 -2.5141 -8154 2 7 -2.2861 -8154 2 8 -2.7593 -8154 2 9 -2.7662 -8154 2 10 -2.3499 -8154 2 11 -2.901 -8154 2 12 -2.0403 -8154 2 13 -2.1136 -8154 2 14 -2.2808 -8154 2 15 -1.4499 -8154 2 16 -2.1873 -8154 2 17 -1.7927 -8154 2 18 -1.1691 -8154 2 19 0.50762 -8154 2 20 -0.3823 -8154 2 21 0.35563 -8154 2 22 0.63589 -8154 2 23 1.5066 -8154 2 24 1.8207 -8154 2 25 1.6716 -8154 2 26 2.2113 -8154 2 27 2.3232 -8154 2 28 2.1804 -8154 2 29 2.219 -8154 2 30 2.2771 -8154 2 31 1.2564 -8154 2 32 1.3094 -8154 2 33 1.6742 -8154 2 34 1.4324 -8154 2 35 1.1455 -8154 2 36 1.3402 -8154 2 37 1.4883 -8154 2 38 1.0765 -8154 2 39 1.962 -8154 2 40 0.037706 -8154 2 41 -1.1688 -8154 2 42 -2.2425 -8154 2 43 -1.7824 -8154 2 44 -1.3859 -8154 2 45 -0.98286 -8154 2 46 -1.1925 -8154 2 47 -1.3082 -8154 2 48 -2.429 -8154 2 49 -2.731 -8154 2 50 -1.8424 -8154 2 51 -2.3956 -8154 2 52 -0.31538 -8154 2 53 -0.60671 -8154 2 54 0.087781 -8154 2 55 1.4027 -8154 2 56 2.4532 -8154 2 57 2.4028 -8154 2 58 3.1717 -13096 1 1 0.82586 -13096 1 2 0.95486 -13096 1 3 0.89852 -13096 1 4 1.2833 -13096 1 5 1.4719 -13096 1 6 2.0835 -13096 1 7 2.2499 -13096 1 8 2.3295 -13096 1 9 2.6478 -13096 1 10 2.5256 -13096 1 11 2.6215 -13096 1 12 0.84617 -13096 1 13 1.9111 -13096 1 14 1.6534 -13096 1 15 1.3125 -13096 1 16 1.2033 -13096 1 17 1.4624 -13096 1 18 0.66444 -13096 1 19 -0.3221 -13096 1 20 -0.075235 -13096 1 21 -0.17418 -13096 1 22 -0.66227 -13096 1 23 -0.63085 -13096 1 24 -1.0554 -13096 1 25 -0.94173 -13096 1 26 -1.0251 -13096 1 27 -0.76692 -13096 1 28 -0.53302 -13096 1 29 -1.4666 -13096 1 30 -1.258 -13096 1 31 -1.1464 -13096 1 32 -2.2161 -13096 1 33 -1.4588 -13096 1 34 -1.4825 -13096 1 35 -0.45397 -13096 1 36 -0.68988 -13096 1 37 -0.90199 -13096 1 38 -1.0943 -13096 1 39 -1.2507 -13096 1 40 -1.252 -13096 1 41 -0.24918 -13096 1 42 -1.6052 -13096 1 43 -1.559 -13096 1 44 -1.8464 -13096 1 45 -1.4468 -13096 1 46 -1.3952 -13096 1 47 -1.4436 -13096 1 48 -1.3475 -13096 1 49 -1.1845 -13096 1 50 -1.8209 -13096 1 51 -1.7579 -13096 1 52 -1.4183 -13096 1 53 -1.6582 -13096 1 54 -1.836 -13096 1 55 -2.2532 -13096 1 56 -2.5001 -13096 1 57 -2.4932 -13096 1 58 -1.86 -10483 2 1 -1.2518 -10483 2 2 -1.2025 -10483 2 3 -1.0684 -10483 2 4 -1.1692 -10483 2 5 -1.118 -10483 2 6 -0.80405 -10483 2 7 -0.82036 -10483 2 8 -0.92475 -10483 2 9 -0.79807 -10483 2 10 -0.49089 -10483 2 11 -0.68753 -10483 2 12 -0.55966 -10483 2 13 -0.80062 -10483 2 14 -0.49696 -10483 2 15 -0.75615 -10483 2 16 -0.91673 -10483 2 17 -0.82756 -10483 2 18 -0.59655 -10483 2 19 0.6894 -10483 2 20 0.49021 -10483 2 21 0.4045 -10483 2 22 0.92317 -10483 2 23 0.51972 -10483 2 24 0.66154 -10483 2 25 0.64959 -10483 2 26 0.45592 -10483 2 27 0.59671 -10483 2 28 0.61468 -10483 2 29 0.77217 -10483 2 30 1.0582 -10483 2 31 0.4629 -10483 2 32 0.70546 -10483 2 33 0.61369 -10483 2 34 0.8733 -10483 2 35 0.52559 -10483 2 36 0.8406 -10483 2 37 0.80432 -10483 2 38 0.4842 -10483 2 39 0.27694 -10483 2 40 -0.018798 -10483 2 41 -0.07291 -10483 2 42 -0.38115 -10483 2 43 -0.75655 -10483 2 44 -0.97372 -10483 2 45 -0.071398 -10483 2 46 -0.7185 -10483 2 47 -1.241 -10483 2 48 -0.8384 -10483 2 49 -0.74566 -10483 2 50 -0.72121 -10483 2 51 -0.75247 -10483 2 52 -0.10146 -10483 2 53 -0.3927 -10483 2 54 -0.070677 -10483 2 55 0.79456 -10483 2 56 1.2025 -10483 2 57 1.68 -10483 2 58 1.2607 -9480 2 1 -2.4009 -9480 2 2 -2.6158 -9480 2 3 -1.9066 -9480 2 4 -1.8948 -9480 2 5 -1.4874 -9480 2 6 -1.5892 -9480 2 7 -1.3921 -9480 2 8 -1.3654 -9480 2 9 -1.4148 -9480 2 10 -1.6128 -9480 2 11 -1.7279 -9480 2 12 -1.5062 -9480 2 13 -1.0767 -9480 2 14 -1.8399 -9480 2 15 -1.7329 -9480 2 16 -1.2085 -9480 2 17 -0.85771 -9480 2 18 -0.46659 -9480 2 19 0.26335 -9480 2 20 0.096116 -9480 2 21 0.22733 -9480 2 22 0.32166 -9480 2 23 0.79156 -9480 2 24 1.5095 -9480 2 25 1.3546 -9480 2 26 1.7305 -9480 2 27 1.7231 -9480 2 28 1.5473 -9480 2 29 1.5143 -9480 2 30 1.3566 -9480 2 31 -0.032963 -9480 2 32 0.50067 -9480 2 33 0.98325 -9480 2 34 0.60991 -9480 2 35 1.1406 -9480 2 36 1.1152 -9480 2 37 1.51 -9480 2 38 1.4206 -9480 2 39 2.1084 -9480 2 40 0.79058 -9480 2 41 -0.94401 -9480 2 42 -1.2661 -9480 2 43 -1.4958 -9480 2 44 -1.8016 -9480 2 45 -1.1233 -9480 2 46 -1.3229 -9480 2 47 -1.7649 -9480 2 48 -0.80416 -9480 2 49 -1.343 -9480 2 50 -0.46563 -9480 2 51 -0.77728 -9480 2 52 0.09011 -9480 2 53 0.011545 -9480 2 54 -0.042161 -9480 2 55 0.79544 -9480 2 56 1.9066 -9480 2 57 1.7829 -9480 2 58 1.9625 -11842 3 1 -2.236 -11842 3 2 -2.1199 -11842 3 3 -1.79 -11842 3 4 -1.17 -11842 3 5 -1.3822 -11842 3 6 -1.3758 -11842 3 7 -1.2821 -11842 3 8 -1.2688 -11842 3 9 -0.78279 -11842 3 10 -0.64987 -11842 3 11 -0.83769 -11842 3 12 -0.82933 -11842 3 13 -1.258 -11842 3 14 -0.72608 -11842 3 15 -1.3391 -11842 3 16 -1.9359 -11842 3 17 -1.3032 -11842 3 18 -1.9297 -11842 3 19 -2.0197 -11842 3 20 -1.8419 -11842 3 21 -1.592 -11842 3 22 -1.6896 -11842 3 23 -1.7644 -11842 3 24 -2.2208 -11842 3 25 -2.1856 -11842 3 26 -2.2103 -11842 3 27 -1.9618 -11842 3 28 -1.7803 -11842 3 29 -2.1709 -11842 3 30 -1.6451 -11842 3 31 0.16225 -11842 3 32 0.17169 -11842 3 33 0.027947 -11842 3 34 -0.31748 -11842 3 35 -0.091141 -11842 3 36 0.17765 -11842 3 37 0.45627 -11842 3 38 0.87568 -11842 3 39 0.66053 -11842 3 40 -0.21036 -11842 3 41 0.14771 -11842 3 42 -1.4328 -11842 3 43 -1.7523 -11842 3 44 -0.97116 -11842 3 45 -0.74562 -11842 3 46 -0.52471 -11842 3 47 -0.29803 -11842 3 48 -0.91412 -11842 3 49 -1.1102 -11842 3 50 -1.0996 -11842 3 51 -1.6844 -11842 3 52 -1.3647 -11842 3 53 -1.6583 -11842 3 54 -1.4025 -11842 3 55 -1.2641 -11842 3 56 -1.538 -11842 3 57 -1.8828 -11842 3 58 0.50754 -5125 3 1 -1.3828 -5125 3 2 -1.3701 -5125 3 3 -1.8362 -5125 3 4 -1.9782 -5125 3 5 -2.2321 -5125 3 6 -2.6164 -5125 3 7 -1.974 -5125 3 8 -1.7956 -5125 3 9 -1.7807 -5125 3 10 -1.778 -5125 3 11 -1.9007 -5125 3 12 -1.6936 -5125 3 13 -1.7139 -5125 3 14 -1.7765 -5125 3 15 -1.4176 -5125 3 16 -1.591 -5125 3 17 -1.6128 -5125 3 18 -1.5797 -5125 3 19 -1.5089 -5125 3 20 -1.5447 -5125 3 21 -1.3361 -5125 3 22 -1.4867 -5125 3 23 -1.3247 -5125 3 24 -1.1999 -5125 3 25 -1.2894 -5125 3 26 -1.2243 -5125 3 27 -0.93212 -5125 3 28 -0.87465 -5125 3 29 -1.1033 -5125 3 30 -0.95942 -5125 3 31 -0.73921 -5125 3 32 -0.70976 -5125 3 33 -1.0494 -5125 3 34 -0.58553 -5125 3 35 -0.8757 -5125 3 36 -0.96322 -5125 3 37 -0.75712 -5125 3 38 -0.94316 -5125 3 39 -0.77872 -5125 3 40 -1.1979 -5125 3 41 -1.5335 -5125 3 42 -1.3287 -5125 3 43 -1.2863 -5125 3 44 -1.3147 -5125 3 45 -1.3252 -5125 3 46 -1.4355 -5125 3 47 -1.4558 -5125 3 48 -1.1293 -5125 3 49 -1.2362 -5125 3 50 -0.68634 -5125 3 51 -0.27041 -5125 3 52 -0.86892 -5125 3 53 -0.096449 -5125 3 54 -0.26915 -5125 3 55 0.69522 -5125 3 56 1.6068 -5125 3 57 1.4974 -5125 3 58 2.0524 -5939 2 1 -3.1223 -5939 2 2 -3.2783 -5939 2 3 -2.887 -5939 2 4 -2.6972 -5939 2 5 -2.8282 -5939 2 6 -2.5501 -5939 2 7 -2.6004 -5939 2 8 -2.2922 -5939 2 9 -2.465 -5939 2 10 -2.4474 -5939 2 11 -2.4604 -5939 2 12 -2.059 -5939 2 13 -1.9968 -5939 2 14 -2.2331 -5939 2 15 -2.1022 -5939 2 16 -2.1254 -5939 2 17 -1.3521 -5939 2 18 -0.98427 -5939 2 19 0.48172 -5939 2 20 -0.3805 -5939 2 21 0.092261 -5939 2 22 0.46139 -5939 2 23 1.6261 -5939 2 24 1.9909 -5939 2 25 1.7876 -5939 2 26 2.2637 -5939 2 27 2.4978 -5939 2 28 2.4403 -5939 2 29 2.3742 -5939 2 30 2.3813 -5939 2 31 0.0087803 -5939 2 32 0.38007 -5939 2 33 0.76438 -5939 2 34 0.11169 -5939 2 35 1.1245 -5939 2 36 0.088837 -5939 2 37 1.3653 -5939 2 38 1.1192 -5939 2 39 2.0883 -5939 2 40 -0.31288 -5939 2 41 -0.50561 -5939 2 42 -1.682 -5939 2 43 -1.3057 -5939 2 44 -0.74766 -5939 2 45 -0.66427 -5939 2 46 -1.5915 -5939 2 47 -1.9436 -5939 2 48 -1.9885 -5939 2 49 -2.3045 -5939 2 50 -2.156 -5939 2 51 -2.3584 -5939 2 52 0.10199 -5939 2 53 -0.98724 -5939 2 54 0.11465 -5939 2 55 0.92157 -5939 2 56 2.6453 -5939 2 57 2.3028 -5939 2 58 3.0481 -7288 1 1 0.56036 -7288 1 2 0.47119 -7288 1 3 0.68405 -7288 1 4 1.1679 -7288 1 5 1.6553 -7288 1 6 1.8647 -7288 1 7 1.876 -7288 1 8 1.9879 -7288 1 9 1.5718 -7288 1 10 1.4256 -7288 1 11 1.591 -7288 1 12 0.69104 -7288 1 13 0.65341 -7288 1 14 0.88616 -7288 1 15 0.51554 -7288 1 16 0.65228 -7288 1 17 0.38495 -7288 1 18 -0.10926 -7288 1 19 -0.025263 -7288 1 20 -0.41453 -7288 1 21 -0.70473 -7288 1 22 -0.46509 -7288 1 23 -0.41516 -7288 1 24 -0.68369 -7288 1 25 -0.71685 -7288 1 26 -0.91793 -7288 1 27 -1.4537 -7288 1 28 -1.4579 -7288 1 29 -1.2596 -7288 1 30 -1.3936 -7288 1 31 -0.881 -7288 1 32 -1.4757 -7288 1 33 -1.1735 -7288 1 34 -1.198 -7288 1 35 -0.61134 -7288 1 36 -0.62953 -7288 1 37 -0.54527 -7288 1 38 -0.75178 -7288 1 39 -1.003 -7288 1 40 -0.47245 -7288 1 41 -0.78081 -7288 1 42 -0.68434 -7288 1 43 -0.52801 -7288 1 44 -0.71609 -7288 1 45 -0.69067 -7288 1 46 -0.92498 -7288 1 47 -0.7524 -7288 1 48 -0.90356 -7288 1 49 -0.1212 -7288 1 50 -0.47989 -7288 1 51 -0.91712 -7288 1 52 -1.06 -7288 1 53 -1.3278 -7288 1 54 -1.2272 -7288 1 55 -1.3411 -7288 1 56 -1.5365 -7288 1 57 -1.4069 -7288 1 58 -2.0408 -17446 3 1 -0.68659 -17446 3 2 -0.90586 -17446 3 3 -0.88038 -17446 3 4 -0.91058 -17446 3 5 -0.9549 -17446 3 6 -1.5964 -17446 3 7 -1.4389 -17446 3 8 -1.2262 -17446 3 9 -1.2513 -17446 3 10 -1.2167 -17446 3 11 -0.84325 -17446 3 12 -1.8643 -17446 3 13 -1.0332 -17446 3 14 -1.5157 -17446 3 15 -1.3701 -17446 3 16 -1.2103 -17446 3 17 -0.70187 -17446 3 18 -1.2572 -17446 3 19 -2.2039 -17446 3 20 -1.8386 -17446 3 21 -1.6683 -17446 3 22 -1.9815 -17446 3 23 -1.6022 -17446 3 24 -1.7611 -17446 3 25 -2.0166 -17446 3 26 -2.2263 -17446 3 27 -1.7727 -17446 3 28 -2.033 -17446 3 29 -1.9066 -17446 3 30 -1.8568 -17446 3 31 -2.3642 -17446 3 32 -2.1568 -17446 3 33 -2.0101 -17446 3 34 -2.4108 -17446 3 35 -2.131 -17446 3 36 -2.208 -17446 3 37 -2.3814 -17446 3 38 -2.4148 -17446 3 39 -2.172 -17446 3 40 -2.2718 -17446 3 41 -2.7133 -17446 3 42 -2.4115 -17446 3 43 -2.5691 -17446 3 44 -2.2144 -17446 3 45 -2.2019 -17446 3 46 -2.0138 -17446 3 47 -3.1516 -17446 3 48 -2.2947 -17446 3 49 -2.086 -17446 3 50 -1.8884 -17446 3 51 -1.8032 -17446 3 52 -2.1694 -17446 3 53 -2.0265 -17446 3 54 -2.5761 -17446 3 55 -1.7054 -17446 3 56 -0.27012 -17446 3 57 -0.11167 -17446 3 58 1.3106 -7626 1 1 0.40894 -7626 1 2 0.44998 -7626 1 3 0.88768 -7626 1 4 1.1766 -7626 1 5 1.3692 -7626 1 6 1.8087 -7626 1 7 2.0432 -7626 1 8 1.856 -7626 1 9 1.5051 -7626 1 10 1.3141 -7626 1 11 1.1953 -7626 1 12 1.1905 -7626 1 13 1.0657 -7626 1 14 1.2501 -7626 1 15 1.2471 -7626 1 16 1.0179 -7626 1 17 0.80295 -7626 1 18 0.73537 -7626 1 19 0.30854 -7626 1 20 0.40773 -7626 1 21 0.16358 -7626 1 22 0.2516 -7626 1 23 -0.20718 -7626 1 24 -0.29804 -7626 1 25 -0.40783 -7626 1 26 -0.89264 -7626 1 27 -1.0557 -7626 1 28 -0.86111 -7626 1 29 -0.74738 -7626 1 30 -0.78292 -7626 1 31 -1.12 -7626 1 32 -1.8114 -7626 1 33 -1.8994 -7626 1 34 -0.90914 -7626 1 35 -1.2612 -7626 1 36 -1.3961 -7626 1 37 -1.1666 -7626 1 38 -1.1697 -7626 1 39 -0.69896 -7626 1 40 -0.92088 -7626 1 41 -0.37355 -7626 1 42 -0.54371 -7626 1 43 -0.66163 -7626 1 44 -1.1993 -7626 1 45 -0.85896 -7626 1 46 -0.66826 -7626 1 47 -1.3009 -7626 1 48 -0.56389 -7626 1 49 -0.48078 -7626 1 50 -0.88382 -7626 1 51 -0.48478 -7626 1 52 -0.98807 -7626 1 53 -0.71154 -7626 1 54 -0.96145 -7626 1 55 -1.3076 -7626 1 56 -1.2825 -7626 1 57 -1.5546 -7626 1 58 -1.5198 -9432 2 1 -3.5477 -9432 2 2 -3.6674 -9432 2 3 -3.5145 -9432 2 4 -3.7037 -9432 2 5 -3.8575 -9432 2 6 -3.0589 -9432 2 7 -3.1529 -9432 2 8 -2.9369 -9432 2 9 -4.0039 -9432 2 10 -3.0987 -9432 2 11 -2.6082 -9432 2 12 -2.5499 -9432 2 13 -3.3606 -9432 2 14 -3.7775 -9432 2 15 -3.5615 -9432 2 16 -2.9392 -9432 2 17 -2.2508 -9432 2 18 -2.0557 -9432 2 19 -0.14162 -9432 2 20 -1.0419 -9432 2 21 -0.47629 -9432 2 22 -0.36151 -9432 2 23 0.75091 -9432 2 24 1.363 -9432 2 25 1.4297 -9432 2 26 2.0365 -9432 2 27 4.0194 -9432 2 28 3.7775 -9432 2 29 2.7367 -9432 2 30 3.48 -9432 2 31 1.9695 -9432 2 32 2.1749 -9432 2 33 2.8554 -9432 2 34 1.9881 -9432 2 35 2.7153 -9432 2 36 2.2726 -9432 2 37 2.3325 -9432 2 38 1.7846 -9432 2 39 2.4141 -9432 2 40 1.4338 -9432 2 41 -2.0406 -9432 2 42 -3.3874 -9432 2 43 -3.4597 -9432 2 44 -2.6996 -9432 2 45 0.038456 -9432 2 46 1.2738 -9432 2 47 1.1096 -9432 2 48 -2.8358 -9432 2 49 -3.4847 -9432 2 50 -2.2461 -9432 2 51 -2.6384 -9432 2 52 -1.3893 -9432 2 53 -1.3042 -9432 2 54 -0.43789 -9432 2 55 1.0225 -9432 2 56 2.2846 -9432 2 57 2.4933 -9432 2 58 4.0445 -17927 2 1 -4.2716 -17927 2 2 -4.3934 -17927 2 3 -3.7853 -17927 2 4 -4.0175 -17927 2 5 -3.5392 -17927 2 6 -3.3898 -17927 2 7 -3.3433 -17927 2 8 -3.5461 -17927 2 9 -3.6025 -17927 2 10 -3.4312 -17927 2 11 -3.5075 -17927 2 12 -3.2676 -17927 2 13 -2.7472 -17927 2 14 -3.0146 -17927 2 15 -2.6276 -17927 2 16 -3.2024 -17927 2 17 -1.5914 -17927 2 18 -0.44301 -17927 2 19 1.8315 -17927 2 20 1.2441 -17927 2 21 1.835 -17927 2 22 2.3267 -17927 2 23 2.6673 -17927 2 24 2.8035 -17927 2 25 3.2297 -17927 2 26 3.2743 -17927 2 27 3.4706 -17927 2 28 3.399 -17927 2 29 3.215 -17927 2 30 3.7177 -17927 2 31 2.0619 -17927 2 32 2.2402 -17927 2 33 2.7754 -17927 2 34 1.96 -17927 2 35 2.8816 -17927 2 36 2.427 -17927 2 37 4.0713 -17927 2 38 3.1269 -17927 2 39 3.6022 -17927 2 40 -0.40357 -17927 2 41 -1.6734 -17927 2 42 -4.1315 -17927 2 43 -4.0622 -17927 2 44 -3.9598 -17927 2 45 -3.2295 -17927 2 46 -3.4376 -17927 2 47 -3.1007 -17927 2 48 -4.2366 -17927 2 49 -4.4452 -17927 2 50 -2.7374 -17927 2 51 -4.0234 -17927 2 52 0.16725 -17927 2 53 -0.5718 -17927 2 54 0.84041 -17927 2 55 2.7774 -17927 2 56 4.1935 -17927 2 57 3.986 -17927 2 58 4.8334 -1826 2 1 -1.053 -1826 2 2 -0.85027 -1826 2 3 -0.81998 -1826 2 4 -0.53162 -1826 2 5 -0.30978 -1826 2 6 -0.22342 -1826 2 7 -0.80429 -1826 2 8 -0.94834 -1826 2 9 -1.0864 -1826 2 10 -1.3897 -1826 2 11 -1.3734 -1826 2 12 -1.2287 -1826 2 13 -1.5425 -1826 2 14 -1.2669 -1826 2 15 -1.1059 -1826 2 16 -1.2322 -1826 2 17 -1.123 -1826 2 18 -0.95899 -1826 2 19 0.40183 -1826 2 20 -0.11467 -1826 2 21 0.37883 -1826 2 22 0.83388 -1826 2 23 0.74308 -1826 2 24 0.68975 -1826 2 25 1.137 -1826 2 26 1.1322 -1826 2 27 1.3577 -1826 2 28 1.043 -1826 2 29 1.0162 -1826 2 30 1.3241 -1826 2 31 0.279 -1826 2 32 0.40651 -1826 2 33 0.86622 -1826 2 34 0.18417 -1826 2 35 0.73219 -1826 2 36 0.6233 -1826 2 37 1.5088 -1826 2 38 1.2358 -1826 2 39 1.4264 -1826 2 40 -0.82565 -1826 2 41 -0.96114 -1826 2 42 -1.5056 -1826 2 43 -1.7218 -1826 2 44 -2.0087 -1826 2 45 -1.8178 -1826 2 46 -1.2654 -1826 2 47 -1.5196 -1826 2 48 -1.717 -1826 2 49 -1.8463 -1826 2 50 -1.7929 -1826 2 51 -1.0914 -1826 2 52 -0.48956 -1826 2 53 -0.86869 -1826 2 54 -0.27297 -1826 2 55 0.91833 -1826 2 56 1.3114 -1826 2 57 1.5189 -1826 2 58 1.8675 -7106 3 1 -3.2335 -7106 3 2 -3.2497 -7106 3 3 -3.3629 -7106 3 4 -3.4514 -7106 3 5 -2.8834 -7106 3 6 -3.1661 -7106 3 7 -3.337 -7106 3 8 -3.5095 -7106 3 9 -3.5409 -7106 3 10 -3.3908 -7106 3 11 -3.5133 -7106 3 12 -4.0007 -7106 3 13 -2.5691 -7106 3 14 -3.1956 -7106 3 15 -2.1316 -7106 3 16 -2.8473 -7106 3 17 -2.6918 -7106 3 18 -2.7066 -7106 3 19 -3.1876 -7106 3 20 -3.0292 -7106 3 21 -2.7803 -7106 3 22 -3.1458 -7106 3 23 -2.5631 -7106 3 24 -2.3321 -7106 3 25 -2.1857 -7106 3 26 -2.2455 -7106 3 27 -2.7311 -7106 3 28 -2.6206 -7106 3 29 -2.3136 -7106 3 30 -2.5741 -7106 3 31 -3.3263 -7106 3 32 -2.8533 -7106 3 33 -3.2045 -7106 3 34 -3.0007 -7106 3 35 -2.9926 -7106 3 36 -2.8712 -7106 3 37 -2.6691 -7106 3 38 -1.793 -7106 3 39 -1.6475 -7106 3 40 -1.6395 -7106 3 41 -1.9024 -7106 3 42 -1.408 -7106 3 43 -1.4361 -7106 3 44 -1.0962 -7106 3 45 -1.1038 -7106 3 46 -0.97 -7106 3 47 -1.4769 -7106 3 48 -0.43247 -7106 3 49 -0.30805 -7106 3 50 -0.49236 -7106 3 51 -0.53756 -7106 3 52 -0.62158 -7106 3 53 -0.84938 -7106 3 54 -0.84645 -7106 3 55 -0.58705 -7106 3 56 0.65523 -7106 3 57 1.1847 -7106 3 58 0.19001 -4899 3 1 -2.0392 -4899 3 2 -2.1691 -4899 3 3 -2.0578 -4899 3 4 -2.075 -4899 3 5 -2.4869 -4899 3 6 -2.2936 -4899 3 7 -2.2224 -4899 3 8 -1.9854 -4899 3 9 -1.7529 -4899 3 10 -1.6047 -4899 3 11 -1.1403 -4899 3 12 -1.4723 -4899 3 13 -2.0383 -4899 3 14 -1.5284 -4899 3 15 -2.3009 -4899 3 16 -2.3348 -4899 3 17 -2.4768 -4899 3 18 -2.7808 -4899 3 19 -2.5272 -4899 3 20 -2.2327 -4899 3 21 -2.3782 -4899 3 22 -2.3185 -4899 3 23 -2.6027 -4899 3 24 -2.1189 -4899 3 25 -2.557 -4899 3 26 -3.0252 -4899 3 27 -2.7805 -4899 3 28 -2.8244 -4899 3 29 -2.5399 -4899 3 30 -2.5585 -4899 3 31 -1.6589 -4899 3 32 -2.0239 -4899 3 33 -2.0476 -4899 3 34 -1.8477 -4899 3 35 -2.2122 -4899 3 36 -1.5746 -4899 3 37 -1.6198 -4899 3 38 -1.5688 -4899 3 39 -1.7122 -4899 3 40 -2.5672 -4899 3 41 -2.1794 -4899 3 42 -3.0177 -4899 3 43 -2.6567 -4899 3 44 -2.442 -4899 3 45 -2.5096 -4899 3 46 -1.21 -4899 3 47 -0.94896 -4899 3 48 -1.5294 -4899 3 49 -1.1271 -4899 3 50 -1.3341 -4899 3 51 -1.6897 -4899 3 52 -1.5791 -4899 3 53 -1.5952 -4899 3 54 -0.04356 -4899 3 55 2.5817 -4899 3 56 2.5157 -4899 3 57 2.2601 -4899 3 58 1.6914 -9839 1 1 0.025197 -9839 1 2 0.11202 -9839 1 3 0.47555 -9839 1 4 0.44883 -9839 1 5 0.44042 -9839 1 6 1.478 -9839 1 7 1.3552 -9839 1 8 1.3188 -9839 1 9 1.7679 -9839 1 10 2.0945 -9839 1 11 1.2539 -9839 1 12 2.1788 -9839 1 13 2.5413 -9839 1 14 2.4165 -9839 1 15 0.88462 -9839 1 16 1.5853 -9839 1 17 0.57102 -9839 1 18 0.52045 -9839 1 19 -0.83179 -9839 1 20 -0.33901 -9839 1 21 -0.5707 -9839 1 22 -0.17024 -9839 1 23 -0.42449 -9839 1 24 -1.6711 -9839 1 25 -1.3631 -9839 1 26 -1.4299 -9839 1 27 -1.7042 -9839 1 28 -1.58 -9839 1 29 -1.6653 -9839 1 30 -2.0181 -9839 1 31 -0.61634 -9839 1 32 -0.89007 -9839 1 33 -1.544 -9839 1 34 -0.42811 -9839 1 35 -0.9804 -9839 1 36 -0.78747 -9839 1 37 -2.0881 -9839 1 38 -0.81021 -9839 1 39 -0.89544 -9839 1 40 -0.69954 -9839 1 41 -1.283 -9839 1 42 -1.739 -9839 1 43 -1.7536 -9839 1 44 -1.6337 -9839 1 45 -0.70943 -9839 1 46 -1.2875 -9839 1 47 -1.0047 -9839 1 48 -0.77491 -9839 1 49 -0.91674 -9839 1 50 -0.92904 -9839 1 51 -1.1199 -9839 1 52 -0.65612 -9839 1 53 -0.97015 -9839 1 54 -0.8954 -9839 1 55 -1.7192 -9839 1 56 -2.0214 -9839 1 57 -2.0713 -9839 1 58 -1.228 -11914 2 1 -0.79923 -11914 2 2 -0.74363 -11914 2 3 -0.81837 -11914 2 4 -0.4437 -11914 2 5 -0.25429 -11914 2 6 -0.5812 -11914 2 7 -0.60233 -11914 2 8 -0.5342 -11914 2 9 -0.42219 -11914 2 10 -0.85315 -11914 2 11 -0.71974 -11914 2 12 -0.92185 -11914 2 13 -1.0703 -11914 2 14 -1.2446 -11914 2 15 -0.87028 -11914 2 16 -0.37878 -11914 2 17 -0.99054 -11914 2 18 -0.32998 -11914 2 19 0.36489 -11914 2 20 -0.23087 -11914 2 21 0.17922 -11914 2 22 0.3855 -11914 2 23 0.55692 -11914 2 24 0.52552 -11914 2 25 0.63893 -11914 2 26 0.66148 -11914 2 27 0.65238 -11914 2 28 0.52749 -11914 2 29 0.50931 -11914 2 30 0.31145 -11914 2 31 0.1436 -11914 2 32 -0.17414 -11914 2 33 0.10909 -11914 2 34 -0.25276 -11914 2 35 -0.13092 -11914 2 36 -0.038859 -11914 2 37 0.040268 -11914 2 38 -0.069377 -11914 2 39 0.155 -11914 2 40 0.0088495 -11914 2 41 -0.68163 -11914 2 42 -1.1391 -11914 2 43 -0.57225 -11914 2 44 -0.84645 -11914 2 45 0.18858 -11914 2 46 0.1223 -11914 2 47 0.0091717 -11914 2 48 -0.99218 -11914 2 49 -1.0068 -11914 2 50 -1.0931 -11914 2 51 -1.3051 -11914 2 52 -0.10974 -11914 2 53 -0.66219 -11914 2 54 -0.34518 -11914 2 55 0.56173 -11914 2 56 0.97741 -11914 2 57 1.1391 -11914 2 58 1.2811 -5175 1 1 1.0239 -5175 1 2 1.2401 -5175 1 3 1.453 -5175 1 4 1.8113 -5175 1 5 2.3137 -5175 1 6 3.313 -5175 1 7 3.1167 -5175 1 8 3.1997 -5175 1 9 2.6293 -5175 1 10 2.3013 -5175 1 11 2.4541 -5175 1 12 2.3017 -5175 1 13 2.6378 -5175 1 14 2.2296 -5175 1 15 1.601 -5175 1 16 1.31 -5175 1 17 1.6575 -5175 1 18 0.71794 -5175 1 19 -0.55239 -5175 1 20 -0.34436 -5175 1 21 -0.47208 -5175 1 22 -0.59243 -5175 1 23 -0.97043 -5175 1 24 -1.8587 -5175 1 25 -1.4149 -5175 1 26 -1.7983 -5175 1 27 -2.316 -5175 1 28 -2.2465 -5175 1 29 -2.2343 -5175 1 30 -2.3988 -5175 1 31 -2.7557 -5175 1 32 -3.0756 -5175 1 33 -3.1678 -5175 1 34 -2.1588 -5175 1 35 -3.1167 -5175 1 36 -2.841 -5175 1 37 -3.7943 -5175 1 38 -2.6958 -5175 1 39 -2.2207 -5175 1 40 -1.2781 -5175 1 41 -0.51212 -5175 1 42 -0.72825 -5175 1 43 -0.76581 -5175 1 44 -1.0616 -5175 1 45 -1.4957 -5175 1 46 -0.35509 -5175 1 47 -0.82237 -5175 1 48 -0.34428 -5175 1 49 -0.043276 -5175 1 50 -0.56915 -5175 1 51 -0.38651 -5175 1 52 -0.21491 -5175 1 53 -0.15788 -5175 1 54 -0.4082 -5175 1 55 -1.497 -5175 1 56 -2.2965 -5175 1 57 -2.4047 -5175 1 58 -1.9422 -9506 1 1 0.98997 -9506 1 2 1.5709 -9506 1 3 1.6223 -9506 1 4 2.5249 -9506 1 5 2.6054 -9506 1 6 3.6676 -9506 1 7 3.0687 -9506 1 8 2.6426 -9506 1 9 0.14083 -9506 1 10 -0.075099 -9506 1 11 0.68627 -9506 1 12 0.045393 -9506 1 13 -0.83418 -9506 1 14 -0.49673 -9506 1 15 -0.33204 -9506 1 16 -0.83616 -9506 1 17 -1.3025 -9506 1 18 -1.671 -9506 1 19 -1.5832 -9506 1 20 -1.3332 -9506 1 21 -1.5965 -9506 1 22 -1.2317 -9506 1 23 -1.7676 -9506 1 24 -1.8897 -9506 1 25 -1.9718 -9506 1 26 -2.3162 -9506 1 27 -2.331 -9506 1 28 -2.3796 -9506 1 29 -2.1399 -9506 1 30 -2.1284 -9506 1 31 -1.3623 -9506 1 32 -1.8621 -9506 1 33 -2.2319 -9506 1 34 -1.5028 -9506 1 35 -2.0204 -9506 1 36 -1.5563 -9506 1 37 -1.5661 -9506 1 38 -1.6843 -9506 1 39 -1.1408 -9506 1 40 -1.9366 -9506 1 41 -0.93642 -9506 1 42 -2.1324 -9506 1 43 -2.0376 -9506 1 44 -1.4161 -9506 1 45 -1.9304 -9506 1 46 -2.0632 -9506 1 47 -2.1462 -9506 1 48 -2.3336 -9506 1 49 -2.2837 -9506 1 50 -1.5156 -9506 1 51 -2.3568 -9506 1 52 -1.8262 -9506 1 53 -1.9305 -9506 1 54 -1.827 -9506 1 55 -2.3452 -9506 1 56 -2.5024 -9506 1 57 -2.3992 -9506 1 58 -1.7664 -1677 1 1 0.49392 -1677 1 2 0.50748 -1677 1 3 1.0213 -1677 1 4 1.3177 -1677 1 5 1.4437 -1677 1 6 1.8346 -1677 1 7 1.9425 -1677 1 8 1.6761 -1677 1 9 1.4438 -1677 1 10 1.1832 -1677 1 11 1.481 -1677 1 12 1.0293 -1677 1 13 0.92333 -1677 1 14 1.3663 -1677 1 15 0.89126 -1677 1 16 0.79769 -1677 1 17 0.98061 -1677 1 18 0.030007 -1677 1 19 -0.053868 -1677 1 20 0.10333 -1677 1 21 -0.15901 -1677 1 22 -0.21221 -1677 1 23 -0.67295 -1677 1 24 -0.61341 -1677 1 25 -0.63164 -1677 1 26 -0.71547 -1677 1 27 -1.0346 -1677 1 28 -0.94349 -1677 1 29 -0.78858 -1677 1 30 -1.0334 -1677 1 31 -1.4511 -1677 1 32 -1.8427 -1677 1 33 -1.7253 -1677 1 34 -1.39 -1677 1 35 -1.4336 -1677 1 36 -1.3142 -1677 1 37 -1.2767 -1677 1 38 -1.3432 -1677 1 39 -0.90628 -1677 1 40 -0.78193 -1677 1 41 -0.67202 -1677 1 42 -0.49273 -1677 1 43 -0.87698 -1677 1 44 -0.55959 -1677 1 45 -0.82487 -1677 1 46 -0.61497 -1677 1 47 -0.66968 -1677 1 48 -0.53121 -1677 1 49 -0.1648 -1677 1 50 -0.36448 -1677 1 51 -0.095286 -1677 1 52 -0.6651 -1677 1 53 -0.39045 -1677 1 54 -0.77562 -1677 1 55 -1.3247 -1677 1 56 -1.1639 -1677 1 57 -1.3318 -1677 1 58 -1.2161 -7430 2 1 -0.47826 -7430 2 2 -0.53248 -7430 2 3 -0.64984 -7430 2 4 -1.9241 -7430 2 5 -0.71385 -7430 2 6 -0.89936 -7430 2 7 -0.97666 -7430 2 8 -1.1178 -7430 2 9 -1.6219 -7430 2 10 -1.5896 -7430 2 11 -1.3785 -7430 2 12 -0.55225 -7430 2 13 -1.4169 -7430 2 14 -1.4845 -7430 2 15 -1.0522 -7430 2 16 -0.63978 -7430 2 17 -0.52304 -7430 2 18 0.010697 -7430 2 19 -0.30595 -7430 2 20 -0.39137 -7430 2 21 -0.058812 -7430 2 22 -0.19731 -7430 2 23 0.087949 -7430 2 24 0.27921 -7430 2 25 0.41393 -7430 2 26 0.39551 -7430 2 27 0.69758 -7430 2 28 0.76925 -7430 2 29 0.26941 -7430 2 30 0.66833 -7430 2 31 0.71016 -7430 2 32 0.26457 -7430 2 33 0.41245 -7430 2 34 -0.20376 -7430 2 35 0.44032 -7430 2 36 -0.084359 -7430 2 37 0.47477 -7430 2 38 0.10467 -7430 2 39 -0.34477 -7430 2 40 -1.1296 -7430 2 41 -0.77298 -7430 2 42 -1.0072 -7430 2 43 -1.1183 -7430 2 44 -1.0175 -7430 2 45 -1.1824 -7430 2 46 -0.58034 -7430 2 47 -1.4363 -7430 2 48 -1.0394 -7430 2 49 -1.0452 -7430 2 50 -1.417 -7430 2 51 -1.2137 -7430 2 52 -1.0072 -7430 2 53 -0.89876 -7430 2 54 -0.53502 -7430 2 55 0.26613 -7430 2 56 0.93286 -7430 2 57 0.68914 -7430 2 58 1.4041 -8256 2 1 -2.1578 -8256 2 2 -2.4369 -8256 2 3 -2.4397 -8256 2 4 -2.882 -8256 2 5 -3.02 -8256 2 6 -2.5325 -8256 2 7 -2.3687 -8256 2 8 -2.1503 -8256 2 9 -2.3904 -8256 2 10 -2.0253 -8256 2 11 -2.0149 -8256 2 12 -2.4346 -8256 2 13 -1.9018 -8256 2 14 -2.6028 -8256 2 15 -2.4781 -8256 2 16 -2.6484 -8256 2 17 -1.7231 -8256 2 18 -1.5891 -8256 2 19 -1.6629 -8256 2 20 -1.747 -8256 2 21 -1.5241 -8256 2 22 -1.6891 -8256 2 23 -0.65261 -8256 2 24 -0.18204 -8256 2 25 0.34165 -8256 2 26 0.70719 -8256 2 27 2.2579 -8256 2 28 2.1696 -8256 2 29 1.0849 -8256 2 30 2.0468 -8256 2 31 1.2916 -8256 2 32 1.1105 -8256 2 33 0.9564 -8256 2 34 1.6266 -8256 2 35 1.2679 -8256 2 36 1.3741 -8256 2 37 0.40911 -8256 2 38 0.067718 -8256 2 39 0.092934 -8256 2 40 -1.1088 -8256 2 41 -0.60987 -8256 2 42 -2.6767 -8256 2 43 -1.9503 -8256 2 44 -2.8238 -8256 2 45 -1.7587 -8256 2 46 -1.9005 -8256 2 47 -1.7294 -8256 2 48 -2.6747 -8256 2 49 -2.5421 -8256 2 50 -2.111 -8256 2 51 -2.8308 -8256 2 52 -1.645 -8256 2 53 0.042504 -8256 2 54 -0.18821 -8256 2 55 0.79597 -8256 2 56 2.4264 -8256 2 57 1.4003 -8256 2 58 3.0803 -5433 3 1 -0.13425 -5433 3 2 -0.23329 -5433 3 3 -0.20175 -5433 3 4 -0.62691 -5433 3 5 -0.80816 -5433 3 6 -1.8992 -5433 3 7 -2.3735 -5433 3 8 -2.5239 -5433 3 9 -2.4828 -5433 3 10 -2.1844 -5433 3 11 -2.2455 -5433 3 12 -1.4901 -5433 3 13 -2.1304 -5433 3 14 -2.0703 -5433 3 15 -1.1428 -5433 3 16 -1.0724 -5433 3 17 -1.1313 -5433 3 18 -0.21036 -5433 3 19 -0.31316 -5433 3 20 -0.099941 -5433 3 21 -0.14913 -5433 3 22 -0.21452 -5433 3 23 -0.012223 -5433 3 24 -0.089673 -5433 3 25 -0.27305 -5433 3 26 -0.3253 -5433 3 27 -0.24045 -5433 3 28 -0.32318 -5433 3 29 -0.50836 -5433 3 30 -0.51695 -5433 3 31 -0.72729 -5433 3 32 -0.40319 -5433 3 33 -0.72877 -5433 3 34 -0.79741 -5433 3 35 -1.0287 -5433 3 36 -0.79627 -5433 3 37 -1.1574 -5433 3 38 -1.4649 -5433 3 39 -1.1678 -5433 3 40 -0.90867 -5433 3 41 -0.73269 -5433 3 42 -0.017765 -5433 3 43 -0.35069 -5433 3 44 -0.63305 -5433 3 45 -0.70216 -5433 3 46 -0.77182 -5433 3 47 -1.0831 -5433 3 48 -0.97779 -5433 3 49 -0.98144 -5433 3 50 -0.70151 -5433 3 51 -0.92983 -5433 3 52 -0.62219 -5433 3 53 -0.57214 -5433 3 54 -1.0818 -5433 3 55 -0.9223 -5433 3 56 0.16176 -5433 3 57 0.56869 -5433 3 58 -0.52284 -9098 2 1 -3.2072 -9098 2 2 -3.1093 -9098 2 3 -3.3515 -9098 2 4 -3.1328 -9098 2 5 -2.8916 -9098 2 6 -2.911 -9098 2 8 -2.5433 -9098 2 9 -2.2632 -9098 2 10 -2.0722 -9098 2 11 -1.616 -9098 2 12 -1.9665 -9098 2 13 -1.9428 -9098 2 14 -1.9284 -9098 2 15 -2.1191 -9098 2 16 -1.7945 -9098 2 17 -1.758 -9098 2 18 -1.2232 -9098 2 19 -0.5727 -9098 2 20 -0.94536 -9098 2 21 -0.89382 -9098 2 22 -0.7164 -9098 2 23 1.1023 -9098 2 24 1.4137 -9098 2 25 1.9329 -9098 2 26 2.4356 -9098 2 27 3.4934 -9098 2 28 3.1328 -9098 2 29 2.5395 -9098 2 30 3.1733 -9098 2 31 1.8839 -9098 2 32 1.959 -9098 2 33 1.8446 -9098 2 34 1.6232 -9098 2 35 1.9893 -9098 2 36 1.7864 -9098 2 38 1.7587 -9098 2 39 1.7208 -9098 2 40 0.69304 -9098 2 41 -0.43172 -9098 2 42 -2.3092 -9098 2 43 -2.5603 -9098 2 44 -1.8318 -9098 2 45 -0.80958 -9098 2 46 -0.70384 -9098 2 47 0.0025463 -9098 2 48 -1.6932 -9098 2 49 -1.363 -9098 2 50 -1.6496 -9098 2 51 -1.6445 -9098 2 52 -1.8138 -9098 2 53 -1.7163 -9098 2 54 -2.1999 -9098 2 56 1.2047 -9098 2 58 1.1636 -15131 2 1 -2.7902 -15131 2 2 -2.5524 -15131 2 3 -2.0425 -15131 2 4 -2.1045 -15131 2 5 -1.5762 -15131 2 6 -1.7247 -15131 2 7 -1.4946 -15131 2 8 -1.8115 -15131 2 9 -2.1901 -15131 2 10 -1.9568 -15131 2 11 -2.0513 -15131 2 12 0.15937 -15131 2 13 -0.96575 -15131 2 14 -1.5442 -15131 2 15 -0.93174 -15131 2 16 -1.4219 -15131 2 17 -1.08 -15131 2 18 -0.64003 -15131 2 19 1.2032 -15131 2 20 0.010765 -15131 2 21 0.76469 -15131 2 22 1.0427 -15131 2 23 1.9819 -15131 2 24 2.0584 -15131 2 25 2.0905 -15131 2 26 1.8881 -15131 2 27 1.2435 -15131 2 28 0.84331 -15131 2 29 1.4012 -15131 2 30 1.0293 -15131 2 31 -0.28936 -15131 2 32 -0.54818 -15131 2 33 0.48937 -15131 2 34 -0.18132 -15131 2 35 0.4834 -15131 2 36 0.28233 -15131 2 37 0.29678 -15131 2 38 0.57683 -15131 2 39 0.35394 -15131 2 40 -0.26434 -15131 2 41 -1.1934 -15131 2 42 -1.6172 -15131 2 43 -1.4672 -15131 2 44 -1.3209 -15131 2 45 -1.2147 -15131 2 46 -0.71576 -15131 2 47 -0.79475 -15131 2 48 -1.7755 -15131 2 49 -1.3593 -15131 2 50 -0.68891 -15131 2 51 -0.86412 -15131 2 52 -0.20407 -15131 2 53 -0.54233 -15131 2 54 -0.24714 -15131 2 55 2.0776 -15131 2 56 2.1261 -15131 2 57 1.7831 -15131 2 58 1.614 -10949 2 1 -1.5099 -10949 2 2 -1.5155 -10949 2 3 -1.87 -10949 2 4 -1.7792 -10949 2 5 -1.9429 -10949 2 6 -2.012 -10949 2 7 -1.197 -10949 2 8 -0.90152 -10949 2 9 -1.0713 -10949 2 10 -1.2163 -10949 2 11 -1.1657 -10949 2 12 -0.46713 -10949 2 13 -1.6654 -10949 2 14 -1.9698 -10949 2 15 -1.3536 -10949 2 16 -1.0744 -10949 2 17 -0.98049 -10949 2 18 -0.76706 -10949 2 19 -0.15464 -10949 2 20 -0.36091 -10949 2 21 0.36327 -10949 2 22 0.27185 -10949 2 23 0.53632 -10949 2 24 0.97095 -10949 2 25 1.0734 -10949 2 26 1.1096 -10949 2 27 1.7406 -10949 2 28 1.6457 -10949 2 29 1.0535 -10949 2 30 1.2861 -10949 2 31 0.88486 -10949 2 32 1.2849 -10949 2 33 1.6269 -10949 2 34 0.94397 -10949 2 35 1.9107 -10949 2 36 1.6124 -10949 2 37 2.1197 -10949 2 38 2.2532 -10949 2 39 1.8136 -10949 2 40 0.22014 -10949 2 41 -0.92087 -10949 2 42 -1.9369 -10949 2 43 -1.937 -10949 2 44 -2.1627 -10949 2 45 -1.5439 -10949 2 46 -1.2826 -10949 2 47 -1.8036 -10949 2 48 -2.2532 -10949 2 49 -2.3862 -10949 2 50 -1.984 -10949 2 51 -2.3265 -10949 2 52 -0.023233 -10949 2 53 -0.87743 -10949 2 54 -0.32979 -10949 2 55 1.6081 -10949 2 56 1.7863 -10949 2 57 3.4716 -10949 2 58 1.7669 -10693 2 1 -1.6706 -10693 2 2 -1.8633 -10693 2 3 -1.7941 -10693 2 4 -1.9005 -10693 2 5 -2.0288 -10693 2 6 -2.6508 -10693 2 7 -1.8789 -10693 2 8 -1.3332 -10693 2 9 -2.0486 -10693 2 10 -2.0754 -10693 2 11 -1.8191 -10693 2 12 -1.0318 -10693 2 13 -1.8848 -10693 2 14 -2.0822 -10693 2 15 -2.1328 -10693 2 16 -1.3562 -10693 2 17 -1.4967 -10693 2 18 -1.4228 -10693 2 19 -0.43553 -10693 2 20 -0.68684 -10693 2 21 -0.17186 -10693 2 22 -0.017898 -10693 2 23 0.24051 -10693 2 24 0.55692 -10693 2 25 0.62636 -10693 2 26 0.85765 -10693 2 27 1.1391 -10693 2 28 1.2505 -10693 2 29 0.83445 -10693 2 30 1.1686 -10693 2 31 0.54151 -10693 2 32 1.0714 -10693 2 33 0.76261 -10693 2 34 0.57714 -10693 2 35 0.89749 -10693 2 36 0.76769 -10693 2 37 0.70533 -10693 2 38 1.1794 -10693 2 39 0.95823 -10693 2 40 0.091374 -10693 2 41 -0.40309 -10693 2 42 -1.7602 -10693 2 43 -1.615 -10693 2 44 -1.5642 -10693 2 45 -1.2724 -10693 2 46 -1.3008 -10693 2 47 -1.258 -10693 2 48 -1.2735 -10693 2 49 -1.4076 -10693 2 50 -0.86137 -10693 2 51 -1.562 -10693 2 52 0.56904 -10693 2 53 0.20466 -10693 2 54 0.40973 -10693 2 55 1.8705 -10693 2 56 1.4415 -10693 2 57 2.4995 -1378 1 1 -0.30009 -1378 1 2 -0.0028192 -1378 1 3 0.01685 -1378 1 4 1.7111 -1378 1 5 2.5692 -1378 1 6 3.5631 -1378 1 7 2.6037 -1378 1 8 3.3339 -1378 1 9 2.0959 -1378 1 10 1.1893 -1378 1 11 1.2186 -1378 1 12 1.5457 -1378 1 13 1.5274 -1378 1 14 1.5534 -1378 1 15 1.6092 -1378 1 16 0.76756 -1378 1 17 1.1001 -1378 1 18 0.79854 -1378 1 19 0.17324 -1378 1 20 0.45146 -1378 1 21 -0.18215 -1378 1 22 -0.16527 -1378 1 23 -0.69817 -1378 1 24 -0.80132 -1378 1 25 -0.26416 -1378 1 26 -0.73839 -1378 1 27 -0.69653 -1378 1 28 -0.76767 -1378 1 29 -0.83233 -1378 1 30 -1.1554 -1378 1 31 -0.29379 -1378 1 32 -0.74948 -1378 1 34 -0.53187 -1378 1 35 -0.6071 -1378 1 36 -0.17858 -1378 1 37 -0.39755 -1378 1 38 -0.81972 -1378 1 39 -0.069527 -1378 1 40 -0.4296 -1378 1 41 -0.25986 -1378 1 42 -0.86598 -1378 1 43 -0.81184 -1378 1 44 -0.7176 -1378 1 45 -0.70874 -1378 1 46 -1.824 -1378 1 47 0.44805 -1378 1 48 -1.1588 -1378 1 49 -1.0474 -1378 1 50 -0.7128 -1378 1 51 -1.6046 -1378 1 52 -1.6127 -1378 1 53 -1.2834 -1378 1 54 -1.4646 -1378 1 55 -0.60561 -1378 1 56 -1.8979 -1378 1 57 -0.94163 -17800 2 1 -1.813 -17800 2 2 -1.5468 -17800 2 3 -1.8535 -17800 2 4 -1.6417 -17800 2 5 -1.518 -17800 2 6 -1.5876 -17800 2 7 -1.1776 -17800 2 8 -0.92776 -17800 2 9 -0.55519 -17800 2 10 -0.46922 -17800 2 11 -0.49639 -17800 2 12 -0.96518 -17800 2 13 -0.83886 -17800 2 14 -0.99835 -17800 2 15 -0.65509 -17800 2 16 -0.81314 -17800 2 17 -0.50154 -17800 2 18 -0.48024 -17800 2 19 0.085173 -17800 2 20 -0.14656 -17800 2 21 0.40238 -17800 2 22 0.30629 -17800 2 23 0.56055 -17800 2 24 0.69524 -17800 2 25 0.64815 -17800 2 26 0.81082 -17800 2 27 1.3061 -17800 2 28 1.2525 -17800 2 29 0.773 -17800 2 30 1.0251 -17800 2 31 0.58044 -17800 2 32 0.98263 -17800 2 33 1.0582 -17800 2 34 0.54784 -17800 2 35 1.2109 -17800 2 36 1.134 -17800 2 37 1.2546 -17800 2 38 1.6417 -17800 2 39 1.1376 -17800 2 40 0.083988 -17800 2 41 -0.067499 -17800 2 42 -0.78773 -17800 2 43 -1.1319 -17800 2 44 -1.5017 -17800 2 45 -0.93007 -17800 2 46 -0.4107 -17800 2 47 -0.56333 -17800 2 48 -1.0376 -17800 2 49 -1.2627 -17800 2 50 -1.1342 -17800 2 51 -1.3224 -17800 2 52 0.068414 -17800 2 53 -0.44102 -17800 2 54 -0.2047 -17800 2 55 1.238 -17800 2 56 0.97678 -17800 2 57 1.572 -17800 2 58 0.8015 -7565 2 1 -2.0649 -7565 2 2 -2.267 -7565 2 3 -2.3289 -7565 2 4 -2.736 -7565 2 5 -2.6242 -7565 2 6 -2.3911 -7565 2 7 -2.3438 -7565 2 8 -2.4359 -7565 2 9 -1.7199 -7565 2 10 -1.916 -7565 2 11 -1.907 -7565 2 12 -1.8135 -7565 2 13 -1.4666 -7565 2 14 -1.3587 -7565 2 15 -1.483 -7565 2 16 -1.258 -7565 2 17 -1.2419 -7565 2 18 -0.76389 -7565 2 19 0.27932 -7565 2 20 -0.38177 -7565 2 21 0.22691 -7565 2 22 0.6127 -7565 2 23 0.78523 -7565 2 24 0.73521 -7565 2 25 1.189 -7565 2 26 1.2331 -7565 2 27 1.2198 -7565 2 28 1.1854 -7565 2 29 0.82822 -7565 2 30 1.0845 -7565 2 31 0.64536 -7565 2 32 0.75396 -7565 2 33 1.0945 -7565 2 34 0.7805 -7565 2 35 1.465 -7565 2 36 1.3482 -7565 2 37 1.0696 -7565 2 38 1.6814 -7565 2 39 1.6881 -7565 2 40 -0.13959 -7565 2 41 0.1298 -7565 2 42 -1.7667 -7565 2 43 -1.4062 -7565 2 44 -2.0362 -7565 2 45 -1.5186 -7565 2 46 -1.2403 -7565 2 47 -0.98331 -7565 2 48 -2.2802 -7565 2 49 -2.0245 -7565 2 50 -1.8417 -7565 2 51 -2.2423 -7565 2 52 -0.10815 -7565 2 53 -0.94332 -7565 2 54 -0.43899 -7565 2 55 1.1745 -7565 2 56 1.281 -7565 2 57 1.9511 -7565 2 58 1.3293 -8723 3 1 0.38609 -8723 3 2 0.49621 -8723 3 3 0.27106 -8723 3 4 0.52798 -8723 3 5 0.64974 -8723 3 6 0.39951 -8723 3 7 0.35059 -8723 3 8 0.092336 -8723 3 9 0.34667 -8723 3 10 0.086345 -8723 3 11 -0.058399 -8723 3 12 0.1397 -8723 3 13 0.0046862 -8723 3 14 0.21375 -8723 3 15 0.43467 -8723 3 16 0.038462 -8723 3 17 0.17312 -8723 3 18 -0.70196 -8723 3 19 -1.2219 -8723 3 20 -1.164 -8723 3 21 -0.96399 -8723 3 22 -1.439 -8723 3 23 -1.1791 -8723 3 24 -0.80696 -8723 3 25 -1.2866 -8723 3 26 -1.275 -8723 3 27 -0.85485 -8723 3 28 -0.83844 -8723 3 29 -1.3278 -8723 3 30 -1.3487 -8723 3 31 -0.49621 -8723 3 32 -1.0378 -8723 3 33 -1.5265 -8723 3 34 -1.2573 -8723 3 35 -1.0738 -8723 3 36 -1.2892 -8723 3 37 -1.3397 -8723 3 38 -1.0056 -8723 3 39 -0.65868 -8723 3 40 -1.7747 -8723 3 41 -1.6357 -8723 3 42 -1.1527 -8723 3 43 -1.4047 -8723 3 44 -1.3668 -8723 3 45 -2.0062 -8723 3 46 -1.3933 -8723 3 47 -2.0862 -8723 3 48 -1.0876 -8723 3 49 -0.85722 -8723 3 50 -1.3112 -8723 3 51 -1.525 -8723 3 52 -1.3382 -8723 3 53 -1.072 -8723 3 54 -1.3831 -8723 3 55 -1.939 -8723 3 56 -0.59218 -8723 3 57 -1.0532 -8723 3 58 -0.16516 -4468 3 1 -2.5838 -4468 3 2 -2.764 -4468 3 3 -2.3922 -4468 3 4 -2.7309 -4468 3 5 -2.6163 -4468 3 6 -2.8835 -4468 3 7 -2.3395 -4468 3 8 -2.7239 -4468 3 9 -2.252 -4468 3 10 -2.6999 -4468 3 11 -1.9798 -4468 3 12 -1.8271 -4468 3 13 -3.0194 -4468 3 14 -2.4282 -4468 3 15 -2.6319 -4468 3 16 -2.0558 -4468 3 17 -2.5744 -4468 3 18 -2.9578 -4468 3 19 -2.2049 -4468 3 20 -2.2496 -4468 3 21 -2.3323 -4468 3 22 -2.1977 -4468 3 23 -1.8155 -4468 3 24 -1.5337 -4468 3 25 -1.1055 -4468 3 26 -1.8779 -4468 3 27 -1.9381 -4468 3 28 -1.9513 -4468 3 29 -1.5836 -4468 3 30 -1.4386 -4468 3 31 -0.64091 -4468 3 32 -0.74621 -4468 3 33 -1.0965 -4468 3 34 -0.92915 -4468 3 35 -1.4551 -4468 3 36 -0.81951 -4468 3 37 -1.4372 -4468 3 38 -0.64898 -4468 3 39 -0.55435 -4468 3 40 -1.5133 -4468 3 41 -1.7801 -4468 3 42 -2.8072 -4468 3 43 -2.1376 -4468 3 44 -2.228 -4468 3 45 -2.5776 -4468 3 46 -2.0375 -4468 3 47 -1.5044 -4468 3 48 -2.3069 -4468 3 49 -2.1376 -4468 3 50 -1.6664 -4468 3 51 -2.4527 -4468 3 52 -0.33095 -4468 3 53 -0.7711 -4468 3 54 1.1506 -4468 3 55 2.9691 -4468 3 56 3.5009 -4468 3 57 2.8835 -4468 3 58 0.81016 -3573 3 1 -0.6002 -3573 3 2 -0.85355 -3573 3 3 -0.59307 -3573 3 4 -0.96863 -3573 3 5 -1.2549 -3573 3 6 -1.2476 -3573 3 7 -1.2819 -3573 3 8 -1.2215 -3573 3 9 -1.1295 -3573 3 10 -1.1324 -3573 3 11 -1.0564 -3573 3 12 -0.96113 -3573 3 13 -1.1498 -3573 3 14 -0.59721 -3573 3 15 -0.97901 -3573 3 16 -1.0689 -3573 3 17 -1.125 -3573 3 18 -1.1842 -3573 3 19 -0.71227 -3573 3 20 -1.0388 -3573 3 21 -0.93141 -3573 3 22 -0.88634 -3573 3 23 -0.82168 -3573 3 24 -0.77656 -3573 3 25 -0.82573 -3573 3 26 -0.60789 -3573 3 27 -0.69569 -3573 3 28 -0.74296 -3573 3 29 -0.32223 -3573 3 30 -0.78054 -3573 3 31 -0.85635 -3573 3 32 -0.85452 -3573 3 33 -1.0228 -3573 3 34 -0.78708 -3573 3 35 -0.99687 -3573 3 36 -0.89283 -3573 3 37 -0.79915 -3573 3 38 -0.87398 -3573 3 39 -0.83541 -3573 3 40 -1.1011 -3573 3 41 -1.2227 -3573 3 42 -1.2293 -3573 3 43 -1.0708 -3573 3 44 -0.89701 -3573 3 45 -0.46645 -3573 3 46 -1.2829 -3573 3 47 -0.73478 -3573 3 48 -1.146 -3573 3 49 -0.67587 -3573 3 50 -0.60377 -3573 3 51 -0.57572 -3573 3 52 -0.98262 -3573 3 53 -0.71057 -3573 3 54 -0.73836 -3573 3 55 -1.0249 -3573 3 56 -0.68233 -3573 3 57 -0.14793 -3573 3 58 0.064206 -2457 3 1 -0.60649 -2457 3 2 -0.48247 -2457 3 3 -1.2019 -2457 3 4 -1.734 -2457 3 5 -0.3734 -2457 3 6 -0.8626 -2457 3 7 -0.79553 -2457 3 8 -0.93697 -2457 3 9 -1.5921 -2457 3 10 -1.1111 -2457 3 11 -1.5206 -2457 3 12 -1.6674 -2457 3 13 -1.8888 -2457 3 14 -2.0566 -2457 3 15 -2.729 -2457 3 16 -1.5131 -2457 3 17 -1.7839 -2457 3 18 -1.8843 -2457 3 19 -1.6295 -2457 3 20 -1.6142 -2457 3 21 -1.3707 -2457 3 22 -1.6143 -2457 3 23 -1.2832 -2457 3 24 -1.2093 -2457 3 25 -1.8257 -2457 3 26 -1.4968 -2457 3 27 -1.3344 -2457 3 28 -1.173 -2457 3 29 -1.6312 -2457 3 30 -1.1131 -2457 3 31 -0.62312 -2457 3 32 -0.70205 -2457 3 33 -1.0231 -2457 3 34 -0.79068 -2457 3 35 -0.79858 -2457 3 36 -0.71482 -2457 3 37 -0.68275 -2457 3 38 -0.67075 -2457 3 39 -0.60547 -2457 3 40 -1.2601 -2457 3 41 -0.80877 -2457 3 42 -1.8324 -2457 3 43 -1.4516 -2457 3 44 -1.4864 -2457 3 45 -1.7459 -2457 3 46 -1.6272 -2457 3 47 -1.5206 -2457 3 48 -1.6363 -2457 3 49 -1.5739 -2457 3 50 -1.4586 -2457 3 51 -1.6633 -2457 3 52 -1.1393 -2457 3 53 -0.5076 -2457 3 54 -0.30912 -2457 3 55 1.3953 -2457 3 56 1.8888 -2457 3 57 1.7916 -2457 3 58 1.9369 -9090 2 1 -2.6442 -9090 2 2 -2.7789 -9090 2 3 -2.5737 -9090 2 4 -2.8648 -9090 2 5 -2.2742 -9090 2 6 -2.5058 -9090 2 7 -2.5716 -9090 2 8 -2.4819 -9090 2 9 -2.0632 -9090 2 10 -2.2503 -9090 2 11 -2.6557 -9090 2 12 -2.0771 -9090 2 13 -2.2775 -9090 2 14 -2.1053 -9090 2 15 -2.61 -9090 2 16 -2.7219 -9090 2 17 -2.2947 -9090 2 18 -2.589 -9090 2 19 -2.1912 -9090 2 20 -2.3053 -9090 2 21 -1.7013 -9090 2 22 -1.649 -9090 2 23 -1.5332 -9090 2 24 -1.1913 -9090 2 25 -0.85137 -9090 2 26 -0.45222 -9090 2 27 0.75715 -9090 2 28 0.51396 -9090 2 29 -0.36522 -9090 2 30 0.52134 -9090 2 31 0.36923 -9090 2 32 -0.37695 -9090 2 33 0.26288 -9090 2 34 -0.17058 -9090 2 36 0.34689 -9090 2 37 0.93715 -9090 2 38 0.88018 -9090 2 39 1.0394 -9090 2 40 -2.4244 -9090 2 41 -1.907 -9090 2 42 -3.603 -9090 2 43 -4.1606 -9090 2 44 -2.887 -9090 2 45 -3.1615 -9090 2 46 -3.0522 -9090 2 47 -3.4183 -9090 2 48 -3.7764 -9090 2 49 -3.535 -9090 2 50 -2.9324 -9090 2 51 -3.3939 -9090 2 52 -2.4336 -9090 2 53 -1.7179 -9090 2 54 -1.4915 -9090 2 55 0.2099 -9090 2 56 1.2184 -9090 2 57 2.5413 -9090 2 58 3.603 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/growth.dat b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/growth.dat deleted file mode 100644 index 7c2a07b0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/growth.dat +++ /dev/null @@ -1,2883 +0,0 @@ -1 1 1 81.3 -1 1 1.25 84.2 -1 1 1.5 86.4 -1 1 1.75 88.9 -1 1 2 91.4 -1 1 3 101.1 -1 1 4 109.5 -1 1 5 115.8 -1 1 6 121.9 -1 1 7 130 -1 1 8 138.2 -1 1 8.5 141.1 -1 1 9 144.3 -1 1 9.5 147.5 -1 1 10 150.5 -1 1 10.5 153.4 -1 1 11 156.2 -1 1 11.5 159.7 -1 1 12 163.8 -1 1 12.5 168.8 -1 1 13 174.9 -1 1 13.5 181.2 -1 1 14 186.3 -1 1 14.5 189.6 -1 1 15 191.3 -1 1 15.5 192.1 -1 1 16 192.8 -1 1 16.5 193.2 -1 1 17 193.8 -1 1 17.5 194.3 -1 1 18 195.1 -2 1 1 76.2 -2 1 1.25 80.4 -2 1 1.5 83.2 -2 1 1.75 85.4 -2 1 2 87.6 -2 1 3 97 -2 1 4 104.6 -2 1 5 112.3 -2 1 6 118.9 -2 1 7 125 -2 1 8 130.1 -2 1 8.5 133 -2 1 9 135.4 -2 1 9.5 137.5 -2 1 10 139.7 -2 1 10.5 142.2 -2 1 11 144.2 -2 1 11.5 146.2 -2 1 12 148.1 -2 1 12.5 149.8 -2 1 13 151.6 -2 1 13.5 153.8 -2 1 14 156.3 -2 1 14.5 159.2 -2 1 15 163.3 -2 1 15.5 167.7 -2 1 16 171.5 -2 1 16.5 174.3 -2 1 17 176.1 -2 1 17.5 177.4 -2 1 18 178.7 -3 1 1 76.8 -3 1 1.25 79.8 -3 1 1.5 82.6 -3 1 1.75 84.7 -3 1 2 86.7 -3 1 3 94.2 -3 1 4 100.4 -3 1 5 107.1 -3 1 6 112.3 -3 1 7 118.6 -3 1 8 124 -3 1 8.5 126.5 -3 1 9 128.9 -3 1 9.5 131.2 -3 1 10 133.4 -3 1 10.5 135.8 -3 1 11 138.4 -3 1 11.5 141 -3 1 12 143.6 -3 1 12.5 146.8 -3 1 13 150.8 -3 1 13.5 155.1 -3 1 14 159.5 -3 1 14.5 163.3 -3 1 15 166.8 -3 1 15.5 167.8 -3 1 16 168.8 -3 1 16.5 169.8 -3 1 17 170.9 -3 1 17.5 171.2 -3 1 18 171.5 -4 1 1 74.1 -4 1 1.25 78.4 -4 1 1.5 82.6 -4 1 1.75 85.4 -4 1 2 88.1 -4 1 3 98.6 -4 1 4 104.4 -4 1 5 111 -4 1 6 116.3 -4 1 7 123.2 -4 1 8 129.9 -4 1 8.5 133 -4 1 9 136 -4 1 9.5 138.7 -4 1 10 141.4 -4 1 10.5 144 -4 1 11 146.4 -4 1 11.5 148.8 -4 1 12 151.4 -4 1 12.5 154.5 -4 1 13 157.7 -4 1 13.5 162.2 -4 1 14 167.4 -4 1 14.5 172.5 -4 1 15 176.3 -4 1 15.5 178.5 -4 1 16 179.8 -4 1 16.5 180.7 -4 1 17 181.4 -4 1 17.5 181.6 -4 1 18 181.8 -5 1 1 74.2 -5 1 1.25 76.3 -5 1 1.5 78.3 -5 1 1.75 80.3 -5 1 2 82.2 -5 1 3 89.4 -5 1 4 96.9 -5 1 5 104.1 -5 1 6 110.7 -5 1 7 115.8 -5 1 8 121.7 -5 1 8.5 125.2 -5 1 9 128.5 -5 1 9.5 131.2 -5 1 10 134.2 -5 1 10.5 137.4 -5 1 11 140.5 -5 1 11.5 143.3 -5 1 12 145.9 -5 1 12.5 148.7 -5 1 13 152 -5 1 13.5 155.8 -5 1 14 160.4 -5 1 14.5 165.1 -5 1 15 168.5 -5 1 15.5 170.4 -5 1 16 171.6 -5 1 16.5 172.4 -5 1 17 172.5 -5 1 17.5 172.5 -5 1 18 172.5 -6 1 1 76.8 -6 1 1.25 79.1 -6 1 1.5 81.1 -6 1 1.75 84.4 -6 1 2 87.4 -6 1 3 94 -6 1 4 102.4 -6 1 5 109.2 -6 1 6 116.1 -6 1 7 121.9 -6 1 8 127.8 -6 1 8.5 129.8 -6 1 9 132.4 -6 1 9.5 135 -6 1 10 137.3 -6 1 10.5 139.7 -6 1 11 142 -6 1 11.5 144.1 -6 1 12 146.9 -6 1 12.5 150 -6 1 13 153.4 -6 1 13.5 157.3 -6 1 14 161.6 -6 1 14.5 165.2 -6 1 15 168.8 -6 1 15.5 170.1 -6 1 16 171.5 -6 1 16.5 172.1 -6 1 17 172.6 -6 1 17.5 173.2 -6 1 18 173.8 -7 1 1 72.4 -7 1 1.25 76 -7 1 1.5 79.4 -7 1 1.75 82 -7 1 2 84.2 -7 1 3 93.2 -7 1 4 101.6 -7 1 5 109 -7 1 6 117.3 -7 1 7 122.9 -7 1 8 128.3 -7 1 8.5 130.9 -7 1 9 133.7 -7 1 9.5 136 -7 1 10 138 -7 1 10.5 139.9 -7 1 11 141.6 -7 1 11.5 143.4 -7 1 12 145.5 -7 1 12.5 147.8 -7 1 13 150.3 -7 1 13.5 152.8 -7 1 14 155.8 -7 1 14.5 159.2 -7 1 15 163.1 -7 1 15.5 166.5 -7 1 16 168.9 -7 1 16.5 170.2 -7 1 17 171.1 -7 1 17.5 171.8 -7 1 18 172.6 -8 1 1 73.8 -8 1 1.25 78.7 -8 1 1.5 83 -8 1 1.75 85.8 -8 1 2 88.4 -8 1 3 97.3 -8 1 4 106.7 -8 1 5 112.8 -8 1 6 119.1 -8 1 7 125.7 -8 1 8 132.3 -8 1 8.5 135.4 -8 1 9 138.3 -8 1 9.5 141.3 -8 1 10 144.7 -8 1 10.5 147.9 -8 1 11 151.2 -8 1 11.5 154.5 -8 1 12 158.2 -8 1 12.5 162.3 -8 1 13 166.5 -8 1 13.5 171.1 -8 1 14 175.2 -8 1 14.5 178.4 -8 1 15 180.8 -8 1 15.5 182.2 -8 1 16 183.2 -8 1 16.5 184 -8 1 17 184.7 -8 1 17.5 185 -8 1 18 185.2 -9 1 1 75.4 -9 1 1.25 81 -9 1 1.5 84.9 -9 1 1.75 87.9 -9 1 2 90 -9 1 3 97.3 -9 1 4 102.8 -9 1 5 108.2 -9 1 6 113.5 -9 1 7 120.2 -9 1 8 125.7 -9 1 8.5 127.9 -9 1 9 130.3 -9 1 9.5 133.2 -9 1 10 135.9 -9 1 10.5 137.9 -9 1 11 139.6 -9 1 11.5 141.5 -9 1 12 143.7 -9 1 12.5 146 -9 1 13 148.6 -9 1 13.5 151.5 -9 1 14 154.3 -9 1 14.5 157.8 -9 1 15 161.8 -9 1 15.5 165.6 -9 1 16 168.7 -9 1 16.5 171 -9 1 17 171.6 -9 1 17.5 172.3 -9 1 18 172.9 -10 1 1 78.8 -10 1 1.25 83.3 -10 1 1.5 87 -10 1 1.75 89.6 -10 1 2 91.4 -10 1 3 100.4 -10 1 4 111 -10 1 5 118.5 -10 1 6 125.8 -10 1 7 131.1 -10 1 8 138.4 -10 1 8.5 141.5 -10 1 9 144.5 -10 1 9.5 147.5 -10 1 10 150.5 -10 1 10.5 153.6 -10 1 11 156.8 -10 1 11.5 160.5 -10 1 12 164.6 -10 1 12.5 169.2 -10 1 13 174.3 -10 1 13.5 178.8 -10 1 14 181.9 -10 1 14.5 184.2 -10 1 15 185.6 -10 1 15.5 186.6 -10 1 16 187.1 -10 1 16.5 187.4 -10 1 17 187.8 -10 1 17.5 188.2 -10 1 18 188.4 -11 1 1 76.9 -11 1 1.25 79.9 -11 1 1.5 84.1 -11 1 1.75 88.5 -11 1 2 90.6 -11 1 3 96.6 -11 1 4 104.8 -11 1 5 112 -11 1 6 118.6 -11 1 7 124.8 -11 1 8 130.3 -11 1 8.5 133.1 -11 1 9 135.8 -11 1 9.5 138.7 -11 1 10 141.7 -11 1 10.5 144.2 -11 1 11 146.6 -11 1 11.5 148.7 -11 1 12 150.5 -11 1 12.5 152.4 -11 1 13 154 -11 1 13.5 158.9 -11 1 14 161.7 -11 1 14.5 165.1 -11 1 15 169.6 -11 1 15.5 174 -11 1 16 176.6 -11 1 16.5 178.6 -11 1 17 179.6 -11 1 17.5 180.2 -11 1 18 181.6 -12 1 1 81.6 -12 1 1.25 83.7 -12 1 1.5 86.3 -12 1 1.75 88.8 -12 1 2 92.2 -12 1 3 99.3 -12 1 4 105.8 -12 1 5 112.6 -12 1 6 119.6 -12 1 7 126.9 -12 1 8 133.8 -12 1 8.5 136.4 -12 1 9 139.9 -12 1 9.5 143.2 -12 1 10 146 -12 1 10.5 149 -12 1 11 151.8 -12 1 11.5 154.8 -12 1 12 158 -12 1 12.5 161.5 -12 1 13 165.3 -12 1 13.5 169.6 -12 1 14 174.3 -12 1 14.5 178.8 -12 1 15 182.1 -12 1 15.5 184.6 -12 1 16 186.1 -12 1 16.5 187.5 -12 1 17 188 -12 1 17.5 188.6 -12 1 18 189 -13 1 1 78 -13 1 1.25 81.8 -13 1 1.5 85 -13 1 1.75 86.4 -13 1 2 87.1 -13 1 3 96.2 -13 1 4 104 -13 1 5 111 -13 1 6 117.3 -13 1 7 124.1 -13 1 8 130 -13 1 8.5 133.6 -13 1 9 136.8 -13 1 9.5 139.6 -13 1 10 142.2 -13 1 10.5 144.8 -13 1 11 147.4 -13 1 11.5 149.8 -13 1 12 151.9 -13 1 12.5 154.1 -13 1 13 158.2 -13 1 13.5 163.3 -13 1 14 168.1 -13 1 14.5 173 -13 1 15 175.2 -13 1 15.5 177.4 -13 1 16 179.2 -13 1 16.5 180.6 -13 1 17 181.4 -13 1 17.5 181.9 -13 1 18 182.4 -14 1 1 76.4 -14 1 1.25 79.4 -14 1 1.5 83.4 -14 1 1.75 87.6 -14 1 2 91.4 -14 1 3 101.2 -14 1 4 106.4 -14 1 5 113.3 -14 1 6 120.3 -14 1 7 128.8 -14 1 8 135 -14 1 8.5 137.8 -14 1 9 140.6 -14 1 9.5 143.4 -14 1 10 146.5 -14 1 10.5 149.6 -14 1 11 152.2 -14 1 11.5 155.3 -14 1 12 159.2 -14 1 12.5 163.9 -14 1 13 168.6 -14 1 13.5 172.8 -14 1 14 176.6 -14 1 14.5 179.4 -14 1 15 181.4 -14 1 15.5 182.6 -14 1 16 183.7 -14 1 16.5 184.4 -14 1 17 185 -14 1 17.5 185.7 -14 1 18 185.8 -15 1 1 76.4 -15 1 1.25 81.2 -15 1 1.5 86 -15 1 1.75 89.2 -15 1 2 92.2 -15 1 3 101.3 -15 1 4 110.3 -15 1 5 117.3 -15 1 6 122.5 -15 1 7 129.5 -15 1 8 134.8 -15 1 8.5 137.4 -15 1 9 140 -15 1 9.5 142.5 -15 1 10 145 -15 1 10.5 147.8 -15 1 11 150.5 -15 1 11.5 153.4 -15 1 12 157.4 -15 1 12.5 162 -15 1 13 166.6 -15 1 13.5 170.7 -15 1 14 174 -15 1 14.5 176.1 -15 1 15 177.3 -15 1 15.5 177.9 -15 1 16 178.2 -15 1 16.5 178.3 -15 1 17 178.5 -15 1 17.5 178.5 -15 1 18 178.7 -16 1 1 76.2 -16 1 1.25 79.2 -16 1 1.5 82.3 -16 1 1.75 85.4 -16 1 2 88.4 -16 1 3 101 -16 1 4 107.4 -16 1 5 114.8 -16 1 6 120.7 -16 1 7 128 -16 1 8 134.5 -16 1 8.5 137.4 -16 1 9 139.9 -16 1 9.5 142.5 -16 1 10 145.7 -16 1 10.5 148.7 -16 1 11 151.3 -16 1 11.5 154.3 -16 1 12 158.1 -16 1 12.5 162.8 -16 1 13 167.5 -16 1 13.5 171.5 -16 1 14 175.1 -16 1 14.5 178 -16 1 15 179.8 -16 1 15.5 181 -16 1 16 181.9 -16 1 16.5 182.7 -16 1 17 183.3 -16 1 17.5 183.4 -16 1 18 183.4 -17 1 1 75 -17 1 1.25 78.4 -17 1 1.5 82 -17 1 1.75 84 -17 1 2 85.9 -17 1 3 95.6 -17 1 4 102.1 -17 1 5 109.2 -17 1 6 117.5 -17 1 7 124.8 -17 1 8 131.5 -17 1 8.5 134.9 -17 1 9 137.8 -17 1 9.5 140.7 -17 1 10 143.8 -17 1 10.5 146.8 -17 1 11 149.5 -17 1 11.5 152.4 -17 1 12 155.3 -17 1 12.5 158.9 -17 1 13 163.6 -17 1 13.5 168.6 -17 1 14 173 -17 1 14.5 176.3 -17 1 15 178.5 -17 1 15.5 180 -17 1 16 181 -17 1 16.5 181.8 -17 1 17 182.2 -17 1 17.5 182.6 -17 1 18 183 -18 1 1 79.7 -18 1 1.25 81.3 -18 1 1.5 83.3 -18 1 1.75 86.5 -18 1 2 88.9 -18 1 3 99.4 -18 1 4 104.1 -18 1 5 112.5 -18 1 6 119 -18 1 7 128 -18 1 8 133.6 -18 1 8.5 136.6 -18 1 9 139.5 -18 1 9.5 141.9 -18 1 10 144.8 -18 1 10.5 148.5 -18 1 11 152.3 -18 1 11.5 156.3 -18 1 12 161.2 -18 1 12.5 165.9 -18 1 13 169.5 -18 1 13.5 172.1 -18 1 14 174.2 -18 1 14.5 175.6 -18 1 15 176.4 -18 1 15.5 177 -18 1 16 177.3 -18 1 16.5 177.6 -18 1 17 177.3 -18 1 17.5 177 -18 1 18 177 -19 1 1 70 -19 1 1.25 74.5 -19 1 1.5 78.7 -19 1 1.75 82.3 -19 1 2 85.1 -19 1 3 93.6 -19 1 4 101.9 -19 1 5 108.8 -19 1 6 115.3 -19 1 7 122 -19 1 8 127.9 -19 1 8.5 130.9 -19 1 9 134.1 -19 1 9.5 136.8 -19 1 10 139.3 -19 1 10.5 141.6 -19 1 11 144 -19 1 11.5 146.1 -19 1 12 148.6 -19 1 12.5 151.7 -19 1 13 155 -19 1 13.5 158.9 -19 1 14 163.3 -19 1 14.5 167.4 -19 1 15 170.4 -19 1 15.5 171.9 -19 1 16 173 -19 1 16.5 173.7 -19 1 17 174.2 -19 1 17.5 174.6 -19 1 18 175 -20 1 1 73.8 -20 1 1.25 76.7 -20 1 1.5 79.3 -20 1 1.75 82.8 -20 1 2 86.4 -20 1 3 95.3 -20 1 4 102.2 -20 1 5 109.5 -20 1 6 116.1 -20 1 7 121.7 -20 1 8 128.3 -20 1 8.5 131.4 -20 1 9 134.3 -20 1 9.5 137 -20 1 10 140 -20 1 10.5 143 -20 1 11 145.6 -20 1 11.5 148.7 -20 1 12 152.3 -20 1 12.5 157 -20 1 13 162 -20 1 13.5 166.4 -20 1 14 169.8 -20 1 14.5 172.1 -20 1 15 173.7 -20 1 15.5 174.7 -20 1 16 175.5 -20 1 16.5 176.1 -20 1 17 176.4 -20 1 17.5 176.5 -20 1 18 176.8 -21 1 1 75.3 -21 1 1.25 79.1 -21 1 1.5 82.6 -21 1 1.75 85.1 -21 1 2 87.2 -21 1 3 95.6 -21 1 4 102.6 -21 1 5 109.7 -21 1 6 116.8 -21 1 7 121.7 -21 1 8 127.1 -21 1 8.5 129.8 -21 1 9 132.5 -21 1 9.5 134.7 -21 1 10 136.7 -21 1 10.5 138.9 -21 1 11 141.5 -21 1 11.5 143.6 -21 1 12 145.8 -21 1 12.5 148 -21 1 13 150 -21 1 13.5 152.5 -21 1 14 155.4 -21 1 14.5 158.9 -21 1 15 163 -21 1 15.5 166.8 -21 1 16 169.8 -21 1 16.5 172 -21 1 17 173.5 -21 1 17.5 174.9 -21 1 18 176.4 -22 1 1 76.6 -22 1 1.25 79 -22 1 1.5 82.6 -22 1 1.75 86.6 -22 1 2 89 -22 1 3 95.3 -22 1 4 102.1 -22 1 5 108.5 -22 1 6 111.5 -22 1 7 119.4 -22 1 8 126.1 -22 1 8.5 128.8 -22 1 9 131.4 -22 1 9.5 134.3 -22 1 10 136.8 -22 1 10.5 139.7 -22 1 11 142.2 -22 1 11.5 144.1 -22 1 12 146.6 -22 1 12.5 150 -22 1 13 154 -22 1 13.5 158 -22 1 14 162.1 -22 1 14.5 166.5 -22 1 15 169.2 -22 1 15.5 170.7 -22 1 16 171.9 -22 1 16.5 172.8 -22 1 17 173.4 -22 1 17.5 173.8 -22 1 18 174 -23 1 1 73 -23 1 1.25 76 -23 1 1.5 78.7 -23 1 1.75 82.2 -23 1 2 84.6 -23 1 3 94.7 -23 1 4 104.9 -23 1 5 109 -23 1 6 115.3 -23 1 7 121.2 -23 1 8 126.5 -23 1 8.5 130.4 -23 1 9 134.3 -23 1 9.5 136.6 -23 1 10 139.1 -23 1 10.5 141.6 -23 1 11 143.8 -23 1 11.5 146.3 -23 1 12 149 -23 1 12.5 151.6 -23 1 13 154.2 -23 1 13.5 157.2 -23 1 14 160.6 -23 1 14.5 164.3 -23 1 15 168.6 -23 1 15.5 173 -23 1 16 176.2 -23 1 16.5 178 -23 1 17 179.1 -23 1 17.5 180.2 -23 1 18 181 -24 1 1 75.1 -24 1 1.25 78.6 -24 1 1.5 81.9 -24 1 1.75 84 -24 1 2 85.6 -24 1 3 92.8 -24 1 4 100.6 -24 1 5 106.7 -24 1 6 112.5 -24 1 7 118.6 -24 1 8 123.7 -24 1 8.5 126.4 -24 1 9 129.1 -24 1 9.5 131.8 -24 1 10 134.5 -24 1 10.5 136.8 -24 1 11 139 -24 1 11.5 141.8 -24 1 12 145.3 -24 1 12.5 149.7 -24 1 13 154.4 -24 1 13.5 158.8 -24 1 14 162.2 -24 1 14.5 164.8 -24 1 15 167 -24 1 15.5 168 -24 1 16 168.8 -24 1 16.5 169.4 -24 1 17 169.7 -24 1 17.5 169.8 -24 1 18 170.1 -25 1 1 77.4 -25 1 1.25 81.6 -25 1 1.5 84.8 -25 1 1.75 88 -25 1 2 89.6 -25 1 3 96.5 -25 1 4 103.3 -25 1 5 108.7 -25 1 6 113.8 -25 1 7 120.1 -25 1 8 125.8 -25 1 8.5 128.9 -25 1 9 132.1 -25 1 9.5 134.3 -25 1 10 136.9 -25 1 10.5 139.2 -25 1 11 141.6 -25 1 11.5 144.2 -25 1 12 146.7 -25 1 12.5 149.6 -25 1 13 153.3 -25 1 13.5 157.7 -25 1 14 162.3 -25 1 14.5 166.1 -25 1 15 168.6 -25 1 15.5 170.5 -25 1 16 172.2 -25 1 16.5 173.1 -25 1 17 173.8 -25 1 17.5 174.4 -25 1 18 175.2 -26 1 1 73.2 -26 1 1.25 76.2 -26 1 1.5 79 -26 1 1.75 81.8 -26 1 2 84.8 -26 1 3 95.3 -26 1 4 101.6 -26 1 5 109.3 -26 1 6 116 -26 1 7 122.7 -26 1 8 129.9 -26 1 8.5 133.1 -26 1 9 136.2 -26 1 9.5 139.4 -26 1 10 142.6 -26 1 10.5 144.7 -26 1 11 147.9 -26 1 11.5 150.8 -26 1 12 153.5 -26 1 12.5 156.1 -26 1 13 158.7 -26 1 13.5 161.1 -26 1 14 163.7 -26 1 14.5 166.8 -26 1 15 170.3 -26 1 15.5 174.3 -26 1 16 178.3 -26 1 16.5 181 -26 1 17 183.1 -26 1 17.5 184.6 -26 1 18 185.1 -27 1 1 78 -27 1 1.25 82.2 -27 1 1.5 86.1 -27 1 1.75 88.9 -27 1 2 91.4 -27 1 3 101.3 -27 1 4 108 -27 1 5 114.9 -27 1 6 121.5 -27 1 7 128.3 -27 1 8 134 -27 1 8.5 137 -27 1 9 140.1 -27 1 9.5 142.5 -27 1 10 145 -27 1 10.5 147.4 -27 1 11 149.5 -27 1 11.5 151.4 -27 1 12 153.2 -27 1 12.5 155.2 -27 1 13 157.1 -27 1 13.5 159.2 -27 1 14 161.4 -27 1 14.5 163.6 -27 1 15 166.6 -27 1 15.5 170.9 -27 1 16 175 -27 1 16.5 178.1 -27 1 17 180.5 -27 1 17.5 182 -27 1 18 182.7 -28 1 1 76.5 -28 1 1.25 80 -28 1 1.5 82.8 -28 1 1.75 85.4 -28 1 2 88.4 -28 1 3 95.2 -28 1 4 102 -28 1 5 107.5 -28 1 6 114 -28 1 7 119.4 -28 1 8 124.2 -28 1 8.5 126.6 -28 1 9 129.1 -28 1 9.5 131.6 -28 1 10 134 -28 1 10.5 136.5 -28 1 11 138.8 -28 1 11.5 141 -28 1 12 143.3 -28 1 12.5 145.7 -28 1 13 148.1 -28 1 13.5 150.7 -28 1 14 154.4 -28 1 14.5 158.9 -28 1 15 162.7 -28 1 15.5 165.2 -28 1 16 166.9 -28 1 16.5 168 -28 1 17 168.7 -28 1 17.5 169.1 -28 1 18 169.4 -29 1 1 78 -29 1 1.25 80.6 -29 1 1.5 85.4 -29 1 1.75 90.2 -29 1 2 93.5 -29 1 3 103.6 -29 1 4 111 -29 1 5 117.9 -29 1 6 126.7 -29 1 7 133.6 -29 1 8 140.3 -29 1 8.5 143.9 -29 1 9 147.4 -29 1 9.5 150.4 -29 1 10 153.4 -29 1 10.5 156.1 -29 1 11 159.1 -29 1 11.5 162.8 -29 1 12 167.1 -29 1 12.5 171.9 -29 1 13 177.1 -29 1 13.5 181.8 -29 1 14 185.7 -29 1 14.5 188.8 -29 1 15 190.8 -29 1 15.5 192.2 -29 1 16 193 -29 1 16.5 193.6 -29 1 17 194 -29 1 17.5 194.1 -29 1 18 194.3 -30 1 1 74.9 -30 1 1.25 78.7 -30 1 1.5 81 -30 1 1.75 84.9 -30 1 2 87.7 -30 1 3 93.2 -30 1 4 104.2 -30 1 5 110 -30 1 6 116 -30 1 7 123.8 -30 1 8 130.6 -30 1 8.5 133.3 -30 1 9 136 -30 1 9.5 138.9 -30 1 10 141.9 -30 1 10.5 144.1 -30 1 11 146.2 -30 1 11.5 148.1 -30 1 12 150.1 -30 1 12.5 152.5 -30 1 13 155.1 -30 1 13.5 158.3 -30 1 14 162.4 -30 1 14.5 167.3 -30 1 15 171.6 -30 1 15.5 174.9 -30 1 16 177.4 -30 1 16.5 179 -30 1 17 180 -30 1 17.5 180.7 -30 1 18 181.1 -31 1 1 74.2 -31 1 1.25 78.3 -31 1 1.5 82.3 -31 1 1.75 86 -31 1 2 89.1 -31 1 3 97.1 -31 1 4 104.9 -31 1 5 112 -31 1 6 118.6 -31 1 7 124.7 -31 1 8 131.8 -31 1 8.5 135 -31 1 9 138.2 -31 1 9.5 141.2 -31 1 10 143.9 -31 1 10.5 146.4 -31 1 11 149.5 -31 1 11.5 153.8 -31 1 12 158.4 -31 1 12.5 163.2 -31 1 13 168 -31 1 13.5 172.4 -31 1 14 175.7 -31 1 14.5 177.6 -31 1 15 178.7 -31 1 15.5 179.8 -31 1 16 180.4 -31 1 16.5 180.8 -31 1 17 180.9 -31 1 17.5 180.8 -31 1 18 181.3 -32 1 1 78.7 -32 1 1.25 83.3 -32 1 1.5 87 -32 1 1.75 90.4 -32 1 2 93.1 -32 1 3 103 -32 1 4 109.7 -32 1 5 118 -32 1 6 124.6 -32 1 7 132.3 -32 1 8 138.4 -32 1 8.5 141.6 -32 1 9 144.8 -32 1 9.5 147.4 -32 1 10 150.5 -32 1 10.5 153.4 -32 1 11 156.1 -32 1 11.5 159.3 -32 1 12 163.7 -32 1 12.5 168.8 -32 1 13 174.2 -32 1 13.5 179 -32 1 14 183.1 -32 1 14.5 186 -32 1 15 188 -32 1 15.5 189.6 -32 1 16 190.7 -32 1 16.5 191.3 -32 1 17 191.7 -32 1 17.5 192.2 -32 1 18 192.8 -33 1 1 78 -33 1 1.25 82.6 -33 1 1.5 85.8 -33 1 1.75 88.4 -33 1 2 90.9 -33 1 3 99.1 -33 1 4 105.8 -33 1 5 112.2 -33 1 6 117.6 -33 1 7 123.4 -33 1 8 129.6 -33 1 8.5 132.3 -33 1 9 135 -33 1 9.5 137.3 -33 1 10 139.7 -33 1 10.5 142 -33 1 11 144.4 -33 1 11.5 146.5 -33 1 12 148.6 -33 1 12.5 150.7 -33 1 13 153.1 -33 1 13.5 156 -33 1 14 159.6 -33 1 14.5 163.5 -33 1 15 167.8 -33 1 15.5 170.3 -33 1 16 172.8 -33 1 16.5 174.5 -33 1 17 175.5 -33 1 17.5 176 -33 1 18 176.4 -34 1 1 76 -34 1 1.25 81.2 -34 1 1.5 84.6 -34 1 1.75 87 -34 1 2 89.1 -34 1 3 94.6 -34 1 4 102 -34 1 5 107.4 -34 1 6 113 -34 1 7 119.4 -34 1 8 124.2 -34 1 8.5 127 -34 1 9 129.8 -34 1 9.5 132.9 -34 1 10 136.1 -34 1 10.5 139 -34 1 11 141.7 -34 1 11.5 144.4 -34 1 12 147.4 -34 1 12.5 150.9 -34 1 13 155.9 -34 1 13.5 161.5 -34 1 14 166.2 -34 1 14.5 169.6 -34 1 15 171.9 -34 1 15.5 172.9 -34 1 16 173.4 -34 1 16.5 173.8 -34 1 17 174.2 -34 1 17.5 174.2 -34 1 18 174.1 -35 1 1 76 -35 1 1.25 80.1 -35 1 1.5 85.9 -35 1 1.75 91.4 -35 1 2 95.2 -35 1 3 103.5 -35 1 4 111.6 -35 1 5 118.1 -35 1 6 126.3 -35 1 7 132.8 -35 1 8 139.1 -35 1 8.5 143.4 -35 1 9 147.5 -35 1 9.5 150.6 -35 1 10 154 -35 1 10.5 157.6 -35 1 11 160.9 -35 1 11.5 163.8 -35 1 12 166.3 -35 1 12.5 168.6 -35 1 13 171 -35 1 13.5 173.8 -35 1 14 177.3 -35 1 14.5 180.7 -35 1 15 183.4 -35 1 15.5 185.3 -35 1 16 186.2 -35 1 16.5 186.4 -35 1 17 186.7 -35 1 17.5 187.2 -35 1 18 188 -36 1 1 68.8 -36 1 1.25 73.5 -36 1 1.5 77.5 -36 1 1.75 80.8 -36 1 2 84 -36 1 3 95.2 -36 1 4 103.1 -36 1 5 111.1 -36 1 6 118.4 -36 1 7 124.9 -36 1 8 130.7 -36 1 8.5 134 -36 1 9 137.5 -36 1 9.5 140.3 -36 1 10 143 -36 1 10.5 145.5 -36 1 11 148 -36 1 11.5 150.8 -36 1 12 153.6 -36 1 12.5 157.3 -36 1 13 162.1 -36 1 13.5 167 -36 1 14 171.2 -36 1 14.5 174.4 -36 1 15 176.8 -36 1 15.5 178.4 -36 1 16 179.1 -36 1 16.5 179.7 -36 1 17 180.1 -36 1 17.5 180.5 -36 1 18 180.8 -37 1 1 82.2 -37 1 1.25 88.9 -37 1 1.5 90.9 -37 1 1.75 93 -37 1 2 95.3 -37 1 3 103.8 -37 1 4 111.8 -37 1 5 117.1 -37 1 6 123.7 -37 1 7 130.4 -37 1 8 136.4 -37 1 8.5 139.3 -37 1 9 142.2 -37 1 9.5 145.2 -37 1 10 148.3 -37 1 10.5 151.2 -37 1 11 154.2 -37 1 11.5 157.6 -37 1 12 161.8 -37 1 12.5 166.5 -37 1 13 171.1 -37 1 13.5 174.9 -37 1 14 177.9 -37 1 14.5 180.1 -37 1 15 181.3 -37 1 15.5 181.8 -37 1 16 182.2 -37 1 16.5 182.7 -37 1 17 183.1 -37 1 17.5 183.4 -37 1 18 183.7 -38 1 1 77 -38 1 1.25 82.5 -38 1 1.5 85.6 -38 1 1.75 87.9 -38 1 2 90.3 -38 1 3 98.3 -38 1 4 107.2 -38 1 5 114.6 -38 1 6 121.9 -38 1 7 129.2 -38 1 8 135.9 -38 1 8.5 139.1 -38 1 9 142.2 -38 1 9.5 145 -38 1 10 147.8 -38 1 10.5 150.5 -38 1 11 153.5 -38 1 11.5 157.5 -38 1 12 161.5 -38 1 12.5 165.5 -38 1 13 169.7 -38 1 13.5 173.1 -38 1 14 175.6 -38 1 14.5 177.2 -38 1 15 178.3 -38 1 15.5 179 -38 1 16 179.2 -38 1 16.5 179.3 -38 1 17 179.8 -38 1 17.5 180.3 -38 1 18 180.7 -39 1 1 75 -39 1 1.25 79.2 -39 1 1.5 82.2 -39 1 1.75 84.6 -39 1 2 87 -39 1 3 95.8 -39 1 4 103.1 -39 1 5 110.2 -39 1 6 116.1 -39 1 7 122.2 -39 1 8 127.7 -39 1 8.5 130.7 -39 1 9 133.7 -39 1 9.5 136.8 -39 1 10 139.8 -39 1 10.5 142.6 -39 1 11 145.1 -39 1 11.5 147.3 -39 1 12 150.2 -39 1 12.5 153.3 -39 1 13 156.7 -39 1 13.5 160.5 -39 1 14 164.1 -39 1 14.5 167.7 -39 1 15 171 -39 1 15.5 173.1 -39 1 16 174.7 -39 1 16.5 175.6 -39 1 17 176.1 -39 1 17.5 176.3 -39 1 18 176.4 -40 2 1 76.2 -40 2 1.25 80.4 -40 2 1.5 83.3 -40 2 1.75 85.7 -40 2 2 87.7 -40 2 3 96 -40 2 4 103.8 -40 2 5 110.7 -40 2 6 116.8 -40 2 7 122.2 -40 2 8 127.4 -40 2 8.5 130.6 -40 2 9 133.4 -40 2 9.5 135.9 -40 2 10 138.6 -40 2 10.5 142.4 -40 2 11 146.8 -40 2 11.5 150.3 -40 2 12 153.1 -40 2 12.5 155 -40 2 13 156.2 -40 2 13.5 157.1 -40 2 14 157.7 -40 2 14.5 158 -40 2 15 158.2 -40 2 15.5 158.4 -40 2 16 158.6 -40 2 16.5 158.7 -40 2 17 158.7 -40 2 17.5 158.8 -40 2 18 158.9 -41 2 1 74.6 -41 2 1.25 78 -41 2 1.5 82 -41 2 1.75 86.9 -41 2 2 90 -41 2 3 94.9 -41 2 4 102.1 -41 2 5 109.2 -41 2 6 115.6 -41 2 7 122.7 -41 2 8 128.2 -41 2 8.5 131.1 -41 2 9 134.8 -41 2 9.5 138.2 -41 2 10 140.9 -41 2 10.5 143.4 -41 2 11 146.1 -41 2 11.5 149.4 -41 2 12 152.9 -41 2 12.5 156.4 -41 2 13 159.5 -41 2 13.5 161.6 -41 2 14 162.6 -41 2 14.5 163.6 -41 2 15 165 -41 2 15.5 165.3 -41 2 16 165.6 -41 2 16.5 165.9 -41 2 17 166.1 -41 2 17.5 166 -41 2 18 166 -42 2 1 78.2 -42 2 1.25 81.8 -42 2 1.5 85.4 -42 2 1.75 87.9 -42 2 2 89.6 -42 2 3 97.1 -42 2 4 109.2 -42 2 5 116.2 -42 2 6 122.9 -42 2 7 128 -42 2 8 134.2 -42 2 8.5 138 -42 2 9 141.5 -42 2 9.5 145.2 -42 2 10 148.8 -42 2 10.5 152.3 -42 2 11 155.6 -42 2 11.5 158.2 -42 2 12 159.6 -42 2 12.5 160.1 -42 2 13 160.3 -42 2 13.5 160.8 -42 2 14 161.6 -42 2 14.5 161.8 -42 2 15 161.7 -42 2 15.5 161.8 -42 2 16 161.9 -42 2 16.5 161.9 -42 2 17 161.7 -42 2 17.5 161.9 -42 2 18 162.2 -43 2 1 77.7 -43 2 1.25 80.5 -43 2 1.5 83.3 -43 2 1.75 87 -43 2 2 90.3 -43 2 3 98.6 -43 2 4 106.3 -43 2 5 113.9 -43 2 6 120.7 -43 2 7 125.7 -43 2 8 131 -43 2 8.5 134.1 -43 2 9 137.1 -43 2 9.5 140.2 -43 2 10 143 -43 2 10.5 145.7 -43 2 11 148.5 -43 2 11.5 151.5 -43 2 12 154.8 -43 2 12.5 158.4 -43 2 13 161.2 -43 2 13.5 163.5 -43 2 14 165.2 -43 2 14.5 166 -43 2 15 166.5 -43 2 15.5 166.9 -43 2 16 167.2 -43 2 16.5 167.4 -43 2 17 167.4 -43 2 17.5 167.6 -43 2 18 167.8 -44 2 1 76 -44 2 1.25 80 -44 2 1.5 83 -44 2 1.75 86 -44 2 2 89 -44 2 3 96 -44 2 4 103 -44 2 5 110 -44 2 6 117 -44 2 7 123 -44 2 8 131 -44 2 8.5 133 -44 2 9 136 -44 2 9.5 139 -44 2 10 141 -44 2 10.5 144 -44 2 11 147 -44 2 11.5 150 -44 2 12 153 -44 2 12.5 157 -44 2 13 161 -44 2 13.5 164 -44 2 14 166 -44 2 14.5 167 -44 2 15 168 -44 2 15.5 168 -44 2 16 169 -44 2 16.5 169 -44 2 17 170 -44 2 17.5 170 -44 2 18 170 -45 2 1 73.5 -45 2 1.25 77 -45 2 1.5 81.5 -45 2 1.75 83.8 -45 2 2 85.5 -45 2 3 92.9 -45 2 4 99.6 -45 2 5 106.7 -45 2 6 113.3 -45 2 7 118.4 -45 2 8 124.2 -45 2 8.5 127.6 -45 2 9 130.6 -45 2 9.5 133.6 -45 2 10 136.4 -45 2 10.5 139.7 -45 2 11 143.7 -45 2 11.5 148 -45 2 12 152 -45 2 12.5 155.7 -45 2 13 158.9 -45 2 13.5 160.9 -45 2 14 162.2 -45 2 14.5 163.2 -45 2 15 163.8 -45 2 15.5 164 -45 2 16 164.2 -45 2 16.5 164.4 -45 2 17 164.4 -45 2 17.5 164.8 -45 2 18 164.9 -46 2 1 67.4 -46 2 1.25 72.3 -46 2 1.5 75.9 -46 2 1.75 79.4 -46 2 2 82.2 -46 2 3 91.6 -46 2 4 99.5 -46 2 5 105.7 -46 2 6 112.5 -46 2 7 117.2 -46 2 8 122.8 -46 2 8.5 125.5 -46 2 9 128 -46 2 9.5 130.3 -46 2 10 132.5 -46 2 10.5 134.9 -46 2 11 137.4 -46 2 11.5 139.9 -46 2 12 142.1 -46 2 12.5 144.2 -46 2 13 146.4 -46 2 13.5 148.9 -46 2 14 152.2 -46 2 14.5 155.3 -46 2 15 157.9 -46 2 15.5 160.1 -46 2 16 161.6 -46 2 16.5 162.4 -46 2 17 163 -46 2 17.5 163.4 -46 2 18 164 -47 2 1 80.5 -47 2 1.25 85.1 -47 2 1.5 89.7 -47 2 1.75 93.7 -47 2 2 97.3 -47 2 3 106.3 -47 2 4 114.4 -47 2 5 123.5 -47 2 6 130.6 -47 2 7 137.7 -47 2 8 144.4 -47 2 8.5 148.4 -47 2 9 152.5 -47 2 9.5 156.6 -47 2 10 161.5 -47 2 10.5 166.1 -47 2 11 170.2 -47 2 11.5 173.5 -47 2 12 176 -47 2 12.5 177.3 -47 2 13 178.3 -47 2 13.5 179.1 -47 2 14 180 -47 2 14.5 181 -47 2 15 181.6 -47 2 15.5 181.9 -47 2 16 182.3 -47 2 16.5 182.6 -47 2 17 182.8 -47 2 17.5 182.7 -47 2 18 183.2 -48 2 1 77 -48 2 1.25 80.7 -48 2 1.5 83.4 -48 2 1.75 85.6 -48 2 2 88.9 -48 2 3 96.5 -48 2 4 104.2 -48 2 5 111.4 -48 2 6 118.2 -48 2 7 124.2 -48 2 8 129.6 -48 2 8.5 132 -48 2 9 135.2 -48 2 9.5 138.5 -48 2 10 141.5 -48 2 10.5 144.9 -48 2 11 148.9 -48 2 11.5 152.6 -48 2 12 156.2 -48 2 12.5 159.6 -48 2 13 161.4 -48 2 13.5 162.4 -48 2 14 163.1 -48 2 14.5 163.6 -48 2 15 164.3 -48 2 15.5 164.5 -48 2 16 164.4 -48 2 16.5 164.3 -48 2 17 164.1 -48 2 17.5 164 -48 2 18 163.8 -49 2 1 74.7 -49 2 1.25 77.9 -49 2 1.5 81.3 -49 2 1.75 84.8 -49 2 2 87.6 -49 2 3 98.6 -49 2 4 107.8 -49 2 5 116.2 -49 2 6 124.6 -49 2 7 130.6 -49 2 8 136.2 -49 2 8.5 139.3 -49 2 9 142.3 -49 2 9.5 145.5 -49 2 10 148.7 -49 2 10.5 152.3 -49 2 11 156.6 -49 2 11.5 161 -49 2 12 164.7 -49 2 12.5 167.5 -49 2 13 169.1 -49 2 13.5 170.2 -49 2 14 171.3 -49 2 14.5 172.1 -49 2 15 172.6 -49 2 15.5 172.9 -49 2 16 173.1 -49 2 16.5 173.3 -49 2 17 173.6 -49 2 17.5 173.8 -49 2 18 174 -50 2 1 69.3 -50 2 1.25 76.1 -50 2 1.5 80.7 -50 2 1.75 84.4 -50 2 2 87.1 -50 2 3 94.6 -50 2 4 103.4 -50 2 5 110 -50 2 6 116.6 -50 2 7 122.6 -50 2 8 128.1 -50 2 8.5 130.4 -50 2 9 133.2 -50 2 9.5 135.8 -50 2 10 138.2 -50 2 10.5 140.7 -50 2 11 142.7 -50 2 11.5 144.4 -50 2 12 146.2 -50 2 12.5 148.5 -50 2 13 151.3 -50 2 13.5 154.6 -50 2 14 158.3 -50 2 14.5 161.4 -50 2 15 163.5 -50 2 15.5 165 -50 2 16 166 -50 2 16.5 166.5 -50 2 17 166.7 -50 2 17.5 166.9 -50 2 18 167.1 -51 2 1 72.4 -51 2 1.25 75.2 -51 2 1.5 77.8 -51 2 1.75 80.7 -51 2 2 83.6 -51 2 3 95.3 -51 2 4 102.4 -51 2 5 109.6 -51 2 6 116 -51 2 7 121.7 -51 2 8 127.7 -51 2 8.5 130.1 -51 2 9 133.1 -51 2 9.5 135.5 -51 2 10 137.5 -51 2 10.5 140 -51 2 11 143.1 -51 2 11.5 146.8 -51 2 12 150.7 -51 2 12.5 154.2 -51 2 13 157 -51 2 13.5 159 -51 2 14 160.5 -51 2 14.5 161.5 -51 2 15 162.1 -51 2 15.5 162.5 -51 2 16 162.7 -51 2 16.5 163 -51 2 17 163.4 -51 2 17.5 163.1 -51 2 18 163 -52 2 1 67.3 -52 2 1.25 73.7 -52 2 1.5 76.2 -52 2 1.75 79 -52 2 2 81.4 -52 2 3 90.2 -52 2 4 96.8 -52 2 5 102.4 -52 2 6 108.7 -52 2 7 113.8 -52 2 8 118.8 -52 2 8.5 121.1 -52 2 9 123.2 -52 2 9.5 125.4 -52 2 10 127.7 -52 2 10.5 129.9 -52 2 11 131.6 -52 2 11.5 133.5 -52 2 12 135.6 -52 2 12.5 137.6 -52 2 13 139.5 -52 2 13.5 141.8 -52 2 14 145 -52 2 14.5 148.2 -52 2 15 150.8 -52 2 15.5 152.2 -52 2 16 153 -52 2 16.5 153.6 -52 2 17 154.1 -52 2 17.5 154.4 -52 2 18 154.6 -53 2 1 76.7 -53 2 1.25 80 -53 2 1.5 83.8 -53 2 1.75 86.8 -53 2 2 89.7 -53 2 3 96.2 -53 2 4 104.5 -53 2 5 111.5 -53 2 6 118.6 -53 2 7 125 -53 2 8 130.5 -53 2 8.5 133 -53 2 9 135.8 -53 2 9.5 138.6 -53 2 10 141.4 -53 2 10.5 144.2 -53 2 11 146.6 -53 2 11.5 148.8 -53 2 12 151.4 -53 2 12.5 154.6 -53 2 13 157.8 -53 2 13.5 161.2 -53 2 14 164.5 -53 2 14.5 166.6 -53 2 15 167.8 -53 2 15.5 168.6 -53 2 16 169.2 -53 2 16.5 169.8 -53 2 17 169.8 -53 2 17.5 170 -53 2 18 170.3 -54 2 1 72.8 -54 2 1.25 78.2 -54 2 1.5 84.2 -54 2 1.75 87 -54 2 2 88.4 -54 2 3 94.4 -54 2 4 100.3 -54 2 5 106.6 -54 2 6 120.5 -54 2 7 127.3 -54 2 8 133.6 -54 2 8.5 136.4 -54 2 9 139.5 -54 2 9.5 142.5 -54 2 10 146 -54 2 10.5 150.2 -54 2 11 154.3 -54 2 11.5 158.6 -54 2 12 162.6 -54 2 12.5 164.7 -54 2 13 166 -54 2 13.5 167.1 -54 2 14 168.3 -54 2 14.5 168.7 -54 2 15 169.1 -54 2 15.5 169.5 -54 2 16 169.9 -54 2 16.5 170.1 -54 2 17 170.3 -54 2 17.5 170.3 -54 2 18 170.6 -55 2 1 72 -55 2 1.25 74.9 -55 2 1.5 80 -55 2 1.75 82.8 -55 2 2 83.8 -55 2 3 92.3 -55 2 4 98.2 -55 2 5 105.2 -55 2 6 110.4 -55 2 7 115.6 -55 2 8 119.4 -55 2 8.5 121.9 -55 2 9 124.2 -55 2 9.5 126.3 -55 2 10 128.5 -55 2 10.5 131.2 -55 2 11 134.3 -55 2 11.5 137.3 -55 2 12 140.5 -55 2 12.5 143.6 -55 2 13 146.8 -55 2 13.5 149 -55 2 14 150.2 -55 2 14.5 151.4 -55 2 15 152.6 -55 2 15.5 153.4 -55 2 16 154.1 -55 2 16.5 154.9 -55 2 17 155.7 -55 2 17.5 156.2 -55 2 18 156.5 -56 2 1 68.4 -56 2 1.25 75 -56 2 1.5 81.3 -56 2 1.75 85 -56 2 2 87.6 -56 2 3 94.6 -56 2 4 102.4 -56 2 5 109.2 -56 2 6 116.2 -56 2 7 122.7 -56 2 8 129.4 -56 2 8.5 132.4 -56 2 9 135.6 -56 2 9.5 139.4 -56 2 10 143.6 -56 2 10.5 147.9 -56 2 11 151.9 -56 2 11.5 155 -56 2 12 157 -56 2 12.5 158 -56 2 13 158.9 -56 2 13.5 159.4 -56 2 14 159.7 -56 2 14.5 159.9 -56 2 15 160.2 -56 2 15.5 160.2 -56 2 16 160.3 -56 2 16.5 160.4 -56 2 17 160.4 -56 2 17.5 160.3 -56 2 18 160.3 -57 2 1 76 -57 2 1.25 82.1 -57 2 1.5 87.5 -57 2 1.75 91.1 -57 2 2 94 -57 2 3 101.1 -57 2 4 108.8 -57 2 5 116.7 -57 2 6 124.7 -57 2 7 132.3 -57 2 8 138.2 -57 2 8.5 141.2 -57 2 9 144.1 -57 2 9.5 146.8 -57 2 10 150.2 -57 2 10.5 153.9 -57 2 11 157.3 -57 2 11.5 161 -57 2 12 164.5 -57 2 12.5 166.8 -57 2 13 168 -57 2 13.5 168.7 -57 2 14 169.3 -57 2 14.5 169.6 -57 2 15 169.8 -57 2 15.5 170.1 -57 2 16 170.3 -57 2 16.5 170.5 -57 2 17 170.6 -57 2 17.5 170.8 -57 2 18 170.8 -58 2 1 73.7 -58 2 1.25 78.2 -58 2 1.5 79.9 -58 2 1.75 82 -58 2 2 86.4 -58 2 3 95.7 -58 2 4 101.9 -58 2 5 110 -58 2 6 117.6 -58 2 7 122.7 -58 2 8 128.7 -58 2 8.5 131.6 -58 2 9 134.6 -58 2 9.5 137.6 -58 2 10 141.6 -58 2 10.5 146.9 -58 2 11 152.1 -58 2 11.5 156.3 -58 2 12 159.4 -58 2 12.5 161 -58 2 13 162 -58 2 13.5 162.8 -58 2 14 163.6 -58 2 14.5 164.2 -58 2 15 164.6 -58 2 15.5 164.9 -58 2 16 165 -58 2 16.5 165.1 -58 2 17 165.1 -58 2 17.5 165.1 -58 2 18 165.2 -59 2 1 73.7 -59 2 1.25 81.3 -59 2 1.5 83.8 -59 2 1.75 85.1 -59 2 2 88.9 -59 2 3 96.1 -59 2 4 106.1 -59 2 5 113 -59 2 6 119.1 -59 2 7 124.7 -59 2 8 130.7 -59 2 8.5 134 -59 2 9 137.2 -59 2 9.5 140.9 -59 2 10 144.2 -59 2 10.5 147.3 -59 2 11 150.2 -59 2 11.5 154.2 -59 2 12 158.4 -59 2 12.5 161.2 -59 2 13 163.9 -59 2 13.5 165.4 -59 2 14 166.8 -59 2 14.5 167.5 -59 2 15 168.2 -59 2 15.5 168.8 -59 2 16 169.5 -59 2 16.5 169.6 -59 2 17 169.6 -59 2 17.5 169.6 -59 2 18 169.8 -60 2 1 74.4 -60 2 1.25 77.5 -60 2 1.5 81.5 -60 2 1.75 84.5 -60 2 2 86.7 -60 2 3 95 -60 2 4 103.6 -60 2 5 112 -60 2 6 119.6 -60 2 7 127.5 -60 2 8 133.2 -60 2 8.5 136.6 -60 2 9 139.8 -60 2 9.5 142.7 -60 2 10 146 -60 2 10.5 150.3 -60 2 11 154.4 -60 2 11.5 158.3 -60 2 12 162.4 -60 2 12.5 165.5 -60 2 13 167.9 -60 2 13.5 169.4 -60 2 14 170.1 -60 2 14.5 170.2 -60 2 15 170.6 -60 2 15.5 171.1 -60 2 16 171.5 -60 2 16.5 171.5 -60 2 17 171.5 -60 2 17.5 171.4 -60 2 18 171.2 -61 2 1 74.9 -61 2 1.25 77.8 -61 2 1.5 81.2 -61 2 1.75 83.7 -61 2 2 86.4 -61 2 3 94.2 -61 2 4 98.6 -61 2 5 107.7 -61 2 6 114.8 -61 2 7 122.7 -61 2 8 128.3 -61 2 8.5 131 -61 2 9 134.2 -61 2 9.5 137.8 -61 2 10 141.4 -61 2 10.5 145.4 -61 2 11 149.7 -61 2 11.5 153.9 -61 2 12 157 -61 2 12.5 159.1 -61 2 13 160.4 -61 2 13.5 161.2 -61 2 14 161.8 -61 2 14.5 162.4 -61 2 15 163 -61 2 15.5 163.1 -61 2 16 163.1 -61 2 16.5 163.3 -61 2 17 163.6 -61 2 17.5 163.7 -61 2 18 163.8 -62 2 1 72 -62 2 1.25 77.1 -62 2 1.5 80.6 -62 2 1.75 83.4 -62 2 2 85.9 -62 2 3 94 -62 2 4 100.3 -62 2 5 108 -62 2 6 114.9 -62 2 7 121.2 -62 2 8 127 -62 2 8.5 129.6 -62 2 9 132.1 -62 2 9.5 134.8 -62 2 10 137.8 -62 2 10.5 141.6 -62 2 11 145.8 -62 2 11.5 150.2 -62 2 12 153.8 -62 2 12.5 156.7 -62 2 13 158.8 -62 2 13.5 159.7 -62 2 14 160.5 -62 2 14.5 161.1 -62 2 15 161.5 -62 2 15.5 161.7 -62 2 16 162.1 -62 2 16.5 162.3 -62 2 17 162.4 -62 2 17.5 162.4 -62 2 18 162.4 -63 2 1 72.6 -63 2 1.25 76.8 -63 2 1.5 80.4 -63 2 1.75 82.9 -63 2 2 85.1 -63 2 3 91.4 -63 2 4 96.8 -63 2 5 105.7 -63 2 6 114.8 -63 2 7 118.4 -63 2 8 122.6 -63 2 8.5 126.1 -63 2 9 129 -63 2 9.5 131.3 -63 2 10 133.9 -63 2 10.5 136.7 -63 2 11 140.1 -63 2 11.5 143.8 -63 2 12 147.3 -63 2 12.5 150.4 -63 2 13 153 -63 2 13.5 154.5 -63 2 14 155.6 -63 2 14.5 156.1 -63 2 15 156.4 -63 2 15.5 156.6 -63 2 16 156.8 -63 2 16.5 156.9 -63 2 17 157 -63 2 17.5 156.9 -63 2 18 157.1 -64 2 1 75.2 -64 2 1.25 80.2 -64 2 1.5 83.8 -64 2 1.75 86.4 -64 2 2 88.6 -64 2 3 97.5 -64 2 4 103.6 -64 2 5 110.7 -64 2 6 117.6 -64 2 7 126.5 -64 2 8 132.6 -64 2 8.5 136.1 -64 2 9 139.4 -64 2 9.5 142.4 -64 2 10 145.6 -64 2 10.5 148.8 -64 2 11 152.2 -64 2 11.5 155.7 -64 2 12 159 -64 2 12.5 162.1 -64 2 13 166 -64 2 13.5 170.3 -64 2 14 174.3 -64 2 14.5 177.2 -64 2 15 178.9 -64 2 15.5 179.7 -64 2 16 180.4 -64 2 16.5 180.4 -64 2 17 180.2 -64 2 17.5 180.5 -64 2 18 181.1 -65 2 1 70.9 -65 2 1.25 74.3 -65 2 1.5 76.8 -65 2 1.75 80 -65 2 2 83 -65 2 3 91.4 -65 2 4 96.5 -65 2 5 102.4 -65 2 6 108.7 -65 2 7 114.6 -65 2 8 120.4 -65 2 8.5 123 -65 2 9 125.6 -65 2 9.5 127.9 -65 2 10 130.1 -65 2 10.5 132.8 -65 2 11 135.5 -65 2 11.5 138.9 -65 2 12 142.9 -65 2 12.5 146.9 -65 2 13 150 -65 2 13.5 152.2 -65 2 14 153.6 -65 2 14.5 154.9 -65 2 15 155.9 -65 2 15.5 156.6 -65 2 16 157.1 -65 2 16.5 157.5 -65 2 17 157.7 -65 2 17.5 158 -65 2 18 158.4 -66 2 1 74.6 -66 2 1.25 79.4 -66 2 1.5 82 -66 2 1.75 84.3 -66 2 2 88.9 -66 2 3 98 -66 2 4 105 -66 2 5 113.5 -66 2 6 121 -66 2 7 126.2 -66 2 8 131.4 -66 2 8.5 134.2 -66 2 9 137.1 -66 2 9.5 139.5 -66 2 10 141.9 -66 2 10.5 145 -66 2 11 148.1 -66 2 11.5 151.8 -66 2 12 155.6 -66 2 12.5 158.3 -66 2 13 160.3 -66 2 13.5 161.8 -66 2 14 162.8 -66 2 14.5 163.5 -66 2 15 164 -66 2 15.5 164.3 -66 2 16 164.8 -66 2 16.5 165.2 -66 2 17 165.4 -66 2 17.5 165.5 -66 2 18 165.6 -67 2 1 71.1 -67 2 1.25 77.3 -67 2 1.5 81.7 -67 2 1.75 85.5 -67 2 2 89.7 -67 2 3 98.2 -67 2 4 106 -67 2 5 112.6 -67 2 6 118.6 -67 2 7 123.7 -67 2 8 128.6 -67 2 8.5 131.1 -67 2 9 133.6 -67 2 9.5 135.8 -67 2 10 138 -67 2 10.5 141.8 -67 2 11 145.8 -67 2 11.5 150.5 -67 2 12 155.2 -67 2 12.5 158.7 -67 2 13 161 -67 2 13.5 162.6 -67 2 14 163.9 -67 2 14.5 164.7 -67 2 15 165.5 -67 2 15.5 165.9 -67 2 16 166.3 -67 2 16.5 166.5 -67 2 17 166.6 -67 2 17.5 166.7 -67 2 18 166.7 -68 2 1 71 -68 2 1.25 72.3 -68 2 1.5 74.9 -68 2 1.75 78.4 -68 2 2 81.3 -68 2 3 88.1 -68 2 4 94.7 -68 2 5 100.1 -68 2 6 105.7 -68 2 7 112.5 -68 2 8 117 -68 2 8.5 119.2 -68 2 9 121.4 -68 2 9.5 124.5 -68 2 10 126.8 -68 2 10.5 129 -68 2 11 131.7 -68 2 11.5 134.4 -68 2 12 137 -68 2 12.5 140.3 -68 2 13 143.9 -68 2 13.5 147 -68 2 14 149.6 -68 2 14.5 151.8 -68 2 15 153.2 -68 2 15.5 154.3 -68 2 16 155.1 -68 2 16.5 155.6 -68 2 17 156 -68 2 17.5 156.1 -68 2 18 156.5 -69 2 1 74 -69 2 1.25 77.6 -69 2 1.5 82.3 -69 2 1.75 86.2 -69 2 2 88.7 -69 2 3 95.3 -69 2 4 103.6 -69 2 5 109.7 -69 2 6 116.6 -69 2 7 122.2 -69 2 8 127.2 -69 2 8.5 130.4 -69 2 9 133.6 -69 2 9.5 135.7 -69 2 10 137.8 -69 2 10.5 140.5 -69 2 11 143.5 -69 2 11.5 147.5 -69 2 12 151.7 -69 2 12.5 155.7 -69 2 13 159.2 -69 2 13.5 162 -69 2 14 163.8 -69 2 14.5 164.9 -69 2 15 165.8 -69 2 15.5 166.8 -69 2 16 167.5 -69 2 16.5 167.9 -69 2 17 168.2 -69 2 17.5 168.2 -69 2 18 168.1 -70 2 1 78.7 -70 2 1.25 82 -70 2 1.5 84.4 -70 2 1.75 86.4 -70 2 2 88.4 -70 2 3 96.8 -70 2 4 104.7 -70 2 5 111.3 -70 2 6 118.8 -70 2 7 124.3 -70 2 8 129 -70 2 8.5 131.6 -70 2 9 134.1 -70 2 9.5 136.3 -70 2 10 139 -70 2 10.5 141.9 -70 2 11 145.1 -70 2 11.5 148.3 -70 2 12 151.3 -70 2 12.5 154.6 -70 2 13 157.7 -70 2 13.5 160.3 -70 2 14 161.4 -70 2 14.5 162.4 -70 2 15 163.4 -70 2 15.5 164 -70 2 16 164.3 -70 2 16.5 164.7 -70 2 17 165.2 -70 2 17.5 165.3 -70 2 18 165.3 -71 2 1 69 -71 2 1.25 72.9 -71 2 1.5 76.7 -71 2 1.75 80.8 -71 2 2 85.1 -71 2 3 94.6 -71 2 4 104.1 -71 2 5 112.5 -71 2 6 120.7 -71 2 7 126.2 -71 2 8 133.3 -71 2 8.5 136.4 -71 2 9 139.4 -71 2 9.5 142.7 -71 2 10 146.1 -71 2 10.5 149.9 -71 2 11 154.1 -71 2 11.5 157.8 -71 2 12 160.4 -71 2 12.5 161.9 -71 2 13 162.6 -71 2 13.5 162.9 -71 2 14 163 -71 2 14.5 163.1 -71 2 15 163 -71 2 15.5 163.1 -71 2 16 163.1 -71 2 16.5 163.4 -71 2 17 163.7 -71 2 17.5 163.8 -71 2 18 163.7 -72 2 1 72.7 -72 2 1.25 78.3 -72 2 1.5 82.4 -72 2 1.75 87.2 -72 2 2 91.4 -72 2 3 98.3 -72 2 4 105.2 -72 2 5 113.3 -72 2 6 120.1 -72 2 7 126.2 -72 2 8 131.5 -72 2 8.5 134.9 -72 2 9 138.1 -72 2 9.5 140 -72 2 10 142.2 -72 2 10.5 145.2 -72 2 11 148.3 -72 2 11.5 151 -72 2 12 153.9 -72 2 12.5 156.9 -72 2 13 160.3 -72 2 13.5 163.9 -72 2 14 166.9 -72 2 14.5 169.1 -72 2 15 170.4 -72 2 15.5 171.3 -72 2 16 172 -72 2 16.5 172.7 -72 2 17 172.9 -72 2 17.5 173.1 -72 2 18 173.7 -73 2 1 72.6 -73 2 1.25 77.4 -73 2 1.5 81.8 -73 2 1.75 85.2 -73 2 2 87.6 -73 2 3 95.5 -73 2 4 103.7 -73 2 5 109.7 -73 2 6 115.8 -73 2 7 121.6 -73 2 8 127.6 -73 2 8.5 130.4 -73 2 9 133.2 -73 2 9.5 135.8 -73 2 10 138.4 -73 2 10.5 141.8 -73 2 11 145.8 -73 2 11.5 150.3 -73 2 12 154.3 -73 2 12.5 157 -73 2 13 158.7 -73 2 13.5 159.9 -73 2 14 160.9 -73 2 14.5 161.7 -73 2 15 162.4 -73 2 15.5 163 -73 2 16 163.3 -73 2 16.5 163.4 -73 2 17 163.5 -73 2 17.5 163.6 -73 2 18 163.9 -74 2 1 75.3 -74 2 1.25 79.7 -74 2 1.5 82 -74 2 1.75 84.2 -74 2 2 86.1 -74 2 3 96 -74 2 4 103.5 -74 2 5 111.4 -74 2 6 119.1 -74 2 7 126 -74 2 8 132.7 -74 2 8.5 135.6 -74 2 9 138.4 -74 2 9.5 141 -74 2 10 143.8 -74 2 10.5 146.9 -74 2 11 150.6 -74 2 11.5 154.4 -74 2 12 157.9 -74 2 12.5 161.1 -74 2 13 163.6 -74 2 13.5 165 -74 2 14 166.2 -74 2 14.5 167.3 -74 2 15 167.9 -74 2 15.5 168.1 -74 2 16 168.3 -74 2 16.5 168.5 -74 2 17 168.6 -74 2 17.5 168.8 -74 2 18 169.2 -75 2 1 73.1 -75 2 1.25 77.5 -75 2 1.5 80.4 -75 2 1.75 82.8 -75 2 2 85.9 -75 2 3 94.6 -75 2 4 102.4 -75 2 5 107.7 -75 2 6 114.6 -75 2 7 121.7 -75 2 8 126.8 -75 2 8.5 129.8 -75 2 9 132.8 -75 2 9.5 135.3 -75 2 10 137.6 -75 2 10.5 140.3 -75 2 11 143.7 -75 2 11.5 147.3 -75 2 12 150.6 -75 2 12.5 154.1 -75 2 13 157.5 -75 2 13.5 160.1 -75 2 14 162.2 -75 2 14.5 163.5 -75 2 15 164.2 -75 2 15.5 164.6 -75 2 16 164.8 -75 2 16.5 165.1 -75 2 17 165.4 -75 2 17.5 165.7 -75 2 18 166 -76 2 1 68.9 -76 2 1.25 72.7 -76 2 1.5 76.6 -76 2 1.75 79.6 -76 2 2 82.2 -76 2 3 91 -76 2 4 98.4 -76 2 5 106.2 -76 2 6 112.3 -76 2 7 118.1 -76 2 8 123.6 -76 2 8.5 126.7 -76 2 9 129.8 -76 2 9.5 132.3 -76 2 10 135 -76 2 10.5 137.4 -76 2 11 139.9 -76 2 11.5 142.4 -76 2 12 145 -76 2 12.5 148.1 -76 2 13 151.8 -76 2 13.5 155.5 -76 2 14 158.3 -76 2 14.5 160.1 -76 2 15 161.3 -76 2 15.5 162.3 -76 2 16 163 -76 2 16.5 163.3 -76 2 17 163.6 -76 2 17.5 163.8 -76 2 18 164.2 -77 2 1 75.9 -77 2 1.25 79.4 -77 2 1.5 82.1 -77 2 1.75 85.7 -77 2 2 88.2 -77 2 3 98 -77 2 4 107.4 -77 2 5 115.3 -77 2 6 124 -77 2 7 130.6 -77 2 8 137.6 -77 2 8.5 141.2 -77 2 9 144.8 -77 2 9.5 148 -77 2 10 151.8 -77 2 10.5 155.3 -77 2 11 158.7 -77 2 11.5 162.2 -77 2 12 165.5 -77 2 12.5 168.3 -77 2 13 170.7 -77 2 13.5 172.3 -77 2 14 173.4 -77 2 14.5 174.5 -77 2 15 175.1 -77 2 15.5 175.2 -77 2 16 175.2 -77 2 16.5 175.4 -77 2 17 175.8 -77 2 17.5 176.1 -77 2 18 176 -78 2 1 73 -78 2 1.25 77.3 -78 2 1.5 81 -78 2 1.75 85.1 -78 2 2 87.5 -78 2 3 97.3 -78 2 4 105.7 -78 2 5 112.7 -78 2 6 119.3 -78 2 7 124.7 -78 2 8 131.9 -78 2 8.5 135.4 -78 2 9 138.9 -78 2 9.5 142 -78 2 10 145 -78 2 10.5 148.2 -78 2 11 152 -78 2 11.5 156.5 -78 2 12 160.5 -78 2 12.5 163.6 -78 2 13 165.9 -78 2 13.5 167.6 -78 2 14 168.8 -78 2 14.5 169.5 -78 2 15 169.9 -78 2 15.5 170.2 -78 2 16 170.5 -78 2 16.5 170.5 -78 2 17 170.5 -78 2 17.5 170.7 -78 2 18 170.9 -79 2 1 80 -79 2 1.25 83.6 -79 2 1.5 85.1 -79 2 1.75 86.4 -79 2 2 88.6 -79 2 3 98 -79 2 4 105.7 -79 2 5 112.5 -79 2 6 119.6 -79 2 7 126.5 -79 2 8 133.6 -79 2 8.5 137 -79 2 9 140.3 -79 2 9.5 142.8 -79 2 10 146 -79 2 10.5 149.9 -79 2 11 154.3 -79 2 11.5 158.3 -79 2 12 161.2 -79 2 12.5 163.3 -79 2 13 165.1 -79 2 13.5 166.6 -79 2 14 167.4 -79 2 14.5 167.8 -79 2 15 168.2 -79 2 15.5 168.6 -79 2 16 168.8 -79 2 16.5 168.9 -79 2 17 168.9 -79 2 17.5 169 -79 2 18 169.2 -80 2 1 72.4 -80 2 1.25 75.8 -80 2 1.5 79 -80 2 1.75 83.1 -80 2 2 86.4 -80 2 3 94.5 -80 2 4 101.5 -80 2 5 108.7 -80 2 6 114.8 -80 2 7 120.4 -80 2 8 126.6 -80 2 8.5 130.1 -80 2 9 133.6 -80 2 9.5 136.3 -80 2 10 139.5 -80 2 10.5 143 -80 2 11 146.7 -80 2 11.5 150.5 -80 2 12 153.7 -80 2 12.5 156.1 -80 2 13 158 -80 2 13.5 159.7 -80 2 14 160.4 -80 2 14.5 160.8 -80 2 15 161.4 -80 2 15.5 162.1 -80 2 16 162.6 -80 2 16.5 162.6 -80 2 17 162.6 -80 2 17.5 162.8 -80 2 18 163 -81 2 1 69 -81 2 1.25 72.6 -81 2 1.5 76.2 -81 2 1.75 78.5 -81 2 2 80.9 -81 2 3 89.3 -81 2 4 94.7 -81 2 5 100.3 -81 2 6 106.9 -81 2 7 112.8 -81 2 8 117.8 -81 2 8.5 120.6 -81 2 9 123.5 -81 2 9.5 126 -81 2 10 128.4 -81 2 10.5 131.1 -81 2 11 134.2 -81 2 11.5 137.7 -81 2 12 141.3 -81 2 12.5 145 -81 2 13 147.7 -81 2 13.5 149.8 -81 2 14 151.5 -81 2 14.5 152.4 -81 2 15 152.9 -81 2 15.5 153.2 -81 2 16 153.6 -81 2 16.5 154.1 -81 2 17 154.4 -81 2 17.5 154.5 -81 2 18 154.5 -82 2 1 76 -82 2 1.25 80 -82 2 1.5 84.2 -82 2 1.75 87.4 -82 2 2 90 -82 2 3 101.2 -82 2 4 109.5 -82 2 5 116.3 -82 2 6 122.1 -82 2 7 128.8 -82 2 8 133.8 -82 2 8.5 136.9 -82 2 9 139.9 -82 2 9.5 143.6 -82 2 10 147 -82 2 10.5 151 -82 2 11 155.8 -82 2 11.5 160.7 -82 2 12 164.5 -82 2 12.5 166.9 -82 2 13 168.5 -82 2 13.5 169.4 -82 2 14 170.1 -82 2 14.5 170.8 -82 2 15 171.5 -82 2 15.5 172 -82 2 16 172.1 -82 2 16.5 172.2 -82 2 17 172.3 -82 2 17.5 172.2 -82 2 18 172.5 -83 2 1 78.4 -83 2 1.25 82.6 -83 2 1.5 85.1 -83 2 1.75 86.4 -83 2 2 89.7 -83 2 3 96.6 -83 2 4 105 -83 2 5 112.3 -83 2 6 119.6 -83 2 7 124.7 -83 2 8 131.2 -83 2 8.5 133.6 -83 2 9 135.8 -83 2 9.5 138.8 -83 2 10 141.2 -83 2 10.5 144.1 -83 2 11 147.4 -83 2 11.5 150.4 -83 2 12 153.8 -83 2 12.5 157.8 -83 2 13 161.1 -83 2 13.5 163.5 -83 2 14 165.2 -83 2 14.5 166.1 -83 2 15 166.6 -83 2 15.5 166.8 -83 2 16 167.1 -83 2 16.5 167.2 -83 2 17 167.3 -83 2 17.5 167.3 -83 2 18 167.2 -84 2 1 74.8 -84 2 1.25 78 -84 2 1.5 81.6 -84 2 1.75 84.2 -84 2 2 86.4 -84 2 3 94 -84 2 4 101.8 -84 2 5 110 -84 2 6 116.8 -84 2 7 121.9 -84 2 8 126.8 -84 2 8.5 129.3 -84 2 9 131.9 -84 2 9.5 134.9 -84 2 10 137.8 -84 2 10.5 141.3 -84 2 11 145 -84 2 11.5 149.5 -84 2 12 153.8 -84 2 12.5 157 -84 2 13 158.9 -84 2 13.5 160.3 -84 2 14 161.8 -84 2 14.5 162.4 -84 2 15 162.8 -84 2 15.5 163.2 -84 2 16 163.6 -84 2 16.5 163.9 -84 2 17 164.3 -84 2 17.5 164.2 -84 2 18 164 -85 2 1 71.3 -85 2 1.25 74.4 -85 2 1.5 77.4 -85 2 1.75 80 -85 2 2 82.6 -85 2 3 91.6 -85 2 4 100.6 -85 2 5 106.2 -85 2 6 114.3 -85 2 7 120.4 -85 2 8 126.7 -85 2 8.5 129.9 -85 2 9 133.1 -85 2 9.5 136 -85 2 10 138.8 -85 2 10.5 142.9 -85 2 11 146.8 -85 2 11.5 150.7 -85 2 12 154.6 -85 2 12.5 157.2 -85 2 13 158.6 -85 2 13.5 159.7 -85 2 14 160.5 -85 2 14.5 160.8 -85 2 15 161.1 -85 2 15.5 161.3 -85 2 16 161.6 -85 2 16.5 161.9 -85 2 17 162 -85 2 17.5 162.1 -85 2 18 162.1 -86 2 1 73 -86 2 1.25 75 -86 2 1.5 77.6 -86 2 1.75 81.7 -86 2 2 86.4 -86 2 3 92.9 -86 2 4 99.3 -86 2 5 105.6 -86 2 6 113.3 -86 2 7 118.6 -86 2 8 125.6 -86 2 8.5 128.2 -86 2 9 130.9 -86 2 9.5 134.4 -86 2 10 137.9 -86 2 10.5 141.6 -86 2 11 145.4 -86 2 11.5 149.4 -86 2 12 153.3 -86 2 12.5 156.2 -86 2 13 157.4 -86 2 13.5 158.1 -86 2 14 158.9 -86 2 14.5 159.6 -86 2 15 159.9 -86 2 15.5 160.2 -86 2 16 161 -86 2 16.5 161.5 -86 2 17 161.9 -86 2 17.5 161.8 -86 2 18 161.6 -87 2 1 71.1 -87 2 1.25 73.7 -87 2 1.5 76.2 -87 2 1.75 79.4 -87 2 2 81.8 -87 2 3 91.4 -87 2 4 95.3 -87 2 5 102.4 -87 2 6 110 -87 2 7 116.1 -87 2 8 120.9 -87 2 8.5 123.6 -87 2 9 126.3 -87 2 9.5 130.4 -87 2 10 134.4 -87 2 10.5 137.7 -87 2 11 141.3 -87 2 11.5 144.4 -87 2 12 147 -87 2 12.5 149.1 -87 2 13 150.3 -87 2 13.5 151 -87 2 14 151.4 -87 2 14.5 151.7 -87 2 15 152 -87 2 15.5 152.1 -87 2 16 152.3 -87 2 16.5 152.6 -87 2 17 153.2 -87 2 17.5 153.5 -87 2 18 153.6 -88 2 1 74.6 -88 2 1.25 78 -88 2 1.5 81 -88 2 1.75 83.6 -88 2 2 86.2 -88 2 3 96.5 -88 2 4 104.1 -88 2 5 110.7 -88 2 6 118.6 -88 2 7 125.2 -88 2 8 130.9 -88 2 8.5 133.4 -88 2 9 135.9 -88 2 9.5 138.8 -88 2 10 141.7 -88 2 10.5 144.8 -88 2 11 148.1 -88 2 11.5 151.8 -88 2 12 155.8 -88 2 12.5 160.4 -88 2 13 164.8 -88 2 13.5 168.6 -88 2 14 171.7 -88 2 14.5 173.8 -88 2 15 175 -88 2 15.5 175.7 -88 2 16 176.1 -88 2 16.5 176.5 -88 2 17 176.9 -88 2 17.5 177.2 -88 2 18 177.5 -89 2 1 74.9 -89 2 1.25 78.1 -89 2 1.5 80.6 -89 2 1.75 83.4 -89 2 2 86 -89 2 3 96.5 -89 2 4 104.6 -89 2 5 111.8 -89 2 6 117.9 -89 2 7 124.1 -89 2 8 130.3 -89 2 8.5 132.7 -89 2 9 135 -89 2 9.5 138.5 -89 2 10 141.8 -89 2 10.5 145.1 -89 2 11 148.1 -89 2 11.5 150.8 -89 2 12 153.9 -89 2 12.5 157.5 -89 2 13 161.3 -89 2 13.5 164.5 -89 2 14 166 -89 2 14.5 166.7 -89 2 15 167.4 -89 2 15.5 167.9 -89 2 16 168.1 -89 2 16.5 168.5 -89 2 17 168.9 -89 2 17.5 169.4 -89 2 18 169.8 -90 2 1 77.6 -90 2 1.25 81.1 -90 2 1.5 84 -90 2 1.75 87.2 -90 2 2 91.4 -90 2 3 98 -90 2 4 105.6 -90 2 5 112.2 -90 2 6 118.6 -90 2 7 124.2 -90 2 8 130.3 -90 2 8.5 132.9 -90 2 9 135.5 -90 2 9.5 138.5 -90 2 10 141.4 -90 2 10.5 144.4 -90 2 11 147.6 -90 2 11.5 151.2 -90 2 12 154.9 -90 2 12.5 159 -90 2 13 163.2 -90 2 13.5 166 -90 2 14 168.3 -90 2 14.5 169.8 -90 2 15 170.7 -90 2 15.5 171.5 -90 2 16 172.1 -90 2 16.5 172.5 -90 2 17 172.7 -90 2 17.5 173.1 -90 2 18 173.5 -91 2 1 68.6 -91 2 1.25 73.6 -91 2 1.5 78.6 -91 2 1.75 83.6 -91 2 2 88.9 -91 2 3 96.8 -91 2 4 104.1 -91 2 5 111.8 -91 2 6 118.6 -91 2 7 124.7 -91 2 8 129.2 -91 2 8.5 132.8 -91 2 9 136.5 -91 2 9.5 138.1 -91 2 10 139.4 -91 2 10.5 142.5 -91 2 11 145.4 -91 2 11.5 148.6 -91 2 12 152.2 -91 2 12.5 155.8 -91 2 13 158.7 -91 2 13.5 160.8 -91 2 14 162.2 -91 2 14.5 163.1 -91 2 15 163.7 -91 2 15.5 164.3 -91 2 16 164.8 -91 2 16.5 165.4 -91 2 17 166 -91 2 17.5 166.3 -91 2 18 166.8 -92 2 1 79.9 -92 2 1.25 82.6 -92 2 1.5 84.8 -92 2 1.75 88.6 -92 2 2 94 -92 2 3 99.6 -92 2 4 108.2 -92 2 5 116.2 -92 2 6 124 -92 2 7 131.1 -92 2 8 136.8 -92 2 8.5 139.4 -92 2 9 142 -92 2 9.5 145 -92 2 10 148.1 -92 2 10.5 151.3 -92 2 11 154.8 -92 2 11.5 158.5 -92 2 12 161.6 -92 2 12.5 163.8 -92 2 13 165.3 -92 2 13.5 166.2 -92 2 14 166.4 -92 2 14.5 166.6 -92 2 15 167 -92 2 15.5 167.5 -92 2 16 167.7 -92 2 16.5 168 -92 2 17 168.3 -92 2 17.5 168.4 -92 2 18 168.6 -93 2 1 76.1 -93 2 1.25 78.4 -93 2 1.5 82.3 -93 2 1.75 86 -93 2 2 89.2 -93 2 3 98.2 -93 2 4 106.7 -93 2 5 114.4 -93 2 6 121.9 -93 2 7 129.5 -93 2 8 135.2 -93 2 8.5 138.1 -93 2 9 140.8 -93 2 9.5 144.8 -93 2 10 148 -93 2 10.5 151.3 -93 2 11 154.7 -93 2 11.5 158.4 -93 2 12 161.7 -93 2 12.5 164.2 -93 2 13 165.6 -93 2 13.5 166.4 -93 2 14 167 -93 2 14.5 167.7 -93 2 15 168.1 -93 2 15.5 168.4 -93 2 16 168.5 -93 2 16.5 168.5 -93 2 17 168.6 -93 2 17.5 168.9 -93 2 18 169.2 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/xcovForGetEigens1.csv b/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/xcovForGetEigens1.csv deleted file mode 100644 index 589459a4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/inst/testdata/xcovForGetEigens1.csv +++ /dev/null @@ -1,51 +0,0 @@ -2.196581948531575,2.076931258989656,1.96344757103288,1.834551136914922,1.677578760649516,1.49451922688197,1.288360645392482,1.06375819094216,0.8251494398698923,0.5771242563594348,0.3263093881605101,0.07816220580427111,-0.1628159585023043,-0.3913629900835455,-0.6043638927081098,-0.7994590030749275,-0.9735958757053726,-1.126987380186377,-1.258424771331905,-1.36801943843945,-1.457318080509322,-1.526016472494825,-1.576205167802788,-1.608500710666972,-1.623555086749174,-1.622713381714698,-1.605375376056851,-1.572305197342081,-1.522683934732187,-1.455824480828267,-1.371569959974707,-1.268050267408234,-1.145641208383941,-1.003219523845558,-0.8406544715872185,-0.6593604183357822,-0.4593067851915705,-0.2434921440080302,-0.01443939166154169,0.2247246076205895,0.4688613025283423,0.7134299108638597,0.9532052221883486,1.181588133208385,1.393364959841405,1.582976943378781,1.743870426695676,1.87408487465457,1.970990520524553,2.039095819596253,2.092567599164061 -2.076931258989656,1.964152029292803,1.870927104832209,1.77921369002819,1.67069804735291,1.518527057697731,1.326890092684052,1.114487698054388,0.8887889822690588,0.6538682812491917,0.4154029096758077,0.1781221681083856,-0.0537304374151505,-0.2752128301702714,-0.4832541557695138,-0.6754886643672217,-0.8489735971533842,-1.003750792997704,-1.138571521583171,-1.253458226032369,-1.349694383225492,-1.426906149269471,-1.486934190510564,-1.530156695911947,-1.55711541162892,-1.568838648811716,-1.564591390318759,-1.544962337821656,-1.508871442980711,-1.455578357510948,-1.38469108197778,-1.294218955086662,-1.184462692389932,-1.05408257859212,-0.902927123991598,-0.7322520623267648,-0.5418981944063453,-0.3348283019025669,-0.1133666419881855,0.1194094682449066,0.3584691222211702,0.5994393921187656,0.8371093341929213,1.065047581705824,1.278130031258654,1.470827152451351,1.636767919389945,1.773902248336061,1.879411166420336,1.957188195455262,2.020136882485865 -1.96344757103288,1.870927104832209,1.790155852664927,1.711659898225139,1.62952601973897,1.518359996241484,1.35540983601808,1.159749577608371,0.9476845223946639,0.7265029313201425,0.5016285972297128,0.2767574292659861,0.05559294782682382,-0.1573720271015575,-0.3591916203753782,-0.5474916431043321,-0.7194569229238241,-0.8749281579697477,-1.012604313365416,-1.132376939121983,-1.235238608858119,-1.320709353974431,-1.390333200619776,-1.444250593206629,-1.48283232103938,-1.506816486515968,-1.515314989179543,-1.508738675717987,-1.485810986164786,-1.445712265463261,-1.387899137207259,-1.310288884772402,-1.213127691068787,-1.094950962162116,-0.955573484389816,-0.796150898774759,-0.6164165735646361,-0.4192764190325796,-0.2068812929649356,0.01778659004546372,0.2498369249206041,0.4851077971165025,0.7184707244910046,0.9437360158024505,1.155930979797696,1.349643688594423,1.518765683731005,1.66120880014246,1.774129943014849,1.860970456539077,1.933554633088178 -1.834551136914922,1.77921369002819,1.711659898225139,1.6399233025689,1.563869217045773,1.474218614382659,1.353795769868471,1.189460762199055,0.9962047497523544,0.7914497226360557,0.5826799150130716,0.3728635952102736,0.1651171696394314,-0.03672584054961386,-0.2300077900343916,-0.4123889745268263,-0.581214100742272,-0.7360759312789213,-0.8755906315354136,-0.9994634120181929,-1.108328109707288,-1.20154198183609,-1.280285818438973,-1.344423287447343,-1.3941008010019,-1.429767432148694,-1.450368120239277,-1.456152492460297,-1.44570873298758,-1.418159093077068,-1.372902977534885,-1.307837970125427,-1.22321048675447,-1.117544900039605,-0.9906571354795007,-0.8436608312507918,-0.67623698121466,-0.4912069119485782,-0.290562832774647,-0.07714161154364142,0.144389433852144,0.3701484533702665,0.5952125414479953,0.8137662754157884,1.02110522929494,1.212083896447424,1.380999703628017,1.52580857646116,1.643789894549947,1.737982532282852,1.819072810761579 -1.677578760649516,1.67069804735291,1.62952601973897,1.563869217045773,1.485830503073071,1.39790487735936,1.304011409057108,1.186243587367401,1.028397360504296,0.8473163576544028,0.6578202945503694,0.4655496196115508,0.2740016606427089,0.08615793384988951,-0.09590084216370279,-0.2699917654256677,-0.4336813947582469,-0.586277842604524,-0.7262851067770745,-0.8531724311549407,-0.9671409442855775,-1.067331197378675,-1.15449569531223,-1.228173257017434,-1.288244698267463,-1.334860773830848,-1.366792336264028,-1.384150095077346,-1.385440346110597,-1.369767043527982,-1.33655744254908,-1.283772998845796,-1.211720272035971,-1.119021278734226,-1.005542088345189,-0.8724020567114695,-0.7192909620780565,-0.5489134722336927,-0.3631102954681699,-0.1645206961897797,0.04250642374292533,0.2544456053022845,0.4667160386362373,0.6740186286491913,0.8720501534947205,1.056086329756335,1.22098636622757,1.36483406302102,1.48514482173639,1.584544184079703,1.672410526309645 -1.49451922688197,1.518527057697731,1.518359996241484,1.474218614382659,1.39790487735936,1.313867574079101,1.228628024044623,1.14113767698943,1.034556738635836,0.8921141836782051,0.7263292639134248,0.5535226575861644,0.3803941449186669,0.2090367532719925,0.04073113492893905,-0.1226611869568793,-0.279046413586079,-0.427463126370966,-0.5663011530912104,-0.694767944650541,-0.8125825193548412,-0.9186388369682331,-1.013217763173726,-1.095500853678379,-1.165083358102521,-1.221807713977819,-1.264275114314833,-1.292475098803316,-1.304870931573355,-1.300587156559478,-1.279133948631109,-1.23860583675565,-1.179410550934284,-1.100342802708988,-1.001359242683429,-0.883606435020634,-0.7468281735791592,-0.5935791612848488,-0.4255404942160529,-0.245111096328505,-0.05623217715141245,0.1379933440131066,0.3334397896626932,0.5254459705456546,0.7102162094552658,0.8835719963580849,1.041057984183762,1.18094638443661,1.301058590259976,1.403565232453774,1.496353520972957 -1.288360645392482,1.326890092684052,1.35540983601808,1.353795769868471,1.304011409057108,1.228628024044623,1.151590243238945,1.077328410443308,1.004247437204516,0.9117269043655392,0.7823585115787173,0.6345336320875555,0.482660524765977,0.3298960403919151,0.1775844881186941,0.02731637757562215,-0.1193653223573913,-0.2613486531033572,-0.3969571068206993,-0.5251384630539978,-0.6451088229893273,-0.7555096908749703,-0.856126179451306,-0.9457726464296082,-1.023752227772971,-1.089595620822435,-1.141748597887976,-1.180089707303302,-1.203072722333651,-1.209871270020154,-1.200112107087469,-1.172075761357768,-1.126290079333339,-1.061772557251636,-0.9785928401071181,-0.8779269034173076,-0.7595991830479415,-0.6259759275762146,-0.4785607127830181,-0.3194700320710195,-0.1521576639360356,0.02075600678356754,0.1956936055162004,0.3687328483648921,0.5366704441208263,0.6959692155114628,0.8429545242131601,0.9761269030555721,1.09366016735579,1.19723150018581,1.293088322393743 -1.06375819094216,1.114487698054388,1.159749577608371,1.189460762199055,1.186243587367401,1.14113767698943,1.077328410443308,1.014278176103843,0.9533441667428759,0.8914834905873973,0.812896836914439,0.7058025555888283,0.5803000626200331,0.4474124620991716,0.3124478430390818,0.1772149515556978,0.04242075918044336,-0.09089579548416146,-0.2211117422391841,-0.346965938116525,-0.4671918561929019,-0.580201425566536,-0.6852849648429518,-0.7809068300855433,-0.8660865756616716,-0.940048636191926,-1.00110608579781,-1.04902653298864,-1.082278116863063,-1.100094857236414,-1.102226332367948,-1.087165537127025,-1.055551616582666,-1.006641328116582,-0.9406145376056468,-0.8586589854434381,-0.7606813078356109,-0.6488204050973646,-0.5243786187011401,-0.389152869526847,-0.2460548184384497,-0.09717785049054169,0.05450663894142993,0.2058763335367475,0.3543710250383134,0.4971435156351443,0.6313513819551788,0.7557366477908498,0.868841962009532,0.9718257849573425,1.06920982980226 -0.8251494398698923,0.8887889822690588,0.9476845223946639,0.9962047497523544,1.028397360504296,1.034556738635836,1.004247437204516,0.9533441667428759,0.901354951776723,0.8533085171405598,0.8113650670547148,0.7573082326369496,0.6689632328721832,0.5589203652316524,0.4428073778494788,0.3242473538450905,0.2033137692527203,0.0809445737385445,-0.04146886387021704,-0.1626016335909377,-0.2807959768467269,-0.3942967237243326,-0.5019305094533602,-0.601860003366167,-0.6928492163176253,-0.7738308961319734,-0.8430202838461667,-0.9000639390046261,-0.9434568768634795,-0.9724899344929075,-0.9870087050362222,-0.9857187232686455,-0.9693313783367622,-0.937318735295379,-0.8899451256712522,-0.8283640874014374,-0.7525399022830541,-0.6643442061298346,-0.5648398039910014,-0.4554777475378426,-0.3385900116790593,-0.2157152309961073,-0.08919889068038937,0.03866434766802867,0.1659663481557867,0.2905564049685193,0.4104295589616929,0.5245547852898437,0.631831147322358,0.7328788940052804,0.8304659339052675 -0.5771242563594348,0.6538682812491917,0.7265029313201425,0.7914497226360557,0.8473163576544028,0.8921141836782051,0.9117269043655392,0.8914834905873973,0.8533085171405598,0.8210845342784994,0.7970432934140642,0.7747662488204365,0.7333224263960066,0.6591543878505999,0.567092783246823,0.4669437573020565,0.3612614109227883,0.2517970027146081,0.1395607264558187,0.02566479482682701,-0.08802723578667877,-0.1997029609563722,-0.3077843169555349,-0.410205477167488,-0.5055150126670991,-0.5923776082680433,-0.6689526820303822,-0.7347471690944815,-0.7882901298212009,-0.8289095603190296,-0.8565004640677748,-0.8699591366734057,-0.8700064512592401,-0.856281969188044,-0.8290842868456918,-0.7894741955832827,-0.7374276787431964,-0.6745069521168721,-0.6014971483997735,-0.5194753681589666,-0.4301815145033743,-0.3345826991358162,-0.234405266423862,-0.1311254772932486,-0.02601218806518277,0.07944580435484004,0.184053362097657,0.286971850764634,0.3874203634472713,0.4854775971109467,0.5821823916645664 -0.3263093881605101,0.4154029096758077,0.5016285972297128,0.5826799150130716,0.6578202945503694,0.7263292639134248,0.7823585115787173,0.812896836914439,0.8113650670547148,0.7970432934140642,0.7839506410745704,0.7727955495129635,0.7621210894276238,0.737674241012969,0.6822758236225802,0.6036642750203103,0.5141907562133247,0.4191181110214762,0.3191207753973115,0.2148554754014056,0.1081470897794961,0.0006842490697803076,-0.1056585935140404,-0.2086888397028367,-0.3067942546607491,-0.3984021544896216,-0.4816644932288999,-0.5559241867828444,-0.6197413416197858,-0.6724512263191099,-0.7139284012698401,-0.7432178054797746,-0.7609682657046926,-0.766908947691042,-0.7613090329848407,-0.7450599240211934,-0.7180865018524932,-0.6816042855583828,-0.6360745986669494,-0.5821869747222557,-0.5210938338267354,-0.453192311601653,-0.3796297055989915,-0.30110218350769,-0.218288463152278,-0.1320822892013725,-0.04293429727927838,0.04845620685625606,0.1415735845301307,0.2359595998965585,0.3310005788345231 -0.07816220580427111,0.1781221681083856,0.2767574292659861,0.3728635952102736,0.4655496196115508,0.5535226575861644,0.6345336320875555,0.7058025555888283,0.7573082326369496,0.7747662488204365,0.7727955495129635,0.7717344760844868,0.7762966331755872,0.784195443644097,0.7745917260891079,0.7284162097938012,0.6593958167663763,0.5808166137382489,0.4948923572865333,0.4024758357867005,0.3052849689819562,0.2046042026634123,0.1023976405534909,0.0008310508384042761,-0.09839776752790008,-0.1935200711225981,-0.2827369951651822,-0.3651965213770112,-0.4394810429283555,-0.50489043390704,-0.561188865744783,-0.6075080721306604,-0.6443218489097472,-0.6713462421265547,-0.6887375164155047,-0.6971265315943287,-0.696305435415757,-0.6871053574379685,-0.6696149059885569,-0.6441260123990673,-0.611228998704459,-0.5707656590406636,-0.5233716242470005,-0.4690338505629583,-0.4079156295947561,-0.3404183175961,-0.2663463322238984,-0.1863306209516415,-0.1006970767287641,-0.01042356204669721,0.08235054973309421 --0.1628159585023043,-0.0537304374151505,0.05559294782682382,0.1651171696394314,0.2740016606427089,0.3803941449186669,0.482660524765977,0.5803000626200331,0.6689632328721832,0.7333224263960066,0.7621210894276238,0.7762966331755872,0.7932300436919421,0.8124995322639731,0.8301900562956804,0.8286176420348194,0.7936553911521611,0.7360759976164966,0.6655489174807626,0.5864417261533931,0.5007926983105081,0.4091596542251164,0.3133058741667021,0.2151618469318835,0.1164083172888479,0.01895836379426603,-0.07549568711452943,-0.1658765810661449,-0.250777893073283,-0.3294179306563285,-0.4013587386715819,-0.4657507676015644,-0.5227880717503403,-0.5720673394560832,-0.6135445428551027,-0.6475019219927211,-0.6735147141686456,-0.6919975198545566,-0.7026239375057244,-0.7052827419616964,-0.7000418519755662,-0.68621184889897,-0.6639964660533572,-0.6327616375377689,-0.5922399290509378,-0.5424571650781215,-0.4826828610476568,-0.4135538861204283,-0.3352878096548572,-0.2493563968252812,-0.1592736103059046 --0.3913629900835455,-0.2752128301702714,-0.1573720271015575,-0.03672584054961386,0.08615793384988951,0.2090367532719925,0.3298960403919151,0.4474124620991716,0.5589203652316524,0.6591543878505999,0.737674241012969,0.784195443644097,0.8124995322639731,0.8392606279143001,0.8672594236356657,0.894983651178348,0.9055619498645852,0.8801008852610411,0.8283609204903961,0.7642028831624024,0.691807780451394,0.6111649787468222,0.523732415407797,0.4309539912159394,0.3343183808379069,0.2357934488918405,0.1368973656698441,0.03896046444849693,-0.0566066538480748,-0.1488932263749962,-0.2371586853509433,-0.3204966572245201,-0.3987129447738551,-0.471164947575958,-0.5375212330281901,-0.5976202344881812,-0.6507328816906551,-0.6968324862463545,-0.7351330983884832,-0.7651290980421207,-0.786414614682993,-0.7978077381455695,-0.799178902088194,-0.7893769006534761,-0.767810314445757,-0.7342602331896279,-0.6875935777131684,-0.628533356704355,-0.5572750219483565,-0.475748942426002,-0.3886542355772091 --0.6043638927081098,-0.4832541557695138,-0.3591916203753782,-0.2300077900343916,-0.09590084216370279,0.04073113492893905,0.1775844881186941,0.3124478430390818,0.4428073778494788,0.567092783246823,0.6822758236225802,0.7745917260891079,0.8301900562956804,0.8672594236356657,0.9043945256724276,0.9433770455745741,0.9812245103802951,0.9984932971023853,0.9782960810228822,0.9340552269186345,0.8766457763477579,0.8082506658295302,0.730815666921256,0.6451127227974134,0.5521594579421499,0.4538195945719809,0.3513458083887394,0.246338437574135,0.1402234072923724,0.03408851126509472,-0.07093100910910413,-0.1737969255272899,-0.2738227601702782,-0.3700165559849659,-0.4616704343113523,-0.5480969329606818,-0.6281783401986447,-0.701425967941033,-0.7665636926091542,-0.8226978502091173,-0.8690106134654463,-0.9038708325047929,-0.9269160526661708,-0.9365939419812942,-0.9320929029863431,-0.9130864059455024,-0.8781730663326828,-0.828238971202229,-0.7635455231311183,-0.6864391672491849,-0.6026043896198112 --0.7994590030749275,-0.6754886643672217,-0.5474916431043321,-0.4123889745268263,-0.2699917654256677,-0.1226611869568793,0.02731637757562215,0.1772149515556978,0.3242473538450905,0.4669437573020565,0.6036642750203103,0.7284162097938012,0.8286176420348194,0.894983651178348,0.9433770455745741,0.9898824355820989,1.036482767100107,1.080403400441543,1.104319542472835,1.092376151602233,1.053235800726808,0.9978002852437308,0.9312482383327152,0.8538169769692071,0.7658351151689594,0.6688649835309209,0.5637553360793611,0.4523541210613503,0.3361030439550652,0.216300924065733,0.09455317009650868,-0.02790830651286007,-0.1498232724832999,-0.2697561080393997,-0.3865561204095528,-0.4989423445917525,-0.6053434494321601,-0.7048004690516073,-0.7955247694390727,-0.8762538235932179,-0.9458153617895916,-1.002178559927616,-1.044842352363278,-1.071960118705918,-1.082600381626548,-1.076447807193796,-1.051957293059409,-1.010240450852863,-0.9516961305374536,-0.8790396603807578,-0.7987402621552301 --0.9735958757053726,-0.8489735971533842,-0.7194569229238241,-0.581214100742272,-0.4336813947582469,-0.279046413586079,-0.1193653223573913,0.04242075918044336,0.2033137692527203,0.3612614109227883,0.5141907562133247,0.6593958167663763,0.7936553911521611,0.9055619498645852,0.9812245103802951,1.036482767100107,1.089910590814557,1.143106935817213,1.193992423001647,1.224677011762736,1.215163943947025,1.176322232218588,1.121805473038195,1.053389724146518,0.9713133978982759,0.8768215048339577,0.7701503359437598,0.6532898509211246,0.5276634978678341,0.3948000107487292,0.2568326369535825,0.1152392174693982,-0.02808066978907398,-0.1711709561640439,-0.3123830510101073,-0.4497924742299668,-0.5813229384659309,-0.7055454412405496,-0.8201510835089457,-0.9235318413990115,-1.014223902124331,-1.089852052650089,-1.149866554370813,-1.192235146551837,-1.216001069515598,-1.220971468607224,-1.205576813275131,-1.171205390956874,-1.118456573499926,-1.050359904106027,-0.9739618300541202 --1.126987380186377,-1.003750792997704,-0.8749281579697477,-0.7360759312789213,-0.586277842604524,-0.427463126370966,-0.2613486531033572,-0.09089579548416146,0.0809445737385445,0.2517970027146081,0.4191181110214762,0.5808166137382489,0.7360759976164966,0.8801008852610411,0.9984932971023853,1.080403400441543,1.143106935817213,1.202946443655761,1.262304407420063,1.3180989086903,1.349661038618072,1.339588976826632,1.300599531726741,1.241574525249882,1.165659365564104,1.074370372525882,0.9671462310904541,0.8459247415591681,0.7120095395224224,0.5671362883137636,0.4139855651646749,0.2543101570373905,0.09068352799786901,-0.07437579753652175,-0.2386903771703006,-0.3996713437526983,-0.554712200817977,-0.7019239529998953,-0.8384875831849751,-0.9624744871139419,-1.072185677907624,-1.16495396784827,-1.240249077055553,-1.29594306180195,-1.331125397525408,-1.345806629509722,-1.338484628705475,-1.310852501913245,-1.263751567030194,-1.200472531225408,-1.128460232758837 --1.258424771331905,-1.138571521583171,-1.012604313365416,-0.8755906315354136,-0.7262851067770745,-0.5663011530912104,-0.3969571068206993,-0.2211117422391841,-0.04146886387021704,0.1395607264558187,0.3191207753973115,0.4948923572865333,0.6655489174807626,0.8283609204903961,0.9782960810228822,1.104319542472835,1.193992423001647,1.262304407420063,1.327162858036912,1.389605384437612,1.443681907253722,1.472835614164773,1.460811814070409,1.414100518762193,1.344691155245649,1.257041889080253,1.150174747535347,1.025904674800505,0.8852542065487766,0.7300558742921212,0.5634953123645735,0.3875956573177531,0.2056000619462868,0.02059792227058025,-0.1647083179566376,-0.3470717703046446,-0.5233629812536992,-0.6912578594460124,-0.8474534833804966,-0.9897368378011498,-1.116220112494531,-1.223999255989695,-1.312611318833265,-1.379902405247605,-1.425061468946576,-1.448348925564733,-1.448396525886481,-1.427204055093069,-1.385867883653638,-1.327879850797552,-1.260915115278834 --1.36801943843945,-1.253458226032369,-1.132376939121983,-0.9994634120181929,-0.8531724311549407,-0.694767944650541,-0.5251384630539978,-0.346965938116525,-0.1626016335909377,0.02566479482682701,0.2148554754014056,0.4024758357867005,0.5864417261533931,0.7642028831624024,0.9340552269186345,1.092376151602233,1.224677011762736,1.3180989086903,1.389605384437612,1.453351058158818,1.510572428395762,1.562211886257802,1.588656048167294,1.565660971953849,1.505711499128104,1.422267208592051,1.316355099621084,1.190270117032486,1.044672533381063,0.8812825620551414,0.7036485804165776,0.5140097907262855,0.316237057942201,0.1139589852432254,-0.08962168339925777,-0.290639101470216,-0.4854735268563553,-0.6713990640968887,-0.8446766401307731,-1.002842662654511,-1.14386309899117,-1.264648323301987,-1.364827500093692,-1.442273907555741,-1.496303615150052,-1.527444477139891,-1.53450079509997,-1.519757752957068,-1.48456143315114,-1.432549100489184,-1.371491700815888 --1.457318080509322,-1.349694383225492,-1.235238608858119,-1.108328109707288,-0.9671409442855775,-0.8125825193548412,-0.6451088229893273,-0.4671918561929019,-0.2807959768467269,-0.08802723578667877,0.1081470897794961,0.3052849689819562,0.5007926983105081,0.691807780451394,0.8766457763477579,1.053235800726808,1.215163943947025,1.349661038618072,1.443681907253722,1.510572428395762,1.5707010385303,1.627326458270351,1.673369833119714,1.68267338237172,1.643163356807821,1.567458337427997,1.46336834218711,1.336547813934928,1.187861190758488,1.01876671623061,0.8329399736449395,0.632690582784576,0.4224063551937622,0.2061772307846126,-0.01235635414963934,-0.2287779049119097,-0.4390441605746406,-0.640072979926531,-0.8277514738601562,-0.9994058873966964,-1.152882093228206,-1.284951775375912,-1.395332488908235,-1.481947453014602,-1.544240441156104,-1.582981589083662,-1.597150816036555,-1.589268985706333,-1.560894290320387,-1.515752099114576,-1.461604458886611 --1.526016472494825,-1.426906149269471,-1.320709353974431,-1.20154198183609,-1.067331197378675,-0.9186388369682331,-0.7555096908749703,-0.580201425566536,-0.3942967237243326,-0.1997029609563722,0.0006842490697803076,0.2046042026634123,0.4091596542251164,0.6111649787468222,0.8082506658295302,0.9978002852437308,1.176322232218588,1.339588976826632,1.472835614164773,1.562211886257802,1.627326458270351,1.683594132662236,1.723750999750213,1.745750106134899,1.740054979203788,1.685822869093944,1.587557409167356,1.461568834312414,1.311765264102701,1.139763439421487,0.9492147559406835,0.742252465286534,0.5235602326932558,0.2975390826361667,0.06816589165033181,-0.1596977406743725,-0.3816852469223183,-0.5944163432319011,-0.7934891169842015,-0.9760633375456114,-1.139882935073157,-1.281625874358467,-1.401068020576098,-1.496183441748665,-1.566517234072063,-1.613019823554749,-1.634818158870693,-1.634590713357197,-1.614044089004695,-1.57693425926725,-1.530938242763822 --1.576205167802788,-1.486934190510564,-1.390333200619776,-1.280285818438973,-1.15449569531223,-1.013217763173726,-0.856126179451306,-0.6852849648429518,-0.5019305094533602,-0.3077843169555349,-0.1056585935140404,0.1023976405534909,0.3133058741667021,0.523732415407797,0.730815666921256,0.9312482383327152,1.121805473038195,1.300599531726741,1.460811814070409,1.588656048167294,1.673369833119714,1.723750999750213,1.754441624765642,1.776480531378703,1.7898928668081,1.767846101124055,1.686247979582056,1.565142080862171,1.416394725006177,1.244011682074144,1.05211162225834,0.8424443066240438,0.6196680088093598,0.3882578335344304,0.1523799926327661,-0.08279151856039436,-0.3126870307328359,-0.533691317896742,-0.7412076440280204,-0.9322717253087951,-1.104533894401289,-1.254616579474864,-1.382304014054225,-1.485602172992685,-1.564110295484679,-1.618871612562059,-1.64910674758459,-1.657557957756417,-1.646002277813081,-1.618177519669673,-1.581637267089573 --1.608500710666972,-1.530156695911947,-1.444250593206629,-1.344423287447343,-1.228173257017434,-1.095500853678379,-0.9457726464296082,-0.7809068300855433,-0.601860003366167,-0.410205477167488,-0.2086888397028367,0.0008310508384042761,0.2151618469318835,0.4309539912159394,0.6451127227974134,0.8538169769692071,1.053389724146518,1.241574525249882,1.414100518762193,1.565660971953849,1.68267338237172,1.745750106134899,1.776480531378703,1.798715633466098,1.810298183281173,1.796512338564159,1.742576176192661,1.641141281727444,1.499528106184534,1.330020724467579,1.140328080196867,0.9322370502586769,0.7101662069178485,0.478340818257681,0.2408691637812552,0.003044149131710419,-0.2305187977550991,-0.4560454372797791,-0.6688540587327428,-0.8659036555850116,-1.044748281191279,-1.201990211089783,-1.33734904526579,-1.448820069093776,-1.535987605229372,-1.599865225810252,-1.639685377319654,-1.658136355012032,-1.65695786668636,-1.639813042301823,-1.614106416277518 --1.623555086749174,-1.55711541162892,-1.48283232103938,-1.3941008010019,-1.288244698267463,-1.165083358102521,-1.023752227772971,-0.8660865756616716,-0.6928492163176253,-0.5055150126670991,-0.3067942546607491,-0.09839776752790008,0.1164083172888479,0.3343183808379069,0.5521594579421499,0.7658351151689594,0.9713133978982759,1.165659365564104,1.344691155245649,1.505711499128104,1.643163356807821,1.740054979203788,1.7898928668081,1.810298183281173,1.807007574696656,1.781398287901345,1.74360694376803,1.677905890451085,1.558207577462066,1.397684199548108,1.21400568971646,1.011460989547269,0.7947309443848395,0.5675237535491084,0.3335245922676343,0.09786509786650381,-0.1349905650534889,-0.3611970679570589,-0.5761073101938001,-0.7766502090351746,-0.9602768860398536,-1.123601196700728,-1.266192608727546,-1.385983046213454,-1.482458257283868,-1.556465696251326,-1.6071523687479,-1.637025295008533,-1.647677458028875,-1.642655239859988,-1.629227177721697 --1.622713381714698,-1.568838648811716,-1.506816486515968,-1.429767432148694,-1.334860773830848,-1.221807713977819,-1.089595620822435,-0.940048636191926,-0.7738308961319734,-0.5923776082680433,-0.3984021544896216,-0.1935200711225981,0.01895836379426603,0.2357934488918405,0.4538195945719809,0.6688649835309209,0.8768215048339577,1.074370372525882,1.257041889080253,1.422267208592051,1.567458337427997,1.685822869093944,1.767846101124055,1.796512338564159,1.781398287901345,1.752010571337521,1.716566046013577,1.669002041482883,1.582386897183283,1.445107922282278,1.273704475559531,1.080506317515994,0.8732278187186681,0.6552440897058228,0.4295088408858441,0.2006645647489741,-0.02723285339432716,-0.250387291350096,-0.4643137779320202,-0.6659587310136696,-0.8526602748084073,-1.021072058328587,-1.17052508619323,-1.29882807861655,-1.405282454640475,-1.490427506919096,-1.553222679900581,-1.595866115939828,-1.619686084672453,-1.628064688505048,-1.628142737159064 --1.605375376056851,-1.564591390318759,-1.515314989179543,-1.450368120239277,-1.366792336264028,-1.264275114314833,-1.141748597887976,-1.00110608579781,-0.8430202838461667,-0.6689526820303822,-0.4816644932288999,-0.2827369951651822,-0.07549568711452943,0.1368973656698441,0.3513458083887394,0.5637553360793611,0.7701503359437598,0.9671462310904541,1.150174747535347,1.316355099621084,1.46336834218711,1.587557409167356,1.686247979582056,1.742576176192661,1.74360694376803,1.716566046013577,1.679368640297466,1.625865626450973,1.555137727915484,1.457293364188737,1.314589338911802,1.13831058084949,0.9453286659604105,0.7409814518148364,0.5281164336170375,0.3107666450838087,0.09222601057694303,-0.1239732400107073,-0.3336751974508325,-0.5339013468368218,-0.7218677001301741,-0.8942959540407965,-1.05018463204605,-1.187154611070973,-1.304230446961033,-1.401493391684869,-1.477605607988248,-1.534323197288535,-1.572589008587955,-1.595577748164532,-1.610325001493058 --1.572305197342081,-1.544962337821656,-1.508738675717987,-1.456152492460297,-1.384150095077346,-1.292475098803316,-1.180089707303302,-1.04902653298864,-0.9000639390046261,-0.7347471690944815,-0.5559241867828444,-0.3651965213770112,-0.1658765810661449,0.03896046444849693,0.246338437574135,0.4523541210613503,0.6532898509211246,0.8459247415591681,1.025904674800505,1.190270117032486,1.336547813934928,1.461568834312414,1.565142080862171,1.641141281727444,1.677905890451085,1.669002041482883,1.625865626450973,1.564814675154797,1.497230649336885,1.424309297476177,1.325776178703697,1.183275961342534,1.011744661283559,0.8245291256793582,0.6279645744690309,0.425935736220243,0.2205739791267615,0.01484158260837099,-0.1876475798247244,-0.3840723680896965,-0.5715305394456907,-0.746840418333835,-0.9085884795403782,-1.054154058083649,-1.182205080775809,-1.292236774456778,-1.382520029133118,-1.454254340635895,-1.50789743178286,-1.546383794198234,-1.576669975631651 --1.522683934732187,-1.508871442980711,-1.485810986164786,-1.44570873298758,-1.385440346110597,-1.304870931573355,-1.203072722333651,-1.082278116863063,-0.9434568768634795,-0.7882901298212009,-0.6197413416197858,-0.4394810429283555,-0.250777893073283,-0.0566066538480748,0.1402234072923724,0.3361030439550652,0.5276634978678341,0.7120095395224224,0.8852542065487766,1.044672533381063,1.187861190758488,1.311765264102701,1.416394725006177,1.499528106184534,1.558207577462066,1.582386897183283,1.555137727915484,1.497230649336885,1.433793854049214,1.368415891252809,1.297881737945696,1.204291487691277,1.06878301829449,0.9041919813566154,0.727369107309905,0.5439741681957606,0.3551011006740634,0.163077672605618,-0.02926633573541124,-0.2194270946453752,-0.4044337877547543,-0.5812405326228179,-0.7479585781173689,-0.9016826468711591,-1.040659485954919,-1.163687267010718,-1.268567618716059,-1.355843162433708,-1.425390663906782,-1.479859889106477,-1.526119320594565 --1.455824480828267,-1.455578357510948,-1.445712265463261,-1.418159093077068,-1.369767043527982,-1.300587156559478,-1.209871270020154,-1.100094857236414,-0.9724899344929075,-0.8289095603190296,-0.6724512263191099,-0.50489043390704,-0.3294179306563285,-0.1488932263749962,0.03408851126509472,0.216300924065733,0.3948000107487292,0.5671362883137636,0.7300558742921212,0.8812825620551414,1.01876671623061,1.139763439421487,1.244011682074144,1.330020724467579,1.397684199548108,1.445107922282278,1.457293364188737,1.424309297476177,1.368415891252809,1.308717606055288,1.248039112875462,1.185357947166302,1.099831997807311,0.9743761825314017,0.8247976797685118,0.6632526012944667,0.4932050174728423,0.3174622110905366,0.1379057990585341,-0.04357506294936243,-0.2240810627606508,-0.4007732045723849,-0.5712519253403849,-0.7323039754233158,-0.881707103964279,-1.017481206120953,-1.136902450336969,-1.239778471984554,-1.325342822979885,-1.395935288072031,-1.458341050552745 --1.371569959974707,-1.38469108197778,-1.387899137207259,-1.372902977534885,-1.33655744254908,-1.279133948631109,-1.200112107087469,-1.102226332367948,-0.9870087050362222,-0.8565004640677748,-0.7139284012698401,-0.561188865744783,-0.4013587386715819,-0.2371586853509433,-0.07093100910910413,0.09455317009650868,0.2568326369535825,0.4139855651646749,0.5634953123645735,0.7036485804165776,0.8329399736449395,0.9492147559406835,1.05211162225834,1.140328080196867,1.21400568971646,1.273704475559531,1.314589338911802,1.325776178703697,1.297881737945696,1.248039112875462,1.195454769166777,1.143658681237793,1.091654222710285,1.022752858083911,0.9164458572260646,0.7811221998749009,0.6312363036487253,0.4734309710839605,0.3087024335003921,0.1380658289827434,-0.03585068379242084,-0.2105511424831243,-0.383156133127678,-0.5501563854695786,-0.708847091002949,-0.8564316055761709,-0.9896413470101395,-1.107504969676655,-1.208573040019088,-1.294840388585202,-1.372963047372872 --1.268050267408234,-1.294218955086662,-1.310288884772402,-1.307837970125427,-1.283772998845796,-1.23860583675565,-1.172075761357768,-1.087165537127025,-0.9857187232686455,-0.8699591366734057,-0.7432178054797746,-0.6075080721306604,-0.4657507676015644,-0.3204966572245201,-0.1737969255272899,-0.02790830651286007,0.1152392174693982,0.2543101570373905,0.3875956573177531,0.5140097907262855,0.632690582784576,0.742252465286534,0.8424443066240438,0.9322370502586769,1.011460989547269,1.080506317515994,1.13831058084949,1.183275961342534,1.204291487691277,1.185357947166302,1.143658681237793,1.102464850889022,1.067773261320527,1.037303850654181,0.9859944878979832,0.8899426044851405,0.7650770811445891,0.627331252654866,0.479004605434581,0.321067886513318,0.1559135987115843,-0.01454349926368794,-0.1870994539064058,-0.3580230270288615,-0.5241497971994912,-0.681870826087359,-0.8273873257198372,-0.9589349923816278,-1.074374863459171,-1.175328233661977,-1.268256616987861 --1.145641208383941,-1.184462692389932,-1.213127691068787,-1.22321048675447,-1.211720272035971,-1.179410550934284,-1.126290079333339,-1.055551616582666,-0.9693313783367622,-0.8700064512592401,-0.7609682657046926,-0.6443218489097472,-0.5227880717503403,-0.3987129447738551,-0.2738227601702782,-0.1498232724832999,-0.02808066978907398,0.09068352799786901,0.2056000619462868,0.316237057942201,0.4224063551937622,0.5235602326932558,0.6196680088093598,0.7101662069178485,0.7947309443848395,0.8732278187186681,0.9453286659604105,1.011744661283559,1.06878301829449,1.099831997807311,1.091654222710285,1.067773261320527,1.04821083263276,1.031911898794425,1.013844951924266,0.9720491467450998,0.8886646557706201,0.7761062074202764,0.6451840689462899,0.5009887119877879,0.3463848485100639,0.1824279854272743,0.01235858658445159,-0.1600385689652377,-0.3312226938620905,-0.4968293726080785,-0.6525807679750517,-0.7959397682937837,-0.92410660235876,-1.038309326613148,-1.144733403670856 --1.003219523845558,-1.05408257859212,-1.094950962162116,-1.117544900039605,-1.119021278734226,-1.100342802708988,-1.061772557251636,-1.006641328116582,-0.937318735295379,-0.856281969188044,-0.766908947691042,-0.6713462421265547,-0.5720673394560832,-0.471164947575958,-0.3700165559849659,-0.2697561080393997,-0.1711709561640439,-0.07437579753652175,0.02059792227058025,0.1139589852432254,0.2061772307846126,0.2975390826361667,0.3882578335344304,0.478340818257681,0.5675237535491084,0.6552440897058228,0.7409814518148364,0.8245291256793582,0.9041919813566154,0.9743761825314017,1.022752858083911,1.037303850654181,1.031911898794425,1.024914985621963,1.0194832057603,1.013423340717722,0.9856376342848744,0.9118094773764315,0.8019364167821293,0.6727933541636456,0.530379952236015,0.3752163295575027,0.2104597834600315,0.0396926502129478,-0.1333725438278771,-0.3037627413400545,-0.4668255217845716,-0.619312174000296,-0.7578213040390631,-0.8831592304323449,-1.001098904189317 --0.8406544715872185,-0.902927123991598,-0.955573484389816,-0.9906571354795007,-1.005542088345189,-1.001359242683429,-0.9785928401071181,-0.9406145376056468,-0.8899451256712522,-0.8290842868456918,-0.7613090329848407,-0.6887375164155047,-0.6135445428551027,-0.5375212330281901,-0.4616704343113523,-0.3865561204095528,-0.3123830510101073,-0.2386903771703006,-0.1647083179566376,-0.08962168339925777,-0.01235635414963934,0.06816589165033181,0.1523799926327661,0.2408691637812552,0.3335245922676343,0.4295088408858441,0.5281164336170375,0.6279645744690309,0.727369107309905,0.8247976797685118,0.9164458572260646,0.9859944878979832,1.013844951924266,1.0194832057603,1.025019737400045,1.032349958949168,1.037638290744175,1.015628688182379,0.9418711004670041,0.833103991464842,0.704800803112018,0.5603022640142954,0.4035672910453186,0.2377754418631571,0.06645143458046203,-0.1050929277559529,-0.2719973734420862,-0.4304014732147535,-0.5764000559821706,-0.7103660198049384,-0.8375235546358062 --0.6593604183357822,-0.7322520623267648,-0.796150898774759,-0.8436608312507918,-0.8724020567114695,-0.883606435020634,-0.8779269034173076,-0.8586589854434381,-0.8283640874014374,-0.7894741955832827,-0.7450599240211934,-0.6971265315943287,-0.6475019219927211,-0.5976202344881812,-0.5480969329606818,-0.4989423445917525,-0.4497924742299668,-0.3996713437526983,-0.3470717703046446,-0.290639101470216,-0.2287779049119097,-0.1596977406743725,-0.08279151856039436,0.003044149131710419,0.09786509786650381,0.2006645647489741,0.3107666450838087,0.425935736220243,0.5439741681957606,0.6632526012944667,0.7811221998749009,0.8899426044851405,0.9720491467450998,1.013423340717722,1.032349958949168,1.048389861451141,1.063525431778003,1.072216554778578,1.048977377717959,0.975832462946482,0.8663497073672587,0.7343555387234093,0.5880464301407081,0.4304828097852407,0.2646898979639674,0.09595645158059476,-0.07091375055280089,-0.2316120039574983,-0.381857160123826,-0.5215744395830392,-0.6552722769418625 --0.4593067851915705,-0.5418981944063453,-0.6164165735646361,-0.67623698121466,-0.7192909620780565,-0.7468281735791592,-0.7595991830479415,-0.7606813078356109,-0.7525399022830541,-0.7374276787431964,-0.7180865018524932,-0.696305435415757,-0.6735147141686456,-0.6507328816906551,-0.6281783401986447,-0.6053434494321601,-0.5813229384659309,-0.554712200817977,-0.5233629812536992,-0.4854735268563553,-0.4390441605746406,-0.3816852469223183,-0.3126870307328359,-0.2305187977550991,-0.1349905650534889,-0.02723285339432716,0.09222601057694303,0.2205739791267615,0.3551011006740634,0.4932050174728423,0.6312363036487253,0.7650770811445891,0.8886646557706201,0.9856376342848744,1.037638290744175,1.063525431778003,1.084487379611168,1.09885406623115,1.104084461947188,1.081366051853653,1.006715276848601,0.8933150632452252,0.7606964869648157,0.614605305936731,0.4582451704621212,0.296689674185794,0.1342860395885648,-0.02450033922680474,-0.1752078967404617,-0.3173166059396022,-0.4544380090861086 --0.2434921440080302,-0.3348283019025669,-0.4192764190325796,-0.4912069119485782,-0.5489134722336927,-0.5935791612848488,-0.6259759275762146,-0.6488204050973646,-0.6643442061298346,-0.6745069521168721,-0.6816042855583828,-0.6871053574379685,-0.6919975198545566,-0.6968324862463545,-0.701425967941033,-0.7048004690516073,-0.7055454412405496,-0.7019239529998953,-0.6912578594460124,-0.6713990640968887,-0.640072979926531,-0.5944163432319011,-0.533691317896742,-0.4560454372797791,-0.3611970679570589,-0.250387291350096,-0.1239732400107073,0.01484158260837099,0.163077672605618,0.3174622110905366,0.4734309710839605,0.627331252654866,0.7761062074202764,0.9118094773764315,1.015628688182379,1.072216554778578,1.09885406623115,1.115315807909582,1.12829366999729,1.13568243994732,1.111387723055858,1.033366047128118,0.9206955501886388,0.7888826448358599,0.6450565705390739,0.4945323914894086,0.3407649406612809,0.1879748309206409,0.04053610819799629,-0.1006257302345008,-0.2380629388114306 --0.01443939166154169,-0.1133666419881855,-0.2068812929649356,-0.290562832774647,-0.3631102954681699,-0.4255404942160529,-0.4785607127830181,-0.5243786187011401,-0.5648398039910014,-0.6014971483997735,-0.6360745986669494,-0.6696149059885569,-0.7026239375057244,-0.7351330983884832,-0.7665636926091542,-0.7955247694390727,-0.8201510835089457,-0.8384875831849751,-0.8474534833804966,-0.8446766401307731,-0.8277514738601562,-0.7934891169842015,-0.7412076440280204,-0.6688540587327428,-0.5761073101938001,-0.4643137779320202,-0.3336751974508325,-0.1876475798247244,-0.02926633573541124,0.1379057990585341,0.3087024335003921,0.479004605434581,0.6451840689462899,0.8019364167821293,0.9418711004670041,1.048977377717959,1.104084461947188,1.12829366999729,1.146948394096685,1.161826272048723,1.165642048007838,1.138230608286254,1.061669015462932,0.9502074913936421,0.8225009729419391,0.6866632582451603,0.545493090182685,0.4027842997566603,0.2624877912926999,0.1258037926437437,-0.008638303463538919 -0.2247246076205895,0.1194094682449066,0.01778659004546372,-0.07714161154364142,-0.1645206961897797,-0.245111096328505,-0.3194700320710195,-0.389152869526847,-0.4554777475378426,-0.5194753681589666,-0.5821869747222557,-0.6441260123990673,-0.7052827419616964,-0.7651290980421207,-0.8226978502091173,-0.8762538235932179,-0.9235318413990115,-0.9624744871139419,-0.9897368378011498,-1.002842662654511,-0.9994058873966964,-0.9760633375456114,-0.9322717253087951,-0.8659036555850116,-0.7766502090351746,-0.6659587310136696,-0.5339013468368218,-0.3840723680896965,-0.2194270946453752,-0.04357506294936243,0.1380658289827434,0.321067886513318,0.5009887119877879,0.6727933541636456,0.833103991464842,0.975832462946482,1.081366051853653,1.13568243994732,1.161826272048723,1.178121440864834,1.187020477839741,1.1904350447095,1.166232567350383,1.093062518988194,0.9892235061633282,0.8717282705042284,0.7462724011756637,0.6171472348887218,0.487595251096343,0.3588146951063373,0.2306408756006825 -0.4688613025283423,0.3584691222211702,0.2498369249206041,0.144389433852144,0.04250642374292533,-0.05623217715141245,-0.1521576639360356,-0.2460548184384497,-0.3385900116790593,-0.4301815145033743,-0.5210938338267354,-0.611228998704459,-0.7000418519755662,-0.786414614682993,-0.8690106134654463,-0.9458153617895916,-1.014223902124331,-1.072185677907624,-1.116220112494531,-1.14386309899117,-1.152882093228206,-1.139882935073157,-1.104533894401289,-1.044748281191279,-0.9602768860398536,-0.8526602748084073,-0.7218677001301741,-0.5715305394456907,-0.4044337877547543,-0.2240810627606508,-0.03585068379242084,0.1559135987115843,0.3463848485100639,0.530379952236015,0.704800803112018,0.8663497073672587,1.006715276848601,1.111387723055858,1.165642048007838,1.187020477839741,1.201426126662356,1.21439859097974,1.222977793331382,1.205080697477705,1.141982301734878,1.048123882858254,0.9406549280181765,0.827647728386633,0.7116585160026079,0.5936607750738606,0.4746346800507757 -0.7134299108638597,0.5994393921187656,0.4851077971165025,0.3701484533702665,0.2544456053022845,0.1379933440131066,0.02075600678356754,-0.09717785049054169,-0.2157152309961073,-0.3345826991358162,-0.453192311601653,-0.5707656590406636,-0.68621184889897,-0.7978077381455695,-0.9038708325047929,-1.002178559927616,-1.089852052650089,-1.16495396784827,-1.223999255989695,-1.264648323301987,-1.284951775375912,-1.281625874358467,-1.254616579474864,-1.201990211089783,-1.123601196700728,-1.021072058328587,-0.8942959540407965,-0.746840418333835,-0.5812405326228179,-0.4007732045723849,-0.2105511424831243,-0.01454349926368794,0.1824279854272743,0.3752163295575027,0.5603022640142954,0.7343555387234093,0.8933150632452252,1.033366047128118,1.138230608286254,1.1904350447095,1.21439859097974,1.23508469514905,1.254823997002006,1.271557275448947,1.263382628075485,1.208519533893126,1.125192597003616,1.031246937904552,0.9309645277309482,0.8260262784463567,0.7187238228099528 -0.9532052221883486,0.8371093341929213,0.7184707244910046,0.5952125414479953,0.4667160386362373,0.3334397896626932,0.1956936055162004,0.05450663894142993,-0.08919889068038937,-0.234405266423862,-0.3796297055989915,-0.5233716242470005,-0.6639964660533572,-0.799178902088194,-0.9269160526661708,-1.044842352363278,-1.149866554370813,-1.240249077055553,-1.312611318833265,-1.364827500093692,-1.395332488908235,-1.401068020576098,-1.382304014054225,-1.33734904526579,-1.266192608727546,-1.17052508619323,-1.05018463204605,-0.9085884795403782,-0.7479585781173689,-0.5712519253403849,-0.383156133127678,-0.1870994539064058,0.01235858658445159,0.2104597834600315,0.4035672910453186,0.5880464301407081,0.7606964869648157,0.9206955501886388,1.061669015462932,1.166232567350383,1.222977793331382,1.254823997002006,1.283128395117309,1.311494111630675,1.336822429695276,1.337226612733067,1.295396081367083,1.226010533215299,1.142556119734235,1.051664217634811,0.9576893253505121 -1.181588133208385,1.065047581705824,0.9437360158024505,0.8137662754157884,0.6740186286491913,0.5254459705456546,0.3687328483648921,0.2058763335367475,0.03866434766802867,-0.1311254772932486,-0.30110218350769,-0.4690338505629583,-0.6327616375377689,-0.7893769006534761,-0.9365939419812942,-1.071960118705918,-1.192235146551837,-1.29594306180195,-1.379902405247605,-1.442273907555741,-1.481947453014602,-1.496183441748665,-1.485602172992685,-1.448820069093776,-1.385983046213454,-1.29882807861655,-1.187154611070973,-1.054154058083649,-0.9016826468711591,-0.7323039754233158,-0.5501563854695786,-0.3580230270288615,-0.1600385689652377,0.0396926502129478,0.2377754418631571,0.4304828097852407,0.614605305936731,0.7888826448358599,0.9502074913936421,1.093062518988194,1.205080697477705,1.271557275448947,1.311494111630675,1.348324533288745,1.385964134909181,1.422208967100557,1.436020431249564,1.404683408423746,1.341401466317659,1.265199041227745,1.184983628039832 -1.393364959841405,1.278130031258654,1.155930979797696,1.02110522929494,0.8720501534947205,0.7102162094552658,0.5366704441208263,0.3543710250383134,0.1659663481557867,-0.02601218806518277,-0.218288463152278,-0.4079156295947561,-0.5922399290509378,-0.767810314445757,-0.9320929029863431,-1.082600381626548,-1.216001069515598,-1.331125397525408,-1.425061468946576,-1.496303615150052,-1.544240441156104,-1.566517234072063,-1.564110295484679,-1.535987605229372,-1.482458257283868,-1.405282454640475,-1.304230446961033,-1.182205080775809,-1.040659485954919,-0.881707103964279,-0.708847091002949,-0.5241497971994912,-0.3312226938620905,-0.1333725438278771,0.06645143458046203,0.2646898979639674,0.4582451704621212,0.6450565705390739,0.8225009729419391,0.9892235061633282,1.141982301734878,1.263382628075485,1.336822429695276,1.385964134909181,1.43400233277751,1.483102525858923,1.529769546361846,1.54933517225623,1.520529366958461,1.46298533306482,1.396214773798216 -1.582976943378781,1.470827152451351,1.349643688594423,1.212083896447424,1.056086329756335,0.8835719963580849,0.6959692155114628,0.4971435156351443,0.2905564049685193,0.07944580435484004,-0.1320822892013725,-0.3404183175961,-0.5424571650781215,-0.7342602331896279,-0.9130864059455024,-1.076447807193796,-1.220971468607224,-1.345806629509722,-1.448348925564733,-1.527444477139891,-1.582981589083662,-1.613019823554749,-1.618871612562059,-1.599865225810252,-1.556465696251326,-1.490427506919096,-1.401493391684869,-1.292236774456778,-1.163687267010718,-1.017481206120953,-0.8564316055761709,-0.681870826087359,-0.4968293726080785,-0.3037627413400545,-0.1050929277559529,0.09595645158059476,0.296689674185794,0.4945323914894086,0.6866632582451603,0.8717282705042284,1.048123882858254,1.208519533893126,1.337226612733067,1.422208967100557,1.483102525858923,1.540595964084905,1.596918628184413,1.646192280936752,1.664263388749891,1.638121965712958,1.587270871824451 -1.743870426695676,1.636767919389945,1.518765683731005,1.380999703628017,1.22098636622757,1.041057984183762,0.8429545242131601,0.6313513819551788,0.4104295589616929,0.184053362097657,-0.04293429727927838,-0.2663463322238984,-0.4826828610476568,-0.6875935777131684,-0.8781730663326828,-1.051957293059409,-1.205576813275131,-1.338484628705475,-1.448396525886481,-1.53450079509997,-1.597150816036555,-1.634818158870693,-1.64910674758459,-1.639685377319654,-1.6071523687479,-1.553222679900581,-1.477605607988248,-1.382520029133118,-1.268567618716059,-1.136902450336969,-0.9896413470101395,-0.8273873257198372,-0.6525807679750517,-0.4668255217845716,-0.2719973734420862,-0.07091375055280089,0.1342860395885648,0.3407649406612809,0.545493090182685,0.7462724011756637,0.9406549280181765,1.125192597003616,1.295396081367083,1.436020431249564,1.529769546361846,1.596918628184413,1.658504691619521,1.711838311521636,1.754209584976092,1.771731317857723,1.753613935866981 -1.87408487465457,1.773902248336061,1.66120880014246,1.52580857646116,1.36483406302102,1.18094638443661,0.9761269030555721,0.7557366477908498,0.5245547852898437,0.286971850764634,0.04845620685625606,-0.1863306209516415,-0.4135538861204283,-0.628533356704355,-0.828238971202229,-1.010240450852863,-1.171205390956874,-1.310852501913245,-1.427204055093069,-1.519757752957068,-1.589268985706333,-1.634590713357197,-1.657557957756417,-1.658136355012032,-1.637025295008533,-1.595866115939828,-1.534323197288535,-1.454254340635895,-1.355843162433708,-1.239778471984554,-1.107504969676655,-0.9589349923816278,-0.7959397682937837,-0.619312174000296,-0.4304014732147535,-0.2316120039574983,-0.02450033922680474,0.1879748309206409,0.4027842997566603,0.6171472348887218,0.827647728386633,1.031246937904552,1.226010533215299,1.404683408423746,1.54933517225623,1.646192280936752,1.711838311521636,1.765040155656111,1.814475472469039,1.859771168086809,1.89240104848936 -1.970990520524553,1.879411166420336,1.774129943014849,1.643789894549947,1.48514482173639,1.301058590259976,1.09366016735579,0.868841962009532,0.631831147322358,0.3874203634472713,0.1415735845301307,-0.1006970767287641,-0.3352878096548572,-0.5572750219483565,-0.7635455231311183,-0.9516961305374536,-1.118456573499926,-1.263751567030194,-1.385867883653638,-1.48456143315114,-1.560894290320387,-1.614044089004695,-1.646002277813081,-1.65695786668636,-1.647677458028875,-1.619686084672453,-1.572589008587955,-1.50789743178286,-1.425390663906782,-1.325342822979885,-1.208573040019088,-1.074374863459171,-0.92410660235876,-0.7578213040390631,-0.5764000559821706,-0.381857160123826,-0.1752078967404617,0.04053610819799629,0.2624877912926999,0.487595251096343,0.7116585160026079,0.9309645277309482,1.142556119734235,1.341401466317659,1.520529366958461,1.664263388749891,1.754209584976092,1.814475472469039,1.871181885361223,1.930343376125727,2.001788331644366 -2.039095819596253,1.957188195455262,1.860970456539077,1.737982532282852,1.584544184079703,1.403565232453774,1.19723150018581,0.9718257849573425,0.7328788940052804,0.4854775971109467,0.2359595998965585,-0.01042356204669721,-0.2493563968252812,-0.475748942426002,-0.6864391672491849,-0.8790396603807578,-1.050359904106027,-1.200472531225408,-1.327879850797552,-1.432549100489184,-1.515752099114576,-1.57693425926725,-1.618177519669673,-1.639813042301823,-1.642655239859988,-1.628064688505048,-1.595577748164532,-1.546383794198234,-1.479859889106477,-1.395935288072031,-1.294840388585202,-1.175328233661977,-1.038309326613148,-0.8831592304323449,-0.7103660198049384,-0.5215744395830392,-0.3173166059396022,-0.1006257302345008,0.1258037926437437,0.3588146951063373,0.5936607750738606,0.8260262784463567,1.051664217634811,1.265199041227745,1.46298533306482,1.638121965712958,1.771731317857723,1.859771168086809,1.930343376125727,2.002517888975621,2.095084048891293 -2.092567599164061,2.020136882485865,1.933554633088178,1.819072810761579,1.672410526309645,1.496353520972957,1.293088322393743,1.06920982980226,0.8304659339052675,0.5821823916645664,0.3310005788345231,0.08235054973309421,-0.1592736103059046,-0.3886542355772091,-0.6026043896198112,-0.7987402621552301,-0.9739618300541202,-1.128460232758837,-1.260915115278834,-1.371491700815888,-1.461604458886611,-1.530938242763822,-1.581637267089573,-1.614106416277518,-1.629227177721697,-1.628142737159064,-1.610325001493058,-1.576669975631651,-1.526119320594565,-1.458341050552745,-1.372963047372872,-1.268256616987861,-1.144733403670856,-1.001098904189317,-0.8375235546358062,-0.6552722769418625,-0.4544380090861086,-0.2380629388114306,-0.008638303463538919,0.2306408756006825,0.4746346800507757,0.7187238228099528,0.9576893253505121,1.184983628039832,1.396214773798216,1.587270871824451,1.753613935866981,1.89240104848936,2.001788331644366,2.095084048891293,2.19480499731987 diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/BwNN.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/BwNN.Rd deleted file mode 100644 index 81b6f9e9..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/BwNN.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/BwNN.R -\name{BwNN} -\alias{BwNN} -\title{Minimum bandwidth based on kNN criterion.} -\usage{ -BwNN(Lt, k = 3, onlyMean = FALSE, onlyCov = FALSE) -} -\arguments{ -\item{Lt}{n-by-1 list of vectors} - -\item{k}{number of unique neighbors for cov and mu (default = 3)} - -\item{onlyMean}{Indicator to return only the minimum bandwidth for the mean} - -\item{onlyCov}{Indicator to return only the minium bandwidth for the covariance} -} -\description{ -Input a list of time points Lt, and the number of unique neighbors k and get the minimum bandwidth garanteeing k unique neighbours. -} -\examples{ -tinyGrid = list(c(1,7), c(2,3), 6, c(2,4), c(4,5)) -BwNN(tinyGrid, k = 2) # c(3,2) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckData.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckData.Rd deleted file mode 100644 index 6c759562..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckData.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CheckData.R -\name{CheckData} -\alias{CheckData} -\title{Check data format} -\usage{ -CheckData(y, t) -} -\arguments{ -\item{y}{is a n-by-1 list of vectors} - -\item{t}{is a n-by-1 list of vectors} -} -\description{ -Check if there are problems with the form and basic structure of the functional data 'y' and the recorded times 't'. -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckOptions.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckOptions.Rd deleted file mode 100644 index c38f4e43..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CheckOptions.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CheckOptions.R -\name{CheckOptions} -\alias{CheckOptions} -\title{Check option format} -\usage{ -CheckOptions(t, optns, n) -} -\arguments{ -\item{t}{is a n-by-1 list of vectors} - -\item{optns}{is an initialized option list} - -\item{n}{is a total number of sample curves} -} -\description{ -Check if the options structure is valid and set the ones that are NULL -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/ConvertSupport.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/ConvertSupport.Rd deleted file mode 100644 index 9db37397..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/ConvertSupport.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ConvertSupport.R -\name{ConvertSupport} -\alias{ConvertSupport} -\title{Convert support of a mu/phi/cov etc. to and from obsGrid and workGrid} -\usage{ -ConvertSupport(fromGrid, toGrid, mu = NULL, Cov = NULL, phi = NULL, - isCrossCov = FALSE) -} -\arguments{ -\item{fromGrid}{vector of points with input grid to interpolate from} - -\item{toGrid}{vector of points with the target grid to interpolate on} - -\item{mu}{any vector of function to be interpolated} - -\item{Cov}{a square matrix supported on fromGrid * fromGrid, to be interpolated to toGrid * toGrid.} - -\item{phi}{any matrix, each column containing a function to be interpolated} - -\item{isCrossCov}{logical, indicating whether the input covariance is a cross-covariance. If so then the output is not made symmetric.} -} -\description{ -Convert the support of a given function 1-D or 2-D function from 'fromGrd' to 'toGrid'. -Both grids need to be sorted. This is a interpolation/convenience function. -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBWPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBWPlot.Rd deleted file mode 100644 index f8f4e77a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBWPlot.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateBWPlot.R -\name{CreateBWPlot} -\alias{CreateBWPlot} -\title{Functional Principal Component Analysis Bandwidth Diagnostics plot} -\usage{ -CreateBWPlot(fpcaObj, derOptns = NULL, bwMultipliers = NULL) -} -\arguments{ -\item{fpcaObj}{An FPCA class object returned by FPCA().} - -\item{derOptns}{A list of options to control the derivation parameters; see ?FPCAder. If NULL standard diagnostics are returned} - -\item{bwMultipliers}{A vector of multipliers that the original 'bwMu' and 'bwCov' will be multiplied by. (default: c(0.50, 0.75, 1.00, 1.25, 1.50)) -- default: NULL} -} -\description{ -This function by default creates the mean and first principal modes of variation plots for -50%, 75%, 100%, 125% and 150% of the defined bandwidth choices in the fpcaObj provided as input. -If provided with a derivative options object (?FPCAder) it will return the -differentiated mean and first two principal modes of variations for 50%, 75%, 100%, 125% and 150% of the defined bandwidth choice. -} -\examples{ -set.seed(1) -n <- 25 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -CreateBWPlot(res1) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBasis.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBasis.Rd deleted file mode 100644 index 4c4bb235..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateBasis.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateBasis.R -\name{CreateBasis} -\alias{CreateBasis} -\title{Create an orthogonal basis of K functions in [0, 1], with nGrid points.} -\usage{ -CreateBasis(K, pts = seq(0, 1, length.out = 50), type = c("cos", "sin", - "fourier", "legendre01", "poly")) -} -\arguments{ -\item{K}{A positive integer specifying the number of eigenfunctions to generate.} - -\item{pts}{A vector specifying the time points to evaluate the basis functions.} - -\item{type}{A string for the type of orthogonal basis.} -} -\value{ -A K by nGrid matrix, each column containing an basis function. -} -\description{ -Create an orthogonal basis of K functions in [0, 1], with nGrid points. -} -\examples{ -basis <- CreateBasis(3, type='fourier') -head(basis) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateCovPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateCovPlot.Rd deleted file mode 100644 index 76e0d00c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateCovPlot.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateCovPlot.R -\name{CreateCovPlot} -\alias{CreateCovPlot} -\title{Create the covariance surface plot based on the results from FPCA() or FPCder().} -\usage{ -CreateCovPlot(fpcaObj, covPlotType = "Fitted", isInteractive = FALSE, - colSpectrum = NULL, ...) -} -\arguments{ -\item{fpcaObj}{returned object from FPCA().} - -\item{covPlotType}{a string specifying the type of covariance surface to be plotted: -'Smoothed': plot the smoothed cov surface -'Fitted': plot the fitted cov surface} - -\item{isInteractive}{an option for interactive plot: -TRUE: interactive plot; FALSE: printable plot} - -\item{colSpectrum}{character vector to be use as input in the 'colorRampPalette' function defining the colouring scheme (default: c('blue','red'))} - -\item{...}{other arguments passed into persp3d, persp3D, plot3d or points3D for plotting options} -} -\description{ -This function will open a new device if not instructed otherwise. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateCovPlot(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateDesignPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateDesignPlot.Rd deleted file mode 100644 index 1720ab50..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateDesignPlot.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateDesignPlot.R -\name{CreateDesignPlot} -\alias{CreateDesignPlot} -\title{Create the design plot of the functional data.} -\usage{ -CreateDesignPlot(Lt, obsGrid = NULL, isColorPlot = TRUE, - noDiagonal = TRUE, addLegend = TRUE, ...) -} -\arguments{ -\item{Lt}{a list of observed time points for functional data} - -\item{obsGrid}{a vector of sorted observed time points. Default to the -unique time points in Lt.} - -\item{isColorPlot}{an option for colorful plot: -TRUE: create color plot with color indicating counts -FALSE: create black and white plot with dots indicating observed time pairs} - -\item{noDiagonal}{an option specifying plotting the diagonal design points: -TRUE: remove diagonal time pairs -FALSE: do not remove diagonal time pairs} - -\item{addLegend}{Logical, default TRUE} - -\item{...}{Other arguments passed into \code{plot()}.} -} -\description{ -Display the scatter plot of \eqn{\{(T_{ij}, T_{il}\}_{i \le n,\, j,l \le n_i }}{{(T_{ij}, T_{il}}}, which is used to diagnose whether the design time points are sufficiently dense in the domain of interest so that the 2D smoothed covariance estimate is feasible. See Figure 2 of Yao et al (2005). This function will open a new device if not instructed otherwise. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -CreateDesignPlot(sampWiener$Lt, sort(unique(unlist(sampWiener$Lt)))) -} -\references{ -\cite{Yao, Fang, Hans-Georg Mueller, and Jane-Ling Wang. "Functional data analysis for sparse longitudinal data." Journal of the American Statistical Association 100, no. 470 (2005): 577-590.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateFuncBoxPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateFuncBoxPlot.Rd deleted file mode 100644 index 7d11e6f8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateFuncBoxPlot.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateFuncBoxPlot.R -\name{CreateFuncBoxPlot} -\alias{CreateFuncBoxPlot} -\title{Create functional boxplot using 'bagplot', 'KDE' or 'pointwise' methodology} -\usage{ -CreateFuncBoxPlot(fpcaObj, optns = list(), ...) -} -\arguments{ -\item{fpcaObj}{An object of class FPCA returned by the function FPCA().} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}. See `Details'.} - -\item{...}{Additional arguments for the 'plot' function.} -} -\description{ -Using an FPCA object create a functional box-plot based on the function scores. -The green line corresponds to the functional median, the dark grey area to the area spanned -by the curves within the 25th and 75-th percentile and the light gret to the area spanned -by the curves within the 2.5th and 97.5-th percentile. -} -\details{ -Available control options are -\describe{ -\item{ifactor}{inflation ifactor for the bag-plot defining the loop of bag-plot or multiplying ifactor the KDE pilot bandwidth matrix. (see ?aplpack::compute.bagplot; ?ks::Hpi respectively; default: 2.58; 2 respectively).} -\item{variant}{string defining the method used ('KDE', 'pointwise' or 'bagplot') (default: 'bagplot')} -\item{unimodal}{logical specifying if the KDE estimate should be unimodal (default: FALSE, relavant only for variant='KDE')} -\item{addIndx}{vector of indeces corresponding to which samples one should overlay (Default: NULL)} -\item{K}{integer number of the first K components used for the representation. (default: length(fpcaObj$lambda ))} -} -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateFuncBoxPlot(res, list(addIndx=c(1:3)) ) -} -\references{ -\cite{P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382-387} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateModeOfVarPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateModeOfVarPlot.Rd deleted file mode 100644 index 147112fa..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateModeOfVarPlot.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateModeOfVarPlot.R -\name{CreateModeOfVarPlot} -\alias{CreateModeOfVarPlot} -\title{Functional Principal Component Analysis mode of variation plot} -\usage{ -CreateModeOfVarPlot(fpcaObj, k = 1, plotType = "standard", - colSpectrum = NULL, ...) -} -\arguments{ -\item{fpcaObj}{An FPCA class object returned by FPCA().} - -\item{k}{The k-th mode of variation to plot (default k = 1)} - -\item{plotType}{Character indicating the creation of "standard" shaded plot, a "rainbow"-plot or a "minimal" sketch plot (default: "standard")} - -\item{colSpectrum}{Character vector to be use as input in the 'colorRampPalette' function defining the outliers colours (default: c("blue","red", "green"), relavant only for rainbowPlot=TRUE)} - -\item{...}{Additional arguments for the \code{plot} function.} -} -\description{ -Create the k-th mode of variation plot around the mean. The red-line is -the functional mean, the grey shaded areas show the range of variations -around the mean: \eqn{ \pm Q \sqrt{\lambda_k} \phi_k}{+/- Q sqrt{lambda_k} phi_k} -for the dark grey area Q = 1, and for the light grey are Q = 2. In the case of 'rainbow' plot -the blue edge corresponds to Q = -3, the green edge to Q = +3 and the red-line to Q = 0 (the mean). -In the case of 'minimal' the blue line corresponds to Q = -2 and green line to Q = 2. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateModeOfVarPlot(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateOutliersPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateOutliersPlot.Rd deleted file mode 100644 index 34dc931e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateOutliersPlot.Rd +++ /dev/null @@ -1,51 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateOutliersPlot.R -\name{CreateOutliersPlot} -\alias{CreateOutliersPlot} -\title{Functional Principal Component or Functional Singular Value Decomposition Scores Plot using 'bagplot' or 'KDE' methodology} -\usage{ -CreateOutliersPlot(fObj, optns = NULL, ...) -} -\arguments{ -\item{fObj}{A class object returned by FPCA() or FSVD().} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}. See `Details'.} - -\item{...}{Additional arguments for the 'plot' function.} -} -\value{ -An (temporarily) invisible copy of a list containing the labels associated with each of sample curves. -} -\description{ -This function will create, using the first components scores, a set of convex hulls of the scores based on 'bagplot' or 'KDE' methodology. -} -\details{ -Available control options are -\describe{ -\item{ifactor}{inflation ifactor for the bag-plot defining the loop of bag-plot or multiplying ifactor the KDE pilot bandwidth matrix. (see ?aplpack::compute.bagplot; ?ks::Hpi respectively; default: 2.58; 2 respectively).} -\item{variant}{string defining the outlier method used ('KDE', 'NN' or 'bagplot') (default: 'KDE')} -\item{unimodal}{logical specifying if the KDE estimate should be unimodal (default: FALSE, relavant only for variant='KDE')} -\item{maxVar}{logical specifying if during slicing we should used the directions of maximum variance (default: FALSE for FPCA, TRUE for FSVD)} -\item{nSlices}{integer between 3 and 16, denoting the number of slices to be used (default: 4, relavant only for groupingType='slice') } -\item{showSlices}{logical specifying if during slicing we should show the outline of the slice (default: FALSE)} -\item{colSpectrum}{character vector to be use as input in the 'colorRampPalette' function defining the outliers colours (default: c("red", "yellow", 'blue'), relavant only for groupingType='slice') } -\item{groupingType}{string specifying if a slice grouping ('slice') or a standard percentile/bagplot grouping ('standard') should be returned (default: 'standard')} -\item{fIndeces}{a two-component vector with the index of the mode of variation to consider (default: c(1,2) for FPCA and c(1,1) for FSVD)} -} -} -\examples{ -\dontrun{ -set.seed(1) -n <- 420 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateOutliersPlot(res) -} -} -\references{ -\cite{P. J. Rousseeuw, I. Ruts, J. W. Tukey (1999): The bagplot: a bivariate boxplot, The American Statistician, vol. 53, no. 4, 382-387} -\cite{R. J. Hyndman and H. L. Shang. (2010) Rainbow plots, bagplots, and boxplots for functional data, Journal of Computational and Graphical Statistics, 19(1), 29-45} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreatePathPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreatePathPlot.Rd deleted file mode 100644 index 8081f364..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreatePathPlot.Rd +++ /dev/null @@ -1,58 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreatePathPlot.R -\name{CreatePathPlot} -\alias{CreatePathPlot} -\title{Create the fitted sample path plot based on the results from FPCA().} -\usage{ -CreatePathPlot(fpcaObj, subset, K = NULL, - inputData = fpcaObj[["inputData"]], showObs = !is.null(inputData), - obsOnly = FALSE, showMean = FALSE, derOptns = list(p = 0), ...) -} -\arguments{ -\item{fpcaObj}{Returned object from FPCA().} - -\item{subset}{A vector of indices or a logical vector for subsetting the -observations.} - -\item{K}{The number of components to reconstruct the fitted sample paths.} - -\item{inputData}{A list of length 2 containing the sparse/dense -(unsupported yet) observations. \code{inputData} needs to contain two -fields: \code{Lt} for a list of time points and \code{Ly} for a list of -observations. Default to the `inputData` field within `fpcaObj`.} - -\item{showObs}{Whether to plot the original observations for each subject.} - -\item{obsOnly}{Whether to show only the original curves.} - -\item{showMean}{Whether to plot the mean function as a bold solid curve.} - -\item{derOptns}{A list of options to control derivation parameters; see `fitted.FPCA'. (default = NULL)} - -\item{...}{other arguments passed into matplot for plotting options} -} -\description{ -Create the fitted sample path plot based on the results from FPCA(). -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', - verbose=TRUE)) -CreatePathPlot(res, subset=1:5) - -# CreatePathPlot has a lot of usages: -\dontrun{ -CreatePathPlot(res) -CreatePathPlot(res, 1:20) -CreatePathPlot(res, 1:20, showObs=FALSE) -CreatePathPlot(res, 1:20, showMean=TRUE, showObs=FALSE) -CreatePathPlot(res, 1:20, obsOnly=TRUE) -CreatePathPlot(res, 1:20, obsOnly=TRUE, showObs=FALSE) -CreatePathPlot(inputData=sampWiener, subset=1:20, obsOnly=TRUE)} - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateScreePlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateScreePlot.Rd deleted file mode 100644 index 856804b4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateScreePlot.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateScreePlot.R -\name{CreateScreePlot} -\alias{CreateScreePlot} -\title{Create the scree plot for the fitted eigenvalues} -\usage{ -CreateScreePlot(fpcaObj, ...) -} -\arguments{ -\item{fpcaObj}{A object of class FPCA returned by the function FPCA().} - -\item{...}{Additional arguments for the 'plot' function.} -} -\description{ -This function will open a new device if not instructed otherwise. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateScreePlot(res) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateStringingPlot.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateStringingPlot.Rd deleted file mode 100644 index f3b079b4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/CreateStringingPlot.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateStringingPlot.R -\name{CreateStringingPlot} -\alias{CreateStringingPlot} -\title{Create plots for observed and stringed high dimensional data} -\usage{ -CreateStringingPlot(stringingObj, subset, ...) -} -\arguments{ -\item{stringingObj}{A stringing object of class "Stringing", returned by the function Stringing.} - -\item{subset}{A vector of indices or a logical vector for subsetting the observations. If missing, first min(n,50) observations will be plotted where n is the sample size.} - -\item{...}{Other arguments passed into matplot for plotting options} -} -\description{ -The function produces the following three plots: -1) A plot of predictors (standardized if specified so during stringing) in original order for a subset of observations; -2) A plot of predictors in stringed order for the same subset of observations; -3) A plot of the stringing function, which is the stringed order vs. the original order. -} -\examples{ -set.seed(1) -n <- 50 -wiener = Wiener(n = n)[,-1] -p = ncol(wiener) -rdmorder = sample(size = p, x=1:p, replace = FALSE) -stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -diff_rev = sum(abs(rdmorder[stringingfit$StringingOrder] - p:1)) -if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) -} -CreateStringingPlot(stringingfit, 1:20) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/DynCorr.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/DynCorr.Rd deleted file mode 100644 index 8ebb3bac..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/DynCorr.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/DynCorr.R -\name{DynCorr} -\alias{DynCorr} -\title{Dynamical Correlation} -\usage{ -DynCorr(x, y, t) -} -\arguments{ -\item{x}{a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{y}{a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{t}{a length m vector of time points where x,y are observed.} -} -\value{ -A length m vector of individual dynamic correlations -} -\description{ -Calculate Dynamical Correlation for 2 paired dense regular functional data observed on the same grid. -} -\examples{ -set.seed(10) -n=200 # sample size -t=seq(0,1,length.out=100) # length of data -mu_quad_x=8*t^2-4*t+5 -mu_quad_y=8*t^2-12*t+6 -fun=rbind(rep(1,length(t)),-t,t^2) -z1=matrix(0,n,3) -z1[,1]=rnorm(n,0,2) -z1[,2]=rnorm(n,0,16/3) -z1[,3]=rnorm(n,0,4) -x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -for (i in 1:n){ - x1_quad_error[i,]=mu_quad_x+z1[i,]\%*\%fun+rnorm(length(t),0,0.01) - y1_quad_error[i,]=mu_quad_y+2*z1[i,]\%*\%fun +rnorm(length(t),0,0.01) -} -dyn1_quad=DynCorr(x1_quad_error,y1_quad_error,t) -} -\references{ -\cite{Dubin J A, M\"uller H G. Dynamical correlation for multivariate longitudinal data[J]. Journal of the American Statistical Association, 2005, 100(471): 872-881.} -\cite{Liu S, Zhou Y, Palumbo R, et al. Dynamical correlation: A new method for quantifying synchrony with multivariate intensive longitudinal data[J]. Psychological methods, 2016, 21(3): 291.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Dyn_test.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Dyn_test.Rd deleted file mode 100644 index f77b4e82..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Dyn_test.Rd +++ /dev/null @@ -1,54 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Dyn_test.R -\name{Dyn_test} -\alias{Dyn_test} -\title{Bootstrap test of Dynamic correlation} -\usage{ -Dyn_test(x1, y1, t1, x2, y2, t2, B = 1000) -} -\arguments{ -\item{x1}{a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{y1}{a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{t1}{a vector of time points where x1,y1 are observed.} - -\item{x2}{(optional if missing will be one sample test) a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{y2}{(optional if missing will be one sample test) a n by m matrix where rows representing subjects and columns representing measurements, missings are allowed.} - -\item{t2}{(optional if missing will be one sample test) a vector of time points where x2,y2 are observed.} - -\item{B}{number of bootstrap samples.} -} -\value{ -a list of the following -\item{stats: test statistics.} -\item{pval: p-value of the test.} -} -\description{ -Perform one sample (H0: Dynamic correlation = 0) or two sample (H0:Dynamic_correlation_1 = Dynamic_correlation_2) bootstrap test of Dynamical Correlation. -} -\examples{ -n=200 # sample size -t=seq(0,1,length.out=100) # length of data -mu_quad_x=8*t^2-4*t+5 -mu_quad_y=8*t^2-12*t+6 -fun=rbind(rep(1,length(t)),-t,t^2) -z1=matrix(0,n,3) -z1[,1]=rnorm(n,0,2) -z1[,2]=rnorm(n,0,16/3) -z1[,3]=rnorm(n,0,4) # covariance matrix of random effects -x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -for (i in 1:n){ - x1_quad_error[i,]=mu_quad_x+z1[i,]\%*\%fun+rnorm(length(t),0,0.01) - y1_quad_error[i,]=mu_quad_y+2*z1[i,]\%*\%fun +rnorm(length(t),0,0.01) -} -bt_DC=Dyn_test(x1_quad_error,y1_quad_error,t,B=1000) - -} -\references{ -\cite{Dubin J A, M\"uller H G. Dynamical correlation for multivariate longitudinal data[J]. Journal of the American Statistical Association, 2005, 100(471): 872-881.} - -\cite{Liu S, Zhou Y, Palumbo R, et al. Dynamical correlation: A new method for quantifying synchrony with multivariate intensive longitudinal data[J]. Psychological methods, 2016, 21(3): 291.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FAM.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FAM.Rd deleted file mode 100644 index 41cffd70..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FAM.Rd +++ /dev/null @@ -1,143 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FAM.R -\name{FAM} -\alias{FAM} -\title{Functional Additive Models} -\usage{ -FAM(Y, Lx, Lt, nEval = 51, newLx = NULL, newLt = NULL, - bwMethod = 0, alpha = 0.7, supp = c(-2, 2), optns = NULL) -} -\arguments{ -\item{Y}{An \emph{n}-dimensional vector whose elements consist of scalar responses.} - -\item{Lx}{A list of \emph{n} vectors containing the observed values for each individual. See \code{FPCA} for detail.} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual. Each vector should be sorted in ascending order. See \code{FPCA} for detail.} - -\item{nEval}{The number of evaluation grid points for kernel smoothing (default is 51. If it is specified as 0, then estimated FPC scores in the training set are used for evaluation grid instead of equal grid).} - -\item{newLx}{A list of the observed values for test set. See \code{predict.FPCA} for detail.} - -\item{newLt}{A list of the observed time points for test set. See \code{predict.FPCA} for detail.} - -\item{bwMethod}{The method of bandwidth selection for kernel smoothing, a positive value for designating K-fold cross-validtaion and zero for GCV (default is 50)} - -\item{alpha}{The shrinkage factor (positive number) for bandwidth selection. See Han et al. (2016) (default is 0.7).} - -\item{supp}{The lower and upper limits of kernel smoothing domain for studentized FPC scores, which FPC scores are divided by the square roots of eigenvalues (default is [-2,2]).} - -\item{optns}{A list of options control parameters specified by list(name=value). See \code{FPCA}.} -} -\value{ -A list containing the following fields: -\item{mu}{Mean estimator of \eqn{EY}} -\item{fam}{A \emph{N} by \emph{K} matrix whose column vectors consist of the component function estimators at the given estimation points.} -\item{xi}{An \emph{N} by \emph{K} matrix whose column vectors consist of \emph{N} vectors of estimation points for each component function.} -\item{bw}{A \emph{K}-dimensional bandwidth vector.} -\item{lambda}{A \emph{K}-dimensional vector containing eigenvalues.} -\item{phi}{An \emph{nWorkGrid} by \emph{K} matrix containing eigenfunctions, supported by \code{WorkGrid}. See \code{FPCA}.} -\item{workGrid}{An \emph{nWorkGrid} by \emph{K_j} working grid, the internal regular grid on which the eigen analysis is carried on. See \code{FPCA}.} -} -\description{ -Functional additive models with a single predictor process -} -\details{ -\code{FAM} fits functional additive models for a scalar response and single predictor process proposed by Mueller and Yao (2007) that \deqn{E(Y | \mathbf{X}) = \sum_{k=1}^K g_{k}(\xi_{k}),} where \eqn{\xi_{k}} stand for the k-th FPC score of the the predictor process. -} -\examples{ -set.seed(1000) - -library(MASS) - -f1 <- function(t) 0.5*t -f2 <- function(t) 2*cos(2*pi*t/4) -f3 <- function(t) 1.5*sin(2*pi*t/4) -f4 <- function(t) 2*atan(2*pi*t/4) - -n<-250 -N<-500 - -sig <- diag(c(4.0,2.0,1.5,1.2)) - -scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) - -Y <- f1(scoreX[,1]) + f2(scoreX[,2]) + f3(scoreX[,3]) + f4(scoreX[,4]) + rnorm(n,0,0.1) -YTest <- f1(scoreXTest[,1]) + f2(scoreXTest[,2]) + - f3(scoreXTest[,3]) + f4(scoreXTest[,4]) + rnorm(N,0,0.1) - -phi1 <- function(t) sqrt(2)*sin(2*pi*t) -phi2 <- function(t) sqrt(2)*sin(4*pi*t) -phi3 <- function(t) sqrt(2)*cos(2*pi*t) -phi4 <- function(t) sqrt(2)*cos(4*pi*t) - -grid <- seq(0,1,length.out=21) -Lt <- Lx <- list() -for (i in 1:n) { - Lt[[i]] <- grid - Lx[[i]] <- scoreX[i,1]*phi1(grid) + scoreX[i,2]*phi2(grid) + - scoreX[i,3]*phi3(grid) + scoreX[i,4]*phi4(grid) + rnorm(1,0,0.01) -} - -LtTest <- LxTest <- list() -for (i in 1:N) { - LtTest[[i]] <- grid - LxTest[[i]] <- scoreXTest[i,1]*phi1(grid) + scoreXTest[i,2]*phi2(grid) + - scoreXTest[i,3]*phi3(grid) + scoreXTest[i,4]*phi4(grid) + rnorm(1,0,0.01) -} - - -# estimation -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt) - -xi <- fit$xi - -par(mfrow=c(2,2)) -j <- 1 -g1 <- f1(sort(xi[,j])) -tmpSgn <- sign(sum(g1*fit$fam[,j])) -plot(sort(xi[,j]),g1,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi1') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 2 -g2 <- f2(sort(xi[,j])) -tmpSgn <- sign(sum(g2*fit$fam[,j])) -plot(sort(xi[,j]),g2,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi2') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 3 -g3 <- f3(sort(xi[,j])) -tmpSgn <- sign(sum(g3*fit$fam[,j])) -plot(sort(xi[,j]),g3,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi3') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 4 -g4 <- f4(sort(xi[,j])) -tmpSgn <- sign(sum(g4*fit$fam[,j])) -plot(sort(xi[,j]),g4,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi4') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - - -# fitting -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,nEval=0) -yHat <- fit$mu+apply(fit$fam,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,Y) -abline(coef=c(0,1),col=2) - - -# R^2 -R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -R2 - - -# prediction -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,newLx=LxTest,newLt=LtTest) -yHat <- fit$mu+apply(fit$fam,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,YTest,xlim=c(-10,10)) -abline(coef=c(0,1),col=2) -} -\references{ -\cite{Mueller, H.-G. and Yao, F. (2005), "Functional additive models", JASA, Vol.103, No.484, p.1534-1544.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FCCor.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FCCor.Rd deleted file mode 100644 index 712d5aa3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FCCor.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FCCor.R -\name{FCCor} -\alias{FCCor} -\title{Calculate functional correlation between two simultaneously observed processes.} -\usage{ -FCCor(x, y, Lt, bw = stop("bw missing"), kern = "epan", - Tout = sort(unique(unlist(Lt)))) -} -\arguments{ -\item{x}{A list of function values corresponding to the first process.} - -\item{y}{A list of function values corresponding to the second process.} - -\item{Lt}{A list of time points for both \code{x} and \code{y}.} - -\item{bw}{A numeric vector for bandwidth of length either 5 or 1, specifying the bandwidths for E(X), E(Y), var(X), var(Y), and cov(X, Y). If \code{bw} is a scalar then all five bandwidths are chosen to be the same.} - -\item{kern}{Smoothing kernel for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" (default: "gauss")} - -\item{Tout}{Output time points. Default to the sorted unique time points.} -} -\value{ -A list with the following components: -\item{corr}{A vector of the correlation corr(X(t), Y(t)) evaluated at \code{Tout}.} -\item{Tout}{Same as the input Tout.} -\item{bw}{The bandwidths used for E(X), E(Y), var(X), var(Y), and cov(X, Y).} -} -\description{ -Calculate functional correlation between two simultaneously observed processes. -} -\details{ -\code{FCCor} calculate only the concurrent correlation corr(X(t), Y(t)) (note that the time points t are the same). It assumes no measurement error in the observed values. -} -\examples{ -set.seed(1) -n <- 200 -nGridIn <- 50 -sparsity <- 1:5 # must have length > 1 -bw <- 0.2 -kern <- 'epan' -T <- matrix(seq(0.5, 1, length.out=nGridIn)) - -## Corr(X(t), Y(t)) = 1/2 -A <- Wiener(n, T) -B <- Wiener(n, T) -C <- Wiener(n, T) + matrix((1:nGridIn) , n, nGridIn, byrow=TRUE) -X <- A + B -Y <- A + C -indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) -tAll <- lapply(1:n, function(i) T[indEach[[i]]]) -Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) -Ysp <- lapply(1:n, function(i) Y[i, indEach[[i]]]) - -plot(T, FCCor(Xsp, Ysp, tAll, bw)[['corr']], ylim=c(-1, 1)) -abline(h=0.5) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FCReg.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FCReg.Rd deleted file mode 100644 index a4803a0f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FCReg.Rd +++ /dev/null @@ -1,80 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FCReg.R -\name{FCReg} -\alias{FCReg} -\title{Functional Concurrent Regression by 2D smoothing method.} -\usage{ -FCReg(vars, userBwMu, userBwCov, outGrid, kern = "gauss", - measurementError = TRUE, diag1D = "none", useGAM = FALSE, - returnCov = TRUE) -} -\arguments{ -\item{vars}{A list of input functional/scalar covariates. Each field corresponds to a functional (a list) or scalar (a vector) covariate. The last entry is assumed to be the response if no entry is names 'Y'. If a field corresponds to a functional covariate, it should have two fields: 'Lt', a list of time points, and 'Ly', a list of function values.} - -\item{userBwMu}{A scalar with bandwidth used for smoothing the mean} - -\item{userBwCov}{A scalar with bandwidth used for smoothing the auto- and cross-covariances} - -\item{outGrid}{A vector with the output time points} - -\item{kern}{Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" (default: "gauss")} - -\item{measurementError}{Indicator measurement errors on the functional observations should be assumed. If TRUE the diagonal raw covariance will be removed when smoothing. (default: TRUE)} - -\item{diag1D}{A string specifying whether to use 1D smoothing for the diagonal line of the covariance. -'none': don't use 1D smoothing; 'cross': use 1D only for cross-covariances; 'all': use 1D for both auto- and cross-covariances. (default : 'none')} - -\item{useGAM}{Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE)} - -\item{returnCov}{Indicator to return the covariance surfaces, which is a four dimensional array. The first two dimensions correspond to outGrid -and the last two correspond to the covariates and the response, i.e. (i, j, k, l) entry being Cov(X_k(t_i), X_l(t_j)) (default: FALSE)} - -\item{...}{Additional arguments} -} -\description{ -Functional concurrent regression with dense or sparse functional data for scalar or functional dependent variable. -} -\details{ -If measurement error is assumed, the diagonal elements of the raw covariance will be removed. This could result in highly unstable estimate if the design is very sparse, or strong seasonality presents. -} -\examples{ -# Y(t) = \\beta_0(t) + \\beta_1(t) X_1(t) + \\beta_2(t) Z_2 + \\epsilon - -# Settings -set.seed(1) -n <- 75 -nGridIn <- 150 -sparsity <- 5:10 # Sparse data sparsity -T <- round(seq(0, 1, length.out=nGridIn), 4) # Functional data support -bw <- 0.1 -outGrid <- round(seq(min(T), 1, by=0.05), 2) - -# Simulate functional data -mu <- T * 2 # mean function for X_1 -sigma <- 1 - -beta_0 <- 0 -beta_1 <- 1 -beta_2 <- 1 - -Z <- MASS::mvrnorm(n, rep(0, 2), diag(2)) -X_1 <- Z[, 1, drop=FALSE] \%*\% matrix(1, 1, nGridIn) + matrix(mu, n, nGridIn, byrow=TRUE) -epsilon <- rnorm(n, sd=sigma) -Y <- matrix(NA, n, nGridIn) -for (i in seq_len(n)) { - Y[i, ] <- beta_0 + beta_1 * X_1[i, ] + beta_2 * Z[i, 2] + epsilon[i] -} - -# Sparsify functional data -set.seed(1) -X_1sp <- Sparsify(X_1, T, sparsity) -set.seed(1) -Ysp <- Sparsify(Y, T, sparsity) -vars <- list(X_1=X_1sp, Z_2=Z[, 2], Y=Ysp) -withError2D <- FCReg(vars, bw, bw, outGrid) -} -\references{ -\cite{Yao, F., Mueller, H.G., Wang, J.L. "Functional Linear Regression Analysis for Longitudinal Data." Annals of Statistics 33, (2005): 2873-2903.(Dense data)} - -\cite{Senturk, D., Nguyen, D.V. "Varying Coefficient Models for Sparse Noise-contaminated Longitudinal Data", Statistica Sinica 21(4), (2011): 1831-1856. (Sparse data)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FClust.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FClust.Rd deleted file mode 100644 index 26d8235a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FClust.Rd +++ /dev/null @@ -1,61 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FClust.R -\name{FClust} -\alias{FClust} -\title{Functional clustering and identifying substructures of longitudinal data} -\usage{ -FClust(Ly, Lt, k = 3, cmethod = "EMCluster", optnsFPCA = NULL, - optnsCS = NULL) -} -\arguments{ -\item{Ly}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y.} - -\item{k}{A scalar defining the number of clusters to define; default 3.} - -\item{cmethod}{A string specifying the clusterig method to use ('EMCluster' or 'kCFC'); default: 'EMCluster'.} - -\item{optnsFPCA}{A list of options control parameters specified by \code{list(name=value)} to be used for by FPCA on the sample y; by default: -"list( methodMuCovEst ='smooth', FVEthreshold= 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'.} - -\item{optnsCS}{A list of options control parameters specified by \code{list(name=value)} to be used for cluster-specific FPCA from kCFC; by default: -"list( methodMuCovEst ='smooth', FVEthreshold= 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA' and '?kCFC'.} -} -\value{ -A list containing the following fields: -\item{cluster}{A vector of levels 1:k, indicating the cluster to which each curve is allocated.} -\item{fpca}{An FPCA object derived from the sample used by Rmixmod, otherwise NULL.} -\item{clusterObj}{Either a EMCluster object or kCFC object.} -} -\description{ -By default the function will cluster the data using the functional principal component (FPC) scores from the data's -FPC analysis using EMCluster (Chen and Maitra, 2015) or directly clustering the functional data using kCFC (Chiou and Li, 2007). -} -\details{ -Within EMCluster we examine the model initiated "EMCluster::em.EM" and return the optimal model based on 'EMCluster::emcluster'. -See ?EMCluster::emcluster for details. -} -\examples{ -\dontrun{ -data(medfly25) -Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -newClust <- FClust(Flies$Ly, Flies$Lt, k = 2, optnsFPCA = - list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90)) - -# We denote as 'veryLowCount' the group of flies that lay less -# than twenty-five eggs during the 25-day period examined. - -veryLowCount = ifelse( sapply( unique(medfly25$ID), function(u) - sum( medfly25$nEggs[medfly25$ID == u] )) < 25, 0, 1) -N <- length(unique(medfly25$ID)) -(correctRate <- sum( (1 + veryLowCount) == newClust$cluster) / N) # 99.6\% -} -} -\references{ -\cite{Wei-Chen Chen and Ranjan Maitra, "EMCluster: EM Algorithm for Model-Based Clusttering of Finite Mixture Gaussian Distribution". (2015)} - -\cite{Julien Jacques and Cristian Preda, "Funclust: A curves clustering method using functional random variables density approximation". Neurocomputing 112 (2013): 164-171} - -\cite{Jeng-Min Chiou and Pai-Ling Li, "Functional clustering and identifying substructures of longitudinal data". Journal of the Royal Statistical Society B 69 (2007): 679-699} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FOptDes.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FOptDes.Rd deleted file mode 100644 index 08f1732c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FOptDes.Rd +++ /dev/null @@ -1,56 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FOptDes.R -\name{FOptDes} -\alias{FOptDes} -\title{Optimal Designs for Functional and Longitudinal Data -for Trajectory Recovery or Scalar Response Prediction} -\usage{ -FOptDes(Ly, Lt, Resp, p = 3, optns = list(), - isRegression = !missing(Resp), isSequential = FALSE, - RidgeCand = NULL) -} -\arguments{ -\item{Ly}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order.} - -\item{Resp}{A vector of response values, keep void for trajectory recovery, only necessary for scalar response prediction task.} - -\item{p}{A fixed positive integer indicating the number of optimal design points requested, with default: 3.} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)} for FPCA, with default: list().} - -\item{isRegression}{A logical argument, indicating the purpose of the optimal designs: TRUE for scalar response prediction, FALSE for trajectory recovery, with default value !missing(Resp).} - -\item{isSequential}{A logical argument, indicating whether to use the sequential optimization procedure for faster computation, recommended for relatively large p (default: FALSE).} - -\item{RidgeCand}{A vector of positive numbers as ridge penalty candidates for regularization. The final value is selected via cross validation. If only 1 ridge parameter is specified, CV procedure is skipped.} -} -\value{ -A list containing the following fields: -\item{OptDes}{The vector of optimal design points of the regular time grid of the observed data.} -\item{R2}{Coefficient of determination. (Check the paper for details.)} -\item{R2adj}{Adjusted coefficient of determination.} -\item{OptRidge}{The selected ridge parameter.} -} -\description{ -Optimal Designs for Functional and Longitudinal Data -for Trajectory Recovery or Scalar Response Prediction -} -\details{ -To select a proper RidgeCand, check with the returned optimal ridge parameter. If the selected parameter is the maximum/minimum values in the candidates, it is possible that the selected one is too small/big. -} -\examples{ -set.seed(1) -n <- 50 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- MakeFPCAInputs(IDs = rep(1:n, each=length(pts)), - tVec = rep(pts, times = n), - yVec = t(sampWiener)) -res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=2, - isSequential=FALSE, RidgeCand = seq(0.02,0.2,0.02)) -} -\references{ -\cite{Ji, H., Mueller, H.G. (2016) "Optimal Designs for Longitudinal and Functional Data" Journal of the Royal Statistical Society: Series B (Statistical Methodology)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCA.Rd deleted file mode 100644 index e7a4d69e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCA.Rd +++ /dev/null @@ -1,98 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FPCA.R -\name{FPCA} -\alias{FPCA} -\title{Functional Principal Component Analysis} -\usage{ -FPCA(Ly, Lt, optns = list()) -} -\arguments{ -\item{Ly}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order.} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}. See `Details'.} -} -\value{ -A list containing the following fields: -\item{sigma2}{Variance for measure error.} -\item{lambda}{A vector of length \emph{K} containing eigenvalues.} -\item{phi}{An nWorkGrid by \emph{K} matrix containing eigenfunctions, supported on workGrid.} -\item{xiEst}{A \emph{n} by \emph{K} matrix containing the FPC estimates.} -\item{xiVar}{A list of length \emph{n}, each entry containing the variance estimates for the FPC estimates.} -\item{obsGrid}{The (sorted) grid points where all observation points are pooled.} -\item{mu}{A vector of length nWorkGrid containing the mean function estimate.} -\item{workGrid}{A vector of length nWorkGrid. The internal regular grid on which the eigen analysis is carried on.} -\item{smoothedCov}{A nWorkGrid by nWorkGrid matrix of the smoothed covariance surface.} -\item{fittedCov}{A nWorkGrid by nWorkGrid matrix of the fitted covariance surface, which is guaranteed to be non-negative definite.} -\item{optns}{A list of actually used options.} -\item{timings}{A vector with execution times for the basic parts of the FPCA call.} -\item{bwMu}{The selected (or user specified) bandwidth for smoothing the mean function.} -\item{bwCov}{The selected (or user specified) bandwidth for smoothing the covariance function.} -\item{rho}{A regularizing scalar for the measurement error variance estimate.} -\item{cumFVE}{A vector with the percentages of the total variance explained by each FPC. Increase to almost 1.} -\item{FVE}{A percentage indicating the total variance explained by chosen FPCs with corresponding 'FVEthreshold'.} -\item{criterionValue}{A scalar specifying the criterion value obtained by the selected number of components with specific methodSelectK: FVE,AIC,BIC values or NULL for fixedK.} -\item{inputData}{A list containting the original 'Ly' and 'Lt' lists used as inputs to FPCA. NULL if 'lean' was specified to be TRUE.} -} -\description{ -FPCA for dense or sparse functional data. -} -\details{ -If the input is sparse data, make sure you check the design plot is dense and the 2D domain is well covered, using \code{plot} or \code{CreateDesignPlot}. Some study design such as snippet data (each subject is observed only on a sub-interval of the period of study) will have an ill-covered design plot, for which the covariance estimate will be unreliable. - -Available control options are -\describe{ -\item{userBwCov}{The bandwidth value for the smoothed covariance function; positive numeric - default: determine automatically based on 'methodBwCov'} -\item{methodBwCov}{The bandwidth choice method for the smoothed covariance function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 10\% of the support} -\item{userBwMu}{The bandwidth value for the smoothed mean function (using 'CV' or 'GCV'); positive numeric - default: determine automatically based on 'methodBwMu'} -\item{methodBwMu}{The bandwidth choice method for the mean function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 5\% of the support} -\item{dataType}{The type of design we have (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV', 'p>>n' - default: determine automatically based on 'IsRegular'} -\item{diagnosticsPlot}{Deprecated. Same as the option 'plot'} -\item{plot}{Plot FPCA results (design plot, mean, scree plot and first K (<=3) eigenfunctions); logical - default: FALSE} -\item{error}{Assume measurement error in the dataset; logical - default: TRUE} -\item{fitEigenValues}{Whether also to obtain a regression fit of the eigenvalues - default: FALSE} -\item{FVEthreshold}{Fraction-of-Variance-Explained threshold used during the SVD of the fitted covar. function; numeric (0,1] - default: 0.9999} -\item{kernel}{Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" - default: "gauss"; dense data are assumed noise-less so no smoothing is performed. } -\item{kFoldMuCov}{The number of folds to be used for mean and covariance smoothing. Default: 10} -\item{lean}{If TRUE the 'inputData' field in the output list is empty. Default: FALSE} -\item{maxK}{The maximum number of principal components to consider - default: min(20, N-1), N:# of curves} -\item{methodXi}{The method to estimate the PC scores; 'CE' (Condit. Expectation), 'IN' (Numerical Integration) - default: 'CE' for sparse data and dense data with missing values, 'IN' for dense data.} -\item{methodMuCovEst}{The method to estimate the mean and covariance in the case of dense functional data; 'cross-sectional', 'smooth' - default: 'cross-sectional'} -\item{nRegGrid}{The number of support points in each direction of covariance surface; numeric - default: 51} -\item{numBins}{The number of bins to bin the data into; positive integer > 10, default: NULL} -\item{methodSelectK}{The method of choosing the number of principal components K; 'FVE','AIC','BIC', or a positive integer as specified number of components: default 'FVE')} -\item{shrink}{Whether to use shrinkage method to estimate the scores in the dense case (see Yao et al 2003) - default FALSE} -\item{outPercent}{A 2-element vector in [0,1] indicating the outPercent data in the boundary - default (0,1)} -\item{rho}{The truncation threshold for the iterative residual. 'cv': choose rho by leave-one-observation out cross-validation; 'no': no regularization - default "cv" if error == TRUE, and "no" if error == FALSE.} -\item{rotationCut}{The 2-element vector in [0,1] indicating the percent of data truncated during sigma^2 estimation; default (0.25, 0.75))} -\item{useBinnedData}{Should the data be binned? 'FORCE' (Enforce the # of bins), 'AUTO' (Select the # of bins automatically), 'OFF' (Do not bin) - default: 'AUTO'} -\item{useBinnedCov}{Whether to use the binned raw covariance for smoothing; logical - default:TRUE} -\item{userCov}{The user-defined smoothed covariance function; list of two elements: numerical vector 't' and matrix 'cov', 't' must cover the support defined by 'Ly' - default: NULL} -\item{userMu}{The user-defined smoothed mean function; list of two numerical vector 't' and 'mu' of equal size, 't' must cover the support defined 'Ly' - default: NULL} -\item{userSigma2}{The user-defined measurement error variance. A positive scalar. If specified then no regularization is used (rho is set to 'no', unless specified otherwise). Default to `NULL`} -\item{userRho}{The user-defined measurement truncation threshold used for the calculation of functional principal components scores. A positive scalar. Default to `NULL`} -\item{useBW1SE}{Pick the largest bandwidth such that CV-error is within one Standard Error from the minimum CV-error, relevant only if methodBwMu ='CV' and/or methodBwCov ='CV'; logical - default: FALSE} -\item{verbose}{Display diagnostic messages; logical - default: FALSE} -} -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -plot(res) # The design plot covers [0, 1] * [0, 1] well. -CreateCovPlot(res, 'Fitted') -} -\references{ -\cite{Yao, F., Mueller, H.G., Clifford, A.J., Dueker, S.R., Follett, J., Lin, Y., Buchholz, B., Vogel, J.S. (2003). "Shrinkage estimation for functional principal component scores, with application to the population kinetics of plasma folate." Biometrics 59, 676-685. (Shrinkage estimates for dense data)} - -\cite{Yao, Fang, Hans-Georg Mueller, and Jane-Ling Wang. "Functional data analysis for sparse longitudinal data." Journal of the American Statistical Association 100, no. 470 (2005): 577-590. (Sparse data FPCA)} - -\cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} - -\cite{Castro, P. E., W. H. Lawton, and E. A. Sylvestre. "Principal modes of variation for processes with continuous sample curves." Technometrics 28, no. 4 (1986): 329-337. (Dense data FPCA)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCAder.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCAder.Rd deleted file mode 100644 index 3398771d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCAder.Rd +++ /dev/null @@ -1,67 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FPCAder.R -\name{FPCAder} -\alias{FPCAder} -\title{Take derivative of an FPCA object} -\usage{ -FPCAder(fpcaObj, derOptns = list(p = 1)) -} -\arguments{ -\item{fpcaObj}{A object of class FPCA returned by the function FPCA().} - -\item{derOptns}{A list of options to control the derivation parameters specified by \code{list(name=value)}. See `Details'. (default = NULL)} -} -\description{ -Take derivative of an FPCA object -} -\details{ -Available derivation control options are -\describe{ -\item{method}{The method used for obtaining the derivatives (default: 'FPC'). 'DPC': derivatives principal component, with G^(1,1) estimated by first kernel local smoothing G^(1,0), and then apply a 1D smoother on the second direction; 'FPC': functional principal component, based on smoothing the eigenfunctions; 'FPC1': functional principal component, based on smoothing G^(1,0). May produce better estimate than 'FPC' but is slower.} -\item{p}{The order of the derivatives returned (default: 1, max: 2). } -\item{bw}{Bandwidth for the 1D and the 2D smoothers (default: p * 0.1 * S).} -\item{kernelType}{Smoothing kernel choice; same available types are FPCA(). default('epan')} -} -} -\examples{ - -bw <- 0.2 -kern <- 'epan' -set.seed(1) -n <- 100 -M <- 40 -pts <- seq(0, 1, length.out=M) -lambdaTrue <- c(1, 0.8, 0.1)^2 -sigma2 <- 0.1 - -samp2 <- MakeGPFunctionalData(n, M, pts, K=length(lambdaTrue), - lambda=lambdaTrue, sigma=sqrt(sigma2), basisType='legendre01') -samp2 <- c(samp2, MakeFPCAInputs(tVec=pts, yVec=samp2$Yn)) -fpcaObj <- FPCA(samp2$Ly, samp2$Lt, list(methodMuCovEst='smooth', - userBwCov=bw, userBwMu=bw, kernel=kern, error=TRUE)) -CreatePathPlot(fpcaObj, showObs=FALSE) - -FPCoptn <- list(bw=bw, kernelType=kern, method='FPC') -DPCoptn <- list(bw=bw, kernelType=kern, method='DPC') -FPC <- FPCAder(fpcaObj, FPCoptn) -DPC <- FPCAder(fpcaObj, DPCoptn) - -CreatePathPlot(FPC, ylim=c(-5, 10)) -CreatePathPlot(DPC, ylim=c(-5, 10)) - -# Get the true derivatives -phi <- CreateBasis(K=3, type='legendre01', pts=pts) -basisDerMat <- apply(phi, 2, function(x) - ConvertSupport(seq(0, 1, length.out=M - 1), pts, diff(x) * (M - 1))) -trueDer <- matrix(1, n, M, byrow=TRUE) + tcrossprod(samp2$xi, basisDerMat) -matplot(t(trueDer), type='l', ylim=c(-5, 10)) - -# DPC is slightly better in terms of RMSE -mean((fitted(FPC) - trueDer)^2) -mean((fitted(DPC) - trueDer)^2) - -} -\references{ -\cite{Dai, Xiongtao, Hans-Georg Mueller, and Wenwen Tao. "Derivative Principal Component Analysis for Representing the Time Dynamics of Longitudinal and Functional Data." Submitted (DPC)} -\cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (FPC)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCReg.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCReg.Rd deleted file mode 100644 index a291cce0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCReg.Rd +++ /dev/null @@ -1,152 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FPCReg.R -\name{FPCReg} -\alias{FPCReg} -\title{Function for performing functonal linear regression where the covariates are functions X1(t1),X2(t2),.. and the response is a function Y(t_y).} -\usage{ -FPCReg(vars, varsOptns = NULL, isNewSub = NULL, method = "AIC", - FVEthreshold = 0.99, alpha = 0.05, Kx = NULL) -} -\arguments{ -\item{vars}{A list of input functional covariates with name of "X1", "X2",.. and a functional response with name "Y". Each field should have two fields: 'Lt', a list (sparse) or a matrix (Dense) specifying the time of observations, and 'Ly', a list (Sparse) or a matrix (Dense) of the observations.} - -\item{varsOptns}{A list of options named by "X1", "X2",..."Y". Each filed specify the paramaters that control the corresponding variables. (default: see details of FPCA())} - -\item{isNewSub}{A 1*n vector of 0s or 1s, where n is the total count of subjects. 0 denotes the corresponding subject is only used for estimation and 1 denotes the corresponding subject is only used for prediction. (default: 0's)} - -\item{method}{The method used for selecting the number of principal components of functional predictors X's used in functional regression , including 'AIC', 'BIC' and 'FVE'. (default: "AIC")} - -\item{FVEthreshold}{A scalar specifying the proportion used for 'FVE'. (default: 0.99)} - -\item{alpha}{A scalar specifying the level of the confidence bands. (default: 0.05)} - -\item{Kx}{The number of principal components of functional predictors X's used in functional regression.} -} -\value{ -A list containing the following fields: -\item{estiBeta}{A list with fields of estimated beta_XiY(s,t) defiend on [range(Xi),range(Y)]} -\item{predictY}{A list containing fitted or predicted (when is NewSub is true) functions for E(Y|X).} -\item{cbandY}{A list with confidence bands of E(Y|X).} -\item{Q}{Quasi R-square} -\item{r2}{Functional R-square.} -\item{varsMean}{A list with mean function of covariates and response.} -\item{Kx}{The number of principal components of functional predictors X's used in functional regression.} -} -\description{ -Function for performing functonal linear regression where the covariates are functions X1(t1),X2(t2),.. and the response is a function Y(t_y). -} -\examples{ -set.seed(1000) -#Model: E(Y(t)|X) = int(beta(s,t)*X(s)) -n <- 200 #number of subjects -ngrids <- 51 #number of grids in [0,1] for X(s) -ngridt <- 101 #number of grids in [0,1] for Y(t) -grids <- seq(0, 1, length.out=ngrids) #regular grids in [0,1] for X(s) -gridt <- seq(0, 1, length.out=ngridt) #regular grids in [0,1] for Y(t) - -#generate X -#{1, sqrt(2)*sin(2*pi*s), sqrt(2)*cos(2*pi*t)} are used to generate X. -eigenFun <- list( function(s){1 + 0 * s}, - function(s){sqrt(2) * sin(2*pi*s)}, - function(s){sqrt(2) * cos(2*pi*s)}) - -sig <- matrix(c(1.5, 0.0, 0.0, 0.9, -.5, 0.1, - 0.0, 1.2, 0.0, -.3, 0.8, 0.4, - 0.0, 0.0, 1.0, 0.4, -.3, 0.7, - 0.9, -.3, 0.4, 2.0, 0.0, 0.0, - -.5, 0.8, -.3, 0.0, 1.5, 0.0, - 0.1, 0.4, 0.7, 0.0, 0.0, 1.0), - nrow=6,ncol=6) - -scoreX <- MASS::mvrnorm(n,mu=rep(0,6),Sigma=sig) -scoreX1 <- scoreX[,1:3] -scoreX2 <- scoreX[,4:6] - -basisX1 <- sapply(eigenFun,function(x){x(grids)}) -latentX1 <- scoreX1 \%*\% t(basisX1) -measErrX1 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX1 <- latentX1 + measErrX1 - -basisX2 <- sapply(eigenFun,function(x){x(grids)}) -latentX2 <- scoreX2 \%*\% t(basisX2) -measErrX2 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX2 <- latentX2 + measErrX2 - -#generate Y -#beta(s, t) <- sin(2 * pi * s)*cos(2 * pi * t) -betaEigen1 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (1+0*s)}; return(f)} -betaEigen2 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*sin(2*pi*s))}; return(f)} -betaEigen3 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*cos(2*pi*s))}; return(f)} -betaEigen <- list(betaEigen1, betaEigen2, betaEigen3) -basisY <- array(0,c(ngridt, 3)) -for(i in 1:3){ - intbetaEigen <- function (t) {integrate(betaEigen[[i]](t), lower = 0, upper = 1)$value} - basisY[, i] <- sapply(1:ngridt, function(x){intbetaEigen(gridt[x])}) - } -latentY <- scoreX1 \%*\% t(basisY) - scoreX2 \%*\% t(basisY) -measErrY <- sqrt(0.01) * matrix(rnorm(n*ngridt), n, ngridt) #0.01 is sigma^2 -denseY <- latentY + measErrY - -#======Dense data=============================================== -timeX <- t(matrix(rep(grids, n),length(grids), n)) -timeY <- t(matrix(rep(gridt, n),length(gridt), n)) -denseVars <- list(X1 = list(Ly = denseX1, Lt = timeX), - X2 = list(Ly = denseX2, Lt = timeX), - Y=list(Ly = denseY,Lt = timeY)) - -resuDense <- FPCReg(denseVars, method="FVE") - -par(mfrow=c(1,2)) -estiBetaX1Y_Dense <- resuDense$estiBeta$betaX1Y -args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Dense(s, t)', - lighting = FALSE, phi = 45, theta = 45) -args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX1Y_Dense[1:ngrids, 1:ngridt]) -do.call(plot3D::persp3D,c(args2, args1)) - -estiBetaX2Y_Dense <- resuDense$estiBeta$betaX2Y -args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Dense(s, t)', - lighting = FALSE, phi = 45, theta = 45) -args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX2Y_Dense[1:ngrids, 1:ngridt]) - # do.call(plot3D::persp3D,c(args2, args1)) - -#======Sparse data=============================================== -\dontrun{ -sparsity = 5:8 -sparseX1 <- Sparsify(denseX1, grids, sparsity) -sparseX2 <- Sparsify(denseX2, grids, sparsity) -sparseY <- Sparsify(denseY, gridt, sparsity) -sparseVars <- list(X1 = sparseX1, X2 = sparseX2, Y = sparseY) - -resuSparse <- FPCReg(sparseVars, method="FVE", FVEthreshold=0.98) -#or resuSparse <- FPCReg(vars = sparseVars, -# varsOptns = list(X1=list(userBwCov = 0.03))) - -par(mfrow=c(1,2)) -estiBetaX1Y_Sparse = resuSparse$estiBeta$betaX1Y -args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Sparse(s,t)', - lighting = FALSE, phi = 45,theta = 45) -args2 = list(x = 1:51, y = 1:51, z = estiBetaX1Y_Sparse[1:51, 1:51]) -do.call(plot3D::persp3D, c(args2, args1)) - -estiBetaX2Y_Sparse = resuSparse$estiBeta$betaX2Y -args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Sparse(s,t)', - lighting = FALSE, phi = 45,theta = 45) -args2 = list(x = 1:51, y = 1:51, z = estiBetaX2Y_Sparse[1:51, 1:51]) -do.call(plot3D::persp3D, c(args2, args1)) - -par(mfrow=c(2,3)) -for(i in 1:6){ - plot(sparseVars[['Y']]$Lt[[i]], sparseVars[['Y']]$Ly[[i]], - xlab = 'time', ylab = 'observations', ylim = c(-1.5, 1.5)) - lines(seq(0, 1, length.out = 51), resuSparse$predictY[[i]]) - lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,2], lty = 2) - lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,1], lty = 2) - } - } -} -\references{ -\cite{Yao, F., Mueller, H.G., Wang, J.L. "Functional Linear Regression Analysis for Longitudinal Data." Annals of Statistics 33, (2005): 2873-2903.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCquantile.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCquantile.Rd deleted file mode 100644 index 4f75d927..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FPCquantile.Rd +++ /dev/null @@ -1,59 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FPCquantile.R -\name{FPCquantile} -\alias{FPCquantile} -\title{Conditional Quantile estimation with functional covariates} -\usage{ -FPCquantile(Lx, Lt_x, y, outQ = c(0.1, 0.25, 0.5, 0.75, 0.9), - optns_x = NULL, isNewsub = NULL) -} -\arguments{ -\item{Lx}{A length n list of predictor function where x[[i]] is the row vector of measurements for ith subject, i=1,...,n} - -\item{Lt_x}{A length n list where the observations of x are taken, t_x[[i]] is a row vector of time points where x[[i]] are observed, i=1,...,n} - -\item{y}{A 1*n vector for scalar response y. y[i] is the response value for the ith subject, i = 1,...,n.} - -\item{outQ}{A vector of desired quantile levels with default value outQ = c(0.1, 0.25, 0.5, 0.75, 0.9).} - -\item{optns_x}{A list of options for predictor x with control parameters specified by list(name=value) with default NA. See function FPCA for details.} - -\item{isNewSub}{A 1*n vector of 0s or 1s, where n is the total count of subjects. 0 denotes the corresponding subject is only used for training and 1 denotes the corresponding subject is only used for prediction. (default: 0's)} -} -\value{ -A list of the following -\item{pred_quantile: a matrix of n*length(outQ) where the the first nn (number of 0s in isNewSub) rows containing fitted conditional quantiles of Y corresponding to the trainning subjects, and the last n-nn rows containing predicted conditional quantiles of Y corresponding to the subjects isNewSub ==1.} -\item{pred_CDF: a matrix of n*100. The ith row contains the fitted or predicted conditional distribution function \eqn{F(y|X_i)}, evaluated at an equally spaced grid of 100 points.} -\item{b: a matrix of 50*(K+1) contains the coefficient functions, defined as \eqn{F(y|X) = g(\sum_(k=0)^K b_k(y)\xi_k)}, see equation (5) in the paper for details, where K is the number of components selected to expand the predictor functions X, and \eqn{\xi_k} is the kth principal component score.} -} -\description{ -Main function to implement conditional Quantile estimation with functional covariates and scalar response. The method includes 3 steps: -1) FPCA using the PACE method for X(t_x) -2) Computation of the conditional distribution function through a functional generalized linear model. -3) Prediction of quantiles for given predictor values -} -\examples{ -set.seed(10) - -n = 200 -npred = 50 -m = 50 -xi <- Wiener(n, 0:m/m) - -x=list() -t_x=list() -y=numeric(n) -for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(xi[i,])) - y[i] = 5*rnorm(1)+2*sum(xi[i,]) -} - -outQ = c(0.1,0.25,0.5,0.75,0.9,0.95) -isNewsub = c(rep(0,150),rep(1,50)) -qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) - -} -\references{ -\cite{Chen, K., M\"uller, H.G. (2011). Conditional quantile analysis when covariates are functions, with application to growth data. J. Royal Statistical Society B.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FSVD.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FSVD.Rd deleted file mode 100644 index 984779e9..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FSVD.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FSVD.R -\name{FSVD} -\alias{FSVD} -\title{Functional Singular Value Decomposition} -\usage{ -FSVD(Ly1, Lt1, Ly2, Lt2, FPCAoptns1 = NULL, FPCAoptns2 = NULL, - SVDoptns = list()) -} -\arguments{ -\item{Ly1}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{Lt1}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order.} - -\item{Ly2}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{Lt2}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order.} - -\item{FPCAoptns1}{A list of options control parameters specified by \code{list(name=value)} for the FPC analysis of sample 1. See `?FPCA'.} - -\item{FPCAoptns2}{A list of options control parameters specified by \code{list(name=value)} for the FPC analysis of sample 2. See `?FPCA'.} - -\item{SVDoptns}{A list of options control parameters specified by \code{list(name=value)} for the FSVD analysis of samples 1 & 2. See `Details`.} -} -\value{ -A list containing the following fields: -\item{bw1}{The selected (or user specified) bandwidth for smoothing the cross-covariance function across the support of sample 1.} -\item{bw2}{The selected (or user specified) bandwidth for smoothing the cross-covariance function across the support of sample 2.} -\item{CrCov}{The smoothed cross-covariance between samples 1 & 2.} -\item{sValues}{A list of length \emph{nsvd}, each entry containing the singuar value estimates for the FSC estimates.} -\item{nsvd}{The number of singular componentes used.} -\item{canCorr}{The canonical correlations for each dimension.} -\item{FVE}{A percentage indicating the total variance explained by chosen FSCs with corresponding 'FVEthreshold'.} -\item{sFun1}{An nWorkGrid by \emph{K} matrix containing the estimated singular functions for sample 1.} -\item{sFun2}{An nWorkGrid by \emph{K} matrix containing the estimated singular functions for sample 2.} -\item{grid1}{A vector of length nWorkGrid1. The internal regular grid on which the singular analysis is carried on the support of sample 1.} -\item{grid2}{A vector of length nWorkGrid2. The internal regular grid on which the singular analysis is carried on the support of sample 2.} -\item{sScores1}{A \emph{n} by \emph{K} matrix containing the singular scores for sample 1.} -\item{sScores2}{A \emph{n} by \emph{K} matrix containing the singular scores for sample 2.} -\item{optns}{A list of options used by the SVD and the FPCA's procedures.} -} -\description{ -FSVD for a pair of dense or sparse functional data. -} -\details{ -Available control options for SVDoptns are: -\describe{ -\item{bw1}{The bandwidth value for the smoothed cross-covariance function across the direction of sample 1; positive numeric - default: determine automatically based on 'methodBwCov'} -\item{bw2}{The bandwidth value for the smoothed cross-covariance function across the direction of sample 2; positive numeric - default: determine automatically based on 'methodBwCov'} -\item{methodBwCov}{The bandwidth choice method for the smoothed covariance function; 'GMeanAndGCV' (the geometric mean of the GCV bandwidth and the minimum bandwidth),'CV','GCV' - default: 10\% of the support} -\item{userMu1}{The user defined mean of sample 1 used to centre it prior to the cross-covariance estimation. - default: determine automatically based by the FPCA of sample 1} -\item{userMu2}{The user defined mean of sample 2 used to centre it prior to the cross-covariance estimation. - default: determine automatically based by the FPCA of sample 2} -\item{maxK}{The maximum number of singular components to consider; default: min(20, N-1), N:# of curves.} -\item{kernel}{Smoothing kernel choice, common for mu and covariance; "rect", "gauss", "epan", "gausvar", "quar" - default: "gauss"; dense data are assumed noise-less so no smoothing is performed.} -\item{rmDiag}{Logical describing if the routine should remove diagonal raw cov for cross cov estimation (default: FALSE) } -\item{noScores}{Logical describing if the routine should return functional singular scores or not (default: TRUE) } -\item{regulRS}{String describing if the regularisation of the compositie cross-covariance matrix should be done using 'sigma1' or 'rho' (see ?FPCA for details) (default: 'sigma2') } -\item{bwRoutine}{String specifying the routine used to find the optimal bandwidth 'grid-search', 'bobyqa', 'l-bfgs-b' (default: 'l-bfgs-b')} -\item{flip}{Logical describing if the routine should flip the sign of the singular components functions or not after the SVD of the cross-covariance matrix. (default: FALSE)} -\item{useGAM}{Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE)} -\item{dataType1}{The type of design we have for sample 1 (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV' - default: determine automatically based on 'IsRegular'} -\item{dataType2}{The type of design we have for sample 2 (usually distinguishing between sparse or dense functional data); 'Sparse', 'Dense', 'DenseWithMV' - default: determine automatically based on 'IsRegular'} -} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/FVPA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/FVPA.Rd deleted file mode 100644 index 68c669a2..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/FVPA.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/FVPA.R -\name{FVPA} -\alias{FVPA} -\title{Functional Variance Process Analysis for dense functional data} -\usage{ -FVPA(y, t, q = 0.1, optns = list(error = TRUE, FVEthreshold = 0.9)) -} -\arguments{ -\item{y}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{t}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y.} - -\item{q}{A scalar defining the percentile of the pooled sample residual sample used for adjustment before taking log (default: 0.1).} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}; by default: 'error' has to be TRUE, 'FVEthreshold' is set to 0.90. See `Details in ?FPCA'.} -} -\value{ -A list containing the following fields: -\item{sigma2}{Variance estimator of the functional variance process.} -\item{fpcaObjY}{FPCA object for the original data.} -\item{fpcaObjR}{FPCA object for the functional variance process associated with the original data.} -} -\description{ -Functional Variance Process Analysis for dense functional data -} -\examples{ -set.seed(1) -n <- 25 -pts <- seq(0, 1, by=0.01) -sampWiener <- Wiener(n, pts) -# Data have to dense for FVPA to be relevant! -sampWiener <- Sparsify(sampWiener, pts, 101) -fvpaObj <- FVPA(sampWiener$Ly, sampWiener$Lt) -} -\references{ -\cite{Hans-Georg Mueller, Ulrich Stadtmuller and Fang Yao, "Functional variance processes." Journal of the American Statistical Association 101 (2006): 1007-1018} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYX.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYX.Rd deleted file mode 100644 index 51356d42..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYX.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/GetCrCorYX.R -\name{GetCrCorYX} -\alias{GetCrCorYX} -\title{Make cross-correlation matrix from auto- and cross-covariance matrix} -\usage{ -GetCrCorYX(ccXY, ccXX, ccYY) -} -\arguments{ -\item{ccXY}{The cross-covariance matrix between variables X and Y.} - -\item{ccXX}{The auto-covariance matrix of variable X or the diagonal of that matrix.} - -\item{ccYY}{The auto-covariance matrix of variable Y or the diagonal of that matrix.} -} -\value{ -A cross-correlation matrix between variables X and Y. -} -\description{ -Make cross-correlation matrix from auto- andcross-covariance matrix -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYZ.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYZ.Rd deleted file mode 100644 index c12ef8e8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCorYZ.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/GetCrCorYZ.R -\name{GetCrCorYZ} -\alias{GetCrCorYZ} -\title{Make cross-correlation matrix from auto- and cross-covariance matrix} -\usage{ -GetCrCorYZ(ccYZ, acYY, covZ) -} -\arguments{ -\item{ccYZ}{The cross-covariance vector between variables Y and Z (n-by-1).} - -\item{acYY}{The auto-covariance n-by-n matrix of variable Y or the (n-by-1) diagonal of that matrix.} - -\item{covZ}{The (scalar) covariance of variable Z.} -} -\value{ -A cross-correlation matrix between variables Y (functional) and Z (scalar). -} -\description{ -Make cross-correlation matrix from auto- andcross-covariance matrix -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYX.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYX.Rd deleted file mode 100644 index a159c567..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYX.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/GetCrCovYX.R -\name{GetCrCovYX} -\alias{GetCrCovYX} -\title{Functional Cross Covariance between longitudinal variable Y and longitudinal variable X} -\usage{ -GetCrCovYX(bw1 = NULL, bw2 = NULL, Ly1, Lt1 = NULL, Ymu1 = NULL, - Ly2, Lt2 = NULL, Ymu2 = NULL, useGAM = FALSE, rmDiag = FALSE, - kern = "gauss", bwRoutine = "l-bfgs-b") -} -\arguments{ -\item{bw1}{Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (Y)} - -\item{bw2}{Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated) (X)} - -\item{Ly1}{List of N vectors with amplitude information (Y)} - -\item{Lt1}{List of N vectors with timing information (Y)} - -\item{Ymu1}{Vector Q-1 Vector of length nObsGrid containing the mean function estimate (Y)} - -\item{Ly2}{List of N vectors with amplitude information (X)} - -\item{Lt2}{List of N vectors with timing information (X)} - -\item{Ymu2}{Vector Q-1 Vector of length nObsGrid containing the mean function estimate (X)} - -\item{useGAM}{Indicator to use gam smoothing instead of local-linear smoothing (semi-parametric option) (default: FALSE)} - -\item{rmDiag}{Indicator to remove the diagonal element when smoothing (default: FALSE)} - -\item{kern}{String specifying the kernel type (default: FALSE; see ?FPCA for details)} - -\item{bwRoutine}{String specifying the routine used to find the optimal bandwidth 'grid-search', 'bobyqa', 'l-bfgs-b' (default: 'l-bfgs-b') -If the variables Ly1 and Ly2 are in matrix form the data are assumed dense -and only the raw cross-covariance is returned. One can obtain Ymu1 and Ymu2 -from \code{FPCA} and \code{ConvertSupport}.} -} -\value{ -A list containing: -\item{smoothedCC}{The smoothed cross-covariance as a matrix (currently only 51 by 51)} -\item{rawCC}{The raw cross-covariance as a list} -\item{bw}{The bandwidth used for smoohting as a vector of lengh 2} -\item{score}{The GCV score associated with the scalar used} -\item{smoothGrid}{The grid over which the smoothed cross-covariance is evaluated} -} -\description{ -Calculate the raw and the smoothed cross-covariance between functional predictors using bandwidth bw or estimate that bw using GCV. -} -\examples{ -Ly1= list( rep(2.1,7), rep(2.1,3),2.1 ); -Lt1 = list(1:7,1:3, 1); -Ly2 = list( rep(1.1,7), rep(1.1,3),1.1); -Lt2 = list(1:7,1:3, 1); -Ymu1 = rep(55,7); -Ymu2 = rep(1.1,7); -AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2) - -} -\references{ -\cite{Yang, Wenjing, Hans-Georg Mueller, and Ulrich Stadtmueller. "Functional singular component analysis." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73.3 (2011): 303-324} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYZ.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYZ.Rd deleted file mode 100644 index b8839e1a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetCrCovYZ.Rd +++ /dev/null @@ -1,49 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/GetCrCovYZ.R -\name{GetCrCovYZ} -\alias{GetCrCovYZ} -\title{Functional Cross Covariance between longitudinal variable Y and scalar variable Z} -\usage{ -GetCrCovYZ(bw = NULL, Z, Zmu = NULL, Ly, Lt = NULL, Ymu = NULL, - support = NULL, kern = "gauss") -} -\arguments{ -\item{bw}{Scalar bandwidth for smoothing the cross-covariance function (if NULL it will be automatically estimated)} - -\item{Z}{Vector N-1 Vector of length N with the scalar function values} - -\item{Zmu}{Scalar with the mean of Z (if NULL it will be automaticall estimated)} - -\item{Ly}{List of N vectors with amplitude information} - -\item{Lt}{List of N vectors with timing information} - -\item{Ymu}{Vector Q-1 Vector of length nObsGrid containing the mean function estimate} - -\item{support}{Vector of unique and sorted values for the support of the smoothed cross-covariance function (if NULL it will be automatically estimated)} - -\item{kern}{Kernel type to be used. See ?FPCA for more details. (defult: 'gauss') -If the variables Ly1 is in matrix form the data are assumed dense and only -the raw cross-covariance is returned. One can obtain Ymu1 -from \code{FPCA} and \code{ConvertSupport}.} -} -\value{ -A list containing: -\item{smoothedCC}{The smoothed cross-covariance as a vector} -\item{rawCC}{The raw cross-covariance as a vector } -\item{bw}{The bandwidth used for smoohting as a scalar} -\item{score}{The GCV score associated with the scalar used} -} -\description{ -Calculate the raw and the smoothed cross-covariance between functional -and scalar predictors using bandwidth bw or estimate that bw using GCV -} -\examples{ -Ly <- list( runif(5), c(1:3), c(2:4), c(4)) -Lt <- list( c(1:5), c(1:3), c(1:3), 4) -Z = rep(4,4) # Constant vector so the covariance has to be zero. -sccObj = GetCrCovYZ(bw=1, Z= Z, Ly=Ly, Lt=Lt, Ymu=rep(4,5)) -} -\references{ -\cite{Yang, Wenjing, Hans-Georg Mueller, and Ulrich Stadtmueller. "Functional singular component analysis." Journal of the Royal Statistical Society: Series B (Statistical Methodology) 73.3 (2011): 303-324} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetNormalisedSample.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/GetNormalisedSample.Rd deleted file mode 100644 index 80e6fd6f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/GetNormalisedSample.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/GetNormalisedSample.R -\name{GetNormalisedSample} -\alias{GetNormalisedSample} -\alias{GetNormalizedSample} -\title{Normalise sparse functional sample} -\usage{ -GetNormalisedSample(fpcaObj, errorSigma = FALSE) - -GetNormalizedSample(...) -} -\arguments{ -\item{fpcaObj}{An FPCA object.} - -\item{errorSigma}{Indicator to use sigma^2 error variance when normalising the data (default: FALSE)} - -\item{...}{Passed into GetNormalisedSample} -} -\value{ -A list containing the normalised sample 'y' at times 't' -} -\description{ -Normalise sparse functional sample given in an FPCA object -} -\examples{ -set.seed(1) -n <- 100 -M <- 51 -pts <- seq(0, 1, length.out=M) -mu <- rep(0, length(pts)) -sampDense <- MakeGPFunctionalData(n, M, mu, K=1, basisType='sin', sigma=0.01) -samp4 <- MakeFPCAInputs(tVec=sampDense$pts, yVec=sampDense$Yn) -res4E <- FPCA(samp4$Ly, samp4$Lt, list(error=TRUE)) -sampN <- GetNormalisedSample(res4E, errorSigma=TRUE) - -CreatePathPlot(subset=1:20, inputData=samp4, obsOnly=TRUE, showObs=FALSE) -CreatePathPlot(subset=1:20, inputData=sampN, obsOnly=TRUE, showObs=FALSE) -} -\references{ -\cite{Chiou, Jeng-Min and Chen, Yu-Ting and Yang, Ya-Fang. "Multivariate Functional Principal Component Analysis: A Normalization Approach" Statistica Sinica 24 (2014): 1571-1596} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls1D.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls1D.Rd deleted file mode 100644 index 36e695a3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls1D.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Lwls1D.R -\name{Lwls1D} -\alias{Lwls1D} -\title{One dimensional local linear kernel smoother} -\usage{ -Lwls1D(bw, kernel_type, win = rep(1L, length(xin)), xin, yin, xout, - npoly = 1L, nder = 0L) -} -\arguments{ -\item{bw}{Scalar holding the bandwidth} - -\item{kernel_type}{Character holding the kernel type (see ?FPCA for supported kernels)} - -\item{win}{Vector of length N with weights} - -\item{xin}{Vector of length N with measurement points} - -\item{yin}{Vector of length N with measurement values} - -\item{xout}{Vector of length M with output measurement points} - -\item{npoly}{Scalar (integer) degree of polynomial fitted (default 1)} - -\item{nder}{Scalar (integer) degree of derivative fitted (default 0)} -} -\value{ -Vector of length M with measurement values at the the point speficied by 'xout' -} -\description{ -One dimensional local linear kernel smoother for longitudinal data. -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2D.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2D.Rd deleted file mode 100644 index 25006713..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2D.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Lwls2D.R -\name{Lwls2D} -\alias{Lwls2D} -\title{Two dimensional local linear kernel smoother.} -\usage{ -Lwls2D(bw, kern = "epan", xin, yin, win = NULL, xout1 = NULL, - xout2 = NULL, xout = NULL, subset = NULL, crosscov = FALSE, - method = ifelse(kern == "gauss", "plain", "sort2")) -} -\arguments{ -\item{bw}{A scalar or a vector of length 2 specifying the bandwidth.} - -\item{kern}{Kernel used: 'gauss', 'rect', 'gausvar', 'epan' (default), 'quar'.} - -\item{xin}{An n by 2 data frame or matrix of x-coordinate.} - -\item{yin}{A vector of y-coordinate.} - -\item{win}{A vector of weights on the observations.} - -\item{xout1}{a p1-vector of first output coordinate grid. Defaults to the input gridpoints if left unspecified.} - -\item{xout2}{a p2-vector of second output coordinate grid. Defaults to the input gridpoints if left unspecified.} - -\item{xout}{alternative to xout1 and xout2. A matrix of p by 2 specifying the output points (may be inefficient if the size of \code{xout} is small).} - -\item{subset}{a vector with the indices of x-/y-/w-in to be used (Default: NULL)} - -\item{crosscov}{using function for cross-covariance estimation (Default: FALSE)} - -\item{method}{should one try to sort the values xin and yin before using the lwls smoother? if yes ('sort2' - default for non-Gaussian kernels), if no ('plain' - fully stable; de)} -} -\value{ -a p1 by p2 matrix of fitted values if xout is not specified. Otherwise a vector of length p corresponding to the rows of xout. -} -\description{ -Two dimensional local weighted least squares smoother. Only local linear smoother for estimating the original curve is available (no higher order, no derivative). -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2DDeriv.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2DDeriv.Rd deleted file mode 100644 index e605e0c7..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Lwls2DDeriv.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Lwls2DDeriv.R -\name{Lwls2DDeriv} -\alias{Lwls2DDeriv} -\title{Two dimensional local linear kernel smoother with derivatives.} -\usage{ -Lwls2DDeriv(bw, kern = "epan", xin, yin, win = NULL, xout1 = NULL, - xout2 = NULL, xout = NULL, npoly = 1L, nder1 = 0L, nder2 = 0L, - subset = NULL, crosscov = TRUE, method = "sort2") -} -\arguments{ -\item{bw}{A scalar or a vector of length 2 specifying the bandwidth.} - -\item{kern}{Kernel used: 'gauss', 'rect', 'gausvar', 'epan' (default), 'quar'.} - -\item{xin}{An n by 2 data frame or matrix of x-coordinate.} - -\item{yin}{A vector of y-coordinate.} - -\item{win}{A vector of weights on the observations.} - -\item{xout1}{a p1-vector of first output coordinate grid. Defaults to the input gridpoints if left unspecified.} - -\item{xout2}{a p2-vector of second output coordinate grid. Defaults to the input gridpoints if left unspecified.} - -\item{xout}{alternative to xout1 and xout2. A matrix of p by 2 specifying the output points (may be inefficient if the size of \code{xout} is small).} - -\item{npoly}{The degree of polynomials (include all \eqn{x^a y^b} terms where \eqn{a + b <= npoly})} - -\item{nder1}{Order of derivative in the first direction} - -\item{nder2}{Order of derivative in the second direction} - -\item{subset}{a vector with the indices of x-/y-/w-in to be used (Default: NULL)} - -\item{crosscov}{using function for cross-covariance estimation (Default: TRUE)} - -\item{method}{should one try to sort the values xin and yin before using the lwls smoother? if yes ('sort2' - default for non-Gaussian kernels), if no ('plain' - fully stable; de)} -} -\value{ -a p1 by p2 matrix of fitted values if xout is not specified. Otherwise a vector of length p corresponding to the rows of xout. -} -\description{ -Two dimensional local weighted least squares smoother. Only local linear smoother for estimating the original curve is available (no higher order, no derivative). -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeBWtoZscore02y.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeBWtoZscore02y.Rd deleted file mode 100644 index 5007f78d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeBWtoZscore02y.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeBWtoZscore02y.R -\name{MakeBWtoZscore02y} -\alias{MakeBWtoZscore02y} -\title{Z-score body-weight for age 0 to 24 months based on WHO standards} -\usage{ -MakeBWtoZscore02y(sex, age, bw) -} -\arguments{ -\item{sex}{A character 'M' or 'F' indicating the sex of the child.} - -\item{age}{A vector of time points of size Q.} - -\item{bw}{A vector of body-weight readings of size Q.} -} -\value{ -A vector of Z-scores of size Q. -} -\description{ -Make vector of age and body-weight to z-scores based on WHO standards using LMS -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeFPCAInputs.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeFPCAInputs.Rd deleted file mode 100644 index 5e5f61f3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeFPCAInputs.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeFPCAInputs.R -\name{MakeFPCAInputs} -\alias{MakeFPCAInputs} -\title{Format FPCA input} -\usage{ -MakeFPCAInputs(IDs = NULL, tVec, yVec, na.rm = FALSE, sort = FALSE) -} -\arguments{ -\item{IDs}{n-by-1 vector of subject IDs (Default: NULL)} - -\item{tVec}{Either an n-by-1 vector of measurement times, or a p-by-1 vector corresponding to the common time support} - -\item{yVec}{n-by-1 vector of measurements from the variable of interest, or a n-by-p matrix with each row corresponding to the dense observations.} - -\item{na.rm}{logical indicating if NA should be omitted (Default: FALSE)} - -\item{sort}{logical indicating if the returned lists Lt and Ly should be ensured to be sorted (Default: FALSE)} -} -\value{ -L list containing 3 lists each of length 'm', 'm' being the number of unique subject IDs -} -\description{ -Turn vector inputs to the list so they can be used in FPCA -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeGPFunctionalData.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeGPFunctionalData.Rd deleted file mode 100644 index d9cbb861..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeGPFunctionalData.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeGPFunctionalData.R -\name{MakeGPFunctionalData} -\alias{MakeGPFunctionalData} -\title{Make Gaussian Process Dense Functional Data sample} -\usage{ -MakeGPFunctionalData(n, M = 100, mu = rep(0, M), K = 2, - lambda = rep(1, K), sigma = 0, basisType = "cos") -} -\arguments{ -\item{n}{number of samples to generate} - -\item{M}{number of equidistant readings per sample (default: 100)} - -\item{mu}{vector of size M specifying the mean (default: rep(0,M))} - -\item{K}{scalar specifying the number of basis to be used (default: 2)} - -\item{lambda}{vector of size K specifying the variance of each components (default: rep(1,K))} - -\item{sigma}{The standard deviation of the Gaussian noise added to each observation points.} - -\item{basisType}{string specifiying the basis type used; possible options are: 'sin', 'cos' and 'fourier' (default: 'cos') (See code of 'CreateBasis' for implementation details.)} -} -\value{ -Y: X(t_{j}), Yn: noisy observations -} -\description{ -Make a Gaussian process dense functional data sample of size n over a [0,1] support. -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeHCtoZscore02y.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeHCtoZscore02y.Rd deleted file mode 100644 index 5622f581..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeHCtoZscore02y.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeHCtoZscore02y.R -\name{MakeHCtoZscore02y} -\alias{MakeHCtoZscore02y} -\title{Z-score head-circumference for age 0 to 24 months based on WHO standards} -\usage{ -MakeHCtoZscore02y(sex, age, hc) -} -\arguments{ -\item{sex}{A character 'M' or 'F' indicating the sex of the child.} - -\item{age}{A vector of time points of size Q.} - -\item{hc}{A vector of head circumference readings of size Q (in cm).} -} -\value{ -A vector of Z-scores of size Q. -} -\description{ -Make vector of age and height measurement to z-scores based on WHO standards using mu and sigma (not LMS) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeLNtoZscore02y.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeLNtoZscore02y.Rd deleted file mode 100644 index dd76e079..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeLNtoZscore02y.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeLNtoZscore02y.R -\name{MakeLNtoZscore02y} -\alias{MakeLNtoZscore02y} -\title{Z-score height for age 0 to 24 months based on WHO standards} -\usage{ -MakeLNtoZscore02y(sex, age, ln) -} -\arguments{ -\item{sex}{A character 'M' or 'F' indicating the sex of the child.} - -\item{age}{A vector of time points of size Q.} - -\item{ln}{A vector of body-length readings of size Q (in cm).} -} -\value{ -A vector of Z-scores of size Q. -} -\description{ -Make vector of age and height measurement to z-scores based on WHO standards using mu and sigma (not LMS) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeSparseGP.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeSparseGP.Rd deleted file mode 100644 index 59da6971..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MakeSparseGP.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MakeSparseGP.R -\name{MakeSparseGP} -\alias{MakeSparseGP} -\title{Make Gaussian Process Sparse Functional Data sample} -\usage{ -MakeSparseGP(n, rdist = runif, sparsity = 2:9, muFun = function(x) - rep(0, length(x)), K = 2, lambda = rep(1, K), sigma = 0, - basisType = "cos", CovFun = NULL) -} -\arguments{ -\item{n}{number of samples to generate.} - -\item{rdist}{a sampler for generating the random design time points within [0, 1].} - -\item{sparsity}{A vector of integers. The number of observation per sample is chosen to be one of the elements in sparsity with equal chance.} - -\item{muFun}{a function that takes a vector input and output a vector of the corresponding mean (default: zero function).} - -\item{K}{scalar specifying the number of basis to be used (default: 2).} - -\item{lambda}{vector of size K specifying the variance of each components (default: rep(1,K)).} - -\item{sigma}{The standard deviation of the Gaussian noise added to each observation points.} - -\item{basisType}{string specifiying the basis type used; possible options are: 'sin', 'cos' and 'fourier' (default: 'cos') (See code of 'CreateBasis' for implementation details.)} - -\item{CovFun}{an alternative specification of the covariance structure.} -} -\value{ -TODO -} -\description{ -Make a Gaussian process sparse functional data sample of size n -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/MultiFAM.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/MultiFAM.Rd deleted file mode 100644 index 8f0750a9..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/MultiFAM.Rd +++ /dev/null @@ -1,172 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/MultiFAM.R -\name{MultiFAM} -\alias{MultiFAM} -\title{Functional Additive Models with Multiple Predictor Processes} -\usage{ -MultiFAM(Y, X, ker = "epan", nEval = 51, XTest = NULL, - bwMethod = 0, alpha = 0.7, supp = c(-2, 2), optnsList = NULL) -} -\arguments{ -\item{Y}{An \emph{n}-dimensional vector whose elements consist of scalar responses.} - -\item{X}{A \emph{d}-dimensional list whose components consist of two lists of \emph{Ly} and \emph{Lt} containing obervation times and functional covariate values for each predictor component, respectively. For details of \emph{Ly} and \emph{Lt}, see \code{FPCA} for detail.} - -\item{ker}{A \code{function} object representing the base kernel to be used in the smooth backfitting algorithm (default is 'epan' which is the only option supported currently).} - -\item{nEval}{The number of evaluation grid points for kernel smoothing (default is 51. If it is specified as 0, then estimated FPC scores in the training set are used for evaluation grid instead of equal grid).} - -\item{XTest}{A \emph{d}-dimensional list for test set of functional predictors (default is NULL). If \code{XTest} is specified, then estimated FPC scores in the test set are used for evalution grid.} - -\item{bwMethod}{The method of initial bandwidth selection for kernel smoothing, a positive value for designating K-fold cross-validtaion and zero for GCV (default is 0)} - -\item{alpha}{The shrinkage factor (positive number) for bandwidth selection. See Han et al. (2016) (default is 0.7).} - -\item{supp}{The lower and upper limits of kernel smoothing domain for studentized FPC scores, which FPC scores are divided by the square roots of eigenvalues (default is [-2,2]).} - -\item{optnsList}{A \emph{d}-dimensional list whose components consist of \code{optns} for each predictor component, respectively. (default is NULL which assigns the same default \code{optns} for all components as in \code{FPCA}).} -} -\value{ -A list containing the following fields: -\item{mu}{A scalar of centered part of the regression model.} -\item{SBFit}{An \emph{N} by \eqn{(K_1 + ... + K_d)} matrix whose column vectors consist of the smooth backfitting component function estimators at the given \emph{N} estimation points.} -\item{xi}{An \emph{N} by \eqn{(K_1 + ... + K_d)} matrix whose column vectors consist of FPC score grid vectors that each additive component functional is evluated.} -\item{bw}{A \eqn{(K_1 + ... + K_d)}-dimensional bandwidth vector.} -\item{lambda}{A \eqn{(K_1 + ... + K_d)}-dimensional vector containing eigenvalues.} -\item{phi}{A \emph{d}-dimensional list whose components consist of an \emph{nWorkGrid} by \emph{K_j} matrix containing eigenfunctions, supported by \code{WorkGrid}. See \code{FPCA}.} -\item{workGrid}{A \emph{d}-dimensional list whose components consist of an \emph{nWorkGrid} by \emph{K_j} working grid, the internal regular grid on which the eigen analysis is carried on. See \code{FPCA}.} -} -\description{ -Smooth backfitting procedure for functional additive models with multiple predictor processes -} -\details{ -\code{MultiFAM} fits functional additive models for a scalar response and multiple predictor processes based on the smooth backfitting algorithm proposed by Han et al. (2016) that \deqn{E(Y | \mathbf{X}) = \sum_{j=1}^d \sum_{k=1}^{K_j} g_{jk}(\xi_{jk}),} where \eqn{\xi_{jk}} stand for the k-th FPC score of the j-th predictor process. \code{MultiFAM} only focuses on mutiple predictor processes case. In fact, the case of univariate predictor is the same with functional additive model proposed by Mueller and Yao (2008). Especially in this development, one can designate an estimation support of additive models when the additive modeling is only allowed over restricted intervals or one is interested in the modeling over the support (see Han et al., 2016). -} -\examples{ -set.seed(1000) - -library(MASS) - -f11 <- function(t) t -f12 <- function(t) 2*cos(2*pi*t/4) -f21 <- function(t) 1.5*sin(2*pi*t/4) -f22 <- function(t) 1.5*atan(2*pi*t/4) - -n<-100 -N<-200 - -sig <- matrix(c(2.0, 0.0, 0.5, -.2, - 0.0, 1.2, -.2, 0.3, - 0.5, -.2, 1.7, 0.0, - -.2, 0.3, 0.0, 1.0), - nrow=4,ncol=4) - -scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) - -Y <- f11(scoreX[,1]) + f12(scoreX[,2]) + f21(scoreX[,3]) + f22(scoreX[,4]) + rnorm(n,0,0.5) -YTest <- f11(scoreXTest[,1]) + f12(scoreXTest[,2]) + -f21(scoreXTest[,3]) + f22(scoreXTest[,4]) + rnorm(N,0,0.5) - -phi11 <- function(t) sqrt(2)*sin(2*pi*t) -phi12 <- function(t) sqrt(2)*sin(4*pi*t) -phi21 <- function(t) sqrt(2)*cos(2*pi*t) -phi22 <- function(t) sqrt(2)*cos(4*pi*t) - -grid <- seq(0,1,length.out=21) -Lt <- Lx1 <- Lx2 <- list() -for (i in 1:n) { - Lt[[i]] <- grid - Lx1[[i]] <- scoreX[i,1]*phi11(grid) + scoreX[i,2]*phi12(grid) + rnorm(1,0,0.01) - Lx2[[i]] <- scoreX[i,3]*phi21(grid) + scoreX[i,4]*phi22(grid) + rnorm(1,0,0.01) -} - -LtTest <- Lx1Test <- Lx2Test <- list() -for (i in 1:N) { - LtTest[[i]] <- grid - Lx1Test[[i]] <- scoreXTest[i,1]*phi11(grid) + scoreXTest[i,2]*phi12(grid) + rnorm(1,0,0.01) - Lx2Test[[i]] <- scoreXTest[i,3]*phi21(grid) + scoreXTest[i,4]*phi22(grid) + rnorm(1,0,0.01) -} - -X1 <- list(Ly=Lx1, Lt=Lt) -X2 <- list(Ly=Lx2, Lt=Lt) - -X1Test <- list(Ly=Lx1Test, Lt=LtTest) -X2Test <- list(Ly=Lx2Test, Lt=LtTest) - -X <- list(X1, X2) -XTest <- list(X1Test, X2Test) - -# estimation -sbf <- MultiFAM(Y=Y,X=X) - -xi <- sbf$xi - -par(mfrow=c(2,2)) -j <- 1 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g11 <- f11(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f11(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g11*sbf$SBFit[,j])) -plot(sort(xi[,j]),g11,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi11') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 2 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g12 <- f12(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f12(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g12*sbf$SBFit[,j])) -plot(sort(xi[,j]),g12,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi12') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 3 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g21 <- f21(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f21(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g21*sbf$SBFit[,j])) -plot(sort(xi[,j]),g21,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi21') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 4 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g22 <- f22(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f22(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g22*sbf$SBFit[,j])) -plot(sort(xi[,j]),g22,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi22') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -\dontrun{ -# fitting -sbf <- MultiFAM(Y=Y,X=X,nEval=0) -yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,Y) -abline(coef=c(0,1),col=2) - - -# R^2 -R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -R2 - - -# prediction -sbf <- MultiFAM(Y=Y,X=X,XTest=XTest) -yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,YTest) -abline(coef=c(0,1),col=2) -} -} -\references{ -\cite{Mammen, E., Linton, O. and Nielsen, J. (1999), "The existence and asymptotic properties of a backfitting projection algorithm under weak conditions", Annals of Statistics, Vol.27, No.5, p.1443-1490.} - -\cite{Mammen, E. and Park, B. U. (2006), "A simple smooth backfitting method for additive models", Annals of Statistics, Vol.34, No.5, p.2252-2271.} - -\cite{Mueller, H.-G. and Yao, F. (2008), "Functional additive models", Journal of the Americal Statistical Association, Vol.103, No.484, p.1534-1544.} - -\cite{Han, K., Mueller, H.-G. and Park, B. U. (2016), "Smooth backfitting for additive modeling with small errors-in-variables, with an application to additive functional regression for multiple predictor functions", Bernoulli (accepted).} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/NormCurvToArea.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/NormCurvToArea.Rd deleted file mode 100644 index 42454d1b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/NormCurvToArea.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/NormCurveToArea.R -\name{NormCurvToArea} -\alias{NormCurvToArea} -\title{Normalise a curve to a particular area.} -\usage{ -NormCurvToArea(y, x = seq(0, 1, length.out = length(y)), area = 1) -} -\arguments{ -\item{y}{values of curve at time-points x} - -\item{x}{design time-points (default: seq(0,1, length.out=length(y)))} - -\item{area}{value to normalise the curve onto (default: 1)} -} -\value{ -yNew values of curve at times x such that [\\int{yNew}dx = area] -} -\description{ -Normalise a curve such that \\int{yNew}dx = area (according to trapezoid integration) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/SBFitting.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/SBFitting.Rd deleted file mode 100644 index d23762d3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/SBFitting.Rd +++ /dev/null @@ -1,94 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/SBFitting.R -\name{SBFitting} -\alias{SBFitting} -\title{Iterative Smooth Backfitting Algorithm} -\usage{ -SBFitting(Y, x, X, h = NULL, K = "epan", supp = NULL) -} -\arguments{ -\item{Y}{An \emph{n}-dimensional vector whose elements consist of scalar responses.} - -\item{x}{An \emph{N} by \emph{d} matrix whose column vectors consist of \emph{N} vectors of estimation points for each component function.} - -\item{X}{An \emph{n} by \emph{d} matrix whose row vectors consist of multivariate predictors.} - -\item{h}{A \emph{d} vector of bandwidths for kernel smoothing to estimate each component function.} - -\item{K}{A \code{function} object representing the kernel to be used in the smooth backfitting (default is 'epan', the the Epanechnikov kernel.).} - -\item{supp}{A \emph{d} by 2 matrix whose row vectors consist of the lower and upper limits of estimation intervals for each component function (default is the \emph{d}-dimensional unit rectangle of \emph{[0,1]}).} -} -\value{ -A list containing the following fields: -\item{SBFit}{An \emph{N} by \emph{d} matrix whose column vectors consist of the smooth backfitting component function estimators at the given estimation points.} -\item{mY}{A scalar of centered part of the regression model.} -\item{NW}{An \emph{N} by \emph{d} matrix whose column vectors consist of the Nadaraya-Watson marginal regression function estimators for each predictor component at the given estimation points.} -\item{mgnDens}{An \emph{N} by \emph{d} matrix whose column vectors consist of the marginal kernel density estimators for each predictor component at the given estimation points.} -\item{jntDens}{An \emph{N} by \emph{N} by \emph{d} by \emph{d} array representing the 2-dimensional joint kernel density estimators for all pairs of predictor components at the given estimation grid. For example, \code{[,,j,k]} of the object provides the 2-dimensional joint kernel density estimator of the \code{(j,k)}-component of predictor components at the corresponding \emph{N} by \emph{N} matrix of estimation grid.} -\item{itemNum}{The iteration number that the smooth backfitting algorithm has stopped.} -\item{itemErr}{The iteration error of the smooth backfitting algorithm that represents the maximum L2 distance among component functions in the last successive updates.} -} -\description{ -Smooth backfitting procedure for nonparametric additive models -} -\details{ -\code{SBFitting} fits component functions of additive models for a scalar response and a multivariate predictor based on the smooth backfitting algorithm proposed by Mammen et al. (1999) and intensively studied by Mammen and Park (2006), Yu et al. (2008), Lee et al. (2010, 2012) and so on. \code{SBFitting} only focuses on the local constant smooth backfitting estimator with multivariate predictor case. In fact, the case of univariate predictor is the same with the local constant kernel regression estimator (Nadaraya-Watson estimator) and the local polynomial version can be extended similarly, so that those are omitted in the development. Support of the multivariate predictor is assumed to be a product of closed intervals. Especially in this development, one can designate an estimation support of additive models when the additive modeling is only allowed over restricted intervals or one is interested in the modeling over the support (see Han et al., 2016). If one puts \code{X} on the argument of estimation points \code{x}, \code{SBFitting} returns estimated values of conditional mean responses given observed predictors. -} -\examples{ -set.seed(100) - -n <- 100 -d <- 2 -X <- pnorm(matrix(rnorm(n*d),nrow=n,ncol=d)\%*\%matrix(c(1,0.6,0.6,1),nrow=2,ncol=2)) - -f1 <- function(t) 2*(t-0.5) -f2 <- function(t) sin(2*pi*t) - -Y <- f1(X[,1])+f2(X[,2])+rnorm(n,0,0.1) - -# component function estimation -N <- 101 -x <- matrix(rep(seq(0,1,length.out=N),d),nrow=N,ncol=d) -h <- c(0.12,0.08) - -sbfEst <- SBFitting(Y,x,X,h) -fFit <- sbfEst$SBFit - -par(mfrow=c(1,2)) -plot(x[,1],f1(x[,1]),type='l',lwd=2,col=2,lty=4,xlab='X1',ylab='Y') -points(x[,1],fFit[,1],type='l',lwd=2,col=1) -points(X[,1],Y,cex=0.3,col=8) -legend('topleft',legend=c('SBF','true'),col=c(1,2),lwd=2,lty=c(1,4),horiz=FALSE,bty='n') -abline(h=0,col=8) - -plot(x[,2],f2(x[,2]),type='l',lwd=2,col=2,lty=4,xlab='X2',ylab='Y') -points(x[,2],fFit[,2],type='l',lwd=2,col=1) -points(X[,2],Y,cex=0.3,col=8) -legend('topright',legend=c('SBF','true'),col=c(1,2),lwd=2,lty=c(1,4),horiz=FALSE,bty='n') -abline(h=0,col=8) - -# prediction -x <- X -h <- c(0.12,0.08) - -sbfPred <- SBFitting(Y,X,X,h) -fPred <- sbfPred$mY+apply(sbfPred$SBFit,1,'sum') - -par(mfrow=c(1,1)) -plot(fPred,Y,cex=0.5,xlab='SBFitted values',ylab='Y') -abline(coef=c(0,1),col=8) -} -\references{ -\cite{Mammen, E., Linton, O. and Nielsen, J. (1999), "The existence and asymptotic properties of a backfitting projection algorithm under weak conditions", Annals of Statistics, Vol.27, No.5, p.1443-1490.} - -\cite{Mammen, E. and Park, B. U. (2006), "A simple smooth backfitting method for additive models", Annals of Statistics, Vol.34, No.5, p.2252-2271.} - -\cite{Yu, K., Park, B. U. and Mammen, E. (2008), "Smooth backfitting in generalized additive models", Annals of Statistics, Vol.36, No.1, p.228-260.} - -\cite{Lee, Y. K., Mammen, E. and Park., B. U. (2010), "backfitting and smooth backfitting for additive quantile models", Vol.38, No.5, p.2857-2883.} - -\cite{Lee, Y. K., Mammen, E. and Park., B. U. (2012), "Flexible generalized varying coefficient regression models", Annals of Statistics, Vol.40, No.3, p.1906-1933.} - -\cite{Han, K., Mueller, H.-G. and Park, B. U. (2016), "Smooth backfitting for additive modeling with small errors-in-variables, with an application to additive functional regression for multiple predictor functions", Bernoulli (accepted).} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/SelectK.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/SelectK.Rd deleted file mode 100644 index 07df6e83..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/SelectK.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/SelectK.R -\name{SelectK} -\alias{SelectK} -\title{Selects number of functional principal components for -given FPCA output and selection criteria} -\usage{ -SelectK(fpcaObj, criterion = "FVE", FVEthreshold = 0.95, Ly = NULL, - Lt = NULL) -} -\arguments{ -\item{fpcaObj}{A list containing FPCA related subjects returned by MakeFPCAResults().} - -\item{criterion}{A string or positive integer specifying selection criterion for number of functional principal components, available options: 'FVE', 'AIC', 'BIC', or the specified number of components - default: 'FVE'} - -\item{FVEthreshold}{A threshold percentage specified by user when using "FVE" as selection criterion: (0,1] - default: NULL} - -\item{Ly}{A list of \emph{n} vectors containing the observed values for each individual - default: NULL} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to Ly - default: NULL} -} -\value{ -A list including the following two fields: -\item{K}{An integer indicating the selected number of components based on given criterion.} -\item{criterion}{The calculated criterion value for the selected number of components, i.e. FVE, AIC or BIC value, NULL for fixedK criterion.} -} -\description{ -Selects number of functional principal components for -given FPCA output and selection criteria -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/SetOptions.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/SetOptions.Rd deleted file mode 100644 index f1bd130f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/SetOptions.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/SetOptions.R -\name{SetOptions} -\alias{SetOptions} -\title{Set the PCA option list} -\usage{ -SetOptions(y, t, optns) -} -\arguments{ -\item{y}{A list of \emph{n} vectors containing the observed values for each individual.} - -\item{t}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y.} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}. See `Details'. - -See '?FPCAfor more details. Usually users are not supposed to use this function directly.} -} -\description{ -Set the PCA option list -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Sparsify.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Sparsify.Rd deleted file mode 100644 index b05e3b1c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Sparsify.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Sparsify.R -\name{Sparsify} -\alias{Sparsify} -\title{Sparsify densely observed functional data} -\usage{ -Sparsify(samp, pts, sparsity, aggressive = FALSE, fragment = FALSE) -} -\arguments{ -\item{samp}{A matrix of densely observed functional data, with each row containing one sample.} - -\item{pts}{A vector of grid points corresponding to the columns of \code{samp}.} - -\item{sparsity}{A vector of integers. The number of observation per sample is chosen to be one of the elements in sparsity with equal chance.} - -\item{aggressive}{Sparsify in an "aggressive" manner making sure that near-by readings are excluded.} - -\item{fragment}{Sparsify the observations into fragments, which are (almost) uniformly distributed in the time domain. Default to FALSE as not fragmenting. Otherwise a positive number specifying the approximate length of each fragment.} -} -\value{ -A list of length 2, containing the following fields: -\item{Lt}{A list of observation time points for each sample.} -\item{Ly}{A list of values for each sample, corresponding to the time points.} -} -\description{ -Given a matrix of densely observed functional data, make a sparsified sample. -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Stringing.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Stringing.Rd deleted file mode 100644 index e79a93e2..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Stringing.Rd +++ /dev/null @@ -1,50 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Stringing.R -\name{Stringing} -\alias{Stringing} -\title{Stringing for High-Dimensional data} -\usage{ -Stringing(X, Y = NULL, standardize = FALSE, disOptns = "euclidean", - disMat = NA) -} -\arguments{ -\item{X}{A matrix (n by p) of data, where X[i,] is the row vector of measurements for the ith subject.} - -\item{Y}{A vector (n by 1), where Y[i] is the reponse associated with X[i,]} - -\item{standardize}{A logical variable indicating whether standardization of the input data matrix is required, with default: FALSE.} - -\item{disOptns}{A distance metric to be used, one of the following: "euclidean" (default), "maximum", "manhattan", "canberra", "binary", "minkowski", "correlation", "spearman", "hamming", "xycor", or "user". If specified as "xycor", the absolute difference of correlation between predictor and response is used. If specified as "user", a dissimilarity matrix for the argument "disMat" must be provided.} - -\item{disMat}{A user-specified dissimilarity matrix, only necessary when "disOptns" is "user".} -} -\value{ -A list containing the following fields: -\item{Ly}{A list of n vectors, which are the random trajectories for all subjects identified by the Stringing method.} -\item{Lt}{A list of n time points vectors, at which corresponding measurements Ly are taken.} -\item{StringingOrder}{A vector representing the order of the stringing, s.t. using as column index on \code{X} yields recovery of the underlying process.} -\item{Xin}{A matrix, corresponding to the input data matrix.} -\item{Xstd}{A matrix, corresponding to the standardized input data matrix. It is NULL if standardize is FALSE.} -} -\description{ -Stringing for High-Dimensional data -} -\examples{ -set.seed(1) -n <- 50 -wiener = Wiener(n = n)[,-1] -p = ncol(wiener) -rdmorder = sample(size = p, x=1:p, replace = FALSE) -stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -diff_rev = sum(abs(rdmorder[stringingfit$StringedOrder] - p:1)) -if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) -} -plot(1:p, rdmorder[stringingfit$StringingOrder], pch=18); abline(a=0,b=1) - -} -\references{ -\cite{Chen, K., Chen, K., Mueller, H. G., and Wang, J. L. (2011). "Stringing high-dimensional data for functional analysis." Journal of the American Statistical Association, 106(493), 275-284.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/TVAM.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/TVAM.Rd deleted file mode 100755 index 1ba9e659..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/TVAM.Rd +++ /dev/null @@ -1,88 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TVAM.R -\name{TVAM} -\alias{TVAM} -\title{Iterative Smooth Backfitting Algorithm} -\usage{ -TVAM(Lt, Ly, LLx, gridT = NULL, x = NULL, ht = NULL, hx = NULL, - K = "epan", suppT = NULL, suppX = NULL) -} -\arguments{ -\item{Lt}{An \emph{n}-dimensional list of \emph{N_i}-dimensional vector whose elements consist of longitudial time points for each \emph{i}-th subject.} - -\item{Ly}{An \emph{n}-dimensional list of \emph{N_i}-dimensional vector whose elements consist of longitudial response observations of each \emph{i}-subject corresponding to \emph{Lt}.} - -\item{LLx}{A tuple of \emph{d}-lists, where each list respresents longitudinal covariate observations of the \emph{j}-th component corresponding to \emph{Lt} and \emph{Ly}.} - -\item{gridT}{An \emph{M}-dimensional sequence of evaluation time points for additive surface estimators. (Must be sorted in increasing orders.)} - -\item{x}{An \emph{N} by \emph{d} matrix whose column vectors consist of \emph{N} vectors of evaluation points for additive surface component estimators at each covariate value.} - -\item{ht}{A bandwidth for kernel smoothing in time component.} - -\item{hx}{A \emph{d} vector of bandwidths for kernel smoothing covariate components, respectively.} - -\item{K}{A \code{function} object representing the kernel to be used in the smooth backfitting (default is 'epan', the the Epanechnikov kernel.).} - -\item{suppT}{A 2-dimensional vector consists of the lower and upper limits of estimation intervals for time component (default is \emph{[0,1]}).} - -\item{suppX}{A \emph{d} by 2 matrix whose row vectors consist of the lower and upper limits of estimation intervals for each component function (default is the \emph{d}-dimensional unit rectangle of \emph{[0,1]}).} -} -\value{ -A list containing the following fields: -\item{tvamComp}{A tuple of \emph{d}-lists, where each list is given by \emph{M} by \emph{N} matrix whose elements represents the smooth backfitting surface estimator of the \emph{j}-component evaluated at \code{gridT} and the \emph{j}-th column of \code{x}.} -\item{tvamMean}{An \emph{M}-dimensional vector whose elelments consist of the marginal time regression function estimated at \code{gridT}.} -} -\description{ -Smooth backfitting procedure for time-varying additive models -} -\details{ -\code{TVAM} estimates component surfaces of time-varying additive models for londitudinal observations based on the smooth backfitting algorithm proposed by Zhang et al. (2013). \code{TVAM} only focuses on the local constant smooth backfitting in contrast to the original development as in Zhang et al. (2013). However, the local polynomial version can be extended similarly, so that those are omitted in the development. Especially in this development, one can designate an estimation support of additive surfaces when the additive modeling is only allowed over restricted intervals or one is interested in the modeling over the support (see Han et al., 2016). -} -\examples{ - -set.seed(1000) - -n <- 100 -Lt <- list() -Ly <- list() -Lx1 <- list() -Lx2 <- list() - -for (i in 1:n) { - Ni <- sample(10:15,1) - - Lt[[i]] <- sort(runif(Ni,0,1)) - Lx1[[i]] <- runif(Ni,0,1) - Lx2[[i]] <- runif(Ni,0,1) - Ly[[i]] <- Lt[[i]]*(cos(2*pi*Lx1[[i]]) + sin(2*pi*Lx2[[i]])) + rnorm(Ni,0,0.1) - -} - -LLx <- list(Lx1,Lx2) - -gridT <- seq(0,1,length.out=41) -x0 <- seq(0,1,length.out=51) -x <- cbind(x0,x0) - -ht <- 0.1 -hx <- c(0.1,0.1) - -tvam <- TVAM(Lt,Ly,LLx,gridT=gridT,x=x,ht=ht,hx=hx,K='epan') - -g0Sbf <- tvam$tvamMean -gjSbf <- tvam$tvamComp - -par(mfrow=c(1,2)) -par(mar=c(1,1,1,1)+0.1) -persp(gridT,x0,gjSbf[[1]],theta=60,phi=30, - xlab='time',ylab='x1',zlab='g1(t, x1)') -persp(gridT,x0,gjSbf[[2]],theta=60,phi=30, - xlab='time',ylab='x2',zlab='g1(t, x2)') - -} -\references{ -\cite{Zhang, X., Park, B. U. and Wang, J.-L. (2013), "Time-varying additive models for longitudinal data", Journal of the American Statistical Association, Vol.108, No.503, p.983-998.} - -\cite{Han, K., Mueller, H.-G. and Park, B. U. (2018), "Smooth backfitting for additive modeling with small errors-in-variables, with an application to additive functional regression for multiple predictor functions", Bernoulli, Vol.24, No.2, p.1233-1265.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/VCAM.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/VCAM.Rd deleted file mode 100644 index a5638c85..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/VCAM.Rd +++ /dev/null @@ -1,112 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/VCAM.R -\name{VCAM} -\alias{VCAM} -\title{Sieve estimation} -\usage{ -VCAM(Lt, Ly, X, optnAdd = list(), optnVc = list()) -} -\arguments{ -\item{Lt}{An \emph{n}-dimensional list of \emph{N_i}-dimensional vectors whose elements consist of longitudial time points for each \emph{i}-th subject.} - -\item{Ly}{An \emph{n}-dimensional list of \emph{N_i}-dimensional vectors whose elements consist of longitudial response observations of each \emph{i}-subject corresponding to \emph{Lt}.} - -\item{X}{An \emph{n} by \emph{d} matrix whose row vectors consist of covariate vector of additive components for each subject.} - -\item{optnAdd}{A list of options controls B-spline parameters for additive components, specified by list(name=value). See 'Details'.} - -\item{optnVc}{A list of options controls B-spline parameters for varying-coefficient components, specified by list(name=value). See 'Details'.} -} -\value{ -A list containing the following fields: -\item{Lt}{The same with input given by \emph{Lt}} -\item{LyHat}{Fitted values corresponding to \emph{Ly}} -\item{phiEst}{An \emph{N} by \emph{d} matrix whose column vectors consist of esimates for each additive component function evaluated at \emph{gridX}.} -\item{beta0Est}{An \emph{M}-dimensional vector for overall mean function estimates evalueated at \emph{gridT}.} -\item{betaEst}{An \emph{M} by \emph{d} matrix whose column vectors consist of esimates for each varying-coefficient components evalueated at \emph{gridT}.} -\item{gridX}{The same with input given by \emph{optnAdd$grid}} -\item{gridT}{The same with input given by \emph{optnVc$grid}} -} -\description{ -B-spline based estimation procedure for time-varying additive models. -} -\details{ -\code{VCAM} provides a simple algorithm based on B-spline basis to estimate its nonparametric additive and varying-coefficient components. - -Available control options for \emph{optnAdd} are -\describe{ -\item{nKnot}{A \emph{d}-dimensional vector which designates the number of knots for each additive component function estimation (default=10).} -\item{order}{A \emph{d}-dimensional vector which designates the order of B-spline basis for each additive component function estimation (default=3).} -\item{grid}{A \emph{N} by \emph{d} matrix whose column vector consist of evaluation grid points for each component function estimation.} -} -and control options for \emph{optnVc} are -\describe{ -\item{nKnot}{A \emph{(d+1)}-dimensional vector which designates the number of knots for overall mean function and each varying-coefficient component function estimation (default=10).} -\item{order}{A \emph{(d+1)}-dimensional vector which designates the order of B-spline basis for overall mean function and each varying-coefficient component function estimation (default=3).} -\item{grid}{A \emph{M} by \emph{(d+1)} matrix whose column vectors consist of evaluation grid points for overall mean function and each varying-coefficient component function estimation.} -} -} -\examples{ - -library(MASS) - -set.seed(100) - -n <- 100 -d <- 2 - -Lt <- list() -Ly <- list() - -m <- rep(0,2) -S <- matrix(c(1,0.5,0.5,1),nrow=2,ncol=2) -X <- pnorm(mvrnorm(n,m,S)) - -beta0 <- function(t) 1.5*sin(3*pi*(t+0.5)) -beta1 <- function(t) 3*(1-t)^2 -beta2 <- function(t) 4*t^3 - -phi1 <- function(x) sin(2*pi*x) -phi2 <- function(x) 4*x^3-1 - -for (i in 1:n) { - Ni <- sample(10:20,1) - - Lt[[i]] <- sort(runif(Ni,0,1)) - Ly[[i]] <- beta0(Lt[[i]]) + beta1(Lt[[i]])*phi1(X[i,1]) + beta2(Lt[[i]])*phi2(X[i,2]) + rnorm(Ni,0,0.1) - -} - - -vcam <- VCAM(Lt,Ly,X) - -par(mfrow=c(1,1)) -plot(unlist(vcam$LyHat),unlist(Ly),xlab='observed Y',ylab='fitted Y') -abline(coef=c(0,1),col=8) - -par(mfrow=c(1,2)) -plot(vcam$gridX[,1],vcam$phiEst[,1],type='l',ylim=c(-1,1),xlab='x1',ylab='phi1') -points(vcam$gridX[,1],phi1(vcam$gridX[,1]),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridX[,2],vcam$phiEst[,2],type='l',ylim=c(-1,3),xlab='x2',ylab='phi2') -points(vcam$gridX[,2],phi2(vcam$gridX[,2]),col=2,type='l',lty=2,lwd=2) -legend('topleft',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -par(mfrow=c(1,3)) -plot(vcam$gridT,vcam$beta0Est,type='l',xlab='t',ylab='beta0') -points(vcam$gridT,beta0(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridT,vcam$betaEst[,1],type='l',xlab='t',ylab='beta1') -points(vcam$gridT,beta1(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridT,vcam$betaEst[,2],type='l',xlab='t',ylab='beta2') -points(vcam$gridT,beta2(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -} -\references{ -\cite{Zhang, X. and Wang, J.-L. (2015), "Varying-coefficient additive models for functional data", Biometrika, Vol.102, No.1, p.15-32.} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/WFDA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/WFDA.Rd deleted file mode 100644 index 26a899db..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/WFDA.Rd +++ /dev/null @@ -1,75 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/WFDA.R -\name{WFDA} -\alias{WFDA} -\title{Warped Functional Data Analysis} -\usage{ -WFDA(Ly, Lt, optns = list()) -} -\arguments{ -\item{Ly}{A list of \emph{n} vectors containing the observed values for each individual.} - -\item{Lt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y. Each vector should be sorted in ascending order.} - -\item{optns}{A list of options control parameters specified by \code{list(name=value)}. See 'Details'.} -} -\value{ -A list containing the following fields: -\item{optns}{Control options used.} -\item{lambda}{Penalty parameter used.} -\item{aligned}{Aligned curves evaluated at time 't'} -\item{h}{Warping functions for 't'} -\item{hInv}{Inverse warping functions evaluated at 't'} -\item{costs}{The mean cost associated with each curve} -\item{timing}{The time required by time-warping.} -} -\description{ -Pairwise curve synchronization for functional data -} -\details{ -WFDA uses a pairwise warping method to obtain the desired alignment (registration) of the random trajectories. -The data has to be regular. The routine returns the aligned curves and the associated warping function. - -Available control options are -\describe{ -\item{choice}{Choice of estimating the warping functions ('weighted' or 'truncated'). If 'weighted' then weighted averages of pairwise warping functions are computed; the weighting is based on the inverse pairwise distances. If 'truncated' the pairs with the top 10\% largest distances are truncated and the simple average of the remaining pairwise distances are used - default: 'truncated'} -\item{subsetProp}{Pairwise warping functions are determined by using a subset of the whole sample; numeric (0,1] - default: 0.50} -\item{lambda}{Penalty parameter used for estimating pairwise warping functions; numeric - default : V*10^-4, where V is the average L2 norm of y-mean(y).} -\item{nknots}{Number of knots used for estimating the piece-wise linear pairwise warping functions; numeric - default: 2} -\item{isPWL}{Indicator if the resulting warping functions should piece-wise linear, if FALSE 'nknots' is ignored and the resulting warping functions are simply monotonic; logical - default: TRUE (significantly larger computation time.)} -\item{seed}{Random seed for the selection of the subset of warping functions; numeric - default: 666} -\item{verbose}{Indicator if the progress of the pairwise warping procedure should be displayed; logical - default: FALSE} -} -} -\examples{ -N = 44; -eps = 0.123; -M = 41; -set.seed(123) -Tfinal = 3 -me <- function(t) exp(-Tfinal*(((t/Tfinal^2)-0.5))^2); -T = seq(0,Tfinal,length.out = M) -recondingTimesMat = matrix(nrow = N, ncol = M) -yMat = matrix(nrow = N, ncol = M) - -for (i in 1:N){ - peak = runif(min = 0.2,max = 0.8,1) * Tfinal - recondingTimesMat[i,] = sort( unique(c( seq(0.0 , peak, length.out = round((M+1)/2)), - seq( peak, Tfinal, length.out = round((M+1)/2))))) * Tfinal - yMat[i,] = me(recondingTimesMat[i,]) * rnorm(1, mean=4.0, sd= eps) - + rnorm(M, mean=0.0, sd= eps) -} - -Y = as.list(as.data.frame(t(yMat))) -X = rep(list(T),N) - -sss = WFDA(Ly = Y, Lt = X, list( choice = 'weighted' )) -par(mfrow=c(1,2)) -matplot(x= T, t(yMat), t='l', main = 'Raw', ylab = 'Y'); grid() -matplot(x= T, t(sss$aligned), t='l', main = 'Aligned', ylab='Y'); grid() -} -\references{ -\cite{Tang, R. and Mueller, H.G. (2008). "Pairwise curve synchronization for functional data." Biometrika 95, 875-889} - -\cite{Tang, R. and Mueller, H.G. (2009) "Time-synchronized clustering of gene expression trajectories." Biostatistics 10, 32-45} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/Wiener.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/Wiener.Rd deleted file mode 100644 index 6c1c13d3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/Wiener.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Wiener.R -\name{Wiener} -\alias{Wiener} -\title{Simulate standard Wiener processes (Brownian motions)} -\usage{ -Wiener(n = 1, pts = seq(0, 1, length = 50), sparsify = NULL, - K = 50) -} -\arguments{ -\item{n}{Sample size.} - -\item{pts}{A vector of points in [0, 1] specifying the support of the processes.} - -\item{sparsify}{A vector of integers. The number of observations per curve will be uniform distribution on sparsify.} - -\item{K}{The number of components.} -} -\value{ -If \code{sparsify} is not specified, a matrix with \code{n} rows corresponding to the samples are returned. Otherwise the sparsified sample is returned. -} -\description{ -Simulate \code{n} standard Wiener processes on [0, 1], possibly -sparsifying the results. -} -\details{ -The algorithm is based on Karhunen-Loeve expansion. -} -\seealso{ -Sparsify -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/cumtrapzRcpp.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/cumtrapzRcpp.Rd deleted file mode 100644 index c0cbef20..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/cumtrapzRcpp.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/RcppExports.R -\name{cumtrapzRcpp} -\alias{cumtrapzRcpp} -\title{Cumulative Trapezoid Rule Numerical Integration} -\usage{ -cumtrapzRcpp(X, Y) -} -\arguments{ -\item{X}{Sorted vector of X values} - -\item{Y}{Vector of Y values.} -} -\description{ -Cumulative Trapezoid Rule Numerical Integration using Rcpp -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/fdapace.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/fdapace.Rd deleted file mode 100644 index e8c2fe3b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/fdapace.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pkgname.R -\docType{package} -\name{fdapace} -\alias{fdapace} -\alias{fdapace-package} -\title{PACE: Principal Analysis by Conditional Expectation} -\description{ -PACE package for Functional Data Analysis and Empirical Dynamics. -} -\details{ -PACE is a versatile package that provides implementation of various methods -of Functional Data Analysis (FDA) and Empirical Dynamics. The core of this -package is Functional Principal Component Analysis (FPCA), a key technique -for functional data analysis, for sparsely or densely sampled random -trajectories and time courses, via the Principal Analysis by Conditional -Estimation (PACE) algorithm. PACE is useful for the analysis of data that -have been generated by a sample of underlying (but usually not fully -observed) random trajectories. It does not rely on pre-smoothing of -trajectories, which is problematic if functional data are sparsely sampled. -PACE provides options for functional regression and correlation, for -Longitudinal Data Analysis, the analysis of stochastic processes from -samples of realized trajectories, and for the analysis of underlying -dynamics. -} -\author{ -Xiongtao Dai \email{dai@ucdavis.edu}, -Pantelis Z. Hadjipantelis \email{pantelis@ucdavis.edu}, -Hao Ji \email{haoji@ucdavis.edu} -Hans-Georg Mueller \email{hgmueller@ucdavis.edu} -Jane-Ling Wang \email{janelwang@ucdavis.edu} - -Maintainer: Pantelis Z. Hadjipantelis \email{pantelis@ucdavis.edu} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCA.Rd deleted file mode 100644 index 194052ec..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCA.Rd +++ /dev/null @@ -1,76 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/fitted.FPCA.R -\name{fitted.FPCA} -\alias{fitted.FPCA} -\title{Fitted functional sample from FPCA object} -\usage{ -\method{fitted}{FPCA}(object, K = NULL, derOptns = list(p = 0), - ciOptns = list(alpha = NULL, cvgMethod = NULL), ...) -} -\arguments{ -\item{object}{A object of class FPCA returned by the function FPCA().} - -\item{K}{The integer number of the first K components used for the representation. (default: length(fpcaObj$lambda ))} - -\item{derOptns}{A list of options to control the derivation parameters specified by \code{list(name=value)}. See `Details'. (default = NULL)} - -\item{ciOptns}{A list of options to control the confidence interval/band specified by \code{list(name=value)}. See `Details'. (default = NULL)} - -\item{...}{Additional arguments} -} -\value{ -If \code{alpha} is \code{NULL}, \code{p>1} or functional observations are dense, an \code{n} by \code{length(workGrid)} matrix, each row of which contains a sample. Otherwise, it returns a list which consists of the following items: -\item{workGrid}{An evaluation grid for fitted values.} -\item{fitted}{An n by length(workGrid) matrix, each row of which contains a sample.} -\item{cvgUpper}{An n by length(workGrid) matrix, each row of which contains the upper \code{alpha}-coverage limit} -\item{cvgLower}{An n by length(workGrid) matrix, each row of which contains the lower \code{alpha}-coverage limit} -} -\description{ -Combine the zero-meaned fitted values and the interpolated mean to get the fitted values for the trajectories or the derivatives of these trajectories. -Estimates are given on the work-grid, not on the observation grid. Use ConvertSupport to map the estimates to your desired domain. \code{100*(1-alpha)}-percentage coverage intervals, or bands, for trajectory estimates (not derivatives) are provided. See details in example. -} -\details{ -Available derivation control options are -\describe{ -\item{p}{The order of the derivatives returned (default: 0, max: 2)} -\item{method}{The method used to produce the sample of derivatives ('FPC' (default) or 'QUO'). See Liu and Mueller (2009) for more details} -\item{bw}{Bandwidth for smoothing the derivatives (default: p * 0.10 * S)} -\item{kernelType}{Smoothing kernel choice; same available types are FPCA(). default('epan')} -} - -Available confidence interval/band control options are -\describe{ -\item{alpha}{Significant level for confidence interval/band for trajectory coverage. default=0.05 (currently only work when p=0)} -\item{cvgMethod}{Option for trajectory coverage method beween 'interval' and 'band'. default='band'} -} -} -\examples{ -set.seed(1) -n <- 100 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 5:10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -fittedY <- fitted(res, ciOptns = list(alpha=0.05)) - -workGrid <- res$workGrid -cvgUpper <- fittedY$cvgUpper -cvgLower <- fittedY$cvgLower - -par(mfrow=c(2,3)) -ind <- sample(1:n,6) -for (i in 1:6) { - j <- ind[i] - plot(workGrid,cvgUpper[j,],type='l',ylim=c(min(cvgLower[j,]),max(cvgUpper[j,])),col=4,lty=2, - xlab='t', ylab='X(t)', main=paste(j,'-th subject',sep='')) - points(workGrid,cvgLower[j,],type='l',col=4,lty=2) - points(res$inputData$Lt[[j]],res$inputData$Ly[[j]]) -} - -} -\references{ -\cite{Yao, F., Mueller, H.-G. and Wang, J.-L. "Functional data analysis for sparse longitudinal data", Journal of the American Statistical Association, vol.100, No. 470 (2005): 577-590.} - -\cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCAder.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCAder.Rd deleted file mode 100644 index 29e906da..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/fitted.FPCAder.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/fitted.FPCAder.R -\name{fitted.FPCAder} -\alias{fitted.FPCAder} -\title{Fitted functional sample from FPCAder object} -\usage{ -\method{fitted}{FPCAder}(object, K = NULL, ...) -} -\arguments{ -\item{object}{A object of class FPCA returned by the function FPCA().} - -\item{K}{The integer number of the first K components used for the representation. (default: length(derObj$lambda ))} - -\item{...}{Additional arguments} -} -\value{ -An \code{n} by \code{length(workGrid)} matrix, each row of which contains a sample. -} -\description{ -Combine the zero-meaned fitted values and the mean derivative to get the fitted values for the derivatives trajectories -Estimates are given on the work-grid, not on the observation grid. Use ConvertSupport to map the estimates to your desired domain. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -} -\references{ -\cite{Liu, Bitao, and Hans-Georg Mueller. "Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics." Journal of the American Statistical Association 104, no. 486 (2009): 704-717. (Sparse data FPCA)} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/kCFC.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/kCFC.Rd deleted file mode 100644 index 9896a039..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/kCFC.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/kCFC.R -\name{kCFC} -\alias{kCFC} -\title{Functional clustering and identifying substructures of longitudinal data using kCFC.} -\usage{ -kCFC(y, t, k = 3, kSeed = 123, maxIter = 125, - optnsSW = list(methodMuCovEst = "smooth", FVEthreshold = 0.9, - methodBwCov = "GCV", methodBwMu = "GCV"), optnsCS = list(methodMuCovEst - = "smooth", FVEthreshold = 0.7, methodBwCov = "GCV", methodBwMu = "GCV")) -} -\arguments{ -\item{y}{A list of \emph{n} vectors containing the observed values for each individual. Missing values specified by \code{NA}s are supported for dense case (\code{dataType='dense'}).} - -\item{t}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y.} - -\item{k}{A scalar defining the number of clusters to define; default 3. Values that define very small clusters (eg.cluster size <=3) will potentiall err.} - -\item{kSeed}{A scalar valid seed number to ensure replication; default: 123} - -\item{maxIter}{A scalar defining the maximum number of iterations allowed; default 20, common for both the simple kmeans initially and the subsequent k-centres} - -\item{optnsSW}{A list of options control parameters specified by \code{list(name=value)} to be used for sample-wide FPCA; by default: "list( methodMuCovEst ='smooth', FVEthreshold= 0.90, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'.} - -\item{optnsCS}{A list of options control parameters specified by \code{list(name=value)} to be used for cluster-specific FPCA; by default: "list( methodMuCovEst ='smooth', FVEthreshold= 0.70, methodBwCov = 'GCV', methodBwMu = 'GCV' )". See `Details in ?FPCA'.} -} -\value{ -A list containing the following fields: -\item{cluster}{A vector of levels 1:k, indicating the cluster to which each curve is allocated.} -\item{fpcaList}{A list with the fpcaObj for each separate cluster.} -\item{iterToConv}{A number indicating how many iterations where required until convergence.} -} -\description{ -Functional clustering and identifying substructures of longitudinal data using kCFC. -} -\examples{ -data(medfly25) -Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -kcfcObj <- kCFC(Flies$Ly[1:250], Flies$Lt[1:250], # using only 250 for speed consideration - optnsSW = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), - optnsCS = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.70)) -} -\references{ -\cite{Jeng-Min Chiou, Pai-Ling Li, "Functional clustering and identifying substructures of longitudinal data." Journal of the Royal Statistical Society 69 (2007): 679-699} -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/medfly25.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/medfly25.Rd deleted file mode 100644 index 4197802b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/medfly25.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/medfly25.R -\docType{data} -\name{medfly25} -\alias{medfly25} -\title{Number of eggs laid daily from medflies} -\format{A data frame with 19725 rows and 3 variables: -\describe{ -\item{ID}{: Medfly ID according to the orignal dataset} -\item{Days}{: Day of measurement} -\item{nEggs}{: Number of eggs laid at that particular day} -\item{nEggsRemain}{: Remaining total number of eggs laid} -}} -\source{ -\url{http://anson.ucdavis.edu/~mueller/data/medfly1000.html} -} -\description{ -A dataset containing the eggs laid from 789 medflies (Mediterranean fruit flies, - Ceratitis capitata) during the first 25 days of their lives. This is a subset of -the dataset used by Carey at al. (1998); only flies having lived at least 25 days -are shown. At the end of the recording period all flies were still alive. -} -\references{ -{Carey, J.R., Liedo, P., Mueller, H.G., Wang, J.L., Chiou, J.M. (1998). Relationship of age patterns of fecundity to mortality, longevity, and lifetime reproduction in a large cohort of Mediterranean fruit fly females. J. of Gerontology --Biological Sciences 53, 245-251. } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/plot.FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/plot.FPCA.Rd deleted file mode 100644 index 73b19faa..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/plot.FPCA.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CreateDiagnosticsPlot.R, R/plot.FPCA.R -\name{CreateDiagnosticsPlot} -\alias{CreateDiagnosticsPlot} -\alias{plot.FPCA} -\title{Functional Principal Component Analysis Diagnostics plot} -\usage{ -CreateDiagnosticsPlot(...) - -\method{plot}{FPCA}(x, openNewDev = FALSE, addLegend = TRUE, ...) -} -\arguments{ -\item{...}{passed into \code{plot.FPCA}.} - -\item{x}{An FPCA class object returned by FPCA().} - -\item{openNewDev}{A logical specifying if a new device should be opened - default: FALSE} - -\item{addLegend}{A logical specifying whether to add legend.} -} -\description{ -Deprecated. Use \code{plot.FPCA} instead. - -This function plot the results for an FPCA. It prints the design plot, mean function, scree-plot -and the first three eigenfunctions of a sample. If provided with a derivative options object (?FPCAder) it will return the -differentiated mean and first two principal modes of variations for 50\%, 75\%, 100\%, 125\% and 150\% of the defined bandwidth choice. -} -\details{ -The black, red, and green curves stand for the first, second, and third eigenfunctions, respectively. -\code{plot.FPCA} is currently implemented only for the original function, but not a derivative FPCA object. -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -plot(res1) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/predict.FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/predict.FPCA.Rd deleted file mode 100644 index cd432d0b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/predict.FPCA.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/predict.FPCA.R -\name{predict.FPCA} -\alias{predict.FPCA} -\title{Predict FPC scores for a new sample given an FPCA object} -\usage{ -\method{predict}{FPCA}(object, newLy, newLt, sigma2 = NULL, K = 1, - xiMethod = "CE", ...) -} -\arguments{ -\item{object}{An FPCA object.} - -\item{newLy}{A list of \emph{n} vectors containing the observed values for each individual.} - -\item{newLt}{A list of \emph{n} vectors containing the observation time points for each individual corresponding to y.} - -\item{sigma2}{The user-defined measurement error variance. A positive scalar. (default: rho if applicable, otherwise sigma2 if applicable, otherwise 0 if no error. )} - -\item{K}{The scalar defining the number of clusters to define; (default: 1).} - -\item{xiMethod}{The integration method used to calculate the functional principal component scores ( standard numerical integration 'IN' or conditional expectation 'CE'); default: 'CE'.} - -\item{...}{Not used.} -} -\value{ -A matrix of size n-by-K -} -\description{ -Return a matrix with the first K FPC scores according to conditional expectation or numerical integration. -} -\examples{ -set.seed(1) -n <- 50 -pts <- seq(0, 1, by=0.05) -# The first n samples are for training and the rest testing -sampWiener <- Wiener(2 * n, pts) -sparsity <- 2:5 -train <- Sparsify(sampWiener[seq_len(n), , drop=FALSE], pts, sparsity) -test <- Sparsify(sampWiener[seq(n + 1, 2 * n), , drop=FALSE], pts, sparsity) -res <- FPCA(train$Ly, train$Lt) -pred <- predict(res, test$Ly, test$Lt, K=5) -plot(pred[, 1], pred[, 2]) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FPCA.Rd deleted file mode 100644 index 971aaba4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FPCA.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/print.FPCA.R -\name{print.FPCA} -\alias{print.FPCA} -\title{Print an FPCA object} -\usage{ -\method{print}{FPCA}(x, ...) -} -\arguments{ -\item{x}{An FPCA object.} - -\item{...}{Not used.} -} -\description{ -Print a simple description of an FPCA object -} -\examples{ -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt) -res - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FSVD.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FSVD.Rd deleted file mode 100644 index 93a7411c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.FSVD.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/print.FSVD.R -\name{print.FSVD} -\alias{print.FSVD} -\title{Print an FSVD object} -\usage{ -\method{print}{FSVD}(x, ...) -} -\arguments{ -\item{x}{An FSVD object.} - -\item{...}{Not used.} -} -\description{ -Print a simple description of an FSVD object -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.WFDA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/print.WFDA.Rd deleted file mode 100644 index 145b9f34..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/print.WFDA.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/print.WFDA.R -\name{print.WFDA} -\alias{print.WFDA} -\title{Print a WFDA object} -\usage{ -\method{print}{WFDA}(x, ...) -} -\arguments{ -\item{x}{A WFDA object.} - -\item{...}{Not used.} -} -\description{ -Print a simple description of a WFDA object -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/str.FPCA.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/str.FPCA.Rd deleted file mode 100644 index 29803efe..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/str.FPCA.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/str.FPCA.R -\name{str.FPCA} -\alias{str.FPCA} -\title{Compactly display the structure of an FPCA object} -\usage{ -\method{str}{FPCA}(object, ...) -} -\arguments{ -\item{object}{An FPCA object} - -\item{...}{Not used} -} -\description{ -Compactly display the structure of an FPCA object -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/man/trapzRcpp.Rd b/fdapace.Rcheck/00_pkg_src/fdapace/man/trapzRcpp.Rd deleted file mode 100644 index 59be0a9e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/man/trapzRcpp.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/RcppExports.R -\name{trapzRcpp} -\alias{trapzRcpp} -\title{Trapezoid Rule Numerical Integration} -\usage{ -trapzRcpp(X, Y) -} -\arguments{ -\item{X}{Sorted vector of X values} - -\item{Y}{Vector of Y values.} -} -\description{ -Trapezoid Rule Numerical Integration using Rcpp -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/CPPlwls1d.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/CPPlwls1d.cpp deleted file mode 100644 index d2ab975a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/CPPlwls1d.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect and sort - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::VectorXd CPPlwls1d( const double & bw, const std::string kernel_type, const Eigen::Map & win, const Eigen::Map & xin, const Eigen::Map & yin, const Eigen::Map & xout, const unsigned int & npoly = 1, const unsigned int & nder = 0){ - - - // Convenient constants - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - const double factorials[] = {1,1,2,6,24,120,720,5040,40320,362880,3628800}; - - const unsigned int nXGrid = xin.size(); - const unsigned int nUnknownPoints = xout.size(); - Eigen::VectorXd result(nUnknownPoints); - - // ======================== - // The checks start here: - - if(nXGrid == 0) { - Rcpp::stop("The input X-grid has length zero."); - } - - // Check that we have equal number of readings - if( nXGrid != yin.size()){ - Rcpp::stop("The input Y-grid does not have the same number of points as input X-grid."); - } - - if( nXGrid != win.size()){ - Rcpp::stop("The input weight vector does not have the same number of points as input X-grid."); - } - - // Check that bandwidth is greater than zero - if( bw <= 0.){ - Rcpp::stop("The bandwidth supplied for 1-D smoothing is not positive."); - } - - // Check that the degreee of polynomial used and the order of the derivative are reasonable - if (npoly < nder){ - Rcpp::stop("The degree of polynomial supplied for 1-D smoothing is less than the order of derivative"); - } - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - if ( !(win.all()) ){ // - Rcpp::warning("Cases with zero-valued windows maybe not be too safe."); - } - // Check if the first 5 elements are sorted // Very rough check // Will use issorted in the future - if ( (xin[0]> xin[1]) || (xin[1]> xin[2]) || (xin[2]> xin[3]) || (xin[3]> xin[4]) || (xin[4]> xin[5]) ){ - Rcpp::stop("The X-grid used is not sorted. (or you have less than 6 points)"); - } - - // The checks end here. - // =================== - - for (unsigned int i = 0; i != nUnknownPoints; ++i){ - //locating local window (LOL) (bad joke) - std::vector indx; - const double* lower ; - const double* upper ; - - //if the kernel is not Gaussian - if ( KernelName != 3 && KernelName != 4) { - //construct listX as vectors / size is unknown originally - // for (unsigned int y = 0; y != nXGrid; ++y){ if ( std::fabs( xout(i) - xin(y) ) <= bw ) { indx.push_back(y); } } - // Get iterator pointing to the first element which is not less than xou(u) - lower = std::lower_bound(xin.data(), xin.data() + nXGrid, xout(i) - bw); - upper = std::lower_bound(xin.data(), xin.data() + nXGrid, xout(i) + bw); - // const unsigned int firstElement = lower - &xin[0]; - // for (unsigned int xx1 =0; xx1 != upper-lower; ++xx1){ - // indx.push_back( firstElement+ xx1 ); - // } - } else { - lower = xin.data(); - upper = xin.data() + nXGrid; - } - - const unsigned int firstElement = lower - &xin[0]; - for (unsigned int xx1 =0; xx1 != upper-lower; ++xx1){ - indx.push_back( firstElement+ xx1 ); - } - - // for(unsigned int r4=0; r4 != indx.size(); r4++){ Rcpp::Rcout << indx.at(r4) << ", "; } Rcpp::Rcout << "\n"; - - unsigned int indxSize = indx.size(); - Eigen::VectorXd temp(indxSize); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::VectorXd lx(indxSize); - - for (unsigned int y = 0; y != indxSize; ++y){ - lx(y) = xin(indx[y]); - lw(y) = win(indx[y]); - ly(y) = yin(indx[y]); - } - - - Eigen::VectorXd llx = (lx.array() -xout(i)) * (1./bw) ; - - //define the kernel used - switch (KernelName){ - case 1: // Epan - temp = (1-llx.array().pow(2))*0.75*(lw.array()); - break; - case 2 : // Rect - temp = lw ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.array().pow(2))).exp()) * invSqrt2pi * (lw.array()); - break; - case 4 : // GausVar - temp = (lw.array()) * - ((-0.5 * llx.array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.array()) * - ((1.-llx.array().pow(2)).array().pow(2)).array() * (15./16.); - break; - } - - if(nder >= indxSize){ - Rcpp::warning("Cannot estimate derivatives of order p with less than p+1 points."); - result(i) = std::numeric_limits::quiet_NaN(); - } else { - // make the design matrix - Eigen::MatrixXd X(indxSize, npoly+1); - X.setOnes(); - for (unsigned int y = 1; y <= npoly; ++y){ - X.col(y) = (xout(i) - lx.array()).array().pow(y); - } - - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - // The solver should stop if the value is NaN. See the HOLE example in gcvlwls2dV2. - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - - // Rcpp::Rcout << "lx: " << lx.transpose() << std::endl; - // Rcpp::Rcout << "ly: " << ly.transpose() << std::endl; - // Rcpp::Rcout << "temp: " << temp.transpose() << std::endl; - // Rcpp::Rcout << "llx: " << llx.transpose() << std::endl; - // Rcpp::Rcout << "xin: " << xin.transpose() << std::endl; - // Rcpp::Rcout << "yin: " << yin.transpose() << std::endl; - // Rcpp::Rcout << "xout: " << xout.transpose() << std::endl; - // Rcpp::Rcout << "X: " << X.transpose() << std::endl; - // Rcpp::Rcout << "beta: " << beta.transpose() << std::endl; - // Rcpp::Rcout << "factorials[nder]: " << factorials[nder] << std::endl; - // Rcpp::Rcout << "pow (-1.0, nder): " << pow (-1.0, nder) << std::endl; - - result(i) = beta(nder+0) * factorials[nder] * std::pow(-1.0, int(nder)); - } - } - return result; -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPP.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPP.cpp deleted file mode 100644 index 96a7df55..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPP.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include // to get std::lower_bound -#include // to get std::iterator -#include // to get NaN - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - - -Rcpp::List GetIndCEScoresCPP( const Eigen::Map & yVec, const Eigen::Map & muVec, const Eigen::Map & lamVec, const Eigen::Map & phiMat, const Eigen::Map & SigmaYi){ - - // Setting up initial values - - const unsigned int lenlamVec = lamVec.size(); - - Eigen::MatrixXd xiVar = Eigen::MatrixXd::Constant(lenlamVec,lenlamVec,std::numeric_limits::quiet_NaN()); - Eigen::MatrixXd xiEst = Eigen::MatrixXd::Constant(lenlamVec,1,std::numeric_limits::quiet_NaN()); - Eigen::MatrixXd fittedY = Eigen::MatrixXd::Constant(lenlamVec,1,std::numeric_limits::quiet_NaN()); - - Eigen::MatrixXd LamPhi = lamVec.asDiagonal() * phiMat.transpose(); - Eigen::LDLT ldlt_SigmaYi(SigmaYi); - xiEst = LamPhi * ldlt_SigmaYi.solve(yVec - muVec) ; // LamPhiSig * (yVec - muVec); - xiVar = -LamPhi * ldlt_SigmaYi.solve(LamPhi.transpose()); // LamPhiSig.transpose(); - - xiVar.diagonal() += lamVec; - fittedY = muVec + phiMat * xiEst; - - return Rcpp::List::create(Rcpp::Named("xiEst") = xiEst, - Rcpp::Named("xiVar") = xiVar, - Rcpp::Named("fittedY") = fittedY); -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPPnewInd.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPPnewInd.cpp deleted file mode 100644 index 76dd3132..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/GetIndCEScoresCPPnewInd.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include // to get std::lower_bound -#include // to get std::iterator -#include // to get NaN - -// [[Rcpp::depends(RcppEigen)]] -// Be carefu; not to export this guy!! -Eigen::MatrixXd pinv( const Eigen::MatrixXd& Mat){ - // This is a slow puppy - const double pinvtol = 1.e-9; // Tolerance! - Eigen::JacobiSVD svdMat(Mat, Eigen::ComputeThinU | Eigen::ComputeThinV); - Eigen::VectorXd S = svdMat.singularValues(); - Eigen::VectorXd Sinv = S; - - for ( int i=0; i pinvtol ){ - Sinv(i)=1.0/S(i); - } else { - Sinv(i)=0; - } - } - return(svdMat.matrixV()*Sinv.asDiagonal()*svdMat.matrixU().transpose()); -} - -// [[Rcpp::export]] -Rcpp::List GetIndCEScoresCPPnewInd( const Eigen::Map & yVec, const Eigen::Map & muVec, const Eigen::Map & lamVec, const Eigen::Map & phiMat, const Eigen::Map & SigmaYi, const Eigen::Map & newPhi, const Eigen::Map & newMu ){ - - // Setting up initial values - // const unsigned int lenyVec = yVec.size(); - const unsigned int lenlamVec = lamVec.size(); - - Eigen::MatrixXd xiVar = Eigen::MatrixXd::Constant(lenlamVec,lenlamVec,std::numeric_limits::quiet_NaN()); - Eigen::MatrixXd xiEst = Eigen::MatrixXd::Constant(lenlamVec,1,std::numeric_limits::quiet_NaN()); - Eigen::MatrixXd fittedY = Eigen::MatrixXd::Constant(lenlamVec,1,std::numeric_limits::quiet_NaN()); - - Eigen::MatrixXd LamPhi = lamVec.asDiagonal() * phiMat.transpose(); - // Eigen::MatrixXd LamPhiSig = LamPhi * SigmaYi.inverse(); // LamPhi * pinv(SigmaYi); // // Original code. - Eigen::LDLT ldlt_SigmaYi(SigmaYi); - - xiEst = LamPhi * ldlt_SigmaYi.solve(yVec - muVec) ;// LamPhiSig * (yVec - muVec); - xiVar = -LamPhi * ldlt_SigmaYi.solve(LamPhi.transpose()); // LamPhiSig.transpose(); - xiVar.diagonal() += lamVec; - fittedY = newMu + newPhi * xiEst; - - return Rcpp::List::create(Rcpp::Named("xiEst") = xiEst, - Rcpp::Named("xiVar") = xiVar, - Rcpp::Named("fittedY") = fittedY); -} - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPmean.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPmean.cpp deleted file mode 100644 index 9f9dba8c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPmean.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include -using namespace Rcpp; - -// [[Rcpp::export]] -double RCPPmean(const Rcpp::NumericVector X){ - return ( mean(X) ) ; -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPvar.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPvar.cpp deleted file mode 100644 index 48574ede..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RCPPvar.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include -using namespace Rcpp; - -// [[Rcpp::export]] -double RCPPvar(const Rcpp::NumericVector X){ - return ( var(X) ) ; -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppExports.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppExports.cpp deleted file mode 100644 index 047fcc60..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppExports.cpp +++ /dev/null @@ -1,296 +0,0 @@ -// Generated by using Rcpp::compileAttributes() -> do not edit by hand -// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 - -#include -#include - -using namespace Rcpp; - -// CPPlwls1d -Eigen::VectorXd CPPlwls1d(const double& bw, const std::string kernel_type, const Eigen::Map& win, const Eigen::Map& xin, const Eigen::Map& yin, const Eigen::Map& xout, const unsigned int& npoly, const unsigned int& nder); -RcppExport SEXP _fdapace_CPPlwls1d(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP winSEXP, SEXP xinSEXP, SEXP yinSEXP, SEXP xoutSEXP, SEXP npolySEXP, SEXP nderSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const double& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xin(xinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type yin(yinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xout(xoutSEXP); - Rcpp::traits::input_parameter< const unsigned int& >::type npoly(npolySEXP); - Rcpp::traits::input_parameter< const unsigned int& >::type nder(nderSEXP); - rcpp_result_gen = Rcpp::wrap(CPPlwls1d(bw, kernel_type, win, xin, yin, xout, npoly, nder)); - return rcpp_result_gen; -END_RCPP -} -// GetIndCEScoresCPP -Rcpp::List GetIndCEScoresCPP(const Eigen::Map& yVec, const Eigen::Map& muVec, const Eigen::Map& lamVec, const Eigen::Map& phiMat, const Eigen::Map& SigmaYi); -RcppExport SEXP _fdapace_GetIndCEScoresCPP(SEXP yVecSEXP, SEXP muVecSEXP, SEXP lamVecSEXP, SEXP phiMatSEXP, SEXP SigmaYiSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type yVec(yVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type muVec(muVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type lamVec(lamVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type phiMat(phiMatSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type SigmaYi(SigmaYiSEXP); - rcpp_result_gen = Rcpp::wrap(GetIndCEScoresCPP(yVec, muVec, lamVec, phiMat, SigmaYi)); - return rcpp_result_gen; -END_RCPP -} -// GetIndCEScoresCPPnewInd -Rcpp::List GetIndCEScoresCPPnewInd(const Eigen::Map& yVec, const Eigen::Map& muVec, const Eigen::Map& lamVec, const Eigen::Map& phiMat, const Eigen::Map& SigmaYi, const Eigen::Map& newPhi, const Eigen::Map& newMu); -RcppExport SEXP _fdapace_GetIndCEScoresCPPnewInd(SEXP yVecSEXP, SEXP muVecSEXP, SEXP lamVecSEXP, SEXP phiMatSEXP, SEXP SigmaYiSEXP, SEXP newPhiSEXP, SEXP newMuSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type yVec(yVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type muVec(muVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type lamVec(lamVecSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type phiMat(phiMatSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type SigmaYi(SigmaYiSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type newPhi(newPhiSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type newMu(newMuSEXP); - rcpp_result_gen = Rcpp::wrap(GetIndCEScoresCPPnewInd(yVec, muVec, lamVec, phiMat, SigmaYi, newPhi, newMu)); - return rcpp_result_gen; -END_RCPP -} -// RCPPmean -double RCPPmean(const Rcpp::NumericVector X); -RcppExport SEXP _fdapace_RCPPmean(SEXP XSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type X(XSEXP); - rcpp_result_gen = Rcpp::wrap(RCPPmean(X)); - return rcpp_result_gen; -END_RCPP -} -// RCPPvar -double RCPPvar(const Rcpp::NumericVector X); -RcppExport SEXP _fdapace_RCPPvar(SEXP XSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type X(XSEXP); - rcpp_result_gen = Rcpp::wrap(RCPPvar(X)); - return rcpp_result_gen; -END_RCPP -} -// RcppPseudoApprox -Eigen::VectorXd RcppPseudoApprox(const Eigen::Map& X, const Eigen::Map& Y, const Eigen::Map& X_target); -RcppExport SEXP _fdapace_RcppPseudoApprox(SEXP XSEXP, SEXP YSEXP, SEXP X_targetSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type X(XSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type Y(YSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type X_target(X_targetSEXP); - rcpp_result_gen = Rcpp::wrap(RcppPseudoApprox(X, Y, X_target)); - return rcpp_result_gen; -END_RCPP -} -// Rcppsort -NumericVector Rcppsort(NumericVector v); -RcppExport SEXP _fdapace_Rcppsort(SEXP vSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< NumericVector >::type v(vSEXP); - rcpp_result_gen = Rcpp::wrap(Rcppsort(v)); - return rcpp_result_gen; -END_RCPP -} -// Rmullwlsk -Eigen::MatrixXd Rmullwlsk(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xgrid, const Eigen::Map& ygrid, const bool& bwCheck, const bool& transp); -RcppExport SEXP _fdapace_Rmullwlsk(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xgridSEXP, SEXP ygridSEXP, SEXP bwCheckSEXP, SEXP transpSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xgrid(xgridSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type ygrid(ygridSEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - Rcpp::traits::input_parameter< const bool& >::type transp(transpSEXP); - rcpp_result_gen = Rcpp::wrap(Rmullwlsk(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, transp)); - return rcpp_result_gen; -END_RCPP -} -// RmullwlskCC -Eigen::MatrixXd RmullwlskCC(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xgrid, const Eigen::Map& ygrid, const bool& bwCheck); -RcppExport SEXP _fdapace_RmullwlskCC(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xgridSEXP, SEXP ygridSEXP, SEXP bwCheckSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xgrid(xgridSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type ygrid(ygridSEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - rcpp_result_gen = Rcpp::wrap(RmullwlskCC(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck)); - return rcpp_result_gen; -END_RCPP -} -// RmullwlskCCsort2 -Eigen::MatrixXd RmullwlskCCsort2(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xgrid, const Eigen::Map& ygrid, const bool& bwCheck); -RcppExport SEXP _fdapace_RmullwlskCCsort2(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xgridSEXP, SEXP ygridSEXP, SEXP bwCheckSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xgrid(xgridSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type ygrid(ygridSEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - rcpp_result_gen = Rcpp::wrap(RmullwlskCCsort2(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck)); - return rcpp_result_gen; -END_RCPP -} -// RmullwlskUniversal -Eigen::MatrixXd RmullwlskUniversal(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xgrid, const Eigen::Map& ygrid, const bool& bwCheck, const bool& autoCov); -RcppExport SEXP _fdapace_RmullwlskUniversal(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xgridSEXP, SEXP ygridSEXP, SEXP bwCheckSEXP, SEXP autoCovSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xgrid(xgridSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type ygrid(ygridSEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - Rcpp::traits::input_parameter< const bool& >::type autoCov(autoCovSEXP); - rcpp_result_gen = Rcpp::wrap(RmullwlskUniversal(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, bwCheck, autoCov)); - return rcpp_result_gen; -END_RCPP -} -// RmullwlskUniversalDeriv -Eigen::MatrixXd RmullwlskUniversalDeriv(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xgrid, const Eigen::Map& ygrid, const int& npoly, const int& nder1, const int& nder2, const bool& bwCheck, const bool& autoCov); -RcppExport SEXP _fdapace_RmullwlskUniversalDeriv(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xgridSEXP, SEXP ygridSEXP, SEXP npolySEXP, SEXP nder1SEXP, SEXP nder2SEXP, SEXP bwCheckSEXP, SEXP autoCovSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xgrid(xgridSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type ygrid(ygridSEXP); - Rcpp::traits::input_parameter< const int& >::type npoly(npolySEXP); - Rcpp::traits::input_parameter< const int& >::type nder1(nder1SEXP); - Rcpp::traits::input_parameter< const int& >::type nder2(nder2SEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - Rcpp::traits::input_parameter< const bool& >::type autoCov(autoCovSEXP); - rcpp_result_gen = Rcpp::wrap(RmullwlskUniversalDeriv(bw, kernel_type, tPairs, cxxn, win, xgrid, ygrid, npoly, nder1, nder2, bwCheck, autoCov)); - return rcpp_result_gen; -END_RCPP -} -// Rrotatedmullwlsk -Eigen::VectorXd Rrotatedmullwlsk(const Eigen::Map& bw, const std::string kernel_type, const Eigen::Map& tPairs, const Eigen::Map& cxxn, const Eigen::Map& win, const Eigen::Map& xygrid, const unsigned int npoly, const bool& bwCheck); -RcppExport SEXP _fdapace_Rrotatedmullwlsk(SEXP bwSEXP, SEXP kernel_typeSEXP, SEXP tPairsSEXP, SEXP cxxnSEXP, SEXP winSEXP, SEXP xygridSEXP, SEXP npolySEXP, SEXP bwCheckSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type bw(bwSEXP); - Rcpp::traits::input_parameter< const std::string >::type kernel_type(kernel_typeSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type tPairs(tPairsSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type cxxn(cxxnSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xygrid(xygridSEXP); - Rcpp::traits::input_parameter< const unsigned int >::type npoly(npolySEXP); - Rcpp::traits::input_parameter< const bool& >::type bwCheck(bwCheckSEXP); - rcpp_result_gen = Rcpp::wrap(Rrotatedmullwlsk(bw, kernel_type, tPairs, cxxn, win, xygrid, npoly, bwCheck)); - return rcpp_result_gen; -END_RCPP -} -// cumtrapzRcpp -Rcpp::NumericVector cumtrapzRcpp(const Rcpp::NumericVector X, const Rcpp::NumericVector Y); -RcppExport SEXP _fdapace_cumtrapzRcpp(SEXP XSEXP, SEXP YSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type X(XSEXP); - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type Y(YSEXP); - rcpp_result_gen = Rcpp::wrap(cumtrapzRcpp(X, Y)); - return rcpp_result_gen; -END_RCPP -} -// dropZeroElementsXYWin -Eigen::MatrixXd dropZeroElementsXYWin(const Eigen::Map& win, const Eigen::Map& xin, const Eigen::Map& yin); -RcppExport SEXP _fdapace_dropZeroElementsXYWin(SEXP winSEXP, SEXP xinSEXP, SEXP yinSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type win(winSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xin(xinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type yin(yinSEXP); - rcpp_result_gen = Rcpp::wrap(dropZeroElementsXYWin(win, xin, yin)); - return rcpp_result_gen; -END_RCPP -} -// interp2lin -Eigen::VectorXd interp2lin(const Eigen::Map& xin, const Eigen::Map& yin, const Eigen::Map& zin, const Eigen::Map& xou, const Eigen::Map& you); -RcppExport SEXP _fdapace_interp2lin(SEXP xinSEXP, SEXP yinSEXP, SEXP zinSEXP, SEXP xouSEXP, SEXP youSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Eigen::Map& >::type xin(xinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type yin(yinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type zin(zinSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type xou(xouSEXP); - Rcpp::traits::input_parameter< const Eigen::Map& >::type you(youSEXP); - rcpp_result_gen = Rcpp::wrap(interp2lin(xin, yin, zin, xou, you)); - return rcpp_result_gen; -END_RCPP -} -// trapzRcpp -double trapzRcpp(const Rcpp::NumericVector X, const Rcpp::NumericVector Y); -RcppExport SEXP _fdapace_trapzRcpp(SEXP XSEXP, SEXP YSEXP) { -BEGIN_RCPP - Rcpp::RObject rcpp_result_gen; - Rcpp::RNGScope rcpp_rngScope_gen; - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type X(XSEXP); - Rcpp::traits::input_parameter< const Rcpp::NumericVector >::type Y(YSEXP); - rcpp_result_gen = Rcpp::wrap(trapzRcpp(X, Y)); - return rcpp_result_gen; -END_RCPP -} - -static const R_CallMethodDef CallEntries[] = { - {"_fdapace_CPPlwls1d", (DL_FUNC) &_fdapace_CPPlwls1d, 8}, - {"_fdapace_GetIndCEScoresCPP", (DL_FUNC) &_fdapace_GetIndCEScoresCPP, 5}, - {"_fdapace_GetIndCEScoresCPPnewInd", (DL_FUNC) &_fdapace_GetIndCEScoresCPPnewInd, 7}, - {"_fdapace_RCPPmean", (DL_FUNC) &_fdapace_RCPPmean, 1}, - {"_fdapace_RCPPvar", (DL_FUNC) &_fdapace_RCPPvar, 1}, - {"_fdapace_RcppPseudoApprox", (DL_FUNC) &_fdapace_RcppPseudoApprox, 3}, - {"_fdapace_Rcppsort", (DL_FUNC) &_fdapace_Rcppsort, 1}, - {"_fdapace_Rmullwlsk", (DL_FUNC) &_fdapace_Rmullwlsk, 9}, - {"_fdapace_RmullwlskCC", (DL_FUNC) &_fdapace_RmullwlskCC, 8}, - {"_fdapace_RmullwlskCCsort2", (DL_FUNC) &_fdapace_RmullwlskCCsort2, 8}, - {"_fdapace_RmullwlskUniversal", (DL_FUNC) &_fdapace_RmullwlskUniversal, 9}, - {"_fdapace_RmullwlskUniversalDeriv", (DL_FUNC) &_fdapace_RmullwlskUniversalDeriv, 12}, - {"_fdapace_Rrotatedmullwlsk", (DL_FUNC) &_fdapace_Rrotatedmullwlsk, 8}, - {"_fdapace_cumtrapzRcpp", (DL_FUNC) &_fdapace_cumtrapzRcpp, 2}, - {"_fdapace_dropZeroElementsXYWin", (DL_FUNC) &_fdapace_dropZeroElementsXYWin, 3}, - {"_fdapace_interp2lin", (DL_FUNC) &_fdapace_interp2lin, 5}, - {"_fdapace_trapzRcpp", (DL_FUNC) &_fdapace_trapzRcpp, 2}, - {NULL, NULL, 0} -}; - -RcppExport void R_init_fdapace(DllInfo *dll) { - R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); - R_useDynamicSymbols(dll, FALSE); -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppPseudoApprox.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppPseudoApprox.cpp deleted file mode 100644 index fd877bc4..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RcppPseudoApprox.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include - -// [[Rcpp::depends(RcppEigen)]] - -float LinearInterpolation ( const Eigen::Map & X , const Eigen::Map & Y, float X_PointOfInterest){ - //Produce Y_point_of_interest given X,Y and target X_point_of_interest - //X : vector containing the X variables of the interpolant - //Y : vector containing the Y variables of the interpolant - //PointOfInterest : Point of X to estimate the new point of Y - - float xk, xkp1, yk, ykp1 = 0; //Points adjecent to the point of interpolation - if ( X.size() != Y.size() ){ - Rcpp::stop("Problem with unequal vector sizes when doing linear interpolation.");} - //cout << " X(0): " << X(0) <<" X(Y.size()-1): " < X(Y.size()-1) ){Rcpp::warning("You interpolate out of the curve boundaries"); return(-1);} - //Find the points right before and right after the point of interest - for (int i=1; i= X_PointOfInterest){ - xkp1 = X(i); - xk = X(i-1); - ykp1 = Y(i); - yk = Y(i-1); - break;} - } - //point-slope form for a line formula - float t = (X_PointOfInterest -xk)/(xkp1 -xk); - float yPOI = (1-t) * yk + t * ykp1; // estimate point of interest - // cout << "(" << xk << ", " << X_PointOfInterest << " , " << xkp1 << ") & (" << yk << ", " << yPOI << ", " << ykp1 << ")"<< endl; - return (yPOI); -} - -// [[Rcpp::export]] -Eigen::VectorXd RcppPseudoApprox( const Eigen::Map & X, const Eigen::Map & Y, const Eigen::Map & X_target){ - //evaluate Y_target for X_target given X and Y - - int N = X_target.size(); - Eigen::VectorXd rr(N); - for (int i=0; i -using namespace Rcpp; -// [[Rcpp::export]] -NumericVector Rcppsort(NumericVector v) { - NumericVector sv(clone(v)); - std::sort(sv.begin(), sv.end()); - return sv; -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/Rmullwlsk.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/Rmullwlsk.cpp deleted file mode 100644 index bb4c5f56..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/Rmullwlsk.cpp +++ /dev/null @@ -1,176 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect and sort - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - - -Eigen::MatrixXd Rmullwlsk( const Eigen::Map & bw, const std::string kernel_type, const Eigen::Map & tPairs, const Eigen::Map & cxxn, const Eigen::Map & win, const Eigen::Map & xgrid, const Eigen::Map & ygrid, const bool & bwCheck, const bool & transp = true){ - - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xgrid: out1 (in MATLAB code) - // ygrid: out2 (in MATLAB code) - // bwCheck : boolean/ cause the function to simply run the bandwidth check. - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - //Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - // Start the actual smoother here - unsigned int xgridN = xgrid.size(); - unsigned int ygridN = ygrid.size(); - - Eigen::MatrixXd mu(ygrid.size(),xgrid.size()); - mu.setZero(); - const double bufSmall = 1.0e-6; // pow(double(10),-6); - - for (unsigned int i = 0; i != ygridN; ++i){ - for (unsigned int j = i; j < xgridN ; ++j){ - - //locating local window (LOL) (bad joke) - std::vector indx; - //if the kernel is not Gaussian - if ( KernelName != 3) { - //construct listX as vectors / size is unknown originally - for (unsigned int y = 0; y != tPairs.cols(); y++){ - if ( std::abs( tPairs(0,y) - xgrid(j) ) <= (bw(0)+ bufSmall) && std::abs( tPairs(1,y) - ygrid(i) ) <= (bw(1)+ bufSmall) ) { - // legacy MATLAB equivalent form : - // if ( (tPairs(0,y) >= (xgrid(j) -(bw(0)+ pow(double(10),-6)))) & (tPairs(0,y) <= (xgrid(j) + (bw(0)+ pow(double(10),-6))))) { - indx.push_back(y); - } - } - } else{ // just get the whole deal - for (unsigned int y = 0; y != tPairs.cols(); ++y){ - indx.push_back(y); - } - } - - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = tPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - // check enough points are in the local window - unsigned int meter=1; - for (unsigned int u =0; u< indxSize; ++u) { - for (unsigned int t = u + 1; t < indxSize; ++t) { - if ( (lx(0,u) != lx(0,t) ) || (lx(1,u) != lx(1,t) ) ) { - meter++; - } - } - if (meter >= 3) { - break; - } - } - - //computing weight matrix - if (meter >= 3 && !bwCheck) { - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - xgrid(j))/bw(0); - llx.row(1) = (lx.row(1).array() - ygrid(i))/bw(1); - - //define the kernel used - - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize ,3); - X.setOnes(); - X.col(1) = lx.row(0).array() - xgrid(j); - X.col(2) = lx.row(1).array() - ygrid(i); - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - // The solver should stop if the value is NaN. See the HOLE example in gcvlwls2dV2. - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - mu(i,j)=beta(0); - } else if(meter < 3){ - // Rcpp::Rcout <<"The meter value is:" << meter << std::endl; - if (bwCheck) { - Eigen::MatrixXd checker(1,1); - checker(0,0) = 0.; - return(checker); - } else { - Rcpp::stop("No enough points in local window, please increase bandwidth."); - } - } - } - } - - if (bwCheck){ - Eigen::MatrixXd checker(1,1); - checker(0,0) = 1.; - return(checker); - } - - if (transp) { - // Eigen::MatrixXd result(ygrid.size(),xgrid.size()); - // result = mu + mu.transpose(); - // result.diagonal() = 0.5 * result.diagonal(); - // return ( result ); - return ( Eigen::MatrixXd(mu.triangularView().transpose()) + Eigen::MatrixXd(mu.triangularView())); - } else { - return( mu ); - } -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCC.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCC.cpp deleted file mode 100644 index 4e11e251..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCC.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect and sort - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - - -Eigen::MatrixXd RmullwlskCC( const Eigen::Map & bw, const std::string kernel_type, const Eigen::Map & tPairs, const Eigen::Map & cxxn, const Eigen::Map & win, const Eigen::Map & xgrid, const Eigen::Map & ygrid, const bool & bwCheck){ - - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xgrid: out1 (in MATLAB code) - // ygrid: out2 (in MATLAB code) - // bwCheck : boolean/ cause the function to simply run the bandwidth check. - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - //Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - // Start the actual smoother here - unsigned int xgridN = xgrid.size(); - unsigned int ygridN = ygrid.size(); - - Eigen::MatrixXd mu(xgrid.size(), ygrid.size()); - mu.setZero(); - const double bufSmall = 1e-6; // pow(double(10),-6); - - for (unsigned int j = 0; j != ygridN; ++j) { - for (unsigned int i = 0; i != xgridN; ++i) { - - //locating local window (LOL) (bad joke) - std::vector indx; - //if the kernel is not Gaussian - if ( KernelName != 3) { - //construct listX as vectors / size is unknown originally - for (unsigned int y = 0; y != tPairs.cols(); y++){ - if ( (std::abs( tPairs(0,y) - xgrid(i) ) <= (bw(0)+ bufSmall ) && std::abs( tPairs(1,y) - ygrid(j) ) <= (bw(1)+ bufSmall)) ) { - indx.push_back(y); - } - } - - } else{ // just get the whole deal - for (unsigned int y = 0; y != tPairs.cols(); ++y){ - indx.push_back(y); - } - } - - // for (unsigned int y = 0; y != indx.size(); ++y){ - // Rcpp::Rcout << "indx.at(y): " << indx.at(y)<< ", "; - // } - - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = tPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - // check enough points are in the local window - unsigned int meter=1; - for (unsigned int u =0; u< indxSize; ++u) { - for (unsigned int t = u + 1; t < indxSize; ++t) { - if ( (lx(0,u) != lx(0,t) ) || (lx(1,u) != lx(1,t) ) ) { - meter++; - } - } - if (meter >= 3) { - break; - } - } - - //computing weight matrix - if (meter >= 3 && !bwCheck) { - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - xgrid(i))/bw(0); - llx.row(1) = (lx.row(1).array() - ygrid(j))/bw(1); - - //define the kernel used - - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize ,3); - X.setOnes(); - X.col(1) = lx.row(0).array() - xgrid(i); - X.col(2) = lx.row(1).array() - ygrid(j); - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - // The solver should stop if the value is NaN. See the HOLE example in gcvlwls2dV2. - // Rcpp::Rcout << X << std::endl; - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - mu(i,j)=beta(0); - } else if(meter < 3){ - // Rcpp::Rcout <<"The meter value is:" << meter << std::endl; - if (bwCheck) { - Eigen::MatrixXd checker(1,1); - checker(0,0) = 0.; - return(checker); - } else { - Rcpp::stop("No enough points in local window, please increase bandwidth."); - } - } - } - } - - if (bwCheck){ - Eigen::MatrixXd checker(1,1); - checker(0,0) = 1.; - return(checker); - } - - return ( mu ); -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCCsort2.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCCsort2.cpp deleted file mode 100644 index 77338444..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskCCsort2.cpp +++ /dev/null @@ -1,209 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect, sort, lower_bound, upper_bound -// #include - -typedef std::pair valIndPair; -bool compPair(const valIndPair& l, const valIndPair& r) { - return(l.first < r.first); -} - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::MatrixXd RmullwlskCCsort2( const Eigen::Map & bw, const std::string kernel_type, const Eigen::Map & tPairs, const Eigen::Map & cxxn, const Eigen::Map & win, const Eigen::Map & xgrid, const Eigen::Map & ygrid, const bool & bwCheck){ -// Assumes the first row of tPairs is sorted in increasing order. - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xgrid: out1 (in MATLAB code) - // ygrid: out2 (in MATLAB code) - // bwCheck : boolean/ cause the function to simply run the bandwidth check. - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - //Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - // ProfilerStart("sort.log"); - // Start the actual smoother here - const unsigned int xgridN = xgrid.size(); - const unsigned int ygridN = ygrid.size(); - const unsigned int n = tPairs.cols(); - - // For sorted x1 - Eigen::VectorXd x1(tPairs.row(0).transpose()); - const double* tDat = x1.data(); - - Eigen::MatrixXd mu(xgrid.size(), ygrid.size()); - mu.setZero(); - - - for (unsigned int i = 0; i != xgridN; ++i) { - const double xl = xgrid(i) - bw(0) - 1e-6, - xu = xgrid(i) + bw(0) + 1e-6; - - unsigned int indl = std::lower_bound(tDat, tDat + n, xl) - tDat, - indu = std::upper_bound(tDat, tDat + n, xu) - tDat; - - // sort the y index - std::vector yval(indu - indl); - for (unsigned int k = 0; k < yval.size(); ++k){ - yval[k] = std::make_pair(tPairs(1, k + indl), k + indl); - } - std::sort::iterator>(yval.begin(), yval.end(), compPair); - - std::vector::iterator ylIt = yval.begin(), - yuIt = yval.begin(); - - for (unsigned int j = 0; j != ygridN; ++j) { - const double yl = ygrid(j) - bw(1) - 1e-6, - yu = ygrid(j) + bw(1) + 1e-6; - - //locating local window (LOL) (bad joke) - std::vector indx; - - //if the kernel is not Gaussian - if ( KernelName != 3) { - // Search the lower and upper bounds increasingly. - ylIt = std::lower_bound(ylIt, yval.end(), valIndPair(yl, 0), compPair); - yuIt = std::upper_bound(yuIt, yval.end(), valIndPair(yu, 0), compPair); - - // The following works nice for the Gaussian - // but for very small samples it complains - //} else { - // ylIt = yval.begin(); - // yuIt = yval.end(); - //} - - for (std::vector::iterator y = ylIt; y != yuIt; ++y){ - indx.push_back(y->second); - } - } else { //When we finally get c++11 we will use std::iota - for( unsigned int y = 0; y != n; ++y){ - indx.push_back(y); - } - } - - // for (unsigned int y = 0; y != indx.size(); ++y){ - // Rcpp::Rcout << "indx.at(y): " << indx.at(y)<< ", "; - // } - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = tPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - // check enough points are in the local window - unsigned int meter=1; - for (unsigned int u =0; u< indxSize; ++u) { - for (unsigned int t = u + 1; t < indxSize; ++t) { - if ( (lx(0,u) != lx(0,t) ) || (lx(1,u) != lx(1,t) ) ) { - meter++; - } - } - if (meter >= 3) { - break; - } - } - - //computing weight matrix - if (meter >= 3 && !bwCheck) { - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - xgrid(i))/bw(0); - llx.row(1) = (lx.row(1).array() - ygrid(j))/bw(1); - - //define the kernel used - - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize ,3); - X.setOnes(); - X.col(1) = lx.row(0).array() - xgrid(i); - X.col(2) = lx.row(1).array() - ygrid(j); - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - // The solver should stop if the value is NaN. See the HOLE example in gcvlwls2dV2. - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - mu(i,j)=beta(0); - } - // else if(meter < 3){ - // // Rcpp::Rcout <<"The meter value is:" << meter << std::endl; - // if (bwCheck) { - // Eigen::MatrixXd checker(1,1); - // checker(0,0) = 0.; - // return(checker); - // } else { - // Rcpp::stop("No enough points in local window, please increase bandwidth."); - // } - // } - } - } - - if (bwCheck){ - Eigen::MatrixXd checker(1,1); - checker(0,0) = 1.; - return(checker); - } - -// ProfilerStop(); - return ( mu ); -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversal.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversal.cpp deleted file mode 100644 index 50005247..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversal.cpp +++ /dev/null @@ -1,210 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect, sort, lower_bound, upper_bound -// #include - -typedef std::pair valIndPair; -bool comparePair(const valIndPair& l, const valIndPair& r) { - return(l.first < r.first); -} - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::MatrixXd RmullwlskUniversal( const Eigen::Map & bw, const std::string kernel_type, const Eigen::Map & tPairs, const Eigen::Map & cxxn, const Eigen::Map & win, const Eigen::Map & xgrid, const Eigen::Map & ygrid, const bool & bwCheck, const bool & autoCov){ -// Assumes the first row of tPairs is sorted in increasing order. - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xgrid: out1 (in MATLAB code) - // ygrid: out2 (in MATLAB code) - // bwCheck : boolean / cause the function to simply run the bandwidth check. //To be depreciated - // autoCov : boolean / cause the function to return the autocovariance. - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - //Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - // ProfilerStart("sort.log"); - // Start the actual smoother here - const unsigned int xgridN = xgrid.size(); - const unsigned int ygridN = ygrid.size(); - const unsigned int n = tPairs.cols(); - - // For sorted x1 - Eigen::VectorXd x1(tPairs.row(0).transpose()); - const double* tDat = x1.data(); - - Eigen::MatrixXd mu(xgrid.size(), ygrid.size()); - mu.setZero(); - - - for (unsigned int i = 0; i != xgridN; ++i) { - const double xl = xgrid(i) - bw(0) - 1e-6, - xu = xgrid(i) + bw(0) + 1e-6; - - unsigned int indl = std::lower_bound(tDat, tDat + n, xl) - tDat, - indu = std::upper_bound(tDat, tDat + n, xu) - tDat; - - // sort the y index - std::vector yval(indu - indl); - for (unsigned int k = 0; k < yval.size(); ++k){ - yval[k] = std::make_pair(tPairs(1, k + indl), k + indl); - } - std::sort::iterator>(yval.begin(), yval.end(), comparePair); - - std::vector::iterator ylIt = yval.begin(), - yuIt = yval.begin(); - - for (unsigned int j = !autoCov? 0: i; j != ygridN; ++j) { - const double yl = ygrid(j) - bw(1) - 1e-6, - yu = ygrid(j) + bw(1) + 1e-6; - - //locating local window (LOL) (bad joke) - std::vector indx; - - //if the kernel is not Gaussian - if ( KernelName != 3) { - // Search the lower and upper bounds increasingly. - ylIt = std::lower_bound(ylIt, yval.end(), valIndPair(yl, 0), comparePair); - yuIt = std::upper_bound(yuIt, yval.end(), valIndPair(yu, 0), comparePair); - - // The following works nice for the Gaussian - // but for very small samples it complains - //} else { - // ylIt = yval.begin(); - // yuIt = yval.end(); - //} - - for (std::vector::iterator y = ylIt; y != yuIt; ++y){ - indx.push_back(y->second); - } - } else { //When we finally get c++11 we will use std::iota - for( unsigned int y = 0; y != n; ++y){ - indx.push_back(y); - } - } - - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = tPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - // check enough points are in the local window - unsigned int meter=1; - for (unsigned int u =0; u< indxSize; ++u) { - for (unsigned int t = u + 1; t < indxSize; ++t) { - if ( (lx(0,u) != lx(0,t) ) || (lx(1,u) != lx(1,t) ) ) { - meter++; - } - } - if (meter >= 3) { - break; - } - } - - //computing weight matrix - if (meter >= 3 && !bwCheck) { - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - xgrid(i))/bw(0); - llx.row(1) = (lx.row(1).array() - ygrid(j))/bw(1); - - //define the kernel used - - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize ,3); - X.setOnes(); - X.col(1) = lx.row(0).array() - xgrid(i); - X.col(2) = lx.row(1).array() - ygrid(j); - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - // The solver should stop if the value is NaN. See the HOLE example in gcvlwls2dV2. - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - mu(i,j)=beta(0); - } - else if(meter < 3){ - // // Rcpp::Rcout <<"The meter value is:" << meter << std::endl; - // if (bwCheck) { - // Eigen::MatrixXd checker(1,1); - // checker(0,0) = 0.; - // return(checker); - // } else { - Rcpp::stop("No enough points in local window, please increase bandwidth using userBwCov."); - // } - } - } - } - - if (bwCheck){ - Eigen::MatrixXd checker(1,1); - checker(0,0) = 1.; - return(checker); - } - if(autoCov){ - return ( Eigen::MatrixXd(mu.triangularView().transpose()) + Eigen::MatrixXd(mu.triangularView())); - } else { - // ProfilerStop(); - return ( mu ); - } -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversalDeriv.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversalDeriv.cpp deleted file mode 100644 index 9a4f5257..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RmullwlskUniversalDeriv.cpp +++ /dev/null @@ -1,244 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect, sort, lower_bound, upper_bound -// #include - -typedef std::pair valIndPair; -bool comparePair(const valIndPair& l, const valIndPair& r); -// bool comparePair(const valIndPair& l, const valIndPair& r) { - // return(l.first < r.first); -// } - -unsigned int factorial(unsigned int n) { - return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n; -} -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::MatrixXd RmullwlskUniversalDeriv( - const Eigen::Map & bw, - const std::string kernel_type, - const Eigen::Map & tPairs, - const Eigen::Map & cxxn, - const Eigen::Map & win, - const Eigen::Map & xgrid, - const Eigen::Map & ygrid, - const int & npoly, - const int & nder1, - const int & nder2, - const bool & bwCheck, - const bool & autoCov){ -// Assumes the first row of tPairs is sorted in increasing order. - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xgrid: out1 (in MATLAB code) - // ygrid: out2 (in MATLAB code) - // bwCheck : boolean / cause the function to simply run the bandwidth check. //To be depreciated - // autoCov : boolean / cause the function to return the autocovariance. - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - //Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - const unsigned int nder = nder1 + nder2; - const bool isSymmetric = (nder1 == nder2); - - if (npoly < 1) { - Rcpp::stop("npoly should be not less than nder1 + nder2"); - } - if (nder1 < 0 || nder1 > 1 || nder2 < 0 || nder2 > 1) { - Rcpp::stop("nder should be either 0 or 1"); - } - - unsigned int nXcols = (npoly + 1) * (npoly + 2) / 2; - - // ProfilerStart("sort.log"); - // Start the actual smoother here - const unsigned int xgridN = xgrid.size(); - const unsigned int ygridN = ygrid.size(); - const unsigned int n = tPairs.cols(); - - // For sorted x1 - Eigen::VectorXd x1(tPairs.row(0).transpose()); - const double* tDat = x1.data(); - - Eigen::MatrixXd mu(xgrid.size(), ygrid.size()); - mu.setZero(); - - - for (unsigned int i = 0; i != xgridN; ++i) { - const double xl = xgrid(i) - bw(0) - 1e-6, - xu = xgrid(i) + bw(0) + 1e-6; - - unsigned int indl = std::lower_bound(tDat, tDat + n, xl) - tDat, - indu = std::upper_bound(tDat, tDat + n, xu) - tDat; - - // sort the y index - std::vector yval(indu - indl); - for (unsigned int k = 0; k < yval.size(); ++k){ - yval[k] = std::make_pair(tPairs(1, k + indl), k + indl); - } - std::sort::iterator>(yval.begin(), yval.end(), comparePair); - - std::vector::iterator ylIt = yval.begin(), - yuIt = yval.begin(); - - for (unsigned int j = (autoCov && isSymmetric)? i: 0; j != ygridN; ++j) { - const double yl = ygrid(j) - bw(1) - 1e-6, - yu = ygrid(j) + bw(1) + 1e-6; - - //locating local window (LOL) (bad joke) - std::vector indx; - - //if the kernel is not Gaussian - if ( KernelName != 3) { - // Search the lower and upper bounds increasingly. - ylIt = std::lower_bound(ylIt, yval.end(), valIndPair(yl, 0), comparePair); - yuIt = std::upper_bound(yuIt, yval.end(), valIndPair(yu, 0), comparePair); - - // The following works nice for the Gaussian - // but for very small samples it complains - //} else { - // ylIt = yval.begin(); - // yuIt = yval.end(); - //} - - for (std::vector::iterator y = ylIt; y != yuIt; ++y){ - indx.push_back(y->second); - } - } else { //When we finally get c++11 we will use std::iota - for( unsigned int y = 0; y != n; ++y){ - indx.push_back(y); - } - } - - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = tPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - // check enough points are in the local window - unsigned int meter=1; - for (unsigned int u =0; u < indxSize; ++u) { - for (unsigned int t = u + 1; t < indxSize; ++t) { - if ( (lx(0,u) != lx(0,t) ) || (lx(1,u) != lx(1,t) ) ) { - meter++; - } - } - if (meter >= nXcols) { - break; - } - } - - //computing weight matrix - if (meter >= nXcols && !bwCheck) { - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - xgrid(i))/bw(0); - llx.row(1) = (lx.row(1).array() - ygrid(j))/bw(1); - - //define the kernel used - - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize, nXcols); - X.col(0).setOnes(); - unsigned int curCol = 1; - for (unsigned int poly = 1; poly <= npoly; ++poly) { - for (unsigned int d2 = 0; d2 <= poly; ++d2) { - X.col(poly * (poly + 1) / 2 + d2) = - (lx.row(0).array() - xgrid(i)).pow(poly - d2) * - (lx.row(1).array() - ygrid(j)).pow(d2); - ++curCol; - } - } - - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() * X); - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - - // Take the correct index and multiply by the factorial. - // Rcpp::Rcout << npoly << ' ' << nder1 << ' ' << nder2 << '\n'; - mu(i,j)=beta(nder * (nder + 1) / 2 + nder2) * factorial(nder1) * - factorial(nder2); - } else if(meter < nXcols) { - Rcpp::stop("No enough points in local window, please increase bandwidth using userBwCov."); - } - } - } - - if (bwCheck){ - Eigen::MatrixXd checker(1,1); - checker(0,0) = 1.; - return(checker); - } - if (autoCov && isSymmetric){ - return ( - Eigen::MatrixXd(mu.triangularView().transpose()) + - Eigen::MatrixXd(mu.triangularView()) - ); - } else { - // ProfilerStop(); - return ( mu ); - } -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/RrotatedMullwlsk.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/RrotatedMullwlsk.cpp deleted file mode 100644 index 7b244f64..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/RrotatedMullwlsk.cpp +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect and sort - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::VectorXd Rrotatedmullwlsk( const Eigen::Map & bw, const std::string kernel_type, const Eigen::Map & tPairs, const Eigen::Map & cxxn, const Eigen::Map & win, const Eigen::Map & xygrid, const unsigned int npoly, const bool & bwCheck){ - - // tPairs : xin (in MATLAB code) - // cxxn : yin (in MATLAB code) - // xygrid: d (in MATLAB code) - // npoly: redundant? - - const double invSqrt2pi= 1./(sqrt(2.*M_PI)); - - // Map the kernel name so we can use switches - std::map possibleKernels; - possibleKernels["epan"] = 1; possibleKernels["rect"] = 2; - possibleKernels["gauss"] = 3; possibleKernels["gausvar"] = 4; - possibleKernels["quar"] = 5; - - // The following test is here for completeness, we mightwant to move it up a - // level (in the wrapper) in the future. - - // If the kernel_type key exists set KernelName appropriately - int KernelName = 0; - if ( possibleKernels.count( kernel_type ) != 0){ - KernelName = possibleKernels.find( kernel_type )->second; //Set kernel choice - } else { - // otherwise use "epan"as the kernel_type - // Rcpp::Rcout << "Kernel_type argument was not set correctly; Epanechnikov kernel used." << std::endl; - Rcpp::warning("Kernel_type argument was not set correctly; Epanechnikov kernel used."); - KernelName = possibleKernels.find( "epan" )->second;; - } - - // Check that we do not have zero weights // Should do a try-catch here - // Again this might be best moved a level-up. - if ( !(win.all()) ){ // - Rcpp::Rcout << "Cases with zero-valued windows are not yet implemented" << std::endl; - return (tPairs); - } - - Eigen::Matrix2d RC; // Rotation Coordinates - RC << 1, -1, 1, 1; - RC *= sqrt(2.)/2.; - - Eigen::MatrixXd rtPairs = RC * tPairs; - Eigen::MatrixXd rxygrid = RC * xygrid; - - unsigned int xygridN = rxygrid.cols(); - - Eigen::VectorXd mu(xygridN); - mu.setZero(); - - for (unsigned int i = 0; i != xygridN; ++i){ - - //locating local window (LOL) (bad joke) - std::vector indx; - //if the kernel is not Gaussian or Gaussian-like - if ( KernelName != 3 && KernelName != 4 ) { - //construct listX as vectors / size is unknown originally - std::vector list1, list2; - for (unsigned int y = 0; y != tPairs.cols(); y++){ - if ( std::abs( rtPairs(0,y) - rxygrid(0,i) ) <= bw(0) ) { - list1.push_back(y); - } - if ( std::abs( rtPairs(1,y) - rxygrid(1,i) ) <= bw(1) ) { - list2.push_back(y); - } - } - - //get intersection between the two lists - std::set_intersection(list1.begin(), list1.begin() + list1.size(), list2.begin(), list2.begin() + list2.size(), std::back_inserter(indx)); - - } else { // just get the whole deal - for (unsigned int y = 0; y != tPairs.cols(); ++y){ - indx.push_back(y); - } - } - - unsigned int indxSize = indx.size(); - Eigen::VectorXd lw(indxSize); - Eigen::VectorXd ly(indxSize); - Eigen::MatrixXd lx(2,indxSize); - for (unsigned int u = 0; u !=indxSize; ++u){ - lx.col(u) = rtPairs.col(indx[u]); - lw(u) = win(indx[u]); - ly(u) = cxxn(indx[u]); - } - - - if (ly.size()>=npoly+1 && !bwCheck ){ - - //computing weight matrix - Eigen::VectorXd temp(indxSize); - Eigen::MatrixXd llx(2, indxSize ); - llx.row(0) = (lx.row(0).array() - rxygrid(0,i))/bw(0); - llx.row(1) = (lx.row(1).array() - rxygrid(1,i))/bw(1); - - //define the kernel used - switch (KernelName){ - case 1: // Epan - temp= ((1-llx.row(0).array().pow(2))*(1- llx.row(1).array().pow(2))).array() * - ((9./16)*lw).transpose().array(); - break; - case 2 : // Rect - temp=(lw.array())*.25 ; - break; - case 3 : // Gauss - temp = ((-.5*(llx.row(1).array().pow(2))).exp()) * invSqrt2pi * - ((-.5*(llx.row(0).array().pow(2))).exp()) * invSqrt2pi * - (lw.transpose().array()); - break; - case 4 : // GausVar - temp = (lw.transpose().array()) * - ((-0.5 * llx.row(0).array().pow(2)).array().exp() * invSqrt2pi).array() * - ((-0.5 * llx.row(1).array().pow(2)).array().exp() * invSqrt2pi).array() * - (1.25 - (0.25 * (llx.row(0).array().pow(2))).array()) * - (1.50 - (0.50 * (llx.row(1).array().pow(2))).array()); - break; - case 5 : // Quar - temp = (lw.transpose().array()) * - ((1.-llx.row(0).array().pow(2)).array().pow(2)).array() * - ((1.-llx.row(1).array().pow(2)).array().pow(2)).array() * (225./256.); - break; - } - - // make the design matrix - Eigen::MatrixXd X(indxSize ,3); - X.setOnes(); - X.col(1) = (lx.row(0).array() - rxygrid(0,i)).array().pow(2); - X.col(2) = (lx.row(1).array() - rxygrid(1,i)); - Eigen::LDLT ldlt_XTWX(X.transpose() * temp.asDiagonal() *X); - Eigen::VectorXd beta = ldlt_XTWX.solve(X.transpose() * temp.asDiagonal() * ly); - mu(i)=beta(0); - } else if ( ly.size() == 1 && !bwCheck) { // Why only one but not two is handled? - mu(i) = ly(0); - } else if ( ly.size() != 1 && (ly.size() < npoly+1) ) { - if ( bwCheck ){ - Eigen::VectorXd checker(1); - checker(0) = 0.; - return(checker); - } else { - Rcpp::stop("No enough points in local window, please increase bandwidth."); - } - } - } - - if (bwCheck){ - Eigen::VectorXd checker(1); - checker(0) = 1.; - return(checker); - } - - return ( mu ); -} - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/cumtrapzRcpp.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/cumtrapzRcpp.cpp deleted file mode 100644 index 34f8ab90..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/cumtrapzRcpp.cpp +++ /dev/null @@ -1,40 +0,0 @@ - -#include -using namespace Rcpp; - -template bool is_sorted (ForwardIterator first, ForwardIterator last) -{ - if (first==last) return true; - ForwardIterator next = first; - while (++next!=last) { - if (*next<*first) - return false; - ++first; - } - return true; -} -//' Cumulative Trapezoid Rule Numerical Integration -//' -//' Cumulative Trapezoid Rule Numerical Integration using Rcpp -//' @param X Sorted vector of X values -//' @param Y Vector of Y values. -//' @export -// [[Rcpp::export]] -Rcpp::NumericVector cumtrapzRcpp(const Rcpp::NumericVector X,const Rcpp::NumericVector Y){ - - // Basic check - if( Y.size() != X.size()){ - Rcpp::stop("The input Y-grid does not have the same number of points as input X-grid."); - } - if(is_sorted(X.begin(),X.end())){ - Rcpp::NumericVector ctrapzsum(X.size()); - ctrapzsum[0] = 0.0; - for (unsigned int ind = 0; ind != X.size()-1; ++ind){ - ctrapzsum[ind+1] = 0.5 * (X[ind + 1] - X[ind]) *(Y[ind] + Y[ind + 1]) + ctrapzsum[ind]; - } - return ctrapzsum; - } else { - Rcpp::stop("The input X-grid is not sorted."); - return 1; - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/dropZeroElementsXYWin.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/dropZeroElementsXYWin.cpp deleted file mode 100644 index f509c89c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/dropZeroElementsXYWin.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include // to map kernels to integers for the switch -#include // to read in the kernel name -#include // to use vectors -#include // to get the intersect and sort - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - - -Eigen::MatrixXd dropZeroElementsXYWin( const Eigen::Map & win, const Eigen::Map & xin, const Eigen::Map & yin){ - - const unsigned int nXGrid = xin.size(); - - // Check that we have equal number of readings - if( nXGrid != yin.size()){ - Rcpp::stop("The input Y-grid does not have the same number of points as input X-grid."); - } - - if( nXGrid != win.size()){ - Rcpp::stop("The input weight vector does not have the same number of points as input X-grid."); - } - - unsigned int nZeroElements = std::count(&win[0], &win[nXGrid], 0.); - - // Check that we do not have zero weights // Should do a try-catch here - if( nZeroElements != 0 ){ // - Eigen::MatrixXd Q(nXGrid - nZeroElements,3); - unsigned int q = 0; - for( unsigned int i = 0; i != nXGrid; ++i){ - if ( win[i] != 0 ) { - Q(q,0) = xin[i]; - Q(q,1) = yin[i]; - Q(q,2) = win[i]; - ++q; - } - } - return( Q ); - } else { - Eigen::MatrixXd Q(nXGrid,3); - Q.col(0) = xin; - Q.col(1) = yin; - Q.col(2) = win; - return( Q ); - } -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/interp2lin.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/interp2lin.cpp deleted file mode 100644 index 026aa42d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/interp2lin.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include // to get std::lower_bound -#include // to get std::iterator -#include // to get NaN - -// [[Rcpp::depends(RcppEigen)]] -// [[Rcpp::export]] - -Eigen::VectorXd interp2lin( const Eigen::Map & xin, const Eigen::Map & yin, const Eigen::Map & zin, const Eigen::Map & xou, const Eigen::Map & you){ - - // Setting up initial values - - const unsigned int nXGrid = xin.size(); - const unsigned int nYGrid = yin.size(); - const unsigned int nKnownPoints = nXGrid * nYGrid; - const unsigned int nUnknownPoints = xou.size(); - - Eigen::VectorXd result(nUnknownPoints); - - // Preliminary checks - - // if ( nXGrid != nYGrid ){ - // Rcpp::stop("Input Y-grid does not have the same number of points as Input X-grid."); - // } else - if ( nKnownPoints != zin.size() ) { - Rcpp::stop("Input Z-grid does not have the same number of points as the product of #Input Y-grid times #Input X-grid."); - } else if ( nUnknownPoints != you.size() ){ - Rcpp::stop("Output Y-grid does not have the same number of points as Output X-grid."); - } else if ( xin.minCoeff() > xou.minCoeff() ){ - Rcpp::warning("Output X-grid is outside the lower range of the input X-grid."); - } else if ( yin.minCoeff() > you.minCoeff() ){ - Rcpp::warning("Output Y-grid is outside the lower range of the input Y-grid."); - } else if ( xin.maxCoeff() < xou.maxCoeff() ){ - Rcpp::warning("Output X-grid is outside the upper range of the input X-grid."); - } else if ( yin.maxCoeff() < you.maxCoeff() ){ - Rcpp::warning("Output Y-grid is outside the upper range of the input Y-grid."); - } - - const double ymin = yin.minCoeff(); - const double xmin = xin.minCoeff(); - const double ymax = yin.maxCoeff(); - const double xmax = xin.maxCoeff(); - - // The actual interpolation routine - // Check: https://en.wikipedia.org/wiki/Bilinear_interpolation#Alternative_algorithm - // for a quick reference - - Eigen::RowVector4d fq; - Eigen::Vector2d xa; - Eigen::Vector2d ya; - Eigen::Vector4d za; - Eigen::Matrix4d A; - // Column 1 - A.setOnes(); - - for (unsigned int u = 0; u !=nUnknownPoints; ++u){ - - if ( (xmax < xou(u)) || (ymax < you(u)) || // If x/you(u) is above the upper values of xin/yin - (xmin > xou(u)) || (ymin > you(u)) ){ // If x/you(u) is below the lower values of xin/yin - result(u) = std::numeric_limits::quiet_NaN() ; - - } else { - // Find the appropriate x coordinates/save them in xa (2-by-1) - // Get iterator pointing to the first element which is not less than xou(u) - - // This works if compiled with g++ -DNDEBUG ... etc. - //const double* x1 = std::lower_bound(&xin[0], &xin[nXGrid], xou(u)); - //const double* y1 = std::lower_bound(&yin[0], &yin[nYGrid], you(u)); - - const double* x1 = std::lower_bound(xin.data(), xin.data() + nXGrid, xou(u)); - const double* y1 = std::lower_bound(yin.data(), yin.data() + nYGrid, you(u)); - - xa(1) = *x1; - ya(1) = *y1; - -// const double* x1p = std::find(&xin[0], &xin[nXGrid], xa(1)); -// const double* y1p = std::find(&yin[0], &yin[nYGrid], ya(1)); - const double* x1p = std::find( xin.data(), xin.data() + nXGrid, xa(1)); - const double* y1p = std::find( yin.data(), yin.data() + nYGrid, ya(1)); - - const double* x0p; - const double* y0p; - - - if( y1 != &yin[0]){ - ya(0) = *--y1; - y0p = y1p - 1; - } else { - ya(0) = ya(1); - y0p = y1p; - } - if( x1 != &xin[0]){ - xa(0) = *--x1; - x0p = x1p - 1; - } else { - xa(0) = xa(1); - x0p = x1p; - } - -// const double* x1p = std::find(&xin[0], &xin[nXGrid], xa(1)); -// const double* y1p = std::find(&yin[0], &yin[nYGrid], ya(1)); -// const double* x0p = x1p - 1; -// const double* y0p = y1p - 1; - - za(0) = zin( (y0p -&yin[0]) * nXGrid + (x0p -&xin[0])); - za(1) = zin( (y1p -&yin[0]) * nXGrid + (x0p -&xin[0])); - za(2) = zin( (y0p -&yin[0]) * nXGrid + (x1p -&xin[0])); - za(3) = zin( (y1p -&yin[0]) * nXGrid + (x1p -&xin[0])); - - // Column 2 - A(0,1) = xa(0); A(1,1) = xa(0); - A(2,1) = xa(1); A(3,1) = xa(1); - // Column 3 - A(0,2) = ya(0); A(1,2) = ya(1); - A(2,2) = ya(0); A(3,2) = ya(1); - // Column 4 - A(0,3) = ya(0) * xa(0); A(1,3) = ya(1) * xa(0); - A(2,3) = ya(0) * xa(1); A(3,3) = ya(1) * xa(1); - - fq << 1 , xou(u), you(u), xou(u)*you(u); - - // Rcpp::Rcout << "xa: " << xa.transpose() << ", ya: " << ya.transpose() << ", za: " << za.transpose() << ", fq: " << fq << std::endl; - - result(u) = fq * A.colPivHouseholderQr().solve(za); - } - } - - return ( result ); -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/src/trapzRcpp.cpp b/fdapace.Rcheck/00_pkg_src/fdapace/src/trapzRcpp.cpp deleted file mode 100644 index a2848756..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/src/trapzRcpp.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include // to get NaN -using namespace Rcpp; - -template bool is_sorted (iter begin, iter end) -{ - if (begin==end) return true; - iter next = begin; - while (++next!=end) { - if (*next<*begin) - return false; - ++begin; - } - return true; -} - -//' Trapezoid Rule Numerical Integration -//' -//' Trapezoid Rule Numerical Integration using Rcpp -//' @param X Sorted vector of X values -//' @param Y Vector of Y values. -//' @export -// [[Rcpp::export]] -double trapzRcpp(const Rcpp::NumericVector X, const Rcpp::NumericVector Y){ - - if( Y.size() != X.size()){ - Rcpp::stop("The input Y-grid does not have the same number of points as input X-grid."); - } - if(is_sorted(X.begin(),X.end())){ - double trapzsum = 0; - for (unsigned int ind = 0; ind != X.size()-1; ++ind){ - trapzsum += 0.5 * (X[ind + 1] - X[ind]) *(Y[ind] + Y[ind + 1]); - } - return trapzsum; - } else { - Rcpp::stop("The input X-grid is not sorted."); - return std::numeric_limits::quiet_NaN(); - } - return std::numeric_limits::quiet_NaN(); -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/AAAtestthat.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/AAAtestthat.R deleted file mode 100644 index 03b1bb1c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/AAAtestthat.R +++ /dev/null @@ -1,9 +0,0 @@ -# # Based on https://github.com/hadley/testthat#integration-with-r-cmd-check -# splitting test files into multiple ones so that each one runs within 10 mins, -# which is the limit on travis CI. -# This file contains the "fast" checks. - -library(testthat) -library(fdapace) -test_check("fdapace", filter='_(?!FPCA)(?!FCReg)(?!FClust)(?!FSVD)(?!FVPA)(?!MultiFAM)', perl=TRUE) -# test_check("fdapace") diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BinRawCov.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BinRawCov.R deleted file mode 100644 index 1fce1a57..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BinRawCov.R +++ /dev/null @@ -1,27 +0,0 @@ -# devtools::load_all() -library(testthat) - -# GMeanAndGCV - -set.seed(1) -pts <- c(0, 1, 3:100) / 100 -regGrid <- seq(0, 1, by=0.1) -samp3 <- Wiener(200, pts, sparsify=2:7) -p0 <- SetOptions(samp3$Ly, samp3$Lt, optns=list(dataType='Sparse', error=TRUE, kernel='epan')) -mu3 <- rep(0, length(pts)) -rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, mu3, p0$dataType, error=p0$error) - -brcov3 <- BinRawCov(rcov3) - -test_that('BinRawCov works', { - tPairs <- matrix(c(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2), ncol=2, byrow=TRUE) - rcov <- list(tPairs=tPairs, cxxn=1:nrow(tPairs), error=FALSE) - brcov <- BinRawCov(rcov) - expect_equal(brcov$tPairs, matrix(c(1, 1, 2, 1, 1, 2, 2, 2), ncol=2, byrow=TRUE)) - expect_equal(brcov$meanVals, c(1, 2.5, 6, 4)) - - rcov <- list(tPairs=tPairs, cxxn=1:nrow(tPairs), error=TRUE) - brcov <- BinRawCov(rcov) - expect_equal(brcov$tPairs, matrix(c(1, 1, 2, 1, 1, 2, 2, 2), ncol=2, byrow=TRUE)) - expect_equal(brcov$meanVals, c(1, 2.5, 6, 4)) -}) \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BwNN.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BwNN.R deleted file mode 100644 index 15a60127..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_BwNN.R +++ /dev/null @@ -1,30 +0,0 @@ -# devtools::load_all(); library(testthat) - - -library(testthat) -test_that('FindNN is correct', { - tPairs <- matrix(c(0, 0, - 1, 1, - 0, 1, - 1, 0, - 0, 0.2, - 0.2, 0, - 0.2, 0.2, - 0.2, 1, - 1, 0.2), byrow=TRUE, ncol=2) - expect_equal(FindNN(tPairs), 0.8) -}) - - - -test_that('BWNN works for large sample', { - library(fdapace) - set.seed(1) - n <- 100 - pts <- seq(0, 1, length.out=100) - sparsity <- 2:5 - samp <- Wiener(n, pts, sparsity) - bw <- BwNN(samp[[1]]) # Lt or Lt - expect_true(bw['cov'] >= 0.01 && bw['cov'] < 0.1 && bw['mu'] <= bw['cov']) -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CheckData.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CheckData.R deleted file mode 100644 index 7ea936e1..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CheckData.R +++ /dev/null @@ -1,23 +0,0 @@ -cat("\nTests for 'CheckData'") - -test_that("basic valid lists arguments do not return any errors ", { - CheckData(y = list(c(1,2,3), c(1,2)), t = list(c(1,2,3), c(1,2))) - CheckData(t = list(c(1,2,3), c(1,2)), y = list(runif(3), runif(2))) -}) - - -test_that("basic invalid nolists arguments do return errors ", { - # expect_equal(CheckData( runif(4), list(c(1,2,NA), c(1,2)) ), TRUE) # We handle NA now - # expect_equal(CheckData( list(c(1,2,3), c(1,NA)), runif(3) ), TRUE) # We handle NA now - expect_error(CheckData( matrix(1:6,2,3), list(c(1,2,3), c(1,2)) ), 'y should be list') - expect_error(CheckData( list(c(1,2,3), c(1,2)), matrix(1:6,2,3) ), 't should be list') -}) - - -test_that("basic checks where input data has an additional arbitray value works (issue #9) ", { - data(medfly25) - Flies1 <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) - class(Flies1$Ly[[1]]) <- append(Flies1$Ly[[1]], "some") - expect_s3_class(FPCA(Ly= Flies1$Ly[1:100], Lt= Flies1$Lt[1:100] ), 'FPCA') -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_ConvertSupport.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_ConvertSupport.R deleted file mode 100644 index 1e93f0c0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_ConvertSupport.R +++ /dev/null @@ -1,16 +0,0 @@ -# devtools::load_all() -library(testthat) - -fromGrid <- seq(0, pi / 2, 0.1) -toGrid <- fromGrid + 0.001 -toGrid[length(toGrid)] <- toGrid[length(toGrid)] - 0.002 -mu <- sin(fromGrid) -phi <- cbind(sin(fromGrid), cos(fromGrid)) -phi1 <- matrix(phi[, 1], ncol=1) -Cov <- tcrossprod(phi) - -test_that('ConvertSupport works', { - expect_equal(mu, ConvertSupport(fromGrid, toGrid, mu=mu), tolerance=2e-3) - expect_equal(phi, ConvertSupport(fromGrid, toGrid, phi=phi), tolerance=2e-3) - expect_equal(Cov, ConvertSupport(fromGrid, toGrid, Cov=Cov), tolerance=1e-3) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateBasis.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateBasis.R deleted file mode 100644 index 63d586c3..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateBasis.R +++ /dev/null @@ -1,14 +0,0 @@ -# devtools::load_all('../../RPACE/tPACE') - -test_that('legendre basis works', { - M <- 20000 - pts <- seq(0, 1, length.out=M) - K <- 10 - - tmp <- CreateBasis(K, pts, 'legendre01') - expect_equal(crossprod(tmp) / M, diag(K), scale=1, tol=1e-3) - - K <- 1 - tmp <- CreateBasis(K, pts, 'legendre01') - expect_equal(crossprod(tmp) / M, matrix(1), scale=1, tol=1e-3) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateDiagnosticPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateDiagnosticPlot.R deleted file mode 100644 index edbdb37d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateDiagnosticPlot.R +++ /dev/null @@ -1,26 +0,0 @@ -# devtools::load_all() - -viewPdf <- FALSE -set.seed(1) -n <- 100 -M <- 51 -pts <- seq(0, 1, length.out=M) -mu <- rep(0, length(pts)) -sampDense <- Wiener(n, pts) -samp <- Sparsify(sampDense, pts, M) -res <- FPCA(samp$Ly, samp$Lt, list(error=TRUE, FVEthreshold=1, dataType='Dense', plot=TRUE)) - -if (viewPdf) { - pdf('tmp.pdf') -} - -plot(res) -CreateDesignPlot(samp$Lt) -plot(res, addLegend=FALSE) -CreateDesignPlot(samp$Lt, addLegend=FALSE) - -if (viewPdf) { - dev.off() - system('open tmp.pdf') - file.remove('tmp.pdf') -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateFolds.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateFolds.R deleted file mode 100644 index 0c39bd7d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateFolds.R +++ /dev/null @@ -1,50 +0,0 @@ -#options(error=recover) -library(testthat) - -test_that('SimpleFolds works', { - samp <- 1:10 - res1 <- SimpleFolds(samp, 10) - expect_equal(length(res1), 10) - expect_equal(sum(sapply(res1, length)), length(samp)) - expect_equal(diff(range(sapply(res1, length))), 0) - - samp <- 20:60 - res2 <- SimpleFolds(samp, 10) - expect_equal(length(res2), 10) - expect_equal(sum(sapply(res2, length)), length(samp)) - expect_equal(diff(range(sapply(res2, length))), 1) -}) - -test_that('CreateFolds works for numeric responses', { - set.seed(1) - samp1 <- CreateFolds(rnorm(55), 10) - sampVec1 <- sort(do.call(c, samp1)) - expect_true(diff(range(sapply(samp1, length))) <= 5) - expect_equal(sampVec1, seq_along(sampVec1)) - - samp2 <- CreateFolds(rnorm(5), 10) - sampVec2 <- sort(do.call(c, samp2)) - expect_true(diff(range(sapply(samp2, length))) <= 1) - expect_equal(sampVec2, seq_along(sampVec2)) -}) - -test_that('CreateFolds works for factor/class responses', { - set.seed(1) - nclass <- 2 - tmp <- sample(c(rep(0, 10), rep(1, 11))) - samp3 <- CreateFolds(tmp, 10) - expect_true(diff(range(sapply(samp3, length))) <= nclass) - expect_true(all(sapply(samp3, function(ind) any(tmp[ind] == 0) && any(tmp[ind] == 1)))) - - nclass <- 3 - tmp <- sample(c(rep(1, 10), rep(2, 11), rep(3, 5))) - tmp <- factor(tmp) - samp4 <- CreateFolds(tmp, 10) - expect_true(diff(range(sapply(samp4, length))) <= nclass) - expect_true(all(sapply(samp4, function(ind) sum(table(tmp[ind]) != 0) >= 2))) -}) - -# debug(CreateFolds) -# undebug(CreateFolds) -# debug(SimpleFolds) -# undebug(SimpleFolds) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreatePathPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreatePathPlot.R deleted file mode 100644 index d2ebb5ab..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreatePathPlot.R +++ /dev/null @@ -1,38 +0,0 @@ -library(testthat) -# devtools::load_all() - -set.seed(1) -n <- 300 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- sampWiener + matrix(rnorm(n, sd=0.1), n, length(pts)) -sampWiener <- Sparsify(sampWiener, pts, 1:5) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', kernel='epan')) -resDer <- FPCAder(res, list(method='DPC')) - -test_that('CreatePathPlot works for FPCA object', { - CreatePathPlot(res) - CreatePathPlot(res, 1:10) - CreatePathPlot(res, 1:20, showObs=FALSE) - CreatePathPlot(res, 1:20, showMean=TRUE, showObs=FALSE) - CreatePathPlot(res, 1:20, obsOnly=TRUE) - CreatePathPlot(res, 1:20, obsOnly=TRUE, showObs=FALSE) - CreatePathPlot(inputData=sampWiener, subset=1:20, obsOnly=TRUE) - CreatePathPlot(res, subset=seq_len(n) %% 5 == 0, K=4, inputData=list(Lt=sampWiener$Lt, Ly=sampWiener$Ly), main='123', xlab='T') -}) - -test_that('CreatePathPlot works for FPCAder object', { - CreatePathPlot(resDer) - CreatePathPlot(resDer, 1:10) - CreatePathPlot(resDer, 1:10, showMean=TRUE) - CreatePathPlot(resDer, 1:20, showObs=TRUE) - CreatePathPlot(resDer, 1:20, obsOnly=TRUE, showObs=FALSE) -}) - -test_that('User defined colors work', { - showInd <- 11:13 - shown <- length(showInd) - CreatePathPlot(res, showInd) - CreatePathPlot(res, showInd, col=c('blue', 'cyan', 'grey')) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateStringingPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateStringingPlot.R deleted file mode 100644 index 3c28fa1b..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateStringingPlot.R +++ /dev/null @@ -1,50 +0,0 @@ -# test CreateStringingPlot -library(testthat) - -# implement the first kind of simulation in stringing paper -# Fourier basis, specify signal-to-noise ratio (SNR), number of components used -# returns true underlying curves XTraj, and randomly ordered design matrix X -stringing_sim1 <- function(K = 4, SNR = 10, n = 50, p = 50){ - grid = seq(5/p,5,5/p) - lambda = 8*(0.5^(1:K)) # exponential decay - phi = cbind(-sqrt(0.2)*cos(0.2*pi*grid), sqrt(0.2)*sin(0.2*pi*grid), - -sqrt(0.2)*cos(0.4*pi*grid), sqrt(0.2)*sin(0.4*pi*grid)) - scores = t(MASS::mvrnorm(n = n, mu = rep(0,K), Sigma = diag(lambda))) - Xtrue = t(phi %*% scores) # ith row corresponds to ith subject - if(SNR == Inf){ - Xt = Xtrue - } else { - Xt = Xtrue + rnorm(n*p, mean=0, sd=mean(abs(Xtrue))/SNR) - } - rdmorder = sample(x = 1:p, size = p, replace = FALSE) # random columns indices for the original order - X = Xt[,rdmorder] - return(list(XTraj = Xt, X = X, order = rdmorder, n = n, p = p, RegGrid = grid)) -} - -test_that("CreateStringingPlot works",{ - set.seed(1) - simdata = stringing_sim1(SNR = Inf) - stringingfit = Stringing(simdata$X, disOptns = "correlation") - # check with simulated data to see if reversal of order is needed - diff_norev = sum(abs(simdata$order[stringingfit$StringingOrder] - 1:simdata$p)) - diff_rev = sum(abs(simdata$order[stringingfit$StringingOrder] - simdata$p:1)) - if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) - } - CreateStringingPlot(stringingObj = stringingfit, subset = 1:10) -}) - -test_that("CreateStringingPlot works",{ - set.seed(1) - simdata = stringing_sim1(SNR = Inf) - stringingfit = Stringing(simdata$X, disOptns = "euclidean", standardize = TRUE) - # check with simulated data to see if reversal of order is needed - diff_norev = sum(abs(simdata$order[stringingfit$StringingOrder] - 1:simdata$p)) - diff_rev = sum(abs(simdata$order[stringingfit$StringingOrder] - simdata$p:1)) - if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) - } - CreateStringingPlot(stringingObj = stringingfit, subset = 1:10) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateTrueMean.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateTrueMean.R deleted file mode 100644 index 2b2679f8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_CreateTrueMean.R +++ /dev/null @@ -1,30 +0,0 @@ - -myEps <- .Machine$double.eps; - -test_that(" basic 0/1 combination matches MATLAB output ", { - expect_equal( CreateTrueMean(1,0), 0) - expect_equal( CreateTrueMean(0,1), 0) - expect_equal( CreateTrueMean(0,0), 0) - expect_equal( CreateTrueMean(1,1), 1.841470984807897, tolerance = 2*myEps, scale = 1) -}) - -test_that(" 'multiple t, single p'-case matches MATLAB output ", { - expect_equal( CreateTrueMean( c(0.1, 1.3), 3), c(0.199833416646828, 2.263558185417193), tolerance = 2*myEps, scale = 1 ) - expect_equal( CreateTrueMean( c(0.1, 1.3), 1), c(0.199833416646828, 0) , tolerance = 2*myEps, scale = 1 ) -}) - -test_that(" 'single t, multiple p'-case matches MATLAB output ", { - expect_equal( CreateTrueMean( 1, c(0.1, 1.3)), 0 ) - expect_equal( CreateTrueMean( 3, c(0.1, 1.3)), c(0, 0) ) -}) - -test_that(" 'multiple t, multiple p'-case matches MATLAB output ", { - expect_equal( CreateTrueMean( c(3, 1), c(0.1, 1.3)), c(0, 1.841470984807897), tolerance = 2*myEps, scale = 1) - expect_equal( CreateTrueMean( c(1, 3), c(0.1, 1.3)), c(0, 0) , tolerance = 2*myEps, scale = 1) - expect_equal( CreateTrueMean( c(0.1, 1.3), c(3, 1)), c(0.199833416646828, 0), tolerance = 2*myEps, scale = 1) - expect_equal( CreateTrueMean( c(0.1, 1.3), c(1, 3)), c(0.199833416646828, 2.263558185417193), tolerance = 2*myEps, scale = 1) - expect_equal( CreateTrueMean( c(1.1, 0.3), c(3, 1)), c(1.991207360061436, 0.595520206661340), tolerance = 2*myEps, scale = 1) - expect_equal( CreateTrueMean( c(1.1, 0.3), c(1, 3)), c(0, 0.595520206661340), tolerance = 2*myEps, scale = 1) -}) - -# cat("Done") \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_DynCorr.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_DynCorr.R deleted file mode 100644 index 125b998d..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_DynCorr.R +++ /dev/null @@ -1,92 +0,0 @@ -#devtools::load_all() -library(testthat) - -#positive test 1 -test_that('when y_i[t] - mean(y[t]) = 2(x_i[t]-mean(x[t])), expect correlation 1', { - library(MASS) - set.seed(10) - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun - } - - dyn1_quad=DynCorr(x1_quad,y1_quad,t) - expect_equal(min(dyn1_quad),1) -}) - -#positive test 2 -test_that('first generate y_i[t] - mean(y[t]) = 2(x_i[t]-mean(x[t])) then add noise to y and x, expect correlation close to 1', { - library(MASS) - set.seed(10) - - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun+rnorm(length(t),0,0.01) - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun+rnorm(length(t),0,0.01) - } - - dyn1_quad=DynCorr(x1_quad,y1_quad,t) - expect_equal(max(1-dyn1_quad) < 0.1,T) -}) - -#positive test 3 -test_that('setting same as test #1 but with 1/5 missings in each observation, expect result close to 1', { - library(MASS) - set.seed(10) - - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun - } - - for(i in 1:n){ - ms_x = sample(t,20) - ms_y = sample(t,20) - x1_quad[i,ms_x] = NA - y1_quad[i,ms_y] = NA - } - - dyn1_quad=DynCorr(x1_quad,y1_quad,t) - expect_equal(max(1-dyn1_quad) < 0.1,T) -}) - -#negative test -expect_error({ - set.seed(10) - n=200 - t=seq(0,1,length.out=100) - - x = Wiener(n,t) - y= Wiener(n+1,t) - - dyn=DynCorr(x,y,t) -}) \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Dyn_test.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Dyn_test.R deleted file mode 100644 index 95e6922f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Dyn_test.R +++ /dev/null @@ -1,91 +0,0 @@ -#devtools::load_all() -library(testthat) - -#positive test 1 -test_that('one sample test, when y_i[t] - mean(y[t]) = 2(x_i[t]-mean(x[t])), expect p-value very small', { - library(MASS) - set.seed(10) - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun - } - - bt_dc=Dyn_test(x1_quad,y1_quad,t) - expect_equal(bt_dc$pval < 0.01,T) -}) - -#positive test 2 -test_that('one sample test, setting same as test #1 but with 1/5 missings in each observation, expect p-value very small', { - library(MASS) - set.seed(10) - - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun - } - - for(i in 1:n){ - ms_x = sample(t,20) - ms_y = sample(t,20) - x1_quad[i,ms_x] = NA - y1_quad[i,ms_y] = NA - } - - bt_dc=Dyn_test(x1_quad,y1_quad,t) - expect_equal(bt_dc$pval < 0.01,T) -}) - -#positive test 3 -test_that('two sample test, the first sample has the same setting as test #2, the second sample is the first sample with noise, expect p-value larger than 0.2', { - library(MASS) - set.seed(10) - - n=200 - t=seq(0,1,length.out=100) - - mu_quad_x=8*t^2-4*t+5 - mu_quad_y=8*t^2-12*t+6 - - fun=rbind(rep(1,length(t)),-t,t^2) - z1=mvrnorm(n,rep(0,3),diag(c(2,16/3,4))) # covariance matrix of random effects - x1_quad=y1_quad=x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) - - for (i in 1:n){ - x1_quad[i,]=mu_quad_x+z1[i,]%*%fun - y1_quad[i,]=mu_quad_y+2*z1[i,]%*%fun - x1_quad_error[i,]=x1_quad[i,]+rnorm(length(t),0,0.1) - y1_quad_error[i,]=y1_quad[i,]+rnorm(length(t),0,0.1) - } - - for(i in 1:n){ - ms_x = sample(t,20) - ms_y = sample(t,20) - x1_quad[i,ms_x] = NA - y1_quad[i,ms_y] = NA - x1_quad_error[i,ms_x] = NA - y1_quad_error[i,ms_y] = NA - } - - bt_dc=Dyn_test(x1_quad,y1_quad,t,x1_quad_error,y1_quad_error,t) - expect_equal(bt_dc$pval > 0.2,T) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCCor.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCCor.R deleted file mode 100644 index 4ece02fc..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCCor.R +++ /dev/null @@ -1,38 +0,0 @@ -library(testthat) -# devtools::load_all('.') - -test_that('FCCor works', { - set.seed(4) - - n <- 200 - nGridIn <- 50 - sparsity <- 1:5 # must have length > 1 - bw <- 0.1 - kern <- 'epan' - T <- matrix(seq(0.5, 1, length.out=nGridIn)) - - ## Corr(X(t), Y(t)) = 1/2 - A <- Wiener(n, T) - B <- Wiener(n, T) - C <- Wiener(n, T) + matrix((1:nGridIn) , n, nGridIn, byrow=TRUE) - X <- A + B - Y <- A + C - indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) - tAll <- lapply(1:n, function(i) T[indEach[[i]]]) - Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) - Ysp <- lapply(1:n, function(i) Y[i, indEach[[i]]]) - - expect_equal(sapply(Xsp, length), sapply(Ysp, length)) - expect_equal(sapply(Xsp, length), sapply(tAll, length)) - - # Perfect correlation case - expect_equal(mean(FCCor(Xsp, Xsp, tAll, bw)[['corr']], na.rm=TRUE), 1) - - # Consistency - expect_true(mean((FCCor(Xsp, Ysp, tAll, bw, kern)[['corr']] - 0.5)^2, na.rm=TRUE) < 1e-2) - - # Gauss and epan kernels are similar - expect_equal(FCCor(Xsp, Ysp, tAll, bw, 'epan')[['corr']], FCCor(Xsp, Ysp, tAll, bw, 'gauss')[['corr']], 0.1) -}) - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCReg.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCReg.R deleted file mode 100644 index e6efdaab..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FCReg.R +++ /dev/null @@ -1,251 +0,0 @@ -library(MASS) -library(testthat) -# devtools::load_all() - -test_that('Simple dense case works', { - # X(t) = Y(t), and they are contaminated with errors. - # beta_0 = 0; beta_1 = t - set.seed(1) - n <- 100 - p <- 20 - sigma <- 1 - pts <- seq(0, 1, length.out=p) - T <- 1 + pts * p - X <- Wiener(n, pts) + rnorm(n) - Y <- t(apply(X, 1, `*`, e2=pts)) - Xn <- X + rnorm(n * p, sd=sigma) - Yn <- Y + rnorm(n * p, sd=sigma) - vars <- list(X=MakeFPCAInputs(tVec=T, yVec=Xn), - Y=MakeFPCAInputs(tVec=T, yVec=Yn)) - - bw <- 0.25 * diff(range(T)) - kern <- 'epan' - - res <- FCReg(vars, bw, bw, T, kern, measurementError=FALSE) - resN <- FCReg(vars, bw, bw, T, kern, measurementError=TRUE) - # plot(pts, res$beta); abline(a=0, b=1) - # plot(pts, resN$beta); abline(a=0, b=1) - expect_equal(as.numeric(res$beta), pts, scale=1, tolerance=0.1) - expect_equal(as.numeric(resN$beta), pts, scale=1, tolerance=0.1) - # Assume noise is better than no noise - expect_lt(mean((as.numeric(resN$beta) - pts)^2), mean((as.numeric(res$beta) - pts)^2)) -}) - -# Y(t) = \beta_0(t) + \beta_1(t) X_1(t) + \beta_2(t) X_2(t) + \beta_3 Z_3 + \beta_4 Z_4 + \epsilon -# X_1(t) = \mu_{X_1}(t) + Z_1 \phi_1(t); X_2(t) = \mu_{X_2}(t) + Z_2 \phi_2(t); -# \mu_{X_1}(t) = 2t, \mu_{X_2}(t) = -2t -# (Z_1, \dots, Z_4) \sim N(0, \Sigma). \Sigma = 1/4 + diag(3/4) -# \phi_1(t) = 1, \phi_2(t) = sqrt(2) * cos(\pi t), t \in [0, 1]. So $cov(X_1(s), X_2(t)) = sqrt(2)/4 \cos(\pi t).$ -# \epsilon \sim N(0, \sigma^2). -# \beta_1 = \beta_2 = \beta_3 = \beta_4 = 1. - -set.seed(1) -n <- 100 -nGridIn <- 200 -sparsity <- 5:10 # must have length > 1 -bw <- 0.2 -kern <- 'gauss' -T <- seq(0, 1, length.out=nGridIn) - -Sigma <- 1 / 4 + diag(3 / 4, 4) -mu <- T * 2 -sigma <- 1 - -beta_0 <- 0 -beta_1 <- 1 -beta_2 <- 1 -beta_3 <- 1 -beta_4 <- 1 - -Z <- mvrnorm(n, rep(0, 4), Sigma) -X_1 <- Z[, 1, drop=FALSE] %*% matrix(1, 1, nGridIn) + matrix(mu, n, nGridIn, byrow=TRUE) -X_2 <- Z[, 2, drop=FALSE] %*% matrix(sqrt(2) * cos(pi * T), 1, nGridIn) - matrix(mu, n, nGridIn, byrow=TRUE) -# tmp <- cov(X_1, X_2); colMeans(tmp) -epsilon <- rnorm(n, sd=sigma) -Y <- matrix(NA, n, nGridIn) -for (i in seq_len(n)) { - Y[i, ] <- beta_0 + beta_1 * X_1[i, ] + beta_2 * X_2[i, ] + beta_3 * Z[i, 3] + beta_4 * Z[i, 4] + epsilon[i] -} -denseMuY <- colMeans(Y) -denseCovY <- cov(Y) - -set.seed(1) -X_1sp <- Sparsify(X_1, T, sparsity) -set.seed(1) -X_2sp <- Sparsify(X_2, T, sparsity) -set.seed(1) -Ysp <- Sparsify(Y, T, sparsity) -outGrid <- round(seq(min(T), 1, by=0.05), 2) -vars <- list(X_1=X_1sp, X_2=X_2sp, Z_3=Z[, 3], Z_4=Z[, 4], Y=Ysp) - -test_that('Scaler-scaler cov', - expect_equal(as.numeric(uniCov(Z[, 3], Z[, 4])), cov(Z[, 3], Z[, 4])) -) - -test_that('Scaler-function cov = Function-scaler cov', { - expect_equal(uniCov(X_1sp, Z[, 3], bw, outGrid), - t(uniCov(Z[, 3], X_1sp, bw, outGrid))) -}) - -cov12 <- uniCov(X_1sp, X_2sp, bw, outGrid, kern) -# cov12_rd <- uniCov(X_1sp, X_2sp, bw, outGrid, kern, rmDiag=TRUE) -cov12_1D <- uniCov(X_1sp, X_2sp, bw, outGrid, kern, use1D=TRUE) -cov13 <- uniCov(X_1sp, Z[, 3], bw, outGrid, kern) -cov21 <- uniCov(X_2sp, X_1sp, bw, outGrid, kern) -# cov11 <- uniCov(X_1sp, X_1sp, bw, outGrid, kern) -# cov11_rd <- uniCov(X_1sp, X_1sp, bw, outGrid, kern, rmDiag=TRUE) -# cov22 <- uniCov(X_2sp, X_2sp, bw, outGrid, kern) -# cov22_rd <- uniCov(X_2sp, X_2sp, bw, outGrid, kern, rmDiag=TRUE) -# rgl::persp3d(outGrid, outGrid, cov12) -test_that('Function-function cov works', { - expect_equal(cov12, t(cov21)) - - # x-direction is close to constant. - expect_true(mean(apply(cov12, 2, sd), trim=0.1) < 0.08) - - # y-direction is close to 1/4 * (1.5 + cos(pi t)) - expect_true(sqrt(mean((colMeans(cov12) - sqrt(2) / 4 * cos(pi * outGrid))^2, trim=0.1)) < 0.133) - - # 1D and 2D smoother is similar - expect_equal(diag(cov12), diag(cov12_1D), tolerance=0.2) -}) - -covAll <- MvCov(vars, bw, outGrid, kern) -covAllNoError <- MvCov(vars, bw, outGrid, kern, measurementError=FALSE) - -test_that('Multi-function/scaler cov works', { -# The cov(x, y) and cov(y, x) is symmetric. - expect_equal(as.numeric(cov12), as.numeric(covAll[, , 1, 2])) - expect_equal(covAll[, , 3, 1], t(covAll[, , 1, 3])) - expect_equal(covAll[, , 4, 3], t(covAll[, , 3, 4])) - expect_equal(covAll[, , 1, 2], t(covAll[, , 2, 1])) - expect_equal(covAll[, , 1, 2], covAllNoError[, , 1, 2]) - tmp <- max(abs(covAll[, , 1, 1] - covAllNoError[, , 1, 1])) - expect_true(tmp > 0.01 && tmp < 0.35) - - # rgl::persp3d(outGrid, outGrid, covAll[, , 1, 1], col='blue', xlab='X(s)', ylab='Y(t)') - # rgl::persp3d(outGrid, outGrid, covAll[, , 1, 1], col='blue', xlab='X(s)', ylab='Y(t)') -}) - -demeanRes <- demean(vars, bw, kern) -varsDemean <- demeanRes[['xList']] -muDemean <- demeanRes[['muList']] -covAllDemean <- MvCov(varsDemean, bw, outGrid, kern, center=FALSE) - -test_that('demean works', { - expect_equal(demeanRes[['muList']][['Z_3']], mean(vars[['Z_3']])) - expect_equal(demeanRes[['muList']][['Z_4']], mean(vars[['Z_4']])) - expect_equal(uniCov(varsDemean[['X_1']], varsDemean[['X_2']], bw, outGrid, center=FALSE), cov12) - expect_equal(uniCov(varsDemean[['X_1']], varsDemean[['Z_3']], bw, outGrid, center=FALSE), cov13) - expect_equal(covAll, covAllDemean) -}) - -withError2D <- FCReg(vars, bw,bw, outGrid) -withError1D <- FCReg(vars, bw,bw, outGrid, diag1D='cross') -noError2D <- FCReg(vars, bw,bw, outGrid, measurementError=FALSE) -noError1D <- FCReg(vars, bw, bw,outGrid, measurementError=FALSE, diag1D='all') - -# matplot(outGrid, t(withError2D$beta), 'l') -# matplot(outGrid, t(noError2D$beta), 'l') -# matplot(outGrid, t(noError1D$beta), 'l') - -expect_error(FCReg(vars, bw, bw, outGrid, measurementError=TRUE, diag1D='all'), "Cannot assume measurement error when diag1D == 'all'") - -# # Minimal eigenvalues sometimes smaller than 0. -# minLambda <- sapply(seq_along(outGrid), function(i) { - # min(eigen(noError1D[['cov']][i, i, 1:4, 1:4])[['values']]) -# }) -# minLambda2D <- sapply(seq_along(outGrid), function(i) { - # min(eigen(noError2D[['cov']][i, i, 1:4, 1:4])[['values']]) -# }) - -test_that('1D and 2D covariance estimates are similar', { - expect_true(sqrt(mean( - (withError2D[['beta']] - withError1D[['beta']])^2, - trim=0.2)) < 0.2) - expect_equal(noError2D[['beta']], noError1D[['beta']], tolerance=0.1) -}) - -withError2DRect <- FCReg(vars, bw, bw, outGrid, kern='rect') -withError1DRect <- FCReg(vars, bw,bw, outGrid, diag1D='cross', kern='rect') -noError2DRect <- FCReg(vars, bw,bw, outGrid, measurementError=FALSE, kern='rect') -noError1DRect <- FCReg(vars, bw,bw, outGrid, measurementError=FALSE, diag1D='all', kern='rect') -withError2DEpan <- FCReg(vars, bw,bw, outGrid, kern='epan') -withError1DEpan <- FCReg(vars, bw,bw, outGrid, diag1D='cross', kern='epan') -noError2DEpan <- FCReg(vars, bw,bw, outGrid, measurementError=FALSE, kern='epan') -noError1DEpan <- FCReg(vars, bw,bw, outGrid, measurementError=FALSE, diag1D='all', kern='epan') - -test_that('Different kernel type works', { - expect_true(sqrt(mean( - (withError2DRect[['beta']] - withError1DRect[['beta']])^2, - trim=0.2)) < 0.2) - expect_equal(noError2DRect[['beta']], noError2D[['beta']], tolerance=0.2) - expect_equal(noError1DRect[['beta']], noError1D[['beta']], tolerance=0.2) - # expect_equal(withError2DRect[['beta']], withError2DEpan[['beta']], tolerance=0.2) - # expect_equal(withError1DRect[['beta']], withError1DEpan[['beta']], tolerance=0.2) - expect_equal(noError2DRect[['beta']], noError2DEpan[['beta']], tolerance=0.2) - expect_equal(noError1DRect[['beta']], noError1DEpan[['beta']], tolerance=0.2) -}) - -fpcaX1 <- FPCA(X_1sp[['Ly']], X_1sp[['Lt']], list(userBwMu=bw, userBwCov=bw)) -fpcaX2 <- FPCA(X_2sp[['Ly']], X_2sp[['Lt']], list(userBwMu=bw, userBwCov=bw)) -fpcaY <- FPCA(Ysp[['Ly']], Ysp[['Lt']], list(userBwMu=bw, userBwCov=bw)) -FPCAlist <- list(Y=fpcaY, X_1=fpcaX1, X_2=fpcaX2) -imputeRes <- imputeConReg(FPCAlist, Z[, 3:4], outGrid) -test_that('imputation and 1D beta estimates are similar', { - expect_equal(imputeRes[['beta0']], noError1D[['beta0']], scale=1, tolerance=0.5) - expect_equal(unname(imputeRes[['beta']]), unname(noError1D[['beta']]), scale=1, tolerance=0.5) -}) - -## subsetVars -test_that('subseting covariates is fine', { - subVars <- subsetVars(vars, 1) - subVarsTF <- subsetVars(vars, c(TRUE, rep(FALSE, n - 1))) - expect_equal(subVars, subVarsTF) - expect_equal(subVars[['X_1']][['Lt']][[1]], X_1sp[['Lt']][[1]]) - expect_equal(length(subVars[['X_1']][['Lt']]), 1) - expect_equal(length(subVars[['Z_3']]), 1) -}) - -test_that('Test based on previous implementation: simple concurrent regression works fine', { - set.seed(123); N = 1001; M = 101; - # Define the continuum - s = seq(0,10,length.out = M) - # Define the mean and 2 eigencomponents - meanFunct <- function(s) 0.2*s + 2.0*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) 1* -sin(2*s*pi/10) / sqrt(5) - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = Ksi %*% diag(c(5,2)) - # Create X_covariate - xTrue = Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) - # Create beta_Func - betaFunc1 = c(2,2) %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) - z1 <- rnorm(N,sd=1) - # Create scalar dep. variable a - y = matrix(rep(0,N*M), ncol = M); - yTrue = matrix(rep(0,N*M), ncol = M); - for (i in 1:N) { - y[i,] = rnorm(sd=1.99,0, n=M) + z1[i] * 2.5 + 0.2 * s +(xTrue[i,]) * t(betaFunc1); - yTrue[i,] = rnorm(sd=0.0011,0, n=M) + z1[i] * 2.5 + 0.2 * s +(xTrue[i,]) * t(betaFunc1); - } - sparsitySchedule = 1:16; - set.seed(1) - Yf <- Sparsify(y, s, sparsitySchedule) - set.seed(1) - Xf <- Sparsify(xTrue, s, sparsitySchedule) - - outGrid <- s - vars <- list(X = Xf, Z = z1, Y = Yf) - - Q <- FCReg(vars, 0.5,0.5, outGrid, 'epan', measurementError=FALSE) - - expect_equal( 2.5, mean(Q$beta[2,]) , tol= 0.01 ) - expect_gt( cor( Q$beta0, 0.2*s), 0.95) # this should be change to beta0 at some point. - expect_gt( cor(Q$beta[1,], as.vector(betaFunc1)), 0.99) -}) - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FClust.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FClust.R deleted file mode 100644 index f2f1154e..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FClust.R +++ /dev/null @@ -1,42 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('the growth example works.', { - - - A <- read.table(system.file('testdata', 'growth.dat', - package='fdapace')) - B <- MakeFPCAInputs( IDs = A[,1], tVec = A$V3, yVec = A$V4) - C <- FClust(B$Ly, B$Lt, k = 2, cmethod = 'EMCluster') - D <- FClust(B$Ly, B$Lt, k = 2, cmethod = 'kCFC') - trueClusters <- A$V2[!duplicated(A$V1)] - N = length(trueClusters) - cRates <- c( sum(trueClusters == C$cluster), sum(trueClusters == C$cluster) )/N # 0.9677 & 0.9355 - cRates <- sapply(cRates, function(x) ifelse(x < 0.5, 1- x, x)) - - expect_gt( cRates[2], 0.935) # kCFC - expect_gt( cRates[1], 0.967) # Rmixmod - - load(system.file('data', 'medfly25.RData', package='fdapace')) - Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) - for (i in 1:3) { - set.seed(i) - A <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90)) - # B <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), k = 2, seed=i) - } -}) - -test_that('the k-means initialisation error occurs normally.', { - - set.seed(1) - n <- 100 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - expect_error(FClust(tmp$Ly, tmp$Lt, k = 14, cmethod = "kCFC", optnsFPCA = list(userBwCov= 2, FVEthreshold = 0.90)) ) - -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FOptDes.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FOptDes.R deleted file mode 100644 index a6cbdc35..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FOptDes.R +++ /dev/null @@ -1,94 +0,0 @@ -cat("\nTests for 'FOptDes'") -library(testthat) - -test_that("optimal designs for trajectory recovery for dense data does not return any errors", { - set.seed(1) - n <- 50 - pts <- seq(0, 1, by=0.05) - sampWiener <- Wiener(n, pts) - sampWiener <- MakeFPCAInputs(IDs = rep(c(1:n),length(pts)), tVec = rep(pts,each = n), yVec = as.vector(sampWiener)) - # global - res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=3, - isSequential=FALSE, RidgeCand = seq(0.1,1,0.1)) - # sequential optimization - res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=3, - isSequential=TRUE, RidgeCand = seq(0.1,1,0.1)) -}) - -test_that("optimal designs for trajectory recovery for sparse data does not return any errors",{ - set.seed(1) - n <- 50 - pts <- seq(0, 1, by=0.05) - sampWiener <- Wiener(n, pts) - sampWiener <- Sparsify(sampWiener, pts, 4:6) - # global - res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=3, - isSequential=FALSE, RidgeCand = seq(2,10,1)) - # sequential optimization - resseq <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=3, - isSequential=TRUE, RidgeCand = seq(2,10,1)) -}) - -test_that("optimal designs for response prediction for dense data does not return any errors", { - eifnMat <- function(K,t){ - l <- diff(range(t)) - a <- t[1] - mat <- c() - for(k in 1:K){ - mat <- cbind(mat,sqrt(2/l)*cos((k/l)*pi*(t-a))) - } - return(mat) - } - n=100 - reggrid = seq(0,1,0.05) - mu=rep(0,length(reggrid)) - phi=eifnMat(K=10,t=reggrid) - lambda=c(30, 20, 12, 8, 30/c(5:10)^2) - K=10 - errorvar=0.25 - resp_errorvar = 0.25 - isDense = TRUE - Sparsity = 4:8 - DenseTrue <- matrix(rep(mu,n),byrow=TRUE,nrow=n,ncol=length(reggrid)) # n by length(RegGrid) matrix - scores <- matrix(0,nrow=n,ncol=length(lambda)) # n by K matrix of FPC scores - for(i in 1:ncol(scores)){ scores[,i] <- rnorm(n,mean=0,sd=sqrt(lambda[i])) } - DenseTrue <- DenseTrue + t(phi %*% t(scores)) - # Generate independent measurement errors - errorMat <- matrix(rnorm(n*length(reggrid),mean=0,sd=sqrt(errorvar)),nrow=n,ncol=length(reggrid)) - DenseObs <- DenseTrue + errorMat - RespTrue <- scores %*% c(1,-2,1,-2,rep(0,K-4)) - RespObs <- c(RespTrue + rnorm(n, mean=0, sd=sqrt(resp_errorvar))) - t <- list(); y <- list(); - for(i in 1:n){ t[[i]] <- reggrid; y[[i]] <- DenseObs[i,] } - # global - #res <- FOptDes(Ly=y, Lt=t, Resp=RespObs, p=3, - # isSequential=FALSE, RidgeCand = seq(0.1,1,0.1)) - # sequential optimization - res <- FOptDes(Ly=y, Lt=t, Resp=RespObs, p=3, - isSequential=TRUE, RidgeCand = seq(0.1,1,0.1)) -}) - -test_that("trajectory recovery case with p=1 for Brownian Motion on [0,1] returns theoretically correct optimal design", { - set.seed(1) - n <- 100 - pts <- seq(0, 1, by=0.05) - sampWiener <- Wiener(n, pts) - fpcainput <- MakeFPCAInputs(IDs = rep(seq_len(n), each=length(pts)), tVec = rep(pts, n), - yVec = t(sampWiener)) - # global - res <- FOptDes(Ly=fpcainput$Ly, Lt=fpcainput$Lt, p=1, - isSequential=FALSE, RidgeCand = 0.05) - expect_equal(res$OptDes, 0.75) -}) - -test_that("medfly25 data example: optimal designs for response prediction for sparse data does not return error", { - data(medfly25) - set.seed(1) - medinput = MakeFPCAInputs(IDs = medfly25$ID, tVec = medfly25$Days, - yVec = medfly25$nEggs) - n = length(unique(medfly25$ID)) - respidx = seq(from = 1, by = 25, length.out = n) - Resp = medfly25$nEggsRemain[respidx] - res <- FOptDes(Ly = medinput$Ly, Lt = medinput$Lt, Resp = Resp, p = 2, - isSequential = FALSE, RidgeCand = seq(60,70,1)) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCA.R deleted file mode 100644 index be872274..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCA.R +++ /dev/null @@ -1,332 +0,0 @@ -# devtools::load_all() -library(testthat) -##options(error=recover) - -trueLam <- 4 / ((2 * (1:50) - 1 ) * pi) ^ 2 - -# set.seed(1) -# n <- 100 -# pts <- seq(0, 1, by=0.05) -# samp3 <- Wiener(n, pts) + rnorm(n * length(pts), sd=0.1) -# samp3 <- Sparsify(samp3, pts, 10) -# res <- FPCA(samp3$Ly, samp3$Lt, list(dataType='Sparse', useBins=TRUE)) -# res$lambda / trueLam[1:length(res$lambda)] -# res$sigma2 - -# CreateCovPlot(res, 'Smoothed', FALSE) - -test_that('error == FALSE works', { - set.seed(1) - n <- 100 - M <- 51 - pts <- seq(0, 1, length.out=M) - mu <- rep(0, length(pts)) - sampDense <- Wiener(n, pts) - samp4 <- Sparsify(sampDense, pts, 10) - res4NE <- FPCA(samp4$Ly, samp4$Lt, list(error=FALSE, nRegGrid=M, FVEthreshold=1)) - res4Err <- FPCA(samp4$Ly, samp4$Lt, list(error=TRUE, nRegGrid=M, FVEthreshold=1)) - - # CreatePathPlot(res4Err, 11:15) - # CreatePathPlot(res4NE, 11:15) - expect_equal(res4NE$sigma2, NULL) - expect_true(mean((fitted(res4NE) - sampDense)^2) > - mean((fitted(res4Err) - sampDense)^2)) -}) - -test_that('Truncation works for FPCA Wiener process', { - set.seed(1) - n <- 100 - pts <- seq(0, 1, by=0.01) - mu <- rep(0, length(pts)) - samp4 <- Wiener(n, pts) + rnorm(n * length(pts), sd=0.1) - samp4 <- Sparsify(samp4, pts, 10) - samp5 <- samp4 - samp4$Ly[[1]] <- samp4$Lt[[1]] <- c(0, 1) - pTrunc <- SetOptions(samp4$Ly, samp4$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', outPercent=c(0.03, 0.97), verbose=TRUE)) - pNoTrunc <- SetOptions(samp4$Ly, samp4$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) - set.seed(1); res4 <- FPCA(samp4$Ly, samp4$Lt, pTrunc) - set.seed(1); res5NoTrunc <- FPCA(samp5$Ly, samp5$Lt, pNoTrunc) - set.seed(1); res4NoTrunc <- FPCA(samp4$Ly, samp4$Lt, pNoTrunc) - - expect_equal(res4[c('sigma2', 'bwMu', 'bwCov')], res4NoTrunc[c('sigma2', 'bwMu', 'bwCov')]) - expect_equal(min(max(abs(res4$xiEst[-1, 1] - res4NoTrunc$xiEst[-1, 1])), max(abs(res4$xiEst[-1, 1] + res4NoTrunc$xiEst[-1, 1]))), 0, tol=0.5) - expect_equal(min(max(abs(res5NoTrunc$xiEst[-1, 1] - res4NoTrunc$xiEst[-1, 1])), max(abs(res5NoTrunc$xiEst[-1, 1] + res4NoTrunc$xiEst[-1, 1]))), 0, tol=0.05) - expect_equal(nrow(res4$xiEst), nrow(res4NoTrunc$xiEst)) - expect_equal(length(res4$xiVar), length(res4NoTrunc$xiVar)) -}) - -test_that('Missing values work for FPCA Wiener process', { - set.seed(1) - n <- 200 - pts <- seq(0, 1, by=0.01) - mu <- rep(0, length(pts)) - samp4 <- Wiener(n, pts) + rnorm(n * length(pts), sd=0.1) - samp4 <- Sparsify(samp4, pts, 10) - samp4$Ly[[1]] <- samp4$Lt[[1]] <- c(0, 1) - pNoTrunc <- SetOptions(samp4$Ly, samp4$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) - - samp4$Ly[[2]] <- samp4$Lt[[2]] <- c(0.1, 0.2, 0.5) - set.seed(1); res4 <- FPCA(samp4$Ly, samp4$Lt, pNoTrunc) - - samp4$Ly[[2]] <- c(NA, 0.2, 0.5) - set.seed(1); res4NaN <- FPCA(samp4$Ly, samp4$Lt, pNoTrunc) - - samp4$Ly[[2]] <- c(0.1, 0.2, 0.5) - samp4$Lt[[2]] <- c(NA, 0.2, 0.5) - set.seed(1); res4NaN2 <- FPCA(samp4$Ly, samp4$Lt, pNoTrunc) - - expect_equal(res4[c('sigma2', 'bwMu', 'bwCov')], res4NaN[c('sigma2', 'bwMu', 'bwCov')], tol=1e-7) - expect_equal(nrow(res4$xiEst), nrow(res4NaN$xiEst)) - expect_equal(length(res4$xiVar), length(res4NaN$xiVar)) - expect_equal(res4NaN$inputData$Ly[[2]], c(0.2,0.5)) - expect_equal( res4$inputData$Ly[[2]], c(0.1,0.2,0.5)) - expect_equal(res4NaN2[c('sigma2', 'bwMu', 'lambda')], res4NaN[c('sigma2', 'bwMu', 'lambda')], tol=1e-7) - -}) -test_that('User provided mu and cov for simple example',{ - - set.seed(123) - N = 200; - M = 100; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - ef <- matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2) - ev <- c(5, 2)^2 - covTrue <- ef %*% diag(ev) %*% t(ef) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = Ksi %*% diag(sqrt(ev)) - - # Create Y_true - yTrue = Ksi %*% t(ef) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create sparse sample - # Each subject has one to five readings (median: 3); - ySparse = Sparsify(yTrue, s, c(2:5)) - - # Give your sample a bit of noise - ySparse$yNoisy = lapply( ySparse$Ly, function(x) x + 1 * rnorm(length(x))) - - # Do FPCA on this sparse sample - FPCAsparseA = FPCA(ySparse$yNoisy,ySparse$Lt, optns = - list(userMu = list(t=s,mu= meanFunct(s)), userCov = list(t=s,cov= covTrue) )) - - expect_equal(FPCAsparseA$sigma2, 1, tolerance=0.1) - expect_equal( spline(y = FPCAsparseA$mu, x = FPCAsparseA$workGrid, xout = FPCAsparseA$obsGrid)$y, - expected = meanFunct(s), tolerance = 1e-3) - expect_equal( FPCAsparseA$lambda, expected=ev, tolerance = 1e-1) - expect_equal( abs(cor( FPCAsparseA$xiEst[,1], Ksi[,1])) > 0.9, TRUE) -}) - -test_that('User provided mu, cov, and sigma2',{ - - set.seed(123) - N = 200; - M = 90; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue = Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create sparse sample - # Each subject has one to five readings (median: 3); - ySparse = Sparsify(yTrue, s, c(2:5)) - - # Give your sample a bit of noise - ySparse$yNoisy = lapply( ySparse$Ly, function(x) x + 0.025*rnorm(length(x))) - - userSigma2 <- 0.1 - # Do FPCA on this sparse sample - FPCAsparseA = FPCA(ySparse$yNoisy,ySparse$Lt, optns = - list(userMu = list(t=s,mu= meanFunct(s)), userSigma2=0.1 )) - - expect_equal( FPCAsparseA$sigma2, userSigma2) - expect_equal( sqrt(FPCAsparseA$lambda[1:2]), expected=c(5,2), tolerance = 1e-1) - expect_equal( abs(cor( FPCAsparseA$xiEst[,1], Ksi[,1])) > 0.95, TRUE) - expect_equal( abs(cor( FPCAsparseA$xiEst[,2], Ksi[,2])) > 0.90, TRUE) -}) - -test_that('Case where one component should be returned',{ - - set.seed(123) - N = 111; - M = 81; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 1 - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue = Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create sparse sample - # Each subject has one to five readings (median: 3); - ySparse = Sparsify(yTrue, s, c(1:5)) - FPCAsparseA = FPCA(ySparse$Ly,ySparse$Lt, optns = - list( FVEthreshold = 0.4, userMu = list(t=s,mu= meanFunct(s)) ) ) - - expect_equal(spline(y = FPCAsparseA$mu, x = FPCAsparseA$workGrid, xout = FPCAsparseA$obsGrid)$y, - expected = meanFunct(s), tolerance = 1e-3) - expect_equal( length(FPCAsparseA$lambda), 1) - -}) - -test_that('GetCovDense with noise, get sigma2', { - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - - resNoerr <- FPCA(tmp$Ly, tmp$Lt, list(error=FALSE, dataType='Dense', lean=TRUE)) - resErr <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', shrink=TRUE, lean=TRUE)) - resErr$optns - - expect_equal(resErr$sigma2, sigma2, tolerance=1e-1) - # shrinkage should be a bit better - expect_true(mean((fitted(resNoerr) - sampTrue) ^ 2) > - mean((fitted(resErr) - sampTrue) ^ 2)) -}) - -test_that('Dense data that requires binning', { - set.seed(1) - n <- 100 - p <- 1001 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - - resErr <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', useBinnedData='AUTO')) - resErrNoBin <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', useBinnedData='OFF')) - - expect_equal(range(resErr$obsGrid), range(resErrNoBin$obsGrid)) - expect_equal(range(resErr$workGrid), range(resErrNoBin$workGrid)) - expect_equal(resErr$sigma2, sigma2, tolerance=1e-1) - expect_equal(length(resErr$obsGrid), 400) - expect_equal(length(resErr$workGrid), 400) - plot(resErr) -}) - - -if (Sys.getenv('TRAVIS') != 'true') { - - - test_that('GetCovDense with noise, known cov, get sigma2', { - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - - resErr <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', shrink=TRUE, lean=TRUE, userCov=list(t=pts, cov=outer(pts, pts, pmin)))) - - expect_equal(resErr$sigma2, sigma2, tolerance=1e-1) - }) - - test_that('noisy dense data, cross-sectional mu/cov, use IN/CE score', { - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - - resErrCE <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodXi='CE')) - resErrCEKnownSigma2 <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodXi='CE', userSigma2=sigma2)) - resErrIN <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodXi='IN')) - - expect_equal(resErrCE$xiEst[, 1], resErrIN$xiEst[, 1], tolerance=1e-2) - expect_equal(resErrCE$xiEst[, 2], resErrIN$xiEst[, 2], tolerance=5e-2) - expect_equal(resErrCE$xiEst[, 3], resErrIN$xiEst[, 3], tolerance=1e-1) - expect_equal(resErrCEKnownSigma2$xiEst[, 1], resErrIN$xiEst[, 1], tolerance=1e-2) - }) - - test_that('noisy dense data, smooth mu/cov, use IN/CE score', { - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - sampTrue <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) - samp <- sampTrue + rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - tmpMV <- tmp - tmpMV$Ly[[1]][1] <- NA - - resErrCSCE <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodMuCovEst='cross-sectional', methodXi='CE')) - resErrCE <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodMuCovEst='smooth', methodXi='CE')) - resErrIN <- FPCA(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense', lean=TRUE, methodMuCovEst='smooth', methodXi='IN')) - resErrCEMV <- FPCA(tmpMV$Ly, tmpMV$Lt, list(error=TRUE, dataType='DenseWithMV', lean=TRUE, methodMuCovEst='smooth', methodXi='CE')) - resErrINMV <- FPCA(tmpMV$Ly, tmpMV$Lt, list(error=TRUE, dataType='DenseWithMV', lean=TRUE, methodMuCovEst='smooth', methodXi='IN')) - - trueCov <- outer(pts, pts, pmin) - expect_true(max(abs(resErrCE$smoothedCov - trueCov)) < 0.1) - expect_true(max(abs(resErrCSCE$smoothedCov - trueCov)) < 0.25) - expect_equal(resErrCE$xiEst[, 1], resErrIN$xiEst[, 1], tolerance=1e-2) - expect_equal(resErrCE$xiEst[, 2], resErrIN$xiEst[, 2], tolerance=6e-2) - expect_equal(resErrCE$xiEst[, 3], resErrIN$xiEst[, 3], tolerance=1e-1) - expect_equal(resErrCE$fittedCov, resErrCEMV$fittedCov, tolerance=1e-1) - expect_equal(resErrIN$xiEst[, 1:4], resErrINMV$xiEst[, 1:4], tolerance=1e-1) - }) - - - test_that('CV/useBW1SE works', { - set.seed(1) - n <- 100 - M <- 51 - pts <- seq(0, 1, length.out=M) - mu <- rep(0, length(pts)) - sampDense <- Wiener(n, pts) - samp4 <- Sparsify(sampDense, pts, 10) - res5 <- FPCA(samp4$Ly, samp4$Lt, list(methodBwMu = 'CV',methodBwCov = 'CV', useBinnedCov= FALSE)) - res51 <- FPCA(samp4$Ly, samp4$Lt, list(methodBwMu = 'CV',methodBwCov = 'CV', useBW1SE = TRUE, useBinnedCov= FALSE)) - - expect_true( res51$bwCov >= res5$bwCov ) - expect_true( res51$bwMu >= res5$bwMu ) - }) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCAder.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCAder.R deleted file mode 100644 index 9ac156a6..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCAder.R +++ /dev/null @@ -1,173 +0,0 @@ -# devtools::load_all() -library(testthat) -# library(RColorBrewer) - -test_that('FPCAder correct derivatives of mean for dense case', { - set.seed(1) - n <- 500 - p <- 300 - pts <- seq(0, 1, length.out=p) - samp <- Wiener(n, pts) - samp <- samp + rnorm(n * p, sd=0.01) + matrix(pts, n, p, byrow=TRUE) - spSamp <- Sparsify(samp, pts, p) # This just puts the sample in list. - fpcaObj <- FPCA(spSamp$Ly, spSamp$Lt, list(dataType='Dense' )) - fpcaObjDer <- FPCAder(fpcaObj, list(p=1)) - - expect_equal(median(fpcaObjDer$muDer), 1, tolerance=0.1, scale = 1) -}) - - - - -test_that('FPCAder correct derivatives of mean for sparse case',{ - set.seed(1) - n <- 333 - pts <- seq(0, 1, by=0.01) - mu <- 0:(length(pts)-1) / 50 - phi = CreateBasis(K=4, type='fourier', pts= pts) - samp1 <- t(mu + phi %*% matrix( rnorm(n*4, mean=0, sd=c(1,.4, 0.01, 0.001)), nrow=4)) - samp2 <- Sparsify(samp1, pts, 8) - fpcaObj = FPCA(samp2$Lt, Ly= samp2$Ly) - fpcaObjDer <- FPCAder(fpcaObj, list(p=1)) - expect_equal(median(fpcaObjDer$muDer), 2, tolerance=0.1, scale = 1) -}) - - -test_that('noisy dense case for DPC, FPC, and FPC1', { - bw <- 0.2 - kern <- 'epan' - set.seed(1) - n <- 100 - plotInd <- 1:8 - pts <- seq(0, 1, by=0.01) - M <- length(pts) - sparsity <- length(pts) - mu <- seq(0, 1, length.out=length(pts)) - phi <- CreateBasis(K=3, type='legendre01', pts=pts) - basisDerMat <- apply(phi, 2, function(x) ConvertSupport(seq(0, 1, length.out=M - 1), pts, diff(x) * (M - 1))) - lambdaTrue <- c(1, 0.8, 0.5)^2 - sigma2 <- 1 - - samp2 <- MakeGPFunctionalData(n, M, pts, K=length(lambdaTrue), lambda=lambdaTrue, sigma=sqrt(sigma2), basisType='legendre01') - samp2 <- c(samp2, MakeFPCAInputs(tVec=pts, yVec=samp2$Yn)) - trueDer <- matrix(1, n, M, byrow=TRUE) + tcrossprod(samp2$xi, basisDerMat) - samp2 <- c(samp2, list(trueDer=trueDer)) - fpcaObj <- FPCA(samp2$Ly, samp2$Lt, list(nRegGrid=M, methodMuCovEst='smooth', userBwCov=bw, userBwMu=bw, kernel=kern)) - - FPCoptn1 <- list(bw=bw, kernelType=kern, p=1, method='FPC') - FPCoptn2 <- list(bw=bw, kernelType=kern, p=1, method='FPC1') - DPCoptn1 <- list(bw=bw, kernelType=kern, p=1, method='DPC', G10_1D=TRUE) - # DPCoptn2 <- list(bw=bw, kernelType=kern, p=1, method='DPC', G10_1D=FALSE) - FPC <- FPCAder(fpcaObj, FPCoptn1) - FPC1 <- FPCAder(fpcaObj, FPCoptn2) - fpcaObjDer1 <- FPCAder(fpcaObj, DPCoptn1) - # fpcaObjDer2 <- FPCAder(fpcaObj, DPCoptn2) - k1 <- 3 - estFPC <- fitted(FPC, k1) - estFPC1 <- fitted(FPC1, k1) - estDPC <- fitted(fpcaObjDer1, k1) - # estDPC1 <- fitted(fpcaObjDer2, k1) - - matplot(t(samp2$Y), type='l') - matplot(t(trueDer), type='l') - matplot(t(estFPC1), type='l') - matplot(t(estFPC), type='l') - matplot(t(estDPC), type='l') - # matplot(t(estDPC1), type='l') - - expect_equal(estFPC, trueDer, tolerance=1, scale=1) - expect_equal(estFPC1, trueDer, tolerance=1, scale=1) - expect_equal(estDPC, trueDer, tolerance=1, scale=1) - - # 1D smoother for cov10 is better - # expect_true(mean(abs(estDPC - trueDer)) < mean(abs(estDPC1 - trueDer))) -}) - -# test_that('noiseless dense case for DPC', { - # bw <- 0.1 - # set.seed(1) - # n <- 100 - # plotInd <- 1:8 - # pts <- seq(0, 1, by=0.01) - # sparsity <- length(pts) - # mu <- seq(0, 1, length.out=length(pts)) - # phi <- CreateBasis(K=3, type='fourier', pts= pts) - # lambdaTrue <- c(1, 0.8, 0.5)^2 - # sigma2 <- 0 - # nRegGrid <- 51 - # regGrid <- seq(0, 1, length.out=nRegGrid) - - # samp1 <- t(mu + phi %*% matrix(rnorm(n*3, mean=0, sd=sqrt(lambdaTrue)), nrow=3)) - # samp1p <- t(apply(samp1, 1, diff) / (pts[2] - pts[1])) - # samp1p <- t(ConvertSupport(seq(min(pts), max(pts), length.out=length(pts) - 1), regGrid, phi=t(samp1p))) - # samp2 <- Sparsify(samp1 + rnorm(length(samp1), sd=sqrt(sigma2)), pts, sparsity) - # # Cross-sectional is used! - # fpcaObj <- FPCA(samp2$Lt, Ly= samp2$Ly, list(nRegGrid=nRegGrid, methodMuCovEst='cross-sectional')) - - # derOptns1 <- list(bw=bw, kernelType='epan', p=1, method='DPC', useTrue=FALSE, G10_1D=TRUE) - # fpcaObjDer1 <- FPCAder(fpcaObj, derOptns1) - # derOptns2 <- list(bw=bw, kernelType='epan', p=1, method='DPC', useTrue=FALSE, G10_1D=FALSE) - # fpcaObjDer2 <- FPCAder(fpcaObj, derOptns2) - # k1 <- 2 - # est1 <- fitted(fpcaObjDer1, k1, derOptns1) - # k2 <- 2 - # est2 <- fitted(fpcaObjDer2, k2, derOptns2) - # expect_equal(est1, samp1p, tolerance=1.5, scale=1) - # # 1D smoother for cov10 is better - # expect_true(mean(abs(est1 - samp1p)) < mean(abs(est2 - samp1p))) - - # # # display.brewer.all() - # # color <- brewer.pal(8, 'Dark2') - # # ylim <- c(min(samp1p[, plotInd]), max(samp1p[, plotInd])) - # # matplot(regGrid, t(samp1p[plotInd, ]), type='l', ylim=ylim, col=color, lwd=2) - # # CreatePathPlot(fpcaObjDer1, plotInd, 2, derOptns=derOptns1, ylim=ylim, col=color, lwd=2) - # # CreatePathPlot(fpcaObjDer2, plotInd, 2, derOptns=derOptns2, ylim=ylim, col=color, lwd=2) -# }) - - -test_that('noisy sparse case for DPC, FPC, and FPC1', { - bw <- 0.4 - kern <- 'epan' - set.seed(1) - n <- 100 - pts <- seq(0, 1, by=0.01) - M <- length(pts) - sparsity <- 2:9 - mu <- seq(0, 1, length.out=length(pts)) - phi <- CreateBasis(K=3, type='legendre01', pts=pts) - basisDerMat <- apply(phi, 2, function(x) ConvertSupport(seq(0, 1, length.out=M - 1), pts, diff(x) * (M - 1))) - lambdaTrue <- c(1, 0.8, 0.5)^2 - sigma2 <- 0.01 - - samp2 <- MakeSparseGP(n, runif, sparsity, identity, K=length(lambdaTrue), lambda=lambdaTrue, sigma=sqrt(sigma2), basisType='legendre01') - trueDer <- matrix(1, n, M, byrow=TRUE) + tcrossprod(samp2$xi, basisDerMat) - samp2 <- c(samp2, list(trueDer=trueDer)) - fpcaObj <- FPCA(samp2$Ly, samp2$Lt, list(nRegGrid=M, methodMuCovEst='smooth', userBwCov=bw, userBwMu=bw, kernel=kern)) - - FPCoptn1 <- list(bw=bw, kernelType=kern, p=1, method='FPC') - FPCoptn2 <- list(bw=bw, kernelType=kern, p=1, method='FPC1') - DPCoptn1 <- list(bw=bw, kernelType=kern, p=1, method='DPC', G10_1D=TRUE) - # DPCoptn2 <- list(bw=bw, kernelType=kern, p=1, method='DPC', G10_1D=FALSE) - FPC <- FPCAder(fpcaObj, FPCoptn1) - FPC1 <- FPCAder(fpcaObj, FPCoptn2) - fpcaObjDer1 <- FPCAder(fpcaObj, DPCoptn1) - # fpcaObjDer2 <- FPCAder(fpcaObj, DPCoptn2) - k1 <- 2 - estFPC <- fitted(FPC, k1) - estFPC1 <- fitted(FPC1, k1) - estDPC <- fitted(fpcaObjDer1, k1) - # estDPC1 <- fitted(fpcaObjDer2, k1) - - matplot(t(trueDer), type='l') - matplot(t(estFPC), type='l') - matplot(t(estFPC1), type='l') - matplot(t(estDPC), type='l') - # matplot(t(estDPC1), type='l') - - expect_equal(estFPC, trueDer, tolerance=5, scale=1) - expect_equal(estFPC1, trueDer, tolerance=5, scale=1) - expect_equal(estDPC, trueDer, tolerance=2, scale=1) - - # 1D smoother for cov10 is better - # expect_true(mean(abs(estDPC - trueDer)) < mean(abs(estDPC1 - trueDer))) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCReg.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCReg.R deleted file mode 100644 index e9df7bad..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCReg.R +++ /dev/null @@ -1,170 +0,0 @@ -library(testthat) -#devtools::load_all('D:\\tPACE\\tPACE') - -test_that ('Simple Dense and Sparse Case works', { -set.seed(1000) -n <- 300 #number of subjects -ngrids <- 51 #number of grids in [0,1] for X(s) -ngridt <- 51 #number of grids in [0,1] for Y(t) -grids <- seq(0, 1, length.out = ngrids) #regular grids in [0,1] for X(s) -gridt <- seq(0, 1, length.out = ngridt) #regular grids in [0,1] for Y(t) -#generate X -#{1, sqrt(2)*sin(2*pi*s), sqrt(2)*cos(2*pi*t)} are used to generate X. -eigenFun <- list(function(s){1 + 0 * s}, function(s){sqrt(2) * sin(2 * pi * s)}, function(s){sqrt(2) * cos(2 * pi * s)}) -basisX <- sapply(eigenFun,function(x){x(grids)}) -scoreX <- matrix(rnorm(n * 3), n, 3) #eigenvalues are assumed to be 1. -latentX <- scoreX %*% t(basisX) -measErrX <- sqrt(0.01) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX <- latentX + measErrX -#generate Y -#beta(s,t) <- sin(2*pi*s)*cos(2*pi*t) -betaEigen1 <- function(t){f <- function(s){sin(2 * pi * s) * cos(2 * pi * t) * (1 + 0 * s)}; return(f)} -betaEigen2 <- function(t){f <- function(s){sin(2 * pi * s) * cos(2 * pi * t) * (sqrt(2) * sin(2 * pi * s))}; return(f)} -betaEigen3 <- function(t){f <- function(s){sin(2 * pi * s) * cos(2 * pi * t) * (sqrt(2) * cos(2 * pi * s))}; return(f)} -betaEigen <- list(betaEigen1, betaEigen2, betaEigen3) -basisY <- array(0, c(ngridt, 3)) -for (i in 1:3) { - intbetaEigen <- function (t) {integrate(betaEigen[[i]](t), lower=0, upper=1)$value} - basisY[,i] <- sapply(1:ngridt, function(x){intbetaEigen(gridt[x])}) - } -latentY <- scoreX %*% t(basisY) -measErrY <- sqrt(0.01) * matrix(rnorm(n * ngridt), n, ngridt) #0.05 is sigma^2 -denseY <- latentY + measErrY - -#Dense data -timeX <- t(matrix(rep(grids, n), length(grids), n)) -timeY <- t(matrix(rep(gridt, n), length(gridt), n)) -denseVars <- list(X1 = list(Ly = denseX, Lt = timeX), Y = list(Ly = denseY, Lt = timeY)) -resuDense <- FPCReg(denseVars) -estiBetaX1Y_Dense <- resuDense$estiBeta$betaX1Y - -#Sparse data with fixed bw to avoid sensitive issue of possible revised of FPCA() bw in near future -sparseX <- Sparsify(denseX,grids,1:10) -sparseY <- Sparsify(denseY,gridt,1:10) -sparseVars <- list(X1 = sparseX, Y = sparseY) -resuSparse <- FPCReg(sparseVars,varsOptns = list(X1=list(userBwMu = 0.05, userBwCov = 0.1),Y=list(userBwMu = 0.05, userBwCov = 0.1)),Kx=3) -estiBetaX1Y_Sparse <- resuSparse $estiBeta$betaX1Y - -trueBetaX1Y <- sin(2 * pi * grids) %*% t(cos(2 * pi * gridt)) - -#Dense ratio of err and trun under L^2 -expect_equal(mean((estiBetaX1Y_Dense - trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 1e-2) -#Sparse ratio of err and trun under L^2 -expect_equal(mean((estiBetaX1Y_Sparse - trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 0.3) -}) - - - -#test for two predictors X1 and X2 -set.seed(1000) -#Model: E(Y(t)|X) = int(beta(s,t)*X(s)) -n <- 300 #number of subjects -ngrids <- 101 #number of grids in [0,1] for X(s) -ngridt <- 51 #number of grids in [0,1] for Y(t) -grids <- seq(0, 1, length.out=ngrids) #regular grids in [0,1] for X(s) -gridt <- seq(0, 1, length.out=ngridt) #regular grids in [0,1] for Y(t) - -#generate X -#{1, sqrt(2)*sin(2*pi*s), sqrt(2)*cos(2*pi*t)} are used to generate X. -eigenFun <- list(function(s){1 + 0 * s},function(s){sqrt(2) * sin(2*pi*s)},function(s){sqrt(2) * cos(2*pi*s)}) - -sig <- matrix(c(1.5, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 1.2, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 1.5, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 1.0), - nrow=6,ncol=6) - -scoreX <- MASS::mvrnorm(n,mu=rep(0,6),Sigma=sig) -scoreX1 <- scoreX[,1:3] -scoreX2 <- scoreX[,4:6] - -basisX1 <- sapply(eigenFun,function(x){x(grids)}) -latentX1 <- scoreX1 %*% t(basisX1) -measErrX1 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX1 <- latentX1 + measErrX1 - -basisX2 <- sapply(eigenFun,function(x){x(grids)}) -latentX2 <- scoreX2 %*% t(basisX2) -measErrX2 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX2 <- latentX2 + measErrX2 - -#generate Y -#beta(s, t) <- sin(2 * pi * s)*cos(2 * pi * t) -betaEigen1 <- function(t){f <- function(s){sin(2*pi*s) * cos(2*pi*t) * (1+0*s)};return(f)} -betaEigen2 <- function(t){f <- function(s){sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*sin(2*pi*s))}; return(f)} -betaEigen3 <- function(t){f <- function(s){sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*cos(2*pi*s))}; return(f)} -betaEigen <- list(betaEigen1, betaEigen2, betaEigen3) -basisY <- array(0,c(ngridt, 3)) -for(i in 1:3){ - intbetaEigen <- function (t) {integrate(betaEigen[[i]](t), lower = 0, upper = 1)$value} - basisY[, i] <- sapply(1:ngridt, function(x){intbetaEigen(gridt[x])}) - } -#Note that in the case BetaX1Y = beta and BetaX2Y = -beta -latentY <- scoreX1 %*% t(basisY) - scoreX2 %*% t(basisY) -measErrY <- sqrt(0.01) * matrix(rnorm(n*ngridt), n, ngridt) #0.01 is sigma^2 -denseY <- latentY + measErrY - -#======Dense data=============================================== -timeX <- t(matrix(rep(grids, n),length(grids), n)) -timeY <- t(matrix(rep(gridt, n),length(gridt), n)) -denseVars <- list(X1 = list(Ly = denseX1, Lt = timeX), - X2 = list(Ly = denseX2, Lt = timeX), - Y=list(Ly = denseY,Lt = timeY)) - -p <- length(denseVars)-1 -optns <- list(dataType = "Dense" ,error = 1, kernel='gauss', nRegGrid=51, useBinnedData='OFF') -brkX <- c(0, cumsum(c(ngrids,ngrids))) -dxMatrix <- dx(p, c(1,1), c(ngrids,ngrids), brkX) -gridNum <- c(ngrids,ngrids) -resdenseCov <- denseCov(p, denseVars, brkX, dxMatrix, gridNum, varsOptns= list(X1=optns,X2=optns,Y=optns)) - -test_that ('eigen decomposition of denseCov() works',{ -expect_equal( abs(resdenseCov$eigenValue[1]-max(diag(sig)))/max(diag(sig)), 0, tol = 1e-1) -expect_equal( abs(sum(resdenseCov$eigenValue[1:6])-sum(diag(sig)))/sum(diag(sig)), 0, tol = 1e-1) -}) - -resuDense <- FPCReg(denseVars, method="FVE") -estiBetaX1Y_Dense <- resuDense$estiBeta$betaX1Y -estiBetaX2Y_Dense <- resuDense$estiBeta$betaX2Y - -trueBetaX1Y <- sin(2 * pi * grids) %*% t(cos(2 * pi * gridt)) -test_that ('beta works in Dense with two predictors',{ -expect_equal(mean((estiBetaX1Y_Dense - trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 1e-2) -expect_equal(mean((estiBetaX2Y_Dense + trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 1e-2) -}) - -#======Sparse data=============================================== -sparsity = 5:10 -sparseX1 <- Sparsify(denseX1, grids, sparsity) -sparseX2 <- Sparsify(denseX2, grids, sparsity) -sparseY <- Sparsify(denseY, gridt, sparsity) -sparseVars <- list(X1 = sparseX1, X2 = sparseX2, Y = sparseY) - -ngrids <- 51 -grid <- seq(0, 1, length.out = ngrids) -p <- length(denseVars)-1 -brkX <- c(0, cumsum(c(ngrids,ngrids))) -dxMatrix <- dx(p, c(1,1), c(ngrids,ngrids), brkX) -gridNum <- c(ngrids,ngrids) -optns <- list(dataType = "Sparse" ,error = TRUE, kernel='gauss', nRegGrid=ngrids , useBinnedData='OFF') -demeanedRes <- demeanFuc(p, sparseVars, kern='gauss', varsOptns= list(X1=optns,X2=optns,Y=optns)) #Centered predictors. Using gauss for demeanFuc, but may be relaxed. -varsTrain <- demeanedRes[['xList']] -muList <- demeanedRes[['muList']] -ressparseCov <- sparseCov(p, sparseVars, brkX, varsOptns= list(X1=optns,X2=optns,Y=optns), sparseVars, muList, gridNum, dxMatrix, list(grid,grid)) - -test_that ('eigen decomposition of sparseCov() works',{ -expect_equal( abs(ressparseCov$eigenValue[1]-max(diag(sig)))/max(diag(sig)), 0, tol = 0.3) -expect_equal( abs(sum(ressparseCov$eigenValue[1:6])-sum(diag(sig)))/sum(diag(sig)), 0, tol = 0.3) -}) - -resuSparse <- FPCReg(sparseVars, varsOptns = list(X1=list(userBwMu = 0.05, userBwCov = 0.1), X2=list(userBwMu = 0.05, userBwCov = 0.1), Y=list(userBwMu = 0.05, userBwCov = 0.1)) , Kx=6) -estiBetaX1Y_Sparse <- resuSparse$estiBeta$betaX1Y -estiBetaX2Y_Sparse <- resuSparse$estiBeta$betaX2Y - -trueBetaX1Y <- sin(2 * pi * grid) %*% t(cos(2 * pi * grid)) -test_that ('beta estimates works in sparse with two predictors',{ -expect_equal(mean((estiBetaX1Y_Sparse - trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 0.3) -expect_equal(mean((estiBetaX2Y_Sparse + trueBetaX1Y)^2)/mean(trueBetaX1Y^2), 0, tol = 0.3) -}) \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCquantile.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCquantile.R deleted file mode 100644 index d7fe9b96..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FPCquantile.R +++ /dev/null @@ -1,107 +0,0 @@ -#devtools::load_all() -library(testthat) - -#positive test 1 -test_that('test estimates when x,y are independent', { - set.seed(10) - n = 20000 - m = 50 - ei = rnorm(n) - y=1:n - x=list() - t_x=list() - for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(ei[i]*array(1,m+1))) - y[i] = rnorm(1) - } - - outQ = c(0.1,0.25,0.5,0.75,0.9,0.95) - isNewsub = rep(0,n) - qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) - - expect_equal(max(abs(qtreg$pred_quantile[,1]-qnorm(0.1)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[,2]-qnorm(0.25)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[,3]-qnorm(0.5)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[,4]-qnorm(0.75)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[,5]-qnorm(0.9)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[,6]-qnorm(0.95)))<0.1,T) -}) - -#positive test 2 -test_that('test estimates when x only takes 2 values', { - set.seed(10) - n = 2000 - m = 50 - ei = c(rep(0,n/2),rep(1,n/2)) - y=1:n - x=list() - t_x=list() - for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(ei[i]*array(1,m+1))) - if(ei[i]==0){ - y[i] = rnorm(1) - }else{ - y[i] = runif(1,0,1) - } - } - - outQ = c(0.1,0.25,0.5,0.75,0.9) - isNewsub = rep(0,n) - qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) - - expect_equal(max(abs(qtreg$pred_quantile[ei==0,1]-qnorm(0.1)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==0,2]-qnorm(0.25)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==0,3]-qnorm(0.5)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==0,4]-qnorm(0.75)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==0,5]-qnorm(0.9)))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==1,1]-0.1))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==1,2]-0.25))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==1,3]-0.5))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==1,4]-0.75))<0.1,T) - expect_equal(max(abs(qtreg$pred_quantile[ei==1,5]-0.9))<0.1,T) -}) - - -# negative test 1 -test_that('test when output quantiles are not in [0,1]', { - n = 200 - npred = 50 - m = 50 - xi <- Wiener(n, 0:m/m) - y=1:n - x=list() - t_x=list() - for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(xi[i,])) - y[i] = 5*rnorm(1)+2*sum(xi[i,]) - } - - outQ = c(-0.1,0.25,0.5,0.75,0.9,0.95) - isNewsub = c(rep(0,n-npred),rep(1,npred)) - expect_error(FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) ) - #qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) -}) - -# negative test 2 -test_that('test when y and Lx does not have same length', { - n = 200 - npred = 50 - m = 50 - xi <- Wiener(n, 0:m/m) - y=1:(n+1) - x=list() - t_x=list() - for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(xi[i,])) - y[i] = 5*rnorm(1)+2*sum(xi[i,]) - } - - outQ = c(0.1,0.25,0.5,0.75,0.9,0.95) - isNewsub = c(rep(0,n-npred),rep(1,npred)) - expect_error(FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) ) - #qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FSVD.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FSVD.R deleted file mode 100644 index 9541e198..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FSVD.R +++ /dev/null @@ -1,133 +0,0 @@ -if (Sys.getenv('TRAVIS') != 'true') {# Do not run on travis since this is slow -# devtools::load_all() -library(testthat) -library(mvtnorm) - -### Simulaiton setting in FSVD paper -# Generate X, Y functional samples with certain covariance structure -K = 3 # number of singular pairs -t = 10 # domain end point -obsGrid = seq(0, t, length.out = 51) -# singular functions -# X -phi1 = sqrt(2/t) * sin(2*pi*obsGrid/t) -phi2 = -sqrt(2/t) * cos(4*pi*obsGrid/t) -phi3 = -sqrt(2/t) * cos(2*pi*obsGrid/t) -Phi = cbind(phi1, phi2, phi3) -# Y -psi1 = phi3; psi2 = phi1; psi3 = phi2 -Psi = cbind(psi1, psi2, psi3) -# singular components -CovscX = matrix(c(8,3,-2,3,4,1,-2,1,3), nrow=3) -CovscY = matrix(c(6,-2,1,-2,4.5,1.5,1,1.5,3.25), nrow=3) -CovscXY = diag(c(3,1.5,0.5)) -CXY = CovscXY[1,1]*phi1%*%t(psi1) + CovscXY[2,2]*phi2%*%t(psi2) + - CovscXY[3,3]*phi3%*%t(psi3) -rho1 = CovscXY[1,1]/sqrt(CovscX[1,1]*CovscY[1,1]) -rho2 = CovscXY[2,2]/sqrt(CovscX[2,2]*CovscY[2,2]) -rho3 = CovscXY[3,3]/sqrt(CovscX[3,3]*CovscY[3,3]) -# observed error sigma2 -sigma2 = 0.05 - -### test for consistency in dense case -test_that('consistent estimates for dense case', { - n = 10000 # sample size - set.seed(1) - singscore = rmvnorm(n=n, mean = rep(0,6), sigma = cbind(rbind(CovscX,CovscXY),rbind(CovscXY, CovscY))) - zeta1 = singscore[,1] # X - zeta2 = singscore[,2] # X - zeta3 = singscore[,3] # X - xi1 = singscore[,4] #Y - xi2 = singscore[,5] #Y - xi3 = singscore[,6] #Y - - Xmat = t(Phi %*% t(singscore[,1:3])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - Ymat = t(Psi %*% t(singscore[,4:6])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - Xins = MakeFPCAInputs(tVec = obsGrid, yVec = Xmat) - Yins = MakeFPCAInputs(tVec = obsGrid, yVec = Ymat) - - Ly1 = Xins$Ly - Lt1 = Xins$Lt - Ly2 = Yins$Ly - Lt2 = Yins$Lt - fsvdobj = FSVD(Ly1, Lt1, Ly2, Lt2, SVDoptns = list(methodSelectK=3)) - expect_equal(fsvdobj$sValues, diag(CovscXY), tolerance = 0.01*diag(CovscXY)) - expect_equal(fsvdobj$canCorr, c(rho1, rho2, rho3), tolerance = 0.18*c(rho1, rho2, rho3)) - # test for high correlation between true and observed singular scores - expect_gt(abs(cor(fsvdobj$sScores1[,1], singscore[,1])), 0.99) - expect_gt(abs(cor(fsvdobj$sScores1[,2], singscore[,2])), 0.99) - expect_gt(abs(cor(fsvdobj$sScores1[,3], singscore[,3])), 0.99) - expect_gt(abs(cor(fsvdobj$sScores2[,1], singscore[,4])), 0.99) - expect_gt(abs(cor(fsvdobj$sScores2[,2], singscore[,5])), 0.99) - expect_gt(abs(cor(fsvdobj$sScores2[,3], singscore[,6])), 0.99) -}) - -### test for consistency in sparse case -test_that('consistent estimates for sparse case', { - n = 2000 # sample size - set.seed(123) - singscore = rmvnorm(n=n, mean = rep(0,6), sigma = cbind(rbind(CovscX,CovscXY),rbind(CovscXY, CovscY))) - zeta1 = singscore[,1] # X - zeta2 = singscore[,2] # X - zeta3 = singscore[,3] # X - xi1 = singscore[,4] #Y - xi2 = singscore[,5] #Y - xi3 = singscore[,6] #Y - - Xmat = t(Phi %*% t(singscore[,1:3])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - Ymat = t(Psi %*% t(singscore[,4:6])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - XinSparse = Sparsify(samp = Xmat, pts = obsGrid, sparsity = sample(6:10,size=n,replace=TRUE)) - YinSparse = Sparsify(samp = Ymat, pts = obsGrid, sparsity = sample(6:10,size=n,replace=TRUE)) - - Ly1 = XinSparse$Ly - Lt1 = XinSparse$Lt - Ly2 = YinSparse$Ly - Lt2 = YinSparse$Lt - fsvdObj1 = FSVD(Ly1, Lt1, Ly2, Lt2, SVDoptns = list(methodSelectK=3,bw1=1.2,bw2=1.2)) - expect_equal(fsvdObj1$sValues, diag(CovscXY), tolerance = 0.61, scale = 1) - expect_equal(fsvdObj1$canCorr, c(rho1,rho2,rho3), tolerance = 0.07, scale=1) - # test for high correlation between true and observed singular scores - expect_gt(abs(cor(fsvdObj1$sScores1[,1], singscore[,1])), 0.985) - expect_gt(abs(cor(fsvdObj1$sScores1[,2], singscore[,2])), 0.91) - expect_gt(abs(cor(fsvdObj1$sScores1[,3], singscore[,3])), 0.95) - expect_gt(abs(cor(fsvdObj1$sScores2[,1], singscore[,4])), 0.98) - expect_gt(abs(cor(fsvdObj1$sScores2[,2], singscore[,5])), 0.965) - expect_gt(abs(cor(fsvdObj1$sScores2[,3], singscore[,6])), 0.92) -}) - - -### test for consistency in sparse case -test_that('Check flipping the components in the sparse case results into perfectly anti-correlated scores', { - n = 200 # sample size - set.seed(123) - singscore = rmvnorm(n=n, mean = rep(0,6), sigma = cbind(rbind(CovscX,CovscXY),rbind(CovscXY, CovscY))) - zeta1 = singscore[,1] # X - zeta2 = singscore[,2] # X - zeta3 = singscore[,3] # X - xi1 = singscore[,4] #Y - xi2 = singscore[,5] #Y - xi3 = singscore[,6] #Y - - Xmat = t(Phi %*% t(singscore[,1:3])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - Ymat = t(Psi %*% t(singscore[,4:6])) + rnorm(n = n*length(obsGrid),mean = 0,sd = sqrt(sigma2)) - XinSparse = Sparsify(samp = Xmat, pts = obsGrid, sparsity = sample(6:10,size=n,replace=TRUE)) - YinSparse = Sparsify(samp = Ymat, pts = obsGrid, sparsity = sample(6:10,size=n,replace=TRUE)) - - Ly1 = XinSparse$Ly - Lt1 = XinSparse$Lt - Ly2 = YinSparse$Ly - Lt2 = YinSparse$Lt - fsvdObj1 = FSVD(Ly1, Lt1, Ly2, Lt2, SVDoptns = list(methodSelectK=3,bw1=1.2,bw2=1.2, flip= FALSE)) - fsvdObj2 = FSVD(Ly1, Lt1, Ly2, Lt2, SVDoptns = list(methodSelectK=3,bw1=1.2,bw2=1.2, flip= TRUE)) - expect_equal(fsvdObj1$sValues, fsvdObj2$sValues, tolerance = 0.001, scale = 1) - expect_equal(fsvdObj1$canCorr, fsvdObj2$canCorr, tolerance = 0.001, scale=1) - # test for high correlation between computed singular scores - expect_lt( (cor(fsvdObj1$sScores2[,3], fsvdObj2$sScores2[,3])), -0.99) - expect_lt( (cor(fsvdObj1$sScores2[,2], fsvdObj2$sScores2[,2])), -0.99) - expect_lt( (cor(fsvdObj1$sScores2[,1], fsvdObj2$sScores2[,1])), -0.99) - expect_lt( (cor(fsvdObj1$sScores1[,3], fsvdObj2$sScores1[,3])), -0.99) - expect_lt( (cor(fsvdObj1$sScores1[,2], fsvdObj2$sScores1[,2])), -0.99) - expect_lt( (cor(fsvdObj1$sScores1[,1], fsvdObj2$sScores1[,1])), -0.99) - -}) -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVEdataset.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVEdataset.R deleted file mode 100644 index c1ef97e0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVEdataset.R +++ /dev/null @@ -1,21 +0,0 @@ -# devtools::load_all() - - - -# -#FVEdata <- read.table("http://www.hsph.harvard.edu/fitzmaur/ala2e/fev1.txt", col.names=c('SubjectID', 'Height', 'Age', 'InitialHeight', 'InitialAge', 'LogFEV1'), skip=42 ); -# -#mySample = MakeFPCAInputs(IDs= FVEdata$SubjectID, tVec=FVEdata$Age, yVec=FVEdata$LogFEV1); -# -#y= mySample$Ly -#t= mySample$Lt -# -## optns = CreateOptions() -## system.time(tmp <- FPCA(y, t, optns)) -## tmp$sigma2 -# -# -#optns1 <- list(kernel='rect') -#system.time(tmp1 <- FPCA(y, t, optns1)) -## plot(tmp1$phi[, 1]) # off -## CreateCovPlot(tmp1, 'Smoothed', TRUE) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVPA.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVPA.R deleted file mode 100644 index e8c7f4d5..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FVPA.R +++ /dev/null @@ -1,162 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('noisy dense data, default arguments: ie. cross-sectional mu/cov, use IN score', { - - # Define the continuum and basic constants - set.seed(123); N = 333; M = 101; - s = seq(0,10,length.out = M) - - # Create S_true - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - Phi <- matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2) - ev <- c(5, 2)^2 - Ksi = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(ev)) - - Sij = Ksi %*% t(Phi) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create Signs - epsilonSign = ifelse( matrix(runif(N*M)-0.5, ncol = M) > 0, 1, -1) - - # Create residuals - sigmaW = 0.05 - Wij = matrix(rnorm(N*M, sd = sigmaW/1), ncol = M) - eigFunctA <- function(s) +cos(9*s*pi/10) / sqrt(5) - eigFunctB <- function(s) -cos(1*s*pi)/sqrt(5) - Psi = matrix(c(eigFunctA(s),eigFunctB(s)), ncol=2) - evR <- c(0.5, 0.3)^2 - Zeta = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(evR)) - Vij = Zeta %*% t(Psi) - - # matplot(t( exp(Vij + Wij)^0.5 ), t='l') - Rij = epsilonSign * ( exp(Vij + Wij)^(0.5) ) - - Xij = Sij + Rij; - - tmp <- MakeFPCAInputs(tVec=s, yVec=Xij) - - fvpaResults = FVPA(y= tmp$Ly, t= tmp$Lt) - - expect_gt( abs( cor( eigFunct1(s), fvpaResults$fpcaObjY$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunct2(s), fvpaResults$fpcaObjY$phi[,2])), 0.975) - expect_gt( abs( cor( eigFunctA(s), fvpaResults$fpcaObjR$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunctB(s), fvpaResults$fpcaObjR$phi[,2])), 0.975) - - expect_gt( abs( cor( Ksi[,1], fvpaResults$fpcaObjY$xiEst[,1])), 0.975) - expect_gt( abs( cor( Ksi[,2], fvpaResults$fpcaObjY$xiEst[,2])), 0.975) - expect_gt( abs( cor( Zeta[,1], fvpaResults$fpcaObjR$xiEst[,1])), 0.975) - expect_gt( abs( cor( Zeta[,2], fvpaResults$fpcaObjR$xiEst[,2])), 0.94) - -}) - -test_that('noisy dense data, CE scores and cross-sectional mu/cov', { - - # Define the continuum and basic constants - set.seed(123); N = 333; M = 101; - s = seq(0,10,length.out = M) - - # Create S_true - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - Phi <- matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2) - ev <- c(5, 2)^2 - Ksi = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(ev)) - - Sij = Ksi %*% t(Phi) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create Signs - epsilonSign = ifelse( matrix(runif(N*M)-0.5, ncol = M) > 0, 1, -1) - - # Create residuals - sigmaW = 0.05 - Wij = matrix(rnorm(N*M, sd = sigmaW/1), ncol = M) - eigFunctA <- function(s) +cos(9*s*pi/10) / sqrt(5) - eigFunctB <- function(s) -cos(1*s*pi)/sqrt(5) - Psi = matrix(c(eigFunctA(s),eigFunctB(s)), ncol=2) - evR <- c(0.5, 0.3)^2 - Zeta = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(evR)) - Vij = Zeta %*% t(Psi) - - Rij = epsilonSign * ( exp(Vij + Wij)^(0.5) ) - - Xij = Sij + Rij; - - tmp <- MakeFPCAInputs(tVec=s, yVec=Xij) - - fvpaResults = FVPA(y= tmp$Ly, t= tmp$Lt, optns = list(error=TRUE, FVEthreshold = 0.9, methodXi='CE' )) - - expect_gt( abs( cor( eigFunct1(s), fvpaResults$fpcaObjY$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunct2(s), fvpaResults$fpcaObjY$phi[,2])), 0.975) - expect_gt( abs( cor( eigFunctA(s), fvpaResults$fpcaObjR$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunctB(s), fvpaResults$fpcaObjR$phi[,2])), 0.975) - - expect_gt( abs( cor( Ksi[,1], fvpaResults$fpcaObjY$xiEst[,1])), 0.975) - expect_gt( abs( cor( Ksi[,2], fvpaResults$fpcaObjY$xiEst[,2])), 0.975) - expect_gt( abs( cor( Zeta[,1], fvpaResults$fpcaObjR$xiEst[,1])), 0.975) - expect_gt( abs( cor( Zeta[,2], fvpaResults$fpcaObjR$xiEst[,2])), 0.94) - -}) - -test_that('noisy dense data, IN scores and smooth mu/cov', { - - # Define the continuum and basic constants - set.seed(123); N = 333; M = 101; - s = seq(0,10,length.out = M) - - # Create S_true - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - Phi <- matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2) - ev <- c(5, 2)^2 - Ksi = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(ev)) - - Sij = Ksi %*% t(Phi) + t(matrix(rep(meanFunct(s),N), nrow=M)) - - # Create Signs - epsilonSign = ifelse( matrix(runif(N*M)-0.5, ncol = M) > 0, 1, -1) - - # Create residuals - sigmaW = 0.05 - Wij = matrix(rnorm(N*M, sd = sigmaW/1), ncol = M) - eigFunctA <- function(s) +cos(9*s*pi/10) / sqrt(5) - eigFunctB <- function(s) -cos(1*s*pi)/sqrt(5) - Psi = matrix(c(eigFunctA(s),eigFunctB(s)), ncol=2) - evR <- c(0.5, 0.3)^2 - Zeta = apply(matrix(rnorm(N*2), ncol=2), 2, scale) %*% diag(sqrt(evR)) - Vij = Zeta %*% t(Psi) - - Rij = epsilonSign * ( exp(Vij + Wij)^(0.5) ) - - Xij = Sij + Rij; - - tmp <- MakeFPCAInputs(tVec=s, yVec=Xij) - - fvpaResults = FVPA(y= tmp$Ly, t= tmp$Lt, optns = list(error=TRUE, FVEthreshold = 0.9, methodMuCovEst='smooth', userBwCov = 0.600 )) - - expect_gt( abs( cor( eigFunct1(s), fvpaResults$fpcaObjY$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunct2(s), fvpaResults$fpcaObjY$phi[,2])), 0.975) - expect_gt( abs( cor( eigFunctA(s), fvpaResults$fpcaObjR$phi[,1])), 0.975) - expect_gt( abs( cor( eigFunctB(s), fvpaResults$fpcaObjR$phi[,2])), 0.975) - - expect_gt( abs( cor( Ksi[,1], fvpaResults$fpcaObjY$xiEst[,1])), 0.975) - expect_gt( abs( cor( Ksi[,2], fvpaResults$fpcaObjY$xiEst[,2])), 0.975) - expect_gt( abs( cor( Zeta[,1], fvpaResults$fpcaObjR$xiEst[,1])), 0.97) - expect_gt( abs( cor( Zeta[,2], fvpaResults$fpcaObjR$xiEst[,2])), 0.91) - -}) - -test_that('FVPA works for long dense data', { - - set.seed(123) - n <- 100 - p <- 500 - - input <- Wiener(n, seq(0, 1, length.out=p), sparsify=p) - expect_error(FVPA(input$Ly, input$Lt, optns=list(useBinnedData='FORCE', error=TRUE, FVEthreshold=0.9)), "optns\\$useBinnedData cannot be 'FORCE'") - res <- FVPA(input$Ly, input$Lt, optns=list(error=TRUE, FVEthreshold=0.9)) -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FitEigenValues.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FitEigenValues.R deleted file mode 100644 index 62891ef8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_FitEigenValues.R +++ /dev/null @@ -1,36 +0,0 @@ -# devtools::load_all() -##options(error=recover) -library(testthat) - -test_that('FitEigenValues works for binned rcov, error=TRUE', { - set.seed(2) - pts <- seq(0, 1, by=0.001) - samp3 <- Wiener(10, pts, sparsify=2:7) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=TRUE) - brcov3 <- BinRawCov(rcov3) - phi <- cbind(sin((2 * 1 - 1) * pi * pts / 2), sin((2 * 2 - 1) * pi * pts / 2)) * sqrt(2) - expect_equal(FitEigenValues(rcov3, pts, phi, 2), FitEigenValues(brcov3, pts, phi, 2)) -}) - -test_that('FitEigenValues works for binned rcov, error=FALSE', { - set.seed(2) - pts <- seq(0, 1, by=0.001) - samp3 <- Wiener(10, pts, sparsify=2:7) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=FALSE) - brcov3 <- BinRawCov(rcov3) - phi <- cbind(sin((2 * 1 - 1) * pi * pts / 2), sin((2 * 2 - 1) * pi * pts / 2)) * sqrt(2) - expect_equal(FitEigenValues(rcov3, pts, phi, 2), FitEigenValues(brcov3, pts, phi, 2)) -}) - -trueLambda <- 4 / (2 * (1:20) - 1)^2 / pi^2 -test_that('FitEigenValues is consistent', { - set.seed(2) - pts <- seq(0, 1, by=0.05) - samp3 <- Wiener(300, pts, sparsify=length(pts)) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=TRUE) - phi <- cbind(sin((2 * 1 - 1) * pi * pts / 2), sin((2 * 2 - 1) * pi * pts / 2)) * sqrt(2) - estLam <- FitEigenValues(rcov3, pts, phi, 2) - expect_equal(estLam, trueLambda[1:length(estLam)], tolerance = 0.15) -}) - -# Test truncation diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedCurve.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedCurve.R deleted file mode 100644 index 5aba8b22..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedCurve.R +++ /dev/null @@ -1,37 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('GetBinnedCurve() works on trivial examples', { - x = 1:100 - y = 2*x - A = GetBinnedCurve(x,y,M=50) - expect_equal( sum(diff(A$midpoint) ) , diff(range(x)) ) - expect_equal( sd(A$newy), sd(y), tolerance=0.05) - B = GetBinnedCurve(x,y,M=33) - expect_equal( sum(diff(B$midpoint) ) , diff(range(x))) - expect_equal( sd(B$newy), sd(y), tolerance=0.05) -}) - -test_that('GetBinnedCurve() works on a nearly trivial example', { - x = seq(0,4, length.out=100) - y = x + sin(x); - A = GetBinnedCurve(x,y, 32, TRUE, TRUE, c(1,2.5)) - expect_equal( sum(diff(A$midpoint) ), 1.5, tolerance=0.05 ) - expect_equal( sd(A$newy), 0.38, tolerance=0.05) -}) - -test_that('GetBinnedCurve() works for large case',{ - x <- 1:2000 - y <- 2 * x - A = GetBinnedCurve(x, y, 400, TRUE, TRUE, c(1, 1999)) - expect_equal( A$binWidth, 4.995 ) - expect_lte( sd(A$count), 0.2) - expect_equal( sd(A$newy), sd(y), tolerance=0.03) - expect_equal( sd(A$midpoint), sd(x), tolerance=0.03) -}) - - - - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedDataset.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedDataset.R deleted file mode 100644 index 6a829b10..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetBinnedDataset.R +++ /dev/null @@ -1,28 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('GetBinnedDataset() works on trivial examples', { - - y = list( c(1:1000), c(3:1012)) - t = list( seq(0,1,length.out=1000), seq(0,1,length.out=1010)) - A = GetBinnedDataset(y,t, optns=SetOptions(y,t,NULL)) - - expect_equal( length(A$newt[[2]]), 400) - expect_equal( A$newt[[2]][113] , 0.2807, tolerance=0.01, scale=1) - expect_equal( mean( A$newt[[1]]), mean( A$newt[[2]]) ) - expect_equal( A$newy[[1]][313] , 782, tolerance=0.01, scale=1) - expect_equal( mean( A$newy[[1]]), 5.005000000000000e+02 ) - -}) - -test_that('GetBinnedDataset() works on binned examples, with the first individual being singleton', { - - y = list(1, seq(0, 1000, length.out=1000), seq(3, 1012, length.out=1010)) - t = list(0.5, seq(0,1,length.out=1000), seq(0,1,length.out=1010)) - A = GetBinnedDataset(y,t, optns=SetOptions(y,t, list(numBins=20))) - - expect_equal( length(A$newt[[3]]), 20) - expect_true(abs(A$newt[[2]][10] - A$newy[[2]][10] / 1000) < 1e-3) - expect_equal( mean( A$newt[[3]]), mean( A$newt[[2]]) ) - - }) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCEScores.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCEScores.R deleted file mode 100644 index 8686bf4a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCEScores.R +++ /dev/null @@ -1,155 +0,0 @@ -# devtools::load_all() -#options(error=recover) -library(testthat) - -# test GetIndCEScores -obsGrid <- seq(0, 1, by=0.1) -yVec <- c(1, -1) -muVec <- c(0, 0) -lamVec <- c(6, 1) -phiMat <- diag(1, 2) -Sigma_Yi <- diag(10, 2) -test_that('GetIndCEScores works', { - expect_equal(GetIndCEScores(yVec, muVec, lamVec, phiMat, Sigma_Yi)[1:2], - list(xiEst=matrix(c(0.6, -0.1)), xiVar=diag(c(2.4, 0.9)))) - expect_equal(GetIndCEScores(c(), muVec, lamVec, phiMat, Sigma_Yi)[1:2], # integer(0) is not really an empty vector, 'c()' is more obvious - list(xiEst=matrix(NA, length(lamVec)), xiVar=matrix(NA, length(lamVec), length(lamVec)))) - expect_equal(GetIndCEScores(yVec, muVec, lamVec, phiMat, Sigma_Yi, newyInd=1)$fittedY, matrix(0)) -}) - -GetIndCEScores(yVec[1], muVec[1], lamVec, phiMat[1, , drop=FALSE], Sigma_Yi[1, 1, drop=FALSE], newyInd=1) - -# Set up -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -truncPts <- seq(0.2, 0.8, 0.05) -regGrid <- seq(0, 1, by=0.01) -sigma2 <- 0.4 -samp1 <- Wiener(n, pts) + rnorm(length(pts) * n, sd=sigma2) -samp1 <- Sparsify(samp1, pts, 2:7) -mu1 <- rep(0, length(pts)) -pNoTrunc <- SetOptions(samp1$Ly, samp1$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', userBwCov = 0.2)) -smc1 <- GetSmoothedCovarSurface(samp1$Ly, samp1$Lt, mu1, pts, regGrid, pNoTrunc) -eig1 <- GetEigenAnalysisResults(smc1$smoothCov, regGrid, pNoTrunc) - -# test GetMuPhiSig -# no truncation -phiObs <- ConvertSupport(regGrid, pts, phi=eig1$phi) -CovObs <- ConvertSupport(regGrid, pts, Cov=eig1$fittedCov) -notruncSamp <- TruncateObs(samp1$Ly, samp1$Lt, pts) -expect_equal(sapply(notruncSamp$Ly, length), sapply(samp1$Ly, length)) -tmp <- GetMuPhiSig(notruncSamp$Lt, pts, mu1, phiObs, CovObs + diag(smc1$sigma2, length(pts))) -expect_equal(sapply(tmp, function(x) length(x$muVec)), sapply(samp1$Ly, length)) - - -# truncation -test_that('Observations with length 0 produces NA in the xiEst, xiVar, and fittedY', { - set.seed(1) - n <- 20 - pts <- signif(seq(0, 1, by=0.05), 4) - truncPts <- signif(seq(0.2, 0.8, 0.05), 4) - regGrid <- seq(0, 1, by=0.01) - sigma2 <- 0.4 - samp1 <- Wiener(n, pts) + rnorm(length(pts) * n, sd=sigma2) - samp1 <- Sparsify(samp1, pts, 2:7) - mu1 <- rep(0, length(pts)) - pNoTrunc <- SetOptions(samp1$Ly, samp1$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', userBwCov = 0.2)) - smc1 <- GetSmoothedCovarSurface(samp1$Ly, samp1$Lt, mu1, pts, regGrid, pNoTrunc) - eig1 <- GetEigenAnalysisResults(smc1$smoothCov, regGrid, pNoTrunc) - phiObs <- ConvertSupport(regGrid, truncPts, phi=eig1$phi) - CovObs <- ConvertSupport(regGrid, truncPts, Cov=eig1$fittedCov) - truncSamp <- TruncateObs(samp1$Ly, samp1$Lt, truncPts) - tmp <- GetMuPhiSig(truncSamp$Lt, truncPts, mu1[1:length(truncPts)], phiObs, CovObs + diag(smc1$sigma2, length(truncPts))) - expect_equal(sapply(tmp, function(x) length(x$muVec)), sapply(truncSamp$Ly, length)) - tmp1 <- GetCEScores(truncSamp$Ly[17:20], truncSamp$Lt[17:20], list(verbose=TRUE), rep(0, length(truncPts)), truncPts, CovObs, eig1$lambda, phiObs, smc1$sigma2) - - expect_equal(tmp1[[1, 1]], matrix(NA, length(eig1$lambda))) - expect_equal(tmp1[[2, 1]], matrix(NA, length(eig1$lambda), length(eig1$lambda))) - expect_equal(tmp1[[3, 1]], matrix(NA, 0, 0)) -}) - -# Test GetCEScores: compare to Matlab -test_that('GetCEScores for sparse case matches Matlab', { - y <- list(c(1, 2), 4, c(0, 2, 3)) - t <- list(c(1.5, 2.5), 2, c(1, 1.5, 2.5)) - # mu <- rep(0, 7) - mu <- seq(0, 3, length.out=7) - obsGrid <- seq(0, 3, length.out=7) - pts <- seq(0, 1, length.out=7) - phi <- cbind(sin(2 * pi * pts), cos(2 * pi * pts)) - lambda <- c(6, 1) - sigma2 <- 0.4 - fittedCov <- phi %*% diag(lambda) %*% t(phi) - tmp <- GetCEScores(y, t, list(), mu, obsGrid, fittedCov, lambda, phi, sigma2) -# xiEst are the same - expect_equal(t(do.call(cbind, tmp[1, ])), - matrix(c(0.709244942754497, 0.337643678160920, - -2.017923270954032, -0.194174757281554, - -1.011227267892009, -0.329341317365270), 3, 2, - byrow=TRUE)) -# xiVar are the same - expect_equal(unlist(tmp[2, ]), c(0.568965517241379, 0.149314724790420, - 0.149314724790420, 0.281609195402299, - 0.757281553398058, -0.504480817738509, - -0.504480817738509, 0.951456310679612, - 0.341317365269461, 0.155573425829540, - 0.155573425829540, 0.281437125748503)) -# fitted Y_i are the same - expect_equal(unlist(tmp[3, ]), c(1.162356321839080, 2.054597701149425, 3.844660194174757, 0.288922155688622, 1.829341317365270, 3.211077844311377)) -}) - -# # Matlab code: -# y = cell(1, 3); -# t = y; -# y{1} = [1, 2]; y{2} = [4]; y{3} = [0, 2, 3]; -# t{1} = [1.5, 2.5]; t{2} = [2]; t{3} = [1, 1.5, 2.5]; -# # mu = zeros(1, 7); -# mu = linspace(0, 3, 7); -# out1 = linspace(0, 3, 7); -# pts = linspace(0, 1, 7); -# phi = [sin(2 * pi * pts)', cos(2 * pi * pts)']; -# lambda = [6, 1]; -# sigma = 0; -# sigma_new = 0.4; -# noeig = 2; -# error = 1; -# method = 'CE'; -# shrink = 0; -# regular = 0; -# rho = 0; -# [xi_est, xi_var, ypred] = getScores1(y, t, mu, phi, lambda, sigma, sigma_new, noeig, error, method, shrink, out1, regular, rho) - - - -# no error case. This observation has a singular Sigma_Yi, which should not work in theory. - - - - -# truncation -test_that('Noiseless example', { - set.seed(1) - n <- 100 - M <- 50 - K <- 5 - samp <- MakeGPFunctionalData(n, M, K=K, lambda=2^(-seq(1, K))) - # matplot(t(samp$Y[1:10, ])) - sampList <- MakeFPCAInputs(tVec=samp$pts, yVec=samp$Y) - resIN <- FPCA(sampList$Ly, sampList$Lt, list(methodXi='IN', lean=TRUE, error=FALSE, rho='no')) - resCE <- FPCA(sampList$Ly, sampList$Lt, list(methodXi='CE', lean=TRUE, error=FALSE, rho='no')) - - expect_gt( abs( cor( samp$xi[,1] , resIN$xiEst[,1])),0.97) - expect_gt( abs(cor( samp$xi[,2] , resIN$xiEst[,2])),0.97) - expect_gt( abs(cor( samp$xi[,3] , resIN$xiEst[,3])),0.97) - expect_gt( abs(cor( samp$xi[,4] , resIN$xiEst[,4])), 0.97) - expect_gt( abs(cor( samp$xi[,5] , resIN$xiEst[,5])), 0.94) - - expect_gt( abs( cor( samp$xi[,1] , resCE$xiEst[,1])),0.97) - expect_gt( abs(cor( samp$xi[,2] , resCE$xiEst[,2])),0.97) - expect_gt( abs(cor( samp$xi[,3] , resCE$xiEst[,3])),0.97) - expect_gt( abs(cor( samp$xi[,4] , resCE$xiEst[,4])), 0.97) - expect_gt( abs(cor( samp$xi[,5] , resCE$xiEst[,5])), 0.94) - -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCovDense.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCovDense.R deleted file mode 100644 index 26da0fd7..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCovDense.R +++ /dev/null @@ -1,45 +0,0 @@ -# devtools::load_all() -library(testthat) -##options(error=recover) - -trueLam <- 4 / ((2 * (1:50) - 1 ) * pi) ^ 2 - -test_that('GetCovDense fails when data is too sparse', { - - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - samp <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) + - rnorm(n * length(pts), sd=sqrt(sigma2)) - samp[seq_len(n - 1), 1] <- NA # only subject 1 was observed at the first time point - expect_error(GetCovDense(samp, colMeans(samp), list(error=FALSE, dataType='DenseWithMV')), - "Data is too sparse to be considered DenseWithMV. Remove sparse observations or specify dataType='Sparse' for FPCA") - -}) - - -test_that('GetCovDense with noise, get sigma2', { - set.seed(1) - n <- 200 - p <- 101 - pts <- seq(0, 1, length.out=p) - sigma2 <- 0.1 - mu <- pts - samp <- Wiener(n, pts) + matrix(pts, n, p, byrow=TRUE) + - rnorm(n * length(pts), sd=sqrt(sigma2)) - tmp <- MakeFPCAInputs(tVec=pts, yVec=samp) - - optnsNoerr <- SetOptions(tmp$Ly, tmp$Lt, list(error=FALSE, dataType='Dense')) - optnsErr <- SetOptions(tmp$Ly, tmp$Lt, list(error=TRUE, dataType='Dense')) - noerr <- GetCovDense(samp, colMeans(samp), optnsNoerr) - err <- GetCovDense(samp, colMeans(samp), optnsErr) - - eigNoerr <- GetEigenAnalysisResults(noerr$smoothCov, pts, optnsNoerr) - eigErr <- GetEigenAnalysisResults(err$smoothCov, pts, optnsErr) - - expect_equal(err$sigma2, sigma2, tolerance=1e-2) - expect_equal(eigNoerr$fittedCov, eigNoerr$fittedCov) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCrCovYX.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCrCovYX.R deleted file mode 100644 index e985dbee..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetCrCovYX.R +++ /dev/null @@ -1,228 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('The binned crosscov is the same as unbinned',{ - - N = 100 - set.seed(123) - Ly1 = lapply(1:N, function(x) runif(7)) - Ly2 = lapply(1:N, function(x) runif(7)) - Lt1 = lapply(1:N, function(x) round(sort(c(0, runif(5),1)), 2)) - Lt2 = Lt1 - Ymu1 = rep(0.5, length(unique(unlist(Lt1)))) - Ymu2 = rep(0.1^9, length(unique(unlist(Lt2)))) - - system.time(A1<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2, bw1=2, bw2=2)) - system.time(A2 <- GetCrCovYX_old(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2, bw1=2, bw2=2)) - expect_equal(A1$smoothedCC, A2$smoothedCC) -}) - -test_that('The cross-covariance of two constant processes is zero.',{ - - Ly1= list( rep(2.1,7), rep(2.1,3),2.1 ); - Lt1 = list(1:7,1:3, 1); - Ly2 = list( rep(1.1,7), rep(1.1,3),1.1); - Lt2 = list(1:7,1:3, 1); - Ymu1 = rep(55,7); - Ymu2 = rep(1.1,7); - - AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2) - expect_equal( 0, sum(AA$smoothedCC) ) - -}) - -test_that('The cross-covariance of two unrelated process is close to zero.',{ - - N = 100 - set.seed(123) - Ly1 = lapply(1:N, function(x) runif(7)) - Ly2 = lapply(1:N, function(x) runif(7)) - Lt1 = lapply(1:N, function(x) round(sort(c(0, runif(5),1)), 2)) - Lt2 = Lt1 - Ymu1 = rep(0.5, length(unique(unlist(Lt1)))) - Ymu2 = rep(0.1^9, length(unique(unlist(Lt2)))) - - system.time(AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2, bw1=2, bw2=2)) - system.time(A2 <- GetCrCovYX_old(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2, bw1=2, bw2=2)) - expect_equal( 0.0, mean(AA$smoothedCC), tol=1e-3 ) -}) - -test_that('The cross-covariance of two unrelated process is close to zero. Different readings lengths.',{ - - N = 100 - set.seed(123) - Ly1 = lapply(1:N, function(x) runif(7)) - Ly2 = lapply(1:N, function(x) runif(4)) - Lt1 = lapply(1:N, function(x) sort(c(0, runif(5),1)) ) - Lt2 = lapply(1:N, function(x) sort(c(0, runif(2),1)) ) - Ymu1 = rep(0.5, length(unique(unlist(Lt1)))) - Ymu2 = rep(0.1^9, length(unique(unlist(Lt2)))) - - AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2, bw1=2, bw2=2) - expect_equal( 0.0, mean(AA$smoothedCC), tol=1e-3 ) -}) - -test_that('The cross-covariance of two simple related process is correct. Same readings lengths.',{ - - set.seed(123) - N = 1111; - M = 101; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = t(t(chol(matrix(c(5,3,3,4),2))) %*% t(Ksi)) - - # Create Y_true - yTrueA = Ksi[,1] %*% t(matrix(eigFunct1(s), ncol=1)) - yTrueB = Ksi[,2] %*% t(matrix(eigFunct1(s), ncol=1)) - - AA <- GetCrCovYX(Ly1 = yTrueB, Ly2 =yTrueA) - - # we know that the covariance between ksi_1 and ksi_2 is three - expect_equal( max(abs( eigFunct1(s)%*%t(eigFunct1(s))*3 - AA$rawCC$rawCCov )), 0.01, tol=.01, scale=1 ) -}) - -if (Sys.getenv('TRAVIS') != 'true') { # slow -test_that('The cross-covariance of two simple related process is correct. Same readings lengths.',{ - - set.seed(123) - N = 311; - M = 101; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = t(t(chol(matrix(c(5,3,3,4),2))) %*% t(Ksi)) - - # Create Y_true - yTrueA = Ksi[,1] %*% t(matrix(eigFunct1(s), ncol=1)) - yTrueB = Ksi[,2] %*% t(matrix(eigFunct1(s), ncol=1)) - - ySparseA = Sparsify(yTrueA, s, c(3:5)) - ySparseB = Sparsify(yTrueB, s, c(3:5)) - - BB1 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, - Ymu1 = rep(0,M), Ymu2 = rep(0,M), useGAM = TRUE ) - BB2 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, - Ymu1 = rep(0,M), Ymu2 = rep(0,M), bw1=0.4, bw2=0.4 ) - BB3 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, bwRoutine = 'l-bfgs-b', - Ymu1 = rep(0,M), Ymu2 = rep(0,M), ) - BB4 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, bwRoutine = 'bobyqa', - Ymu1 = rep(0,M), Ymu2 = rep(0,M)) - # BB5 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, # Too expensive / - # Ymu1 = rep(0,M), Ymu2 = rep(0,M), bwRoutine = 'grid-search' ) - - sSmall = seq(0,10,length.out = 51) - - # we know that the covariance between ksi_1 and ksi_2 is three - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct1(sSmall))*3 - BB1$smoothedCC )), 0.02, tol=.02, scale=1 ) - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct1(sSmall))*3 - BB2$smoothedCC )), 0.02, tol=.02, scale=1 ) - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct1(sSmall))*3 - BB3$smoothedCC )), 0.02, tol=.02, scale=1 ) - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct1(sSmall))*3 - BB4$smoothedCC )), 0.02, tol=.02, scale=1 ) - # expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct1(sSmall))*3 - BB5$smoothedCC )), 0.02, tol=.02, scale=1 ) - -})} - -test_that('The cross-covariance of two simple unrelated process is correct. Same readings lengths.',{ - - set.seed(123) - N = 1511; - M = 101; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) +sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = t(t(chol(matrix(c(5,3,3,4),2))) %*% t(Ksi)) - - # Create Y_true - yTrueA = Ksi[,1] %*% t(matrix(eigFunct1(s), ncol=1)) - yTrueB = Ksi[,2] %*% t(matrix(eigFunct2(s), ncol=1)) - - ySparseA = Sparsify(yTrueA, s, c(3:5)) - ySparseB = Sparsify(yTrueB, s, c(3:5)) - - BB1 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, - Ymu1 = rep(0,M), Ymu2 = rep(0,M), useGAM = TRUE ) - - BB2 <- GetCrCovYX(Ly1 = ySparseA$Ly, Lt1 = ySparseA$Lt, Ly2 = ySparseB$Ly, Lt2 = ySparseB$Lt, - Ymu1 = rep(0,M), Ymu2 = rep(0,M), bw1=0.4, bw2=0.4 ) - - sSmall = seq(0,10,length.out = 51) - - # we know that the covariance between ksi_1 and ksi_2 is three - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct2(sSmall))*3 - BB1$smoothedCC )), 0.02, tol=.01, scale=1 ) - expect_equal( median(abs( eigFunct1(sSmall)%*%t(eigFunct2(sSmall))*3 - BB2$smoothedCC )), 0.02, tol=.01, scale=1 ) - - # par(mfrow(1,3)) - # plot3D::persp3D(s,s, z= cov(yTrueA,yTrueB)) - # plot3D::persp3D(sSmall, sSmall, BB1$smoothedCC ) - # plot3D::persp3D(sSmall, sSmall, BB2$smoothedCC ) - -}) - -test_that('Dense Wiener process has cov(s,t) = min(s,t)', { - set.seed(4) - n <- 500 - nGridIn <- 51 - sparsity <- 1:5 # must have length > 1 - bw <- NA - T <- matrix(seq(0, 1, length.out=nGridIn)) - -## Corr(X(t), Y(t)) = 1/2 - A <- Wiener(n, T) - B <- Wiener(n, T) - C <- Wiener(n, T) - X <- A + B - Y <- A + C - - tmp <- GetCrCovYX(bw, bw, Ly1=X, Ly2=Y) - tmp1 <- GetCrCovYX(NULL, NULL, Ly1=X, Ly2=Y) - expect_equal(diag(tmp$rawCC$rawCCov), as.numeric(T), tolerance=0.1) - expect_equal(tmp, tmp1) # for dense data no smoothing is used. -}) - -test_that('Sparse Wiener process has cov(s,t) = min(s,t)', { - set.seed(4) - n <- 500 - nGridIn <- 51 - sparsity <- 1:5 # must have length > 1 - bw <- 0.2 - kern <- 'epan' - T <- matrix(seq(0, 1, length.out=nGridIn)) - -## Corr(X(t), Y(t)) = 1/2 - A <- Wiener(n, T) - B <- Wiener(n, T) - C <- Wiener(n, T)# + matrix((1:nGridIn) , n, nGridIn, byrow=TRUE) - X <- A + B - Y <- A + C - indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) - tAll <- lapply(1:n, function(i) T[indEach[[i]]]) - Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) - Ysp <- lapply(1:n, function(i) Y[i, indEach[[i]]]) - - tmp <- GetCrCovYX(bw, bw, Xsp, tAll, rep(0, nGridIn), Ysp, tAll, rep(0, nGridIn)) - #tmpGCV <- GetCrCovYX(NULL, NULL, Xsp, tAll, rep(0, nGridIn), Ysp, tAll, rep(0, nGridIn)) # Too costly test - expect_equal(diag(tmp$smoothedCC), as.numeric(T), tolerance=0.1, scale=1) - #expect_equal(diag(tmpGCV$smoothedCC), as.numeric(T), tolerance=0.15) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetEigenAnalysisResults.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetEigenAnalysisResults.R deleted file mode 100644 index e5e9e241..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetEigenAnalysisResults.R +++ /dev/null @@ -1,35 +0,0 @@ -# devtools::load_all() -library(testthat) - -trueLam <- 4 / ((2 * (1:50) - 1 ) * pi) ^ 2 - -set.seed(1) -pts <- seq(0, 1, by=0.05) -regGrid <- seq(0, 1, by=0.01) -samp3 <- Wiener(50, pts, sparsify=length(pts)) -mu3 <- rep(0, length(pts)) - -# without error -p0 <- SetOptions(samp3$Ly, samp3$Lt, list(maxK=50, FVEthreshold=1, dataType='Sparse', error=FALSE, kernel='epan')) -noErrBin <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p0, useBinnedCov=TRUE) -tmp <- GetEigenAnalysisResults(noErrBin$smoothCov, regGrid, p0) - -# consistency test -test_that('Eigenvalues are close', { - expect_equal((abs(tmp$lam - trueLam[1:length(tmp$lam)]) / trueLam[1:length(tmp$lam)] )[1:3], trueLam[1:3], tolerance=0.2) -}) - -# TEst integrate to one. -innerProd <- apply(tmp$phi, 2, function(lam1) - apply(tmp$phi, 2, function(lam2) - pracma::trapz(noErrBin$outGrid, lam1 * lam2))) -test_that('Eigenfunctions are orthonormal', { - expect_equal(diag(innerProd), rep(1, tmp$kChoosen)) - expect_equal(innerProd[row(innerProd) != col(innerProd)], rep(0, length(innerProd) - nrow(innerProd)), tolerance=0.010) -}) - - -# # with error -# p1 <- SetOptions(samp3$Ly, samp3$Lt, CreateOptions(dataType='Sparse', error=TRUE, kernel='epan')) -# Err <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p1, useBinnedCov=FALSE) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetNormalisedSample.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetNormalisedSample.R deleted file mode 100644 index 5b9c8057..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetNormalisedSample.R +++ /dev/null @@ -1,24 +0,0 @@ -# devtools::load_all() - -test_that('GetNormalisedSample output a homoscadestic sample', { - set.seed(1) - n <- 100 - M <- 51 - pts <- seq(0, 1, length.out=M) - mu <- rep(0, length(pts)) - sampDense <- MakeGPFunctionalData(n, M, mu, K=1, basisType='sin', sigma=0.01) - samp4 <- MakeFPCAInputs(tVec=sampDense$pts, yVec=sampDense$Yn) - res4E <- FPCA(samp4$Ly, samp4$Lt, list(error=TRUE)) - sampN <- GetNormalisedSample(res4E, errorSigma=TRUE) - sampN0 <- GetNormalisedSample(res4E, errorSigma=FALSE) - - # Cross-sectional standard deviation - sdCr <- apply(simplify2array(sampN$Ly), 1, sd) - sdCr0 <- apply(simplify2array(sampN0$Ly), 1, sd) - expect_equal(sdCr[-c(1:2, (M-1):M)], rep(1, M - 4), tolerance=1e-4) - expect_equal(sdCr0[-c(1:2, (M-1):M)], rep(1, M - 4), tolerance=1e-3) - - # CreatePathPlot(subset=1:20, inputData=samp4, obsOnly=TRUE, showObs=FALSE) - # CreatePathPlot(subset=1:20, inputData=sampN, obsOnly=TRUE, showObs=FALSE) - # CreatePathPlot(subset=1:20, inputData=sampN0, obsOnly=TRUE, showObs=FALSE) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCov.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCov.R deleted file mode 100644 index 3a91a570..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCov.R +++ /dev/null @@ -1,44 +0,0 @@ - -myEps <- .Machine$double.eps; -load(system.file('testdata', 'dataForGetRawCov.RData', package='fdapace')) -AA = GetRawCov(y,t, sort(unlist(t)), mu,'Sparse',TRUE) #Matches ML output -BB = GetRawCov(y,t, sort(unlist(t)), mu,'Sparse',FALSE) #Matches ML output - -test_that(" basic argument match MATLAB output ", { - expect_equal( sum(AA$indx) , 184, tolerance = 2*myEps, scale = 1) - expect_equal( sum(AA$cxxn) , -7.416002855888680, tolerance = 1e-13, scale = 1) - expect_equal( sum(AA$cyy) , 16.327874649330514, tolerance = 1e-13, scale = 1) - expect_equal( sum(AA$tPairs) , 4.053285461728229e+02, tolerance = 1e-12, scale = 1) -}) - -test_that(" basic argument match MATLAB output ", { - expect_equal( sum(BB$indx) , 298, tolerance = 2*myEps, scale = 1) - expect_equal( sum(BB$cxxn) , 16.327874649330514, tolerance = 1e-13, scale = 1) - expect_equal( sum(BB$cyy) , 16.327874649330514, tolerance = 1e-13, scale = 1) - expect_equal( sum(BB$tPairs) , 6.330209554605514e+02, tolerance = 1e-12, scale = 1) -}) - -y2 = list(1:10, 2:11) -t2 = list( 1:10, 1:10) - -CC = GetRawCov(y2,t2, sort(unique(unlist(t2))), seq(1.5,10.5, length.out=10) ,'Dense',TRUE) #Matches ML output -DD = GetRawCov(y2,t2, sort(unique(unlist(t2))), seq(1.5,10.5, length.out=10) ,'Dense',FALSE) #Matches ML output -# DD = getRawCov(y2,t2, sort(unique(cell2mat(t2))), linspace(1.5,10.5, 10), 2, 0) - - -test_that(" basic argument match MATLAB output ", { - expect_equal( sum(CC$indx) , 0, tolerance = 2*myEps, scale = 1) - expect_equal( sum(CC$cxxn) , 22.5, tolerance = 1e-13, scale = 1) - expect_equal( sum(CC$cyy) , 25, tolerance = 1e-13, scale = 1) - expect_equal( sum(CC$tPairs) , 990, tolerance = 1e-12, scale = 1) -}) - - -test_that(" basic argument match MATLAB output ", { - expect_equal( sum(DD$indx) , 0, tolerance = 2*myEps, scale = 1) - expect_equal( sum(DD$cxxn) , 25, tolerance = 1e-13, scale = 1) - expect_equal( sum(DD$cyy) , 25, tolerance = 1e-13, scale = 1) - expect_equal( sum(DD$tPairs) , 1100, tolerance = 1e-12, scale = 1) -}) - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncFunc.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncFunc.R deleted file mode 100644 index aa55324a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncFunc.R +++ /dev/null @@ -1,70 +0,0 @@ -# devtools::load_all() -library(testthat) -#source('GetRawCrCovFuncFunc.R') - -# These check out OK. -test_that("basic R output matche MATLAB output for different means", { - - # simplest case - AA = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3)), Lt1 = list(c(1,2,3)), Ymu1 = c(1,4,5), - Ly2 = list(c(1,5)), Lt2 = list(c(1,2)), Ymu2 = c(6,5)) - # t_x = {[1 2 3]}; x= {[5 0 3]}; y ={[1 5]}; t_y={[1 2]}; mu_x = [1,4, 5]; mu_y = [6 5]; isYFun=1; regular=0; - - # simplest case different means - BB = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3)), Lt1 = list(c(1,2,3)), Ymu1 = c(1,4,15), - Ly2 = list(c(1,5)), Lt2 = list(c(1,2)), Ymu2 = c(6,15)) - # t_x = {[1 2 3]}; x= {[5 0 3]}; y ={[1 5]}; t_y={[1 2]}; mu_x = [1,4, 15]; mu_y = [6 15]; isYFun=1; regular=0; - - # simple case with single value elements - CC = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3),c(4)), Lt1 = list(c(1,2,3),c(3)), Ymu1 = c(1,4,15), - Ly2 = list(c(1,5),c(5)), Lt2 = list(c(1,2),c(1)), Ymu2= c(6,15)) - # t_x = {[1 2 3],[3]}; x= {[5 0 3],[4]}; y ={[1 5],[5]}; t_y={[1 2],[1]}; mu_x = [1,4, 15]; mu_y = [6 15]; isYFun=1; regular=0; - - # simple case with just two vectors each - DD = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3),c(1,4,8)), Lt1 = list(c(1,2,3),c(1,3,8)), Ymu1 = c(1,4,15,16), - Ly2 = list(c(1,5),c(5)), Lt2 = list(c(1,2),c(1)), Ymu2= c(6,15)) - # t_x = {[1 2 3],[1 3 8]}; x= {[5 0 3],[1 4 8]}; y ={[1 5],[5]}; t_y={[1 2],[1]}; mu_x = [1,4, 15, 16]; mu_y = [6 15]; isYFun=1; regular=0; - - # simple case with just two vectors but extended grid - EE = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3),c(1,4,8)), Lt1 = list(c(1,2,3),c(1,3,8)), Ymu1 = c(1,4,15,16), - Ly2 = list(c(1,5),c(5)), Lt2 = list(c(1,2),c(16)), Ymu2= c(6,15,15)) - # t_x = {[1 2 3],[1 3 8]}; x= {[5 0 3],[1 4 8]}; y ={[1 5],[5]}; t_y={[1 2],[16]}; mu_x = [1,4, 15, 16]; mu_y = [6 15 15]; isYFun=1; regular=0; - - # simple case with three vectors each many duplicate elements - FF = GetRawCrCovFuncFunc( Ly1 = list(c(5,0,3),c(1,4,8), c(1,2)), Lt1 = list(c(1,2,3),c(1,3,8), c(1,2)), Ymu1 = c(1,4,15,16), - Ly2 = list(c(1,5),c(1:5), c(11, 31)), Lt2 = list(c(1,2),c(16:20), c(1,2)), Ymu2= c(6,15,15,0,0,0,0)) - # t_x = {[1 2 3],[1 3 8],[1 2]}; x= {[5 0 3],[1 4 8], [1 2]}; mu_x = [1,4, 15, 16]; t_y = {[1 2], [16:20] [1 2]}; y ={[1 5], [1:5], [11 31]}; mu_y = [6 15 15 0 0 0 0 ]; isYFun=1; regular=0; - - expect_equal( as.vector(AA$tpairn), c(1, 1, 2, 2, 3, 3, 1, 2, 1, 2, 1, 2) ) - expect_equal( AA$rawCCov, c(-20, 0, 20, 0, 10, 0)) - - expect_equal( as.vector(BB$tpairn), c(1, 1, 2, 2, 3, 3, 1, 2, 1, 2, 1, 2) ) - expect_equal( BB$rawCCov, c(-20, -40, 20, 40, 60, 120)) - - expect_equal( as.vector(CC$tpairn), c(1, 1, 2, 2, 3, 3, 3, 1, 2, 1, 2, 1, 2, 1) ) - expect_equal( CC$rawCCov, c(-20, -40, 20, 40, 60, 120, 11)) - - expect_equal( as.vector(DD$tpairn), c(1, 1, 2, 2, 3, 3, 1, 3, 8, 1, 2, 1, 2, 1, 2, 1, 1, 1) ) - expect_equal( DD$rawCCov, c(-20, -40, 20, 40, 60, 120, 0, 11, 8)) - - expect_equal( as.vector(EE$tpairn), c( 1, 1, 2, 2, 3, 3, 1, 3, 8, 1, 2, 1, 2, 1, 2, 16, 16, 16 ) ) - expect_equal( EE$rawCCov, c(-20, -40, 20, 40, 60, 120, 0, 110, 80)) - - expect_equal( as.vector(FF$tpairn), c(1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 16, 17, 18, 19, 20, 16, 17, 18, 19, 20, 16, 17, 18, 19, 20, 1, 2, 1, 2 ) ) - expect_equal( FF$rawCCov, c( -20, -40, 20, 40, 60, 120, 0, 0, 0, 0, 0, 154, -22, -33, -44, -55, 112, -16, -24, -32, -40, 0, 0, -10, -32)) -}) - -test_that('Binned rawCC is the same as unbinned', { - Ly1 <- list(c(5,0,3),c(1,4,8), c(1,2)) - Lt1 <- list(c(1,2,3),c(1,3,8), c(1,2)) - Ymu1 <- c(1,4,15,16) - Ly2 <- list(c(1,5),c(1:5), c(11, 31)) - Lt2 <- list(c(1,2),c(16:20), c(1,2)) - Ymu2 <- c(6,15,15,0,0,0,0) - FF <- GetRawCrCovFuncFunc(Ly1, Lt1, Ymu1, Ly2, Lt2, Ymu2) - FFbin <- BinRawCov(FF) - - expect_equal(weighted.mean(FFbin$meanVals, FFbin$count), mean(FF$rawCCov)) - expect_equal(sort(unique(FFbin$tPairs[, 1])), sort(unique(FF$tpairn[, 1]))) - expect_equal(sort(unique(FFbin$tPairs[, 2])), sort(unique(FF$tpairn[, 2]))) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncScal.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncScal.R deleted file mode 100644 index 8a03082f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRawCrCovFuncScal.R +++ /dev/null @@ -1,39 +0,0 @@ -library(testthat) -#source('GetRawCrCovFuncScal.R') - -# These check out OK. -test_that("basic R output matche MATLAB output for different means", { - - # simplest case - AA = GetRawCrCovFuncScal(list(c(5,5,5),c(2,2,2)), list(c(1,2,3), c(1,3,5)), c(1,2,3,4),Z =c(4,5), Zmu = 4) - # t_x = {[1,2,3], [1,3,5]} ; x= {[5 5 5], [2 2 2]}; y =[ 4 5]; t_y=[]; mu_x = [1,2,3,4]; mu_y = 4; isYFun=0; regular=0; - - # simplest case different E[Y] - BB = GetRawCrCovFuncScal(list(c(5,5,5),c(2,2,2)), list(c(1,2,3), c(1,3,5)), c(1,2,3,4),Z =c(4,5), Zmu = 6) - # t_x = {[1,2,3], [1,3,5]} ; x= {[5 5 5], [2 2 2]}; y =[ 4 5]; t_y=[]; mu_x = [1,2,3,4]; mu_y = 6; isYFun=0; regular=0; - - # simple case more readings per sample - CC = GetRawCrCovFuncScal(list(c(5,5,5,0),c(2,2,2,0)), list(c(1,2,3,8), c(1,3,5,8)), c(1,2,3,4,1),Z =c(4,5), Zmu =6) - # t_x = {[1,2,3,8], [1,3,5,8]} ; x= {[5 5 5 0], [2 2 2 0]}; y =[ 4 5]; t_y=[]; mu_x = [1,2,3,4,1]; mu_y = 6; isYFun=0; regular=0; - - # simple case more three curves - DD = GetRawCrCovFuncScal(list(c(5,5,5,0),c(2,2,2,0),c(1,2,5)), list(c(1,2,3,8), c(1,3,5,8), c(1,2,5)), c(1,2,3,4,1),Z =c(4,5,0), Zmu = 0) - # t_x = {[1,2,3,8],[1,3,5,8],[1,2,5]} ; x= {[5 5 5 0],[2 2 2 0],[1 2 5]}; y =[ 4 5 0]; t_y=[]; mu_x = [1,2,3,4,1]; mu_y = 0; isYFun=0; regular=0; - - # simple case readings with single measurement - EE = GetRawCrCovFuncScal(list(c(5,5,5,0),c(2)), list(c(1,2,3,8), c(5)), c(1,2,3,4,1),Z =c(4,5), Zmu = 6) - # t_x = {[1,2,3,8], [5]} ; x= {[5 5 5 0], [2]}; y =[ 4 5]; t_y=[]; mu_x = [1,2,3,4,1]; mu_y = 6; isYFun=0; regular=0; - - expect_equal( AA$tpairn, c(1,2,3,1,3,5)) - expect_equal( BB$tpairn, c(1,2,3,1,3,5)) - expect_equal( CC$tpairn, c(1,2,3,8,1,3,5,8)) - expect_equal( DD$tpairn, c(1,2,3,8,1,3,5,8,1,2,5)) - expect_equal( EE$tpairn, c(1,2,3,8,5)) - - expect_equal( AA$rawCCov, c(0, 0, 0, 1,-1,-2)) - expect_equal( BB$rawCCov, c(-8,-6,-4,-1,1,2)) - expect_equal( CC$rawCCov, c(-8,-6,-4,2,-1,1,2,1)) - expect_equal( DD$rawCCov, c(16,12,8,-4, 5,-5,-10,-5,0,0,0)) - expect_equal( EE$rawCCov, c(-8,-6,-4,2,2)) - -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRho.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRho.R deleted file mode 100644 index d0e8a02c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetRho.R +++ /dev/null @@ -1,91 +0,0 @@ -# devtools::load_all() -#options(error=recover) -library(testthat) - -# set up -y <- list(c(1, 2), 4, c(0, 2, 3)) -t <- list(c(1.5, 2.5), 2, c(1, 1.5, 2.5)) -obsGrid <- seq(0, 3, length.out=7) -mu <- obsGrid -pts <- seq(0, 1, length.out=7) -phi <- cbind(sin(2 * pi * pts), cos(2 * pi * pts)) -lambda <- c(6, 1) -rho <- 0.5 -fittedCov <- phi %*% diag(lambda) %*% t(phi) - - -# RandTime -test_that('RandTime is the same as getTimeID', - expect_equal(RandTime(t, isRandom=FALSE), c(2, 1, 2))) - - -# cvRho -leaveOutInd <- RandTime(t, isRandom=FALSE) -test_that('cvRho matches getScores2', - expect_equal(cvRho(0.5, leaveOutInd, y, t, list(), mu, obsGrid, - fittedCov, lambda, phi), 0.775069444444445)) - - -test_that('GetRho matches cv_rho.m', - expect_equal(GetRho(y, t, list(), mu, obsGrid, fittedCov, lambda, phi, 0.01), 0.510049017252264) - ) - -# test_that('cvRho for example.m are almost the same', { -# load(system.file('testdata', '200curvesByExampleSeed123.RData', package='fdapace')) -# load(system.file('testdata', 'exampleResultsFromMatlab.RData', package='fdapace')) -# tmpCov <- ConvertSupport(res$out21, res$out1, Cov=res$xcovfit) -# expect_equal(GetRho(y, t, list(), res$mu, res$out1, tmpCov, as.numeric(res$lambda), res$phi, as.numeric(res$sigma)), 0.939907526613129, tolerance=1e-2) -# }) - -test_that('Truncation works for GetRho', { - set.seed(1) - n <- 20 - pts <- signif(seq(0, 1, by=0.05), 14) - truncPts <- signif(seq(0.1, 0.9, 0.05), 14) - mu <- rep(0, length(pts)) - samp4 <- Wiener(n, pts) + rnorm(n * length(pts), sd=0.1) - samp4 <- Sparsify(samp4, pts, 10) - samp4$Ly[[1]] <- samp4$Lt[[1]] <- c(0, 1) - samp4Trunc <- TruncateObs(samp4$Ly, samp4$Lt, truncPts) - pTrunc <- SetOptions(samp4$Ly, samp4$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', verbose=TRUE)) - smc4 <- GetSmoothedCovarSurface(samp4$Ly, samp4$Lt, mu, pts, pts, pTrunc) - eig4 <- GetEigenAnalysisResults(smc4$smoothCov, pts, pTrunc) - phiObs <- ConvertSupport(pts, truncPts, phi=eig4$phi) - CovObs <- ConvertSupport(pts, truncPts, Cov=eig4$fittedCov) - - rho4 <- GetRho(samp4Trunc$Ly, samp4Trunc$Lt, pTrunc, mu[1:length(truncPts)], truncPts, CovObs, eig4$lambda, phiObs, smc4$sigma2) - expect_true(rho4 < 0.2) -}) - -# # Matlab code: -# y{1} = [1, 2]; y{2} = [4]; y{3} = [0, 2, 3] -# t{1} = [1.5, 2.5]; t{2} = [2]; t{3} = [1, 1.5, 2.5] -# ni = cellfun(@length, y); -# mu = linspace(0, 3, 7); -# out1 = linspace(0, 3, 7); -# pts = linspace(0, 1, 7); -# phi = [sin(2 * pi * pts)', cos(2 * pi * pts)']; -# lambda = [6, 1]; -# sigma = 0; -# sig1 = 0.4; -# noeig = 2; -# error = 1; -# method = 'CE'; -# shrink = 0; -# regular = 0; -# rho = 0; -# [muSub, phiSub] = convertMuPhi(t, out1, mu, phi, regular); -# LAMBDA = diag(lambda); -# rho = 0.5; -# subID = [1 3]; -# tjID = [2 1 2 3]; -# verbose = false; - -# getScores2(y, t, mu, phi, lambda, sigma, sig1, noeig, error, method, shrink, out1, regular, muSub, phiSub, LAMBDA, rho, subID, tjID) - -# T = range(out1); -# gamma = ((trapz(out1, mu.^2)+sum(lambda))/T)^(0.5); -# alpha = linspace(0.01, 0.22,50); -# rho = gamma*alpha; -# cv_rho(y, t, mu, phi, lambda, sigma, sig1, noeig, error, method, shrink, out1, regular, rho, ni, tjID, verbose) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedCovarSurface.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedCovarSurface.R deleted file mode 100644 index 739a4597..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedCovarSurface.R +++ /dev/null @@ -1,52 +0,0 @@ -# devtools::load_all() -library(testthat) - -# GMeanAndGCV - -set.seed(1) -pts <- seq(0, 1, by=0.05) -regGrid <- seq(0, 1, by=0.1) -samp3 <- Wiener(50, pts, sparsify=length(pts)) -mu3 <- rep(0, length(pts)) - -# without error -p0 <- SetOptions(samp3$Ly, samp3$Lt, list(dataType='Sparse', error=FALSE, kernel='epan')) -noErr <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p0, useBinnedCov=FALSE) - -# with error -p1 <- SetOptions(samp3$Ly, samp3$Lt,list(dataType='Sparse', error=TRUE, kernel='epan')) -Err <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p1, useBinnedCov=FALSE) - -# unit tests: test the interface. -rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, mu3, p1$dataType, p1$error) -system.time(tmp <- GCVLwls2DV2(pts, regGrid=regGrid, kern='epan', rcov=rcov3, t=samp3$Lt)) -gcvBW3 <- sqrt(tmp$h * tmp$minBW) -sigma23 <- PC_CovE(pts, regGrid, gcvBW3, kernel='epan', rcov=rcov3, rotationCut=c(0.25, 0.75))$sigma2 -test_that('Smooth Cov Surface interface is right', { - expect_equal(rcov3, Err$rawCov) - expect_equal(as.numeric(gcvBW3), Err$bwCov, tolerance = 0.01, scale = 1) - # expect_equal(gcvBW3, Err$bwCov, tolerance = 0.05) // If someone gets time check why this doesn't work perfectly. - # Entry (11,11) is different tha expected and I think this is a boundary issue but I am not sure. - # This problem is only with the Epan kern, rect and gauss are fine. - expect_equal(sigma23, Err$sigma2, tolerance = 0.1) -}) - -# GCV -p2 <- SetOptions(samp3$Ly, samp3$Lt, list(methodBwCov='GCV', dataType='Sparse', error=FALSE, kernel='epan')) -tmp2 <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p2, useBinnedCov=FALSE) -sum((diag(tmp2$smoothCov) - seq(0, 1, by=0.1))^2) - -# CV -p3 <- SetOptions(samp3$Ly, samp3$Lt, list(methodBwCov='CV', dataType='Sparse', error=FALSE, kernel='epan')) -system.time(tmp3 <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, p3, useBinnedCov=FALSE)) -sum((diag(tmp3$smoothCov) - seq(0, 1, by=0.1))^2) - -# truncation. -pTrunc <- SetOptions(samp3$Ly, samp3$Lt,list(dataType='Sparse', error=FALSE, kernel='epan', outPercent=c(0.01, 0.99))) -noErrTrunc <- GetSmoothedCovarSurface(samp3$Ly, samp3$Lt, mu3, pts, regGrid, pTrunc, useBinnedCov=FALSE) -test_that('Cov Surface truncation works', { - expect_equal(noErr$smoothedCov[2:10, 2:10], noErrTrunc$smoothedCov) - expect_equal(noErr$rawCov, noErrTrunc$rawCov) - expect_equal(noErr$bwCov, noErrTrunc$bwCov) - expect_equal(noErr$sigma2, noErrTrunc$sigma2) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedMeanCurve.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedMeanCurve.R deleted file mode 100644 index f15c4f81..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_GetSmoothedMeanCurve.R +++ /dev/null @@ -1,36 +0,0 @@ - cat("\nTests for 'GetSmoothedMeanCurve.R'") -library(testthat) -load(system.file('testdata', 'dataGeneratedByExampleSeed123.RData', package='fdapace')) - -p = list(kernel='epan') -optns = SetOptions(y,t,p) -out1 = sort(unique( c(unlist(t), optns$newdata))); -out21 = seq(min(out1), max(out1),length.out = 30); - -test_that("basic that the Epan. kernel gives the same results as MATLAB", { - - smcObj = GetSmoothedMeanCurve(y=y, t=t, obsGrid = out1, regGrid = out21, optns = optns) - #expect_equal( sum(smcObj$mu) , 1.176558873333339e+02,tolerance = 1e-13, scale = 1 ) # Original - - expect_equal( sum(smcObj$mu) , 1.176558873333339e+02,tolerance = 4, scale = 1 ) # New - } ) - -test_that("basic that the Rect. kernel gives the same results as MATLAB", { - - optns$kernel = 'rect'; - smcObj = GetSmoothedMeanCurve(y=y, t=t, obsGrid = out1, regGrid = out21, optns = optns) - expect_equal( sum(smcObj$mu) , 1.186398254457767e+02,tolerance = 6, scale = 1 )# New - - } ) - - - -test_that("basic that the Gaussian kernel gives the same results as MATLAB", { - - optns$kernel = 'gauss'; - smcObj = GetSmoothedMeanCurve(y=y, t=t, obsGrid = out1, regGrid = out21, optns = optns) - expect_equal( sum(smcObj$mu) , 1.206167514696777e+02,tolerance =4 , scale = 1 )# New - - } ) - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_IsRegular.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_IsRegular.R deleted file mode 100644 index fbb8a0ef..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_IsRegular.R +++ /dev/null @@ -1,11 +0,0 @@ -cat("\ntests for 'IsRegular'") - -test_that("basic valid lists arguments do not return any errors", { - expect_equal(IsRegular(list(c(1,2,3,4), c(1,2,3,4), c(1,2,3,4))), 'Dense') - expect_equal(IsRegular(list(c(1,2,3 ), c(1,2,3,4), c(1,2,3,4))), 'DenseWithMV') - expect_equal(IsRegular(list(c(1,2 ), c(1,2,3 ), c(1,2,3,4))), 'Sparse') -} -) - -cat("\nexcept for dense but irregular case") -IsRegular(list(c(1,2,3,5),c(1,2,3,5),c(1,2,3,5))) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2D.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2D.R deleted file mode 100644 index 718772b0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2D.R +++ /dev/null @@ -1,67 +0,0 @@ -# devtools::load_all() -library(testthat) - -# as in test_Rmullwlsk.R -try(silent=TRUE, load(system.file('testdata', 'InputFormMllwlskInCpp.RData', package='fdapace'))) -#try(silent=TRUE, load(system.file('testdata', 'InputFormMllwlskInCpp.RData', package='fdapace'))) - -IN = InputFormMllwlskInCpp -if(1==1){ - - test_that('Lwls2D interface is correct using xout1 and xout2', { - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), FALSE) - BB = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=sort(unique(IN$tPairs[, 1])), ygrid=sort(unique(IN$tPairs[, 2])), kernel_type='gauss',win=rep(1,38), FALSE) - CC = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), FALSE) - DD = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=sort(unique(IN$tPairs[, 1])), ygrid=sort(unique(IN$tPairs[, 2])), kernel_type='epan',win=rep(1,38), FALSE) - expect_equal(Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid), AA) - expect_equal(Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn), BB) - expect_equal(Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid), CC) - expect_equal(Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn), DD) - }) - - - test_that('Lwls2D interface is correct using xout', { - AA = diag(Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), FALSE)) - BB = diag(Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=sort(unique(IN$tPairs[, 1])), ygrid=sort(unique(IN$tPairs[, 2])), kernel_type='gauss',win=rep(1,38), FALSE)) - CC = diag(Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), FALSE)) - DD = diag(Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=sort(unique(IN$tPairs[, 1])), ygrid=sort(unique(IN$tPairs[, 2])), kernel_type='epan',win=rep(1,38), FALSE)) - expect_equal(Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, xout=cbind(IN$regGrid, IN$regGrid)), AA, tolerance=0.05) - expect_equal(Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, xout=cbind(sort(unique(IN$tPairs[, 1])), sort(unique(IN$tPairs[, 2])))), BB) - expect_equal(Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, xout=cbind(IN$regGrid, IN$regGrid)), CC, tolerance=0.05) - expect_equal(Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, xout=cbind(sort(unique(IN$tPairs[, 1])), sort(unique(IN$tPairs[, 2])))), DD) - }) - -} - -if(1==1){ - - test_that('Lwls2D interface is correct using xout1 and xout for crosscovariances', { - - tPairs = matrix(c(1,3,4,1,2,1,1,2,3,4), ncol=2) - - AA = Lwls2D(bw=c(0.5,0.5), kern ='gauss', xin=tPairs, yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,4)), crosscov=TRUE); - AA2 = Lwls2D(bw=c(0.5,0.5), kern ='gauss', xin=cbind(tPairs[, 2], tPairs[, 1]), yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,4)), crosscov=TRUE); - BB = Lwls2D(bw=c(0.5,5.0), kern ='gauss', xin=tPairs, yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,4)), crosscov=TRUE); - CC = Lwls2D(bw=c(5.0,5.0), kern ='gauss', xin=tPairs, yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,4)), crosscov=TRUE); - DD = Lwls2D(bw=c(5.0,5.0), kern ='gauss', xin=tPairs, yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,40)), crosscov=TRUE); - ZZ = Lwls2D(bw=c(5.0,0.5), kern ='gauss', xin=tPairs, yin=c(1,2,3,4,5), xout1=as.numeric(c(1,4)), xout2=as.numeric(c(1,4,4.5)), crosscov=TRUE); - # MATLAB equiv. - # [invalid, AA]= mullwlsk_2([0.5,0.5], 'gauss', [1 3 4 1 2; 1 1 2 3 4], [1 2 3 4 5]', [1 1 1 1 1], [1 4], [1 4]) - # [invalid, BB]= mullwlsk_2([0.5,5.0], 'gauss', [1 3 4 1 2; 1 1 2 3 4], [1 2 3 4 5]', [1 1 1 1 1], [1 4], [1 4]) - # [invalid, CC]= mullwlsk_2([5.0,5.0], 'gauss', [1 3 4 1 2; 1 1 2 3 4], [1 2 3 4 5]', [1 1 1 1 1], [1 4], [1 4]) - # [invalid, DD]= mullwlsk_2([5.0,5.0], 'gauss', [1 3 4 1 2; 1 1 2 3 4], [1 2 3 4 5]', [1 1 1 1 1], [1 4], [1 40]) - # [invalid, ZZ]= mullwlsk_2([5.0,0.5], 'gauss', [1 3 4 1 2; 1 1 2 3 4], [1 2 3 4 5]', [1 1 1 1 1], [1 4], [1 4 4.5]); sum( ZZ(:)) - - expect_equal(AA, t(AA2)) - expect_equal(13.997323601735092, sum(AA), tolerance=1e-9) - expect_equal(13.498112821557918, sum(BB), tolerance=1e-9) - expect_equal(13.669203283501956, sum(CC), tolerance=1e-9) - expect_equal(89.458361008948557, sum(DD), tolerance=1e-9) - expect_equal(24.498113242794656, sum(ZZ), tolerance=1e-9) - }) - -} - - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2DDeriv.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2DDeriv.R deleted file mode 100644 index cb492889..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Lwls2DDeriv.R +++ /dev/null @@ -1,198 +0,0 @@ -# devtools::load_all() -library(testthat) -# library(scatterplot3d) - -try(silent=TRUE, load(system.file('testdata', 'InputFormMllwlskInCpp.RData', package='fdapace'))) -IN <- InputFormMllwlskInCpp - - -test_that('Lwls2DDeriv original curve is correct', { - A1 <- Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid, crosscov=TRUE) - A2 <- Lwls2DDeriv(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid, crosscov=TRUE) - B1 <- Lwls2D(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, crosscov=TRUE) - B2 <- Lwls2DDeriv(2* IN$bw, kern='gauss', IN$tPairs, IN$cxxn, crosscov=TRUE) - C1 <- Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid, crosscov=TRUE) - C2 <- Lwls2DDeriv(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, xout1=IN$regGrid, xout2=IN$regGrid, crosscov=TRUE) - D1 <- Lwls2D(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, crosscov=TRUE) - D2 <- Lwls2DDeriv(2* IN$bw, kern='epan', IN$tPairs, IN$cxxn, crosscov=TRUE) - expect_equal(A1, A2) - expect_equal(B1, B2) - expect_equal(C1, C2) - expect_equal(D1, D2) -}) - - -test_that('bilinear regression function', { - n <- 500 - bw <- 0.7 - outGrid <- seq(-1, 1, by=0.05) - sigma <- 0.1 - f <- function(x, y) -(2 * x + y) - - set.seed(1) - xin <- matrix(runif(2 * n, -1, 1), ncol=2) - yin <- apply(xin, 1, function(x) f(x[1], x[2])) - inGrid <- seq(-1, 1, length.out=floor(sqrt(n))) - xinReg <- expand.grid(inGrid, inGrid) - yinReg <- apply(xinReg, 1, function(x) f(x[1], x[2])) - - # scatterplot3d(xin[, 1], xin[, 2], yin) - # scatterplot3d(xinReg[, 1], xinReg[, 2], yinReg) - - # Noisy observations - bwn <- 1 - yinNoisy <- yin + rnorm(length(yin), sd=sigma) - yinRegNoisy <- yinReg + rnorm(length(yinReg), sd=sigma) - # rgl::persp3d(inGrid, inGrid, yinRegNoisy, xlab='t1', ylab='t2') - - for (kern in c('gauss', 'epan')) { - # Noiseless - # Naming: results{npoly}{nder1}{nder2} - resOld <- Lwls2D(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, crosscov=TRUE) - d100 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=0, crosscov=TRUE) - d110 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=0) - d101 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=1) - d211 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=2, nder1=1, nder2=1) - # rgl::persp3d(outGrid, outGrid, d100) - - expect_equal(d100, sapply(outGrid, function(y) sapply(outGrid, function(x) f(x, y)))) - expect_equal(resOld, d100) - expect_equal(d110, matrix(-2, nrow(d110), ncol(d110))) - expect_equal(d101, matrix(-1, nrow(d101), ncol(d101))) - expect_equal(d211, matrix(0, nrow(d211), ncol(d211))) - - # Noisy - d100n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=0, crosscov=TRUE) - d110n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=0) - d101n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=1) - # d111n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=1) - d211n <- Lwls2DDeriv(1, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=2, nder1=1, nder2=1) - # rgl::persp3d(outGrid, outGrid, d100n) - # rgl::persp3d(outGrid, outGrid, d110n) - # rgl::persp3d(outGrid, outGrid, d101n) - # # rgl::persp3d(outGrid, outGrid, d111n) - # rgl::persp3d(outGrid, outGrid, d211n) - - expect_equal(d100n, sapply(outGrid, function(y) sapply(outGrid, function(x) f(x, y))), tolerance=1e-2) - expect_equal(d110n, matrix(-2, nrow(d110n), ncol(d110n)), tolerance=5e-2) - expect_equal(d101n, matrix(-1, nrow(d101n), ncol(d101n)), tolerance=5e-2) - expect_equal(d211n, matrix(0, nrow(d211n), ncol(d211n)), tolerance=1e-1) - } -}) - - -test_that('biquadratic regression function', { - n <- 5000 - outGrid <- seq(-1, 1, by=0.05) - sigma <- 1 - f <- function(x, y) -(2 * x + y)^2 - - set.seed(1) - xin <- matrix(runif(2 * n, -1, 1), ncol=2) - yin <- apply(xin, 1, function(x) f(x[1], x[2])) - inGrid <- seq(-1, 1, length.out=floor(sqrt(n))) - xinReg <- expand.grid(inGrid, inGrid) - yinReg <- apply(xinReg, 1, function(x) f(x[1], x[2])) - - # scatterplot3d(xin[, 1], xin[, 2], yin) - # scatterplot3d(xinReg[, 1], xinReg[, 2], yinReg) - - # Noisy observations - yinNoisy <- yin + rnorm(length(yin), sd=sigma) - yinRegNoisy <- yinReg + rnorm(length(yinReg), sd=sigma) - # rgl::persp3d(inGrid, inGrid, yinRegNoisy, xlab='t1', ylab='t2') - - for (kern in c('epan', 'gauss')) { - if (kern == 'epan') { - bw <- 0.2 - } else if (kern == 'gauss') { - bw <- 0.1 - } - bwn <- bw * 2 # bandwidth for noisy case - - # Noiseless - # Naming: results{npoly}{nder1}{nder2} - bw <- 0.1 - bwn <- 0.2 - resOld <- Lwls2D(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, crosscov=TRUE) - d100 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=0, crosscov=TRUE) - d110 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=0) - d101 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=1) - d211 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=2, nder1=1, nder2=1) - # rgl::persp3d(outGrid, outGrid, d100) - - expect_equal(d100, - sapply(outGrid, function(y) sapply(outGrid, function(x) f(x, y))), - tolerance=1e-1) - expect_equal(resOld, d100) - expect_equal(d110, - sapply(outGrid, function(y) sapply(outGrid, function(x) -4 * (2 * x + y))), - tolerance=1e-1) - expect_equal(d101, - sapply(outGrid, function(y) sapply(outGrid, function(x) -2 * (2 * x + y))), - tolerance=1e-1) - expect_equal(d211, matrix(-4, nrow(d211), ncol(d211)), tolerance=1e-5) - - - d100n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=0, crosscov=TRUE) - d110n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=0) - d101n <- Lwls2DDeriv(bwn, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=1) - d211n <- Lwls2DDeriv(1, kern, xin, yinNoisy, xout1=outGrid, xout2=outGrid, npoly=2, nder1=1, nder2=1) - # rgl::persp3d(outGrid, outGrid, d100n) - # rgl::persp3d(outGrid, outGrid, d110n) - # rgl::persp3d(outGrid, outGrid, d101n) - # rgl::persp3d(outGrid, outGrid, d211n) - - expect_equal(d100n, - sapply(outGrid, function(y) sapply(outGrid, function(x) f(x, y))), - tolerance=1e-1) - expect_equal(d110n, - sapply(outGrid, function(y) sapply(outGrid, function(x) -4 * (2 * x + y))), - tolerance=5e-1) - expect_equal(d101n, - sapply(outGrid, function(y) sapply(outGrid, function(x) -2 * (2 * x + y))), - tolerance=5e-1) - expect_equal(d211n, matrix(-4, nrow(d211n), ncol(d211n)), tolerance=1e-1) - } -}) - - -test_that('biexponential regression function', { - sqrtn <- 50 - n <- sqrtn^2 - inGrid <- outGrid <- seq(-1, 1, length.out=sqrtn) - f <- function(x, y) exp(-2 * x + y) - - set.seed(1) - xin <- as.matrix(expand.grid(inGrid, inGrid)) - yin <- f(xin[, 1], xin[, 2]) - inGrid <- seq(-1, 1, length.out=floor(sqrt(n))) - # persp3d(inGrid, inGrid, yin, col='white', xlab='x', ylab='y') - - kern <- 'epan' - bw <- 0.1 - - # Noiseless - # Naming: results{npoly}{nder1}{nder2} - resOld <- Lwls2D(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, crosscov=TRUE) - d100 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=0, crosscov=TRUE) - d110 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=1, nder2=0) - d101 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=1, nder1=0, nder2=1) - d211 <- Lwls2DDeriv(bw, kern, xin, yin, xout1=outGrid, xout2=outGrid, npoly=2, nder1=1, nder2=1) - - expect_equal(d100, - matrix(yin, sqrtn, sqrtn), - tolerance=1e-2) - expect_equal(resOld, d100) - expect_equal(d110, - sapply(outGrid, function(y) - sapply(outGrid, function(x) -2 * exp(-2 * x + y))), - tolerance=1e-1) - expect_equal(d101, - sapply(outGrid, function(y) - sapply(outGrid, function(x) exp(-2 * x + y))), - tolerance=1e-1) - expect_equal(d211, sapply(outGrid, function(y) - sapply(outGrid, function(x) -2 * exp(-2 * x + y))), tolerance=1e-1) - -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeFPCAInputs.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeFPCAInputs.R deleted file mode 100644 index f12368cb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeFPCAInputs.R +++ /dev/null @@ -1,52 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('MakeFPCAInputs works', { - set.seed(1) - NN = 32 - LyOrig = sapply( 1:NN, function(x) rnorm(x), simplify=FALSE) - LtOrig = sapply( 1:NN, function(x) sample(1:100,x), simplify=FALSE) - - LyOrigVec = as.vector(unlist(LyOrig)) - LtOrigVec = as.vector(unlist(LtOrig)) - - LusersOrig = sapply( 1:NN, function(x) rep( paste0(collapse='', 'user', x), x) ) - LusersOrigVec = as.vector(unlist(LusersOrig)) - ZZ = MakeFPCAInputs(IDs= LusersOrigVec, tVec=LtOrigVec,yVec= LyOrigVec) - # BB = FPCA(Ly= ZZ$Ly, Lt= ZZ$Lt) # This errs! - ZZs = MakeFPCAInputs(IDs= LusersOrigVec, tVec=LtOrigVec,yVec= LyOrigVec, sort=TRUE) - # CC = FPCA(Ly= ZZs$Ly, Lt= ZZs$Lt) - - expect_s3_class(FPCA(Ly= ZZs$Ly, Lt= ZZs$Lt), 'FPCA') - expect_error( FPCA(Ly = ZZ$Ly, Lt = ZZ$Lt), "Each vector in t should be in ascending order" ) - -}) - -test_that("basic arguments give reasonable output ", { - - IDs = factor(c('a','a','b','b', 'd'), c('d', 'a', 'b', 'c')) - tVec = 1:5; - yVec = cos(tVec); - B = MakeFPCAInputs(IDs= IDs , tVec=tVec, yVec=yVec) - - expect_equal( unname(unlist(B$Lt)), tVec, tolerance = 2*.Machine$double.eps, scale = 1) - expect_equal( B$Ly[[2]], cos(c(3,4)), tolerance = 2*.Machine$double.eps, scale = 1) - expect_true( (length(B$Lid) == length(B$Ly)) && (length(B$Ly) == length(B$Lt)) ) - expect_true( B$Lid[[3]] == IDs[5] ) -}) - -test_that("basic arguments give reasonable output when number of measurement points is equal ", { - - IDs = rep(1:3,each=3); - tVec = rep(c(0,2,5),3); - yVec = 10:19; - - B = MakeFPCAInputs(IDs= IDs , tVec=tVec, yVec=yVec) - - expect_equal( unname(unlist(B$Lt)), tVec, tolerance = 2*.Machine$double.eps, scale = 1) - expect_equal( B$Ly[[2]], c(13,14,15), tolerance = 2*.Machine$double.eps, scale = 1) - expect_true( (length(B$Lid) == length(B$Ly)) && (length(B$Ly) == length(B$Lt)) ) - expect_true( B$Lid[[3]] == IDs[9] ) -}) - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeSparseGP.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeSparseGP.R deleted file mode 100644 index 617d6175..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_MakeSparseGP.R +++ /dev/null @@ -1,33 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('MakeSparseGP works', { - set.seed(1) - n <- 100 - r1 <- MakeSparseGP(n) - r2 <- MakeSparseGP(n, function(ni) rbeta(ni, 2/3, 1)) - r3 <- MakeSparseGP(n, sparsity=1) - r31 <- MakeSparseGP(n, sparsity=3) - r4 <- MakeSparseGP(n, muFun=identity, lambda=1e-2) - r5 <- MakeSparseGP(n, K=1) - r6 <- MakeSparseGP(n, K=10) - r7 <- MakeSparseGP(n, lambda=3:1) - r8 <- MakeSparseGP(n, sigma=1) - r9 <- MakeSparseGP(n, basisType='sin') - r10 <- MakeSparseGP(2, CovFun=function(x) matrix(1, length(x), length(x))) - - expect_equal(length(r1$Ly), length(r1$Lt)) - # hist(unlist(r2$Lt)) - t2 <- unlist(r2$Lt) - expect_true(sum(t2 < 0.1) > 1.5 * sum(t2 > 0.9)) - expect_true(all(r3$Ni == 1)) - expect_true(all(r31$Ni == 3)) - expect_true(cor(unlist(r4$Lt), unlist(r4$Ly)) > 0.9) - expect_equal(ncol(r5$xi), 1) - expect_equal(ncol(r6$xi), 10) - expect_equal(ncol(r7$xi), 3) - expect_equal(sd(unlist(r7$Ly)), sqrt(sum(3:1)), tolerance=0.1) - expect_equal(sd(unlist(r8$Ly) - unlist(r8$LyTrue)), 1, tolerance=0.1) - expect_equal(mean(abs(unlist(r9$Ly)[unlist(r9$Lt) < 0.05])), 0, scale=1, tolerance=0.5) - expect_equal(max(abs(sapply(r10$yCurve, diff))), 0, scale=1, tolerance=1e-6) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RcppPseudoApprox.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RcppPseudoApprox.R deleted file mode 100644 index 422115c7..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RcppPseudoApprox.R +++ /dev/null @@ -1,16 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('RcppPseudoApprox works on a nearly trivial example', { - set.seed(111) - z = runif(44); - expect_equal( RcppPseudoApprox(X = c(0,1), Y = c(0,2) , X_target = z), 2*z, tolerance = 1e-7) - -}) - -test_that('RcppPseudoApprox errs on obviously wrong data.', { - - expect_error( RcppPseudoApprox(X = c(0,1), Y = c(0,2,4) , X_target = 0), - "Problem with unequal vector sizes when doing linear interpolation.") - -}) \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rmullwlsk.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rmullwlsk.R deleted file mode 100644 index de743084..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rmullwlsk.R +++ /dev/null @@ -1,130 +0,0 @@ -# devtools::load_all() -# setwd('misc/') -load(system.file('testdata', 'InputFormMllwlskInCpp.RData', package='fdapace')) -if( !exists('Rmullwlsk') ) { - library(Rcpp) - sourceCpp('src/Rmullwlsk.cpp') -} -IN = InputFormMllwlskInCpp - -library(testthat) - -# tolerance is relatively large because we cannot control of 2500 * 1e-16 anyway -# I have already tried using .inverse instead of LLT for the solution and that -# did not make a difference numericallly (small systems anyway) - -# These check out OK. -U = test_that("basic Epanetchnikov kernel inputs match MATLAB output for different bandwidths", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = FALSE) - BB = Rmullwlsk( c(5,3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = FALSE) - - expect_equal(sum(AA), -3.777751915321487e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(BB), -3.540768950285936e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(CC), -3.761635853631063e+02, tolerance = 1e-12,scale = 1) -}) - -# These check out OK. -V = test_that("basic rectangular kernel inputs match MATLAB output for different bandwidths", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect',win=rep(1,38), bwCheck = FALSE) - BB = Rmullwlsk( c(5,3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect',win=rep(1,38), bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect',win=rep(1,38), bwCheck = FALSE) - - expect_equal(sum(AA), -3.288244527254398e+02, tolerance = 1e-11,scale = 1) - expect_equal(sum(BB), -3.333882366681741e+02, tolerance = 1e-11,scale = 1) - expect_equal(sum(CC), -3.732842331060850e+02, tolerance = 1e-11,scale = 1) -}) - -# These check out OK. -H = test_that("basic gaussian kernel inputs match MATLAB output for different bandwidths", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), bwCheck = FALSE) - BB = Rmullwlsk( c(5,3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), bwCheck = FALSE) - - expect_equal(sum(AA), -3.689730466900281e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(BB), -3.588111399081811e+02, tolerance = 1e-11,scale = 1) - expect_equal(sum(CC), -3.745624473416967e+02, tolerance = 1e-11,scale = 1) -}) - -# These check out OK. -Ft = test_that("basic quartic kernel inputs match MATLAB output for different bandwidths", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='quar',win=rep(1,38), bwCheck = FALSE) - BB = Rmullwlsk( c(5,3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='quar',win=rep(1,38), bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='quar',win=rep(1,38), bwCheck = FALSE) - - expect_equal(sum(AA), -4.021549928032208e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(BB), -3.472853895316415e+02, tolerance = 1e-11,scale = 1) - expect_equal(sum(CC), -3.784289764092692e+02, tolerance = 1e-12,scale = 1) -}) - -# These check out OK. -G = test_that("basic gausvar kernel inputs match MATLAB output for different bandwidths", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gausvar',win=rep(1,38), bwCheck = FALSE) - BB = Rmullwlsk( c(5,3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gausvar',win=rep(1,38), bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3),t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gausvar',win=rep(1,38), bwCheck = FALSE) - - expect_equal(sum(AA), -3.513625436558207e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(BB), -3.480022325255190e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(CC), -3.747722240234172e+02, tolerance = 1e-12,scale = 1) -}) - -# These check out OK. -S = test_that("strictly positive window weights inputs match MATLAB output for different bandwidths/kernels", { - - AA = Rmullwlsk( c(4,2), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss', win=seq(1,38)+0, bwCheck = FALSE) - BB = Rmullwlsk( c(4,2), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect', win=seq(1,38)+0, bwCheck = FALSE) - CC = Rmullwlsk( c(13.3,23.3), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gausvar', win=seq(1,38)+0, bwCheck = FALSE) - DD = Rmullwlsk( c(3,4), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan', win=sin(seq(1,38))+3, bwCheck = FALSE) - EE = Rmullwlsk( c(10.3,4), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='quar', win=sin(seq(1,38))+3, bwCheck = FALSE) - - expect_equal(sum(AA), -4.337814512732364e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(BB), -3.070237338734315e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(CC), -4.782099399727079e+02, tolerance = 1e-12,scale = 1) - expect_equal(sum(DD), -4.149192163656717e+02, tolerance = 1e-11,scale = 1) - expect_equal(sum(EE), -3.573361421232184e+02, tolerance = 1e-12,scale = 1) -}) - - -# These check out OK. -Tt = test_that("incoherent kernel_types fall back to Epanechnikov kernels and give correct warnings", { - - AA = Rmullwlsk( c(3,4), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan', win=sin(seq(1,38))+3, bwCheck = FALSE) - aa = Rmullwlsk( c(3,4), t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='boom3', win=sin(seq(1,38))+3, bwCheck = FALSE) - - expect_equal(sum(AA), sum(aa), tolerance = 1e-15,scale = 1) - expect_warning( Rmullwlsk(5.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epaffn',win=rep(1,38), bwCheck = FALSE), "Kernel_type argument was not set correctly; Epanechnikov kernel used.") - -}) - - - -Y = test_that("Small bandwidths give correct error", { - - # expect_error( Rmullwlsk(0.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = FALSE), "No enough points in local window, please increase bandwidth.") - -expect_equal(as.numeric( Rmullwlsk(0.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = TRUE)), 0) -expect_equal(as.numeric( Rmullwlsk(2.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = TRUE)), 1) - -expect_equal(as.numeric( Rmullwlsk(0.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = 1)), 0) -expect_equal(as.numeric( Rmullwlsk(2.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = 1)), 1) - -expect_equal(as.numeric( Rmullwlsk(0.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = 1)), 0) -expect_equal(as.numeric( Rmullwlsk(0.2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = TRUE)), 0) - -}) - - -# ## Speed test -# n <- 1e5 -# bw <- 0.1 -# xin <- matrix(runif(2 * n), n, 2) -# yin <- rnorm(n) -# win <- rep(1, n) -# xout1 <- xout2 <- seq(0, 1, length.out=100) -# system.time(tmp <- Rmullwlsk(c(bw, bw), 'epan', t(xin), yin, win, xout1, xout2, FALSE)) -# system.time(tmp1 <- Rmullwlsk_old(c(bw, bw), 'epan', t(xin), yin, win, xout1, xout2, FALSE)) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RmullwlskUniversal.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RmullwlskUniversal.R deleted file mode 100644 index 5b4e81cb..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_RmullwlskUniversal.R +++ /dev/null @@ -1,31 +0,0 @@ -library(testthat) -load(system.file('testdata', 'InputFormMllwlskInCpp.RData', package='fdapace')) -IN = InputFormMllwlskInCpp - -ord <- order(IN$tPairs[, 1]) -xin <- IN$tPairs[ord, ] -yin <- IN$cxxn[ord] -win <- rep(1,38) - - -# These check out OK. -U = test_that("basic inputs for different kernels match previous inputs.", { - - AA = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan',win=rep(1,38), bwCheck = FALSE) - AAu = RmullwlskUniversal( bw = 2* IN$bw, tPairs =t(xin), cxxn=yin, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='epan', win=win, FALSE, TRUE) - - BB = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect',win=rep(1,38), bwCheck = FALSE) - BBu = RmullwlskUniversal( bw = 2* IN$bw, tPairs =t(xin), cxxn=yin, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='rect', win=win, FALSE, TRUE) - - CC = Rmullwlsk(2* IN$bw,t(IN$tPairs),cxxn=IN$cxxn, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss',win=rep(1,38), bwCheck = FALSE) - CCu = RmullwlskUniversal( bw = 2* IN$bw, tPairs =t(xin), cxxn=yin, xgrid=IN$regGrid, ygrid=IN$regGrid, kernel_type='gauss', win=win, FALSE, TRUE) - - expect_equal( CC, CCu) - expect_equal( BB, BBu) - expect_equal( AA, AAu) - - - -}) - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rrotatemullwlsk.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rrotatemullwlsk.R deleted file mode 100644 index 7567d691..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_Rrotatemullwlsk.R +++ /dev/null @@ -1,124 +0,0 @@ -# devtools::load_all() -# setwd('misc/', bwCheck = FALSE) - -library(Rcpp) - -library(testthat) - -try( silent=TRUE, load(system.file('testdata', 'InputForRotatedMllwlskInCpp.RData', package='fdapace'))) - -# tolerance is relatively large because we cannot control of 2500 * 1e-16 anyway -# I have already tried using .inverse instead of LLT for the solution and that -# did not make a difference numericallly (small systems anyway) - -U = test_that("basic Epanetchnikov kernel inputs match MATLAB output for different bandwidths", { - - AA = Rrotatedmullwlsk(bw =IN$bw, tPairs=IN$tPairs, cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= IN$kernel, bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw = c(3,4), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= IN$kernel, bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw = c(13,23.3), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= IN$kernel, bwCheck = FALSE) - - expect_equal(sum(AA), -1.887451898050793, tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -3.264859562745997, tolerance = 1e-11,scale = 1) - expect_equal(sum(CC), -5.650324984396344, tolerance = 1e-13,scale = 1) -}) - -V = test_that("basic rectangular kernel inputs match MATLAB output for different bandwidths", { - - AA = Rrotatedmullwlsk(bw =IN$bw, tPairs=IN$tPairs, cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw = c(3,4), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw = c(13,23.3), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE) - - expect_equal(sum(AA), 0.408929466844517, tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -1.803538175275243, tolerance = 1e-13,scale = 1) - expect_equal(sum(CC), -5.866207150638594, tolerance = 1e-13,scale = 1) - - }) - -H = test_that("basic gaussian kernel inputs match MATLAB output for different bandwidths", { - - AA = Rrotatedmullwlsk(bw =IN$bw, tPairs=IN$tPairs, cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gauss', bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw = c(3,4), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gauss', bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw = c(13,23.3), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gauss', bwCheck = FALSE) - - expect_equal(sum(AA), -4.197686977022681, tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -4.134314374205185, tolerance = 1e-14,scale = 1) - expect_equal(sum(CC), -5.767647736432502, tolerance = 1e-13,scale = 1) - -}) - -Ft = test_that("basic quartic kernel inputs match MATLAB output for different bandwidths", { - - AA = Rrotatedmullwlsk(bw =IN$bw, tPairs=IN$tPairs, cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'quar', bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw = c(3,4), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'quar', bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw = c(13,23.3), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'quar', bwCheck = FALSE) - - expect_equal(sum(AA), -3.753442160580053,tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -4.970567279909929, tolerance = 1e-13,scale = 1) - expect_equal(sum(CC), -5.443792883622939, tolerance = 1e-13,scale = 1) - - }) - - - - -# These check out OK. -G = test_that("basic gausvar kernel inputs match MATLAB output for different bandwidths", { - - AA = Rrotatedmullwlsk(bw =IN$bw, tPairs=IN$tPairs, cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gausvar', bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw = c(3,4), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gausvar', bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw = c(13,23.3), tPairs=(IN$tPairs), cxxn= IN$cxxn, win= IN$win, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gausvar', bwCheck = FALSE) - - expect_equal(sum(AA), -9.228691155965564, tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -3.594812776733668, tolerance = 1e-13,scale = 1) - expect_equal(sum(CC), -5.718225024334538, tolerance = 1e-13,scale = 1) - -}) - -# These check out OK. -S = test_that("strictly positive window weights inputs match MATLAB output for different bandwidths/kernels", { - - AA = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= seq(1,38)+0, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gausvar', bwCheck = FALSE) - BB = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= seq(1,38)+0, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'gauss', bwCheck = FALSE) - CC = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= seq(1,38)+0, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE) - DD = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'epan', bwCheck = FALSE) - EE = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'quar', bwCheck = FALSE) - - expect_equal(sum(AA), -4.924560108566402, tolerance = 1e-13,scale = 1) - expect_equal(sum(BB), -6.577000474589042, tolerance = 1e-13,scale = 1) - expect_equal(sum(CC), -1.791956888763226, tolerance = 1e-13,scale = 1) - expect_equal(sum(DD), -3.614424355861832, tolerance = 1e-13,scale = 1) - expect_equal(sum(EE), -5.450343839504677, tolerance = 1e-13,scale = 1) - -}) - - -# These check out OK. -Tt = test_that("incoherent kernel_types fall back to Epanechnikov kernels and give the proper warning msg.", { - - DD = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'epan', bwCheck = FALSE) - dd = Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'boom3', bwCheck = FALSE) - - expect_equal(sum(DD), sum(dd), tolerance = 1e-15, scale= 1) - expect_warning( Rrotatedmullwlsk(bw =c(3,4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'boom3', bwCheck = FALSE), "Kernel_type argument was not set correctly; Epanechnikov kernel used.") - -}) - - -Y = test_that("Small bandwidths give correct error", { - - expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = TRUE)), 0) - expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(9.3,9.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = TRUE)), 1) - - expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = 1)), 0) - expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(9.3,9.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = 1)), 1) - - # expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = 0)), 0) - # expect_equal( as.numeric( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE)), 0) - - expect_error( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = FALSE), "No enough points in local window, please increase bandwidth.") - expect_error( Rrotatedmullwlsk(bw =c(0.3,0.4), tPairs=IN$tPairs, cxxn= IN$cxxn, win= sin(seq(1,38))+3, xygrid=IN$xygrid, npoly=IN$npoly, kernel_type= 'rect', bwCheck = 0), "No enough points in local window, please increase bandwidth.") - - - -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_SBFitting.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_SBFitting.R deleted file mode 100644 index f403cc59..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_SBFitting.R +++ /dev/null @@ -1,98 +0,0 @@ -#setwd('/Users/kyunghee/Desktop/SBF') -#SBF_scripts <- list.files(pattern="*.R") -#for(i in 1:length(SBF_scripts)){ -# source(SBF_scripts[i]) -#} - -#library(Rcpp) -#setwd('/Users/kyunghee/Desktop/tPACE/src') -#sourceCpp('trapzRcpp.cpp') - -library(testthat) - -test_that( - '(1) algorithm convergence including dimension checking, (2) theoretical estimation precision of true component functions.', - { - set.seed(100) - n <- 100 - d <- 2 - X <- pnorm(matrix(rnorm(n*d),nrow=n,ncol=d)%*%matrix(c(1,0.6,0.6,1),nrow=2,ncol=2)) - - f1 <- function(t) 2*(t-0.5) - f2 <- function(t) sin(2*pi*t) - - Y <- f1(X[,1])+f2(X[,2])+rnorm(n,0,0.1) - - N <- 101 - x <- matrix(rep(seq(0,1,length.out=N),d),nrow=N,ncol=d) - h <- c(0.12,0.08) - - sbfResult <- SBFitting(Y,x,X,h) - - fFit <- sbfResult$SBFit - - iterErr <- sbfResult$iterErr - iterErrDiff <- sbfResult$iterErrDiff - iterNum <- sbfResult$iterNum - critErr <- sbfResult$critErr - critErrDiff <- sbfResult$critErrDiff - critNum <- sbfResult$critNum - - expect_true(sum(dim(fFit)!=c(N,d))==0) - expect_true((iterErr> sum((mean(aligned) - me(T)).^2) - # ans = - # 0.0213 - # >> sum(abs(mean(aligned) - me(T)).^1) - # ans = - # 0.4686 - - meTRUE = exp(-10*(T-0.5)^2); # True mean - expect_lt(sum(abs(meTRUE- colMeans(sss$aligned))), 0.4686) - expect_lt(sum((meTRUE- colMeans(sss$aligned))^2), 0.0213) - -}) - -test_that('warping functions monotonic', { - - N = 44; - eps = 0.23; - M = 41; - set.seed(123) - Tfinal = 3 - me <- function(t) exp(-Tfinal*(((t/Tfinal^2)-0.5))^2); - T = seq(0,Tfinal,length.out = M) - recondingTimesMat = matrix(nrow = N, ncol = M) - yMat = matrix(nrow = N, ncol = M) - - for (i in 1:N){ - peak = runif(min = 0.25,max = 0.75,1)*Tfinal - recondingTimesMat[i,] = Tfinal* sort( unique(c( seq(0.0 , peak, length.out = round((M+1)/2)), - seq( peak, Tfinal, length.out = round((M+1)/2))) )) - yMat[i,] = me(recondingTimesMat[i,])* rnorm(1, mean=4.0, sd= eps) + rnorm(M, mean=0.0, sd= eps) - } - - Y = as.list(as.data.frame(t(yMat))) - X = rep(list(T),N) - - sss = WFDA(Ly = Y, Lt = X ) - - monotonic=matrix(F,N,M-1) - for(j in 1:N){ - for(i in 2:M){ - monotonic[j,i-1]=sss$h[i]>=sss$h[i-1] - } - } - - allvalues=apply(monotonic,1,all) - expect_true( all(allvalues)) - - -}) - -test_that('returns expected outputs', { - - N = 44; - eps = 0.23; - M = 41; - set.seed(123) - Tfinal = 3 - me <- function(t) exp(-Tfinal*(((t/Tfinal^2)-0.5))^2); - T = seq(0,Tfinal,length.out = M) - recondingTimesMat = matrix(nrow = N, ncol = M) - yMat = matrix(nrow = N, ncol = M) - - for (i in 1:N){ - peak = runif(min = 0.25,max = 0.75,1)*Tfinal - recondingTimesMat[i,] = Tfinal* sort( unique(c( seq(0.0 , peak, length.out = round((M+1)/2)), - seq( peak, Tfinal, length.out = round((M+1)/2))) )) - yMat[i,] = me(recondingTimesMat[i,])* rnorm(1, mean=4.0, sd= eps) + rnorm(M, mean=0.0, sd= eps) - } - - Y = as.list(as.data.frame(t(yMat))) - X = rep(list(T),N) - - sss = WFDA(Ly = Y, Lt = X ) - - returntype <- list(optns = list(), lambda = NA, h = array(dim = c(N, M)), hInv = array(dim = c(N, M)), aligned = array(dim = c(N, M)), - costs = vector(length=min(round(0.5 * (N - 1)))), timing = Sys.time()) - class(returntype) <- "WFDA" - - expect_true(identical(attributes(sss),attributes(returntype))) - expect_true(identical(class(sss),class(returntype))) - - -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_createDesignPlot.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_createDesignPlot.R deleted file mode 100644 index b57befde..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_createDesignPlot.R +++ /dev/null @@ -1,21 +0,0 @@ -library(testthat) -# devtools::load_all() - -# Uniform time points -## a speed test -set.seed(1) -n <- 1e3 -sparsity <- 1:5 -Lt <- replicate(n, runif(sample(sparsity, 1)), simplify=FALSE) -obsGrid <- sort(unique(unlist(Lt))) -system.time( -CreateDesignPlot(Lt, obsGrid, isColorPlot=TRUE) -) - -# ... are passed in -set.seed(1) -n <- 5e2 -sparsity <- 1:5 -Lt <- replicate(n, round(runif(sample(sparsity, 1)), 2), simplify=FALSE) -obsGrid <- sort(unique(unlist(Lt))) -CreateDesignPlot(Lt, obsGrid, isColorPlot=TRUE, pch=1, cex=1, xlab='XX', ylab='YY') diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cumtrapzRcpp.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cumtrapzRcpp.R deleted file mode 100644 index ef347760..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cumtrapzRcpp.R +++ /dev/null @@ -1,14 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('cumtrapzRcpp works on a trivial example', { - x = c(0,2) - y = c(0,2) - expect_equal( cumtrapzRcpp(x,y), c(0,2) ) -}) - -test_that('trapzRcpp works on a nearly trivial example', { - x = seq(0,4, length.out=100) - y = x + sin(x); - expect_equal(sum( cumtrapzRcpp(x,y)) , 3.865524746134088e+02) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cvlwls1d.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cvlwls1d.R deleted file mode 100644 index 5ef77465..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_cvlwls1d.R +++ /dev/null @@ -1,13 +0,0 @@ -cat("\ntests for 'CVLwls1D'") - -test_that("basic arguments match MATLAB output ", { - - try(silent=TRUE, load(system.file('testdata', 'dataGeneratedByExampleSeed123.RData', package='fdapace'))) - try(silent=TRUE, load(system.file('testdata', 'dataGeneratedByExampleSeed123.RData', package='fdapace'))) - - a_result = CVLwls1D(y, t=t, kernel='epan', npoly=1, nder=0, dataType='Sparse') - expect_equal( a_result, 4.172873877723954, tol = 0.6) # High tolerance because we have different implementation - -} -) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_fitted.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_fitted.R deleted file mode 100644 index 99a11bc2..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_fitted.R +++ /dev/null @@ -1,42 +0,0 @@ -# devtools::load_all() -library(testthat) -set.seed(222) -n <- 201 -pts <- seq(0, 1, by=0.015) -sampWienerD <- Wiener(n, pts) -sampWiener <- Sparsify(sampWienerD, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt ) - -test_that("fitted with QUO and FPC give similar results", { - - fittedY <- fitted(res) - fittedYe <- fitted(res, K=4, derOptns = list(p=1, method='FPC')) - fittedYq <- fitted(res, K=4, derOptns = list(p=1, method='QUO')) - - if(1==3){ - par(mfrow=c(1,3)) - matplot(t(fittedY[1:3,]),t='l') - matplot(t(fittedYe[1:3,]),t='l') - matplot(t(fittedYq[1:3,]),t='l') - } - - expect_warning(fitted(res, k=4, derOptns = list(p=1, method='FPC')), "specifying 'k' is deprecated. Use 'K' instead!") - expect_equal( fittedYe, fittedYq, tolerance =0.01, scale= 1 ) #absolute difference - -}) - -test_that("fitted and real data are extremely correlated", { - - fittedY <- fitted(res) - - if(1==3){ - par(mfrow=c(1,2)) - matplot(t(fittedY[1:5,]),t='l') - matplot(t(sampWienerD[1:5,]),t='l') - } - - expect_true( cor(fittedY[,19], sampWienerD[,19] ) > 0.85 ) - expect_true( cor(fittedY[,29], sampWienerD[,29] ) > 0.85 ) - expect_true( cor(fittedY[,39], sampWienerD[,39] ) > 0.85 ) - -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_funSim.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_funSim.R deleted file mode 100644 index 662e68d2..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_funSim.R +++ /dev/null @@ -1,66 +0,0 @@ - - N = 333; - set.seed(123) - M = 100; - - # Define continuum - s = seq(0,10,length.out = M) - - # Define mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue = Ksi %*% t( matrix(c( eigFunct1(s), eigFunct2(s)), ncol =2)) + t( matrix( rep(meanFunct(s),N), nrow= M)) - - # # Make a quick plot of what we have - # x11() - # par(mfrow=c(2,2)) - # plot(s,meanFunct(s), xlab='s',ylab='', main="Mean Curve"); - # plot(s,eigFunct1(s), xlab='s',ylab='', main="First Eigenfunc."); - # plot(s,eigFunct2(s), xlab='s',ylab='', main="Second Eigenfunc."); - # matplot(t(yTrue), type='l', xlab='s',ylab='', main="True Sample Curves") - - # Create sparse sample - ySparse16 = Sparsify(yTrue, s, 1:16) - ySparse08 = Sparsify(yTrue, s, 1:8) - ySparse04 = Sparsify(yTrue, s, 1:4) - - # Give it a bit of noise - ySparse16$yNoisy = lapply( ySparse16$Ly, function(x) x + 0.5*rnorm(length(x))) - ySparse04$yNoisy = lapply( ySparse04$Ly, function(x) x + 0.5*rnorm(length(x))) - ySparse08$yNoisy = lapply( ySparse08$Ly, function(x) x + 0.5*rnorm(length(x))) - - # A = FPCA(ySparse16$yNoisy, t= ySparse16$Lt ) # Time consuming test - # B = FPCA(ySparse08$yNoisy, t= ySparse08$Lt ) # Time consuming test - C = FPCA(ySparse04$yNoisy, Lt= ySparse04$Lt ) - QQ = MakeFPCAInputs(IDs = rep(1:N, each=M),tVec=rep(s,N), t(yTrue) ) - D = FPCA(QQ$Ly, QQ$Lt) - - # x11() - # par(mfrow=c(2,4)) - # matplot((A$phi[,1:3]), type='l', xlab='s',ylab='', main='Eigenfunc. (median 9 p.)' ) - # matplot((B$phi[,1:3]), type='l', xlab='s',ylab='', main='Eigenfunc. (median 5 p.)' ) - # matplot((C$phi[,1:3]), type='l', xlab='s',ylab='', main='Eigenfunc. (median 3 p.)') - # matplot((D$phi[,1:2]), type='l', xlab='s',ylab='', main='Eigenfunc. (dense)') - # matplot((A$mu), type='l', xlab='s',ylab='', main='Mean (median 9 p.)' ) - # matplot((B$mu), type='l', xlab='s',ylab='', main='Mean (median 5 p.)' ) - # matplot((C$mu), type='l', xlab='s',ylab='', main='Mean (median 3 p.)' ) - # matplot((D$mu), type='l', xlab='s',ylab='', main='Mean (dense)' ) - - - # x11() - # par(mfrow=c(2,2)) - #CreateDesignPlot(t=ySparse16$Lt, obsGrid= A$obsGrid, isColorPlot=FALSE, noDiagonal= TRUE,yname= '9 p.') - #CreateDesignPlot(t=ySparse08$Lt, obsGrid= B$obsGrid, isColorPlot=FALSE, noDiagonal= TRUE,yname= '5 p.') - #CreateDesignPlot(t=ySparse04$Lt, obsGrid= C$obsGrid, isColorPlot=FALSE, noDiagonal= TRUE,yname= '3 p.') - #CreateDesignPlot(t=QQ$Lt, obsGrid= D$obsGrid, isColorPlot=FALSE, noDiagonal= FALSE,yname= 'dense') - - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls1d1.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls1d1.R deleted file mode 100644 index 9ea38d14..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls1d1.R +++ /dev/null @@ -1,14 +0,0 @@ - cat("\nTests for 'GCVLwls1D1.R'") - -load(system.file('testdata', 'dataForGcvLwlsTest.RData', package='fdapace')) - -test_that("basic optimal bandwidth choice for the mean function use GCV method matches MATLAB for Sparse data", { - - A <- GCVLwls1D1(y,t,'epan',1,0,'Sparse') - expect_equal( A$bOpt, 2.071354057811459 ) - - B <- GCVLwls1D1(y,t,'rect',1,0,'Sparse') - expect_equal( B$bOpt, 2.238990337557121, 0.04 ) - - } ) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls2dV2.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls2dV2.R deleted file mode 100644 index 7b3bd0bd..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_gcvlwls2dV2.R +++ /dev/null @@ -1,92 +0,0 @@ -# devtools::load_all() -##options(error=recover) -library(testthat) - -try(silent = TRUE, load(system.file('testdata', 'dataForGetRawCov.RData', package='fdapace'))) -# try(silent = TRUE, load(system.file('testdata', 'dataForGetRawCov.RData', package='fdapace'))) -rcov <- GetRawCov(y,t, sort(unlist(t)), mu,'Sparse',FALSE) -r <- range(sort(unlist(t))) -regGrid <- seq(r[1], r[2], length.out=101) -tmp <- GCVLwls2DV2(sort(unlist(t)), regGrid, kern='epan', rcov=rcov, t=t) ## Why is this guy outside a test? -getGCVscoresV2(tmp$minBW, 'epan', rcov$tPairs, rcov$cxxn, regGrid=regGrid) - -test_that('getGCVscoresV2 spits out Inf if bandwidth is too small', { - expect_equal(suppressWarnings(getGCVscoresV2(2, 'epan', rcov$tPairs, rcov$cxxn, regGrid=regGrid)), Inf) - expect_message(getGCVscoresV2(2, 'epan', rcov$tPairs, rcov$cxxn, regGrid=regGrid, verbose=TRUE), 'Invalid bandwidth. Try enlarging the window size.\n') -}) - - -# debug(GCVLwls2DV2) -test_that('Binning works for GCV', { - set.seed(1) - pts <- seq(0, 1, by=0.05) - samp3 <- Wiener(20, pts, sparsify=2:7) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=FALSE) - brcov3 <- BinRawCov(rcov3) - obsGrid <- sort(unique(unlist(samp3$Lt))) - regGrid <- seq(min(obsGrid), max(obsGrid), length.out=101) - g1 <- GCVLwls2DV2(obsGrid, regGrid, kern='epan', rcov=rcov3, t=samp3$Lt) - g2 <- GCVLwls2DV2(obsGrid, regGrid, kern='epan', rcov=brcov3, t=samp3$Lt) - expect_equal(g1, g2) -}) - - -## Test CV -test_that('getCVscoresV2 works for binning', { - set.seed(1) - pts <- seq(0, 1, by=0.05) - samp3 <- Wiener(20, pts, sparsify=2:7) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=FALSE) - brcov3 <- BinRawCov(rcov3) - obsGrid <- sort(unique(unlist(samp3$Lt))) - regGrid <- seq(min(obsGrid), max(obsGrid), length.out=101) - partition <- CreateFolds(1:nrow(rcov3$tPairs), k=10) - bpartition <- CreateFolds(seq_along(brcov3$meanVals), k=10) - g1 <- getCVscoresV2(partition, 0.35, 'epan', rcov3$tPairs, rcov3$cxxn, regGrid=regGrid)[1] - g2 <- getCVscoresV2(bpartition, 0.35, 'epan', brcov3$tPairs, brcov3$meanVals, brcov3$count, regGrid=regGrid, RSS=brcov3$RSS)[1] - expect_equal(g1, g2, tolerance=1e-2) -}) - -test_that('GCV is closed to CV', { - set.seed(2) - pts <- seq(0, 1, by=0.05) - samp3 <- Wiener(20, pts, sparsify=2:7) - rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=FALSE) - obsGrid <- sort(unique(unlist(samp3$Lt))) - regGrid <- seq(min(obsGrid), max(obsGrid), length.out=101) - gcvRes <- GCVLwls2DV2(obsGrid, regGrid, kern='epan', rcov=rcov3, t=samp3$Lt) - cvRes <- GCVLwls2DV2(obsGrid, regGrid, kern='epan', rcov=rcov3, CV=10, t=samp3$Lt) - expect_equal(gcvRes$h, cvRes$h, 0.1) -}) - - -## HOLE example. Test whether the smoother can handle degenerate cases (in the local window all points lie on a line). - -test_that('GCV will avoid spitting out bandwidth that results in degenerate windows', -{ - set.seed(2) - n <- 20 - pts <- seq(0, 1, by=0.1) - samp4 <- Wiener(20, pts, sparsify=length(pts)) - # for the 10-15th observation retain only one - for (i in 1:n) { - retain <- sort(c(1, sample(c(2:3, (length(pts) - 3):length(pts)), 1), 4:(length(pts) - 4))) - samp4$Ly[[i]] <- samp4$Ly[[i]][retain] - samp4$Lt[[i]] <- samp4$Lt[[i]][retain] - } - - # CreateDesignPlot(samp4$Lt, pts, TRUE, FALSE, 'samp3') - - rcov4 <- GetRawCov(samp4$Ly, samp4$Lt, pts, rep(0, length(pts)), 'Sparse', error=FALSE) - g4 <- GCVLwls2DV2(pts, pts, kern='epan', rcov=rcov4, t=samp4$Lt) - expect_true(g4$minBW > 0.29) # by eyeballing -}) - -## To matlab -# names(samp3$Lt) <- 1:length(samp3$Lt) -# names(samp3$Ly) <- names(samp3$Lt) -# samp3$Lt <- lapply(samp3$Lt, matrix, nrow=1) -# samp3$Ly <- lapply(samp3$Ly, matrix, nrow=1) -# R.matlab::writeMat('samp3.mat', y=samp3$Ly, t=samp3$Lt) -# GCV values matches matlab, but procedures for optimal GCV BW choice are different. - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCorYX.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCorYX.R deleted file mode 100644 index 9bdd77be..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCorYX.R +++ /dev/null @@ -1,34 +0,0 @@ -library(testthat) - -test_that('GetCrCorYX works on a trivial example', { - - set.seed(123) - A = matrix(rnorm(10*7), ncol=7); - B = matrix(rnorm(10*4), ncol=4); - - covA = cov(A) - covB = cov(B) - covAB = cov(A,B) - - expect_equal(GetCrCorYX(covAB, covA, covB),cor(A,B)) - - expect_equal(GetCrCorYX(covAB, diag(covA), diag(covB)),cor(A,B)) - -}) - -test_that('GetCrCorYX works on a trivial example with a scalar', { - - set.seed(123) - A = matrix(rnorm(101*7), ncol=7); - B = rnorm(101); - - covA = cov(A) - covB = var(B) - covAB = cov(A,B) - - expect_equal(GetCrCorYX(covAB, covA, covB),cor(A,B)) - - expect_equal(GetCrCorYX(covAB, diag(covA), covB),cor(A,B)) - -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCovYZ.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCovYZ.R deleted file mode 100644 index 313e622f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getCrCovYZ.R +++ /dev/null @@ -1,136 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('The cross-covariance in the case of a dense matrix against a constant vector is zero and in the case of a steadily increasing matrix against a steadily increasing vector is stable',{ - set.seed(1) - n <- 100 - dccObj <- GetCrCovYZ(bw=1, Z= rep(4,n), Ly= matrix( runif(10*n), n)) - expect_equal( rep(0,10), as.numeric(dccObj$rawCC$rawCCov) ) - dccObj <- GetCrCovYZ( Z= 1:n, Ly= matrix(1:(10*n),n)) - expect_equal( 0, diff(range(dccObj$rawCC$rawCCov)) ) -}) - -test_that('The cross-covariance in the case of sparse sample and constant vector is zero',{ - set.seed(1) - # Make sparse sample - Ly <- list( runif(5), c(1:3), c(2:4), c(4)) - Lt <- list( c(1:5), c(1:3), c(1:3), 4) - Z = rep(4,4) - sccObj = GetCrCovYZ(bw=1, Z= Z, Ly=Ly, Lt=Lt, Ymu=rep(4,5)) - expect_equal( rep(0, sum(unlist(lapply(Ly, length)))), sccObj$rawCC$rawCCov ) -}) - -test_that('The cross-covariance in the case of a sparse sample that is steadily increasing and a vector that is steadily increasing is almost perfectly linear',{ - # Make sparse sample - Ly <- list(c(0:5),c(4.0000000000001), 5) - Lt <- list(c(0:5),c(4.0000000000001), 5) - Z = c(2.5, 4.0000000000001, 5) - sccObj = GetCrCovYZ( Z= Z, Ly=Ly, Lt=Lt, Ymu=rep(4.5,7)) - AA<- summary(lm( sccObj$smoothedCC ~ sort(unique(unlist(Lt))))) - expect_equal( AA$r.squared, 0.9998, tol=0.001) -}) - -test_that('The cross-covariance in the case of dense sample and a random variable with known variance',{ - - set.seed(123) - N = 1111; - M = 101; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = t(t(chol(matrix(c(5,3,3,4),2))) %*% t(Ksi)) - - # Create Y_true - yTrue = Ksi[,1] %*% t(matrix(eigFunct1(s), ncol=1)) - sccObj = GetCrCovYZ(Z= Ksi[,2], Ly=yTrue ) - - # we know that the covariance between ksi_1 and z is three - expect_equal( max( abs( eigFunct1(s)*3 - sccObj$rawCC$rawCCov)), 0.03, tol=.01, scale=1 ) -}) - -test_that('The cross-covariance in the case of sparse sample and a random variable with known variance and the GCV bandwidth choice.',{ - - set.seed(123) - N = 3000; - M = 101; - - # Define the continuum - s = seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi = matrix(rnorm(N*2), ncol=2); - Ksi = apply(Ksi, 2, scale) - Ksi = t(t(chol(matrix(c(5,3,3,4),2))) %*% t(Ksi)) - - # Create Y_true - yTrue = Ksi[,1] %*% t(matrix(eigFunct1(s), ncol=1)) - ySparse = Sparsify(yTrue, s, c(3:9)) - - # Use GCV to pick the bandwidth - sccObj = GetCrCovYZ( Z= Ksi[,2],Ly=ySparse$Ly, Lt=ySparse$Lt, Ymu = rep(0,M) ) - - # Uncomment to visually check coherence. - # plot(s, sccObj$smoothedCC) - # lines(s, 3* eigFunct1(s)) - - # we know that the covariance between ksi_1 and z is three - expect_equal( mean(abs( 3*eigFunct1(s) - sccObj$smoothedCC)), 0.035, tol=.1, scale=1 ) - - # check that the relevant GCV scores are worse - sccObjDOUBLE = GetCrCovYZ( bw = sccObj$bw*2, Z= Ksi[,2],Ly=ySparse$Ly, Lt=ySparse$Lt, Ymu = rep(0,M) ) - sccObjHALF = GetCrCovYZ( bw = sccObj$bw*0.5, Z= Ksi[,2],Ly=ySparse$Ly, Lt=ySparse$Lt, Ymu = rep(0,M) ) - - expect_equal( min(c( sccObj$score, sccObjDOUBLE$score, sccObjHALF$score) ) , sccObj$score ) -}) - -test_that('Dense Wiener process has cov(int X(s) ds, X(t)) = int min(s,t) ds', { - set.seed(4) - n <- 2000 - nGridIn <- 51 - T <- matrix(seq(0, 1, length.out=nGridIn)) - -## Corr(\int X(s) ds, X(t)) = \int min(s,t) ds - covTrue <- rowMeans(outer(as.numeric(T), as.numeric(T), pmin)) - - A <- Wiener(n, T) - B <- Wiener(n, T) - X <- A + B - Z <- rowMeans(A) - - tmp <- GetCrCovYZ(NULL, Z, NULL, X, NULL, NULL, T) - expect_equal(as.numeric(tmp$rawCC$rawCCov), covTrue, tolerance=0.1) -}) - -test_that('Sparse Wiener process has cov(int X(s) ds, X(t)) = int min(s,t) ds', { - set.seed(4) - n <- 2000 - nGridIn <- 51 - sparsity <- 1:5 # must have length > 1 - bw <- 0.2 - kern <- 'epan' - T <- matrix(seq(0, 1, length.out=nGridIn)) - -## Corr(\int X(s) ds, X(t)) = \int min(s,t) ds - covTrue <- rowMeans(outer(as.numeric(T), as.numeric(T), pmin)) - - A <- Wiener(n, T) - B <- Wiener(n, T) - X <- A + B - indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) - tAll <- lapply(1:n, function(i) T[indEach[[i]]]) - Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) - Z <- rowMeans(A) - - tmp <- GetCrCovYZ(bw, Z, NULL, Xsp, tAll, rep(0, nGridIn), T) - expect_equal(tmp$smoothedCC, covTrue, tolerance=0.1) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getMinb.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getMinb.R deleted file mode 100644 index 4372630f..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_getMinb.R +++ /dev/null @@ -1,24 +0,0 @@ -# devtools::load_all() -library(testthat) -load(system.file('testdata', 'dataForGcvLwlsTest.RData', package='fdapace')) -# rcov <- GetRawCov(y,t, sort(unlist(t)), mu,'Sparse',FALSE) #Matches ML output -test_that('2D min bandwidth is similar to Matlab', { - # expect_equal(GetMinb(rcov, sort(unique(unlist(t)))), 4.1427, tolerance=diff(range(unlist(t))) / 1000) - - # We break strict compatibility with MATLAB when we used quantile( diff(b[ids]), 0.95)/2 instead of max(diff(b[ids])/2) - # expect_equal(GetMinb(t, sort(unique(unlist(t)))), 4.1427, tolerance=diff(range(unlist(t))) / 1000) - - expect_equal( GetMinb(legacyCode = TRUE,t, sort(unique(unlist(t)))), 4.1427, tolerance= 4.1427 * 0.0175) - expect_equal( as.numeric(GetMinb(t, sort(unique(unlist(t))))), 4.1427, tolerance= 4.1427 * 0.0195 ) -}) - -test_that('2D min bandwidth for binned and unbinned rcov is the same', { - # expect_equal(GetMinb(BinRawCov(rcov), sort(unique(unlist(t)))), GetMinb(rcov, sort(unique(unlist(t))))) -}) - - -set.seed(1) -pts <- seq(0, 1, length=10) -samp2 <- Wiener(100, pts, sparsify=2:5) -rcov2 <- GetRawCov(samp2$Ly, samp2$Lt, pts, rep(0, length(pts)), 'Sparse', FALSE) -GetMinb(samp2$Lt, pts) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_interp2lin.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_interp2lin.R deleted file mode 100644 index f6d7e8db..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_interp2lin.R +++ /dev/null @@ -1,128 +0,0 @@ -# setwd('misc/') -# devtools::load_all() -# devtools::load_all('../RPACE/tPACE') - -library(testthat) -library(pracma) -# These check out OK. -U1 = test_that("basic pracma::interp2 example gives same output ", { - - x <- linspace(-1, 1, 11) - y <- linspace(-1, 1, 11) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + mgrid$Y^2 - xp <- yp <- linspace(-1, 1, 101) - method <- "linear" - AA = interp2(x, y, Z, xp, yp, method) - BB = interp2lin(x, y, Z, xp, yp) - expect_equal(sum(AA), sum(BB), tolerance = 2e-15) - -}) - -# These check out OK. -U2 = test_that("basic pracma::interp2 (extended) example gives same output ", { - - x <- linspace(-1, 4, 11) - y <- linspace(-1, 4, 11) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + 2*mgrid$Y + 3 - xp <- yp <- linspace(-1, 4, 51) - method <- "linear" - AA = interp2(x, y, Z, xp, yp, method) - BB = interp2lin( x, y, Z, xp, yp) - expect_equal(sum(AA), sum(BB), tolerance = 2e-15) -}) - - -U2_unequal = test_that("basic pracma::interp2 (extended) example gives same output ", { - - x <- linspace(-2, 5, 10) - y <- linspace(-1, 4, 11) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + 2*mgrid$Y + 3 - xp <- linspace(0, 3, 51) - yp <- linspace(0, 3, 51) - method <- "linear" - AA = interp2(x, y, Z, xp, yp, method) - BB = interp2lin( x, y, t(Z), xp, yp) - expect_equal(AA, BB, tolerance = 2e-15) -}) - - -# These check out OK. -U3 = test_that("basic pracma::interp2 (extended) example gives same output and out of sample", { - - x <- linspace(-1, 4, 11) - y <- linspace(-1, 4, 11) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + 2*mgrid$Y + 3 - xp <- yp <- linspace(-1, 5, 51) - method <- "linear" - AA = interp2(x, y, Z, xp, yp, method) - BB = interp2lin( x, y, Z, xp, yp) - expect_equal(sum(AA, na.rm=TRUE), sum(BB, na.rm=TRUE), tolerance = 2e-15) - expect_equal(is.na(BB), is.na(AA), tolerance = 2e-15) -}) - -#These check out OK. -U4 = test_that("basic pracma::interp2 example gives same outputs large output grid", { - - x <- linspace(-1, 4, 101) - y <- linspace(-1, 4, 101) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + 2*mgrid$Y + 3 - xout <- linspace(-1, 4, 200) - meshOut <- meshgrid(xout) - xp <- meshOut$X - yp <- meshOut$Y - method <- "linear" - system.time({AA = interp2(x, y, Z, xp, yp, method)}) - system.time({BB = interp2lin( x, y, Z, xp, yp)}) - expect_equal(sum(AA), sum(BB), tolerance = 2e-15) -}) - -#These check out OK. -U5 = test_that("basic pracma::interp2 example gives same outputs large input grid", { - - x <- linspace(-1, 4, 1001) - y <- linspace(-1, 4, 1001) - mgrid <- meshgrid(x, y) - Z <- mgrid$X^2 + 2*mgrid$Y + 3 - xout <- linspace(-1, 4, 100) - meshOut <- meshgrid(xout) - xp <- meshOut$X - yp <- meshOut$Y - method <- "linear" - system.time({AA = interp2(x, y, Z, xp, yp, method)}) - system.time({BB = interp2lin( x, y, Z, xp, yp)}) - expect_equal(sum(AA), sum(BB), tolerance = 2e-15) -}) - -U6 = test_that("basic pracma::interp2 example gives same output on different grid size", { - - x <- linspace(-2/3, 2/3, 4) - y <- linspace(-1, 1, 5) - Z <- outer(x, y, `+`) - xp <- linspace(-1/2, 1/2, 4) - yp <- linspace(-1, 1, 4) - method <- "linear" - AA = interp2(x, y, t(Z), xp, yp, method) - BB = interp2lin(x, y, Z, xp, yp) - expect_equal(AA, BB, tolerance = 2e-15) - -}) - -U7 = test_that("basic pracma::interp2 example gives same output on different grid size (large)", { - - x <- linspace(-1/2, 1/2, 3) - y <- linspace(-1, 1, 15) - Z <- outer(x, y, `*`) - xp <- linspace(-1/2, 1/2, 11) - yp <- linspace(-1, 1, 11) - method <- "linear" - AA = interp2(x, y, t(Z), xp, yp, method) - BB = interp2lin(x, y, Z, xp, yp) - expect_equal(sum(AA), sum(BB), tolerance = 2e-15) - -}) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_mapX1d.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_mapX1d.R deleted file mode 100644 index 8c43a2ed..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_mapX1d.R +++ /dev/null @@ -1,11 +0,0 @@ -cat("\ntests for 'MapX1D'") - -test_that("basic arguments do not return any errors ", { - xn = c(1:4,16) - y = matrix(1:30, 15,2) - x = c(1:14,16) - expect_equal( MapX1D(x,y,xn), matrix(c(1,2,3,4,15,16,17,18,19,30), 5,2)) - expect_equal( MapX1D(1:14, seq(0,1,length.out=14),1:4 ), seq(0,1,length.out=14)[1:4]) -} -) - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_minb.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_minb.R deleted file mode 100644 index 4484aa4a..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_minb.R +++ /dev/null @@ -1,11 +0,0 @@ - cat("\nTests for 'Minb'") - -test_that("basic vector arguments do not return any errors ", { - expect_equal( Minb(c(1,2,3,4.1), -1), NaN) - expect_equal( Minb(c(1,2,3,4.1), 1), 2* 0.55) - expect_equal( Minb(c(11,2,3,4.1), -1), NaN) - expect_equal( Minb(c(11,2,3,4.1), 2), 8) - expect_equal( Minb(c(1,2,3,4.1), 6), NaN) -}) - -# cat("Done") diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_pc_covE.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_pc_covE.R deleted file mode 100644 index b3b46fea..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_pc_covE.R +++ /dev/null @@ -1,68 +0,0 @@ -# devtools::load_all() - -p0 <- list(dataType='Sparse', error=TRUE, kernel='epan') -p1 <- list(dataType='Dense', error=TRUE, kernel='epan') - -set.seed(1) -pts <- seq(0, 1, by=0.05) -regGrid <- seq(0, 1, by=0.1) - -sampSparse <- Wiener(100, pts, sparsify=20) -p0 <- SetOptions(sampSparse$Ly, sampSparse$Lt, p0) -sampDense <- Wiener(100, pts, sparsify=21) -p1 <- SetOptions(sampDense$Ly, sampDense$Lt, p1) - -mu3 <- rep(0, length(pts)) - -## Sparse Case -rcovSparse <- GetRawCov(sampSparse$Ly, sampSparse$Lt, pts, mu3, p0$dataType, error=p0$error) -tmpSparse <- GetSmoothedCovarSurface(sampSparse$Ly, sampSparse$Lt, mu3, pts, regGrid, - p0, useBinnedCov=FALSE) -pccovE_Sparse <- PC_CovE(pts, seq(0,1,length.out=nrow(tmpSparse$smoothCov)), - bw_userCov = tmpSparse$bwCov, rotationCut = c(0, 1), kernel = p0$kernel, rcov = rcovSparse) -pccovE_Sparse$sigma2 - -## Dense Case -rcovDense <- GetRawCov(sampDense$Ly, sampDense$Lt, pts, mu3, p1$dataType, error=p1$error) -tmpDense <- GetSmoothedCovarSurface(sampDense$Ly, sampDense$Lt, mu3, pts, regGrid, - p1, useBinnedCov=FALSE) -pccovE_Dense <- PC_CovE(pts, seq(0,1,length.out=nrow(tmpDense$smoothCov)), - bw_userCov = tmpDense$bwCov, rotationCut = c(0, 1), kernel = p1$kernel, rcov = rcovDense) -pccovE_Dense$sigma2 - -## Tests added by Xiongtao -## Dense -set.seed(1) -pts <- seq(0, 1, by=0.01) -regGrid <- seq(0, 1, by=0.02) - -n <- 10000 -sampDense <- Wiener(n, pts) -sampDense <- sampDense + rnorm(n * length(pts), sd=10) -sampDense <- Sparsify(sampDense, pts, length(pts)) -p1 <- SetOptions(sampDense$Ly, sampDense$Lt, list(dataType='Dense', error=TRUE, kernel='epan')) -mu3 <- rep(0, length(pts)) - -rcovDense <- GetRawCov(sampDense$Ly, sampDense$Lt, pts, mu3, p1$dataType, error=p1$error) -tmpDense <- GetSmoothedCovarSurface(sampDense$Ly, sampDense$Lt, mu3, pts, regGrid, p1, useBinnedCov=FALSE) - - -pccovE_Dense <- PC_CovE(pts, seq(0,1,length.out=nrow(tmpDense$smoothCov)), bw_userCov = tmpDense$bwCov, rotationCut = c(0, 1), kernel = p1$kernel, rcov = rcovDense) -sqrt(pccovE_Dense$sigma2) - -## Sparse -set.seed(1) -pts <- seq(0, 1, by=0.05) -regGrid <- seq(0, 1, by=0.1) -n <- 100 -sampSparse <- Wiener(n, pts) -sampSparse <- sampSparse + rnorm(n * length(pts), sd=0.4) -sampSparse <- Sparsify(sampSparse, pts, 2:7) -p2 <- SetOptions(sampSparse$Ly, sampSparse$Lt, list(dataType='Sparse', error=TRUE, kernel='epan')) -mu3 <- rep(0, length(pts)) - -rcovSparse <- GetRawCov(sampSparse$Ly, sampSparse$Lt, pts, mu3, p2$dataType, error=p2$error) -tmpSparse <- GetSmoothedCovarSurface(sampSparse$Ly, sampSparse$Lt, mu3, pts, regGrid, p2, useBinnedCov=FALSE) - -pccovE_Sparse <- PC_CovE(pts, seq(0,1,length.out=nrow(tmpSparse$smoothCov)), bw_userCov = tmpSparse$bwCov, rotationCut = c(0, 1), kernel = p2$kernel, rcov = rcovSparse) -sqrt(pccovE_Sparse$sigma2) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_plotFPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_plotFPCA.R deleted file mode 100644 index f0411eb8..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_plotFPCA.R +++ /dev/null @@ -1,23 +0,0 @@ -# devtools::load_all() - -viewPdf <- FALSE -set.seed(2) -n <- 100 -M <- 51 -pts <- seq(0, 1, length.out=M) -mu <- rep(0, length(pts)) -sampDense <- Wiener(n, pts) -samp <- Sparsify(sampDense, pts, M) -res <- FPCA(samp$Ly, samp$Lt, list(error=TRUE, FVEthreshold=1, dataType='Dense', plot=TRUE)) - -if (viewPdf) { - pdf('tmp.pdf') -} - -plot(res) - -test_that("inner product of eigenfunctions and mean shall be non-negative", { - inprod.mu.and.phi <- res$mu %*% res$phi / M #compute inner product by simple Riemann sum - expect_true( all(inprod.mu.and.phi>=0) ) #absolute difference - -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_predictFPCA.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_predictFPCA.R deleted file mode 100644 index 91d6700c..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_predictFPCA.R +++ /dev/null @@ -1,120 +0,0 @@ -if (Sys.getenv('TRAVIS') != 'true') {# Do not run on travis since this is slow -# devtools::load_all() -library(testthat) - -# test for consistency in dense case -test_that('consistent estimates for dense case using IN', { - - set.seed(1) - n <- 30 - pts <- seq(0, 1, length.out = 33) - sampWiener <- Wiener(n, pts) - sampWiener <- Sparsify(sampWiener, pts, 33) - resA <- FPCA(sampWiener$Ly, sampWiener$Lt) - testK = 4; - - AAA <- predict(resA, newLy = sampWiener$Ly,newLt = sampWiener$Lt, K = testK, xiMethod = 'IN') - - expect_lt( max( abs(colMeans( abs(AAA) - abs(resA$xiEst[,1:testK]) ) ) ), .Machine$double.eps) - expect_gt( min( abs(diag(cor( AAA , resA$xiEst[,1:testK])) ) ), 0.99999) - -}) - -# test for consistency in sparse case -test_that('consistent estimates for dense case using CE', { - - set.seed(1) - n <- 30 - pts <- seq(0, 1, length.out = 33) - sampWiener <- Wiener(n, pts) - sampWiener <- Sparsify(sampWiener, pts, 33) - resB <- FPCA(sampWiener$Ly, sampWiener$Lt) - testK = 4; - BBB <- predict(resB, newLy = sampWiener$Ly,newLt = sampWiener$Lt, K = testK, xiMethod = 'CE') - - expect_lt( max( abs(colMeans( abs(BBB) - abs(resB$xiEst[,1:testK])) ) ), sd(abs(resB$xiEst[,1:testK])) / 50) - expect_gt( min( abs(diag(cor(BBB , resB$xiEst[,1:testK])) ) ), 0.99) - -}) - -# test for consistency in sparse case -test_that('consistent estimates for sparse case using CE', { - - set.seed(1) - n <- 70 - pts <- seq(0, 1, by=0.0025) - sampWiener <- Wiener(n, pts) - sampWiener <- Sparsify(sampWiener, pts, 4) - resC <- FPCA(sampWiener$Ly, sampWiener$Lt) - testK = 4 - - CCC <- predict(resC, newLy = sampWiener$Ly,newLt = sampWiener$Lt, K = testK) - - expect_lt( max( abs(colMeans(CCC - resC$xiEst[,1:testK]) ) - 1.96 * apply(CCC - resC$xiEst[,1:testK],2,sd) ), .Machine$double.eps) - expect_gt( min( abs(diag(cor(CCC , resC$xiEst[,1:testK])) ) ), 0.99999) - -}) - -# test for consistency when using dense data with a sparse object -test_that('consistent estimates for dense data with sparse FPCA object', { - - set.seed(1) - n <- 1001 # This object has to be pretty informed... - pts <- seq(0, 1, length.out = 33) - sampWiener <- Wiener(n, pts) - - set.seed(2) - sampWienerS <- Sparsify(sampWiener, pts, 9) - resS <- FPCA(sampWienerS$Ly, sampWienerS$Lt) - set.seed(2) - sampWienerD <- Sparsify(sampWiener, pts, 33) - resD <- FPCA(sampWienerD$Ly, sampWienerD$Lt) - testK = 4 - - AAA2 <- predict(resS, newLy = sampWienerD$Ly,newLt = sampWienerD$Lt, K = testK) - - expect_lt( max( abs(colMeans( abs(AAA2) - abs(resD$xiEst[,1:testK])) ) - 1.96 * apply( abs(AAA2) - abs( resD$xiEst[,1:testK]),2,sd) ), .Machine$double.eps) - expect_gt( min( abs(diag(cor(AAA2 , resD$xiEst[,1:testK])) ) ), 0.985) - -}) - -# test for consistency when using sparse data with a dense object -test_that('consistent estimates for sparse data with dense FPCA object', { - - set.seed(1) - n <- 51 - pts <- seq(0, 1, length.out = 99) - sampWiener <- Wiener(n, pts) - - set.seed(2) - sampWienerS <- Sparsify(sampWiener, pts, 11) - set.seed(2) - sampWienerD <- Sparsify(sampWiener, pts, 99) - resD <- FPCA(sampWienerD$Ly, sampWienerD$Lt) - testK = 4 - - AAA3 <- predict(resD, newLy = sampWienerS$Ly,newLt = sampWienerS$Lt, K = testK, xiMethod = 'CE') - - expect_lt( max( abs(colMeans( abs(AAA3) - abs(resD$xiEst[,1:testK])) ) - 1.96 * apply( abs(AAA3) - abs( resD$xiEst[,1:testK]),2,sd) ), .Machine$double.eps) - expect_gt( min( abs(diag(cor(AAA3, resD$xiEst[,1:testK])) ) ), 0.90) # - -}) - -# test for consistency when using sparse data with a dense object -test_that('error when using Tr. Num. Int with sparse data FPCA object', { - - set.seed(1) - n <- 51 - pts <- seq(0, 1, length.out = 99) - sampWiener <- Wiener(n, pts) - - set.seed(2) - sampWienerS <- Sparsify(sampWiener, pts, 2) - resS2 <- FPCA(sampWienerS$Ly, sampWienerS$Lt) - - expect_error( predict(resS2, newLy = sampWienerS$Ly,newLt = sampWienerS$Lt, K = testK, xiMethod = 'IN'), - message = 'Trapezoid Numerical intergration (IN) is invalid for sparse data.') # - -}) - -} diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_rotateLwls2dV2.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_rotateLwls2dV2.R deleted file mode 100644 index 4aa9f737..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_rotateLwls2dV2.R +++ /dev/null @@ -1,15 +0,0 @@ -# devtools::load_all() -set.seed(1) -n <- 100 -pts <- seq(0, 1, by=0.05) -outPts <- seq(0, 1, by=0.1) -samp3 <- Wiener(n, pts) + rnorm(n * length(pts), sd=0.5) -samp3 <- Sparsify(samp3, pts, 5:10) -rcov3 <- GetRawCov(samp3$Ly, samp3$Lt, pts, rep(0, length(pts)), 'Sparse', error=TRUE) -brcov3 <- BinRawCov(rcov3) - -gcv3b <- GCVLwls2DV2(pts, outPts, kern='epan', rcov=brcov3, t=samp3$Lt) - -test_that('RotateLwls2dV2.R interface is correct', { - expect_equal(Rrotatedmullwlsk(c(gcv3b$h, gcv3b$h) , 'epan', t(brcov3$tPairs), brcov3$meanVals, brcov3$count, rbind(outPts, outPts), npoly=1, bwCheck=FALSE), RotateLwls2DV2( gcv3b$h, 'epan', xin=brcov3$tPairs, yin=brcov3$meanVals, win=brcov3$count, xout=cbind(outPts, outPts))) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_selectK.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_selectK.R deleted file mode 100644 index e9a46d41..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_selectK.R +++ /dev/null @@ -1,194 +0,0 @@ -library(testthat) -library(mvtnorm) -# devtools::load_all() - -test_that("SelectK works for dense FPCA Wiener process with measurement error",{ - n = 100; K = 10; pts = seq(0, 1, length=50) - lambda <- (1 / (1:K - 1/2) / pi)^2 - TrueFVE <- cumsum(lambda)/sum(lambda) * 100 - phi <- sqrt(2) * sin( pts %*% matrix(1:K - 1/2, 1, K) * pi ) - set.seed(1) - scores <- t(diag(1 / (1:K - 1/2) / pi) %*% matrix(rnorm(K * n), K, n)) - sd <- 0.01 - # generate Wiener process - test1 <- t(phi %*% t(scores)) # Dense data - test2 <- test1 + matrix(rnorm(nrow(test1)*ncol(test1),mean=0,sd=sd),nrow=nrow(test1)) - test4 <- Sparsify(test2, pts, rep(length(pts),n)) # Dense Data with measurement errors - Trueloglik <- rep(0, K) - for(i in 1:K){ - # marginal likelihood - Sigma_y <- phi[,1:i,drop=F] %*% (lambda[1:i]*diag(i)) %*% t(phi[,1:i,drop=F]) + sd^2 * diag(nrow(phi[,1:i,drop=F])) - detSigma_y <- det(Sigma_y) - for(j in 1:n){ - invtempsub = solve(Sigma_y, test4$Ly[[j]] - 0) - Trueloglik[i] <- Trueloglik[i] + dmvnorm(x=test4$Ly[[j]],mean=rep(0,nrow(phi)), - sigma=Sigma_y, log=TRUE) - } - # conditional likelihood - #Trueloglik[i] <- -(sum(diag((test2 - t(phi[,1:i] %*% t(scores[,1:i]))) %*% t(test2 - t(phi[,1:i] %*% t(scores[,1:i])))))/(2*sd^2) + - # length(pts)/2*log(2*pi) + length(pts)/2*log(sd^2)) - } - TrueAIC <- 2*(1:K) - 2*Trueloglik - TrueBIC <- log(n)*(1:K) - 2*Trueloglik - # FPCA - #optnDenseError <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorAIC <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'AIC', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorBIC <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'BIC', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorFVE <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'FVE', FVEthreshold = 0.85, outPercent=c(0, 1), verbose=TRUE, lean = FALSE)) - test4FPCA_AIC <- FPCA(test4$Ly, test4$Lt, optnDenseErrorAIC) - test4FPCA_BIC <- FPCA(test4$Ly, test4$Lt, optnDenseErrorBIC) - test4FPCA_FVE <- FPCA(test4$Ly, test4$Lt, optnDenseErrorFVE) - expect_equal(test4FPCA_FVE$selectK, min(which(TrueFVE >= 85))) - expect_equal(test4FPCA_AIC$selectK, which(TrueAIC == min(TrueAIC))) - expect_equal(test4FPCA_BIC$selectK, which(TrueBIC == min(TrueBIC))) -}) - -#test_that("SelectK works for sparse FPCA Wiener process with measurement error",{ -# n = 1000; K = 5; pts = seq(0, 1, length=50) -# lambda <- (1 / (1:K - 1/2) / pi)^2 -# TrueFVE <- cumsum(lambda)/sum(lambda) * 100 -# phi <- sqrt(2) * sin( pts %*% matrix(1:K - 1/2, 1, K) * pi ) -# set.seed(1) -# scores <- t(diag(1 / (1:K - 1/2) / pi) %*% matrix(rnorm(K * n), K, n)) -# sd <- 0.01 -# # generate Wiener process -# test1 <- t(phi %*% t(scores)) # Dense data -# test2 <- test1 + matrix(rnorm(nrow(test1)*ncol(test1),mean=0,sd=sd),nrow=nrow(test1)) -# test3 <- Sparsify(test2, pts, 4:10) # Sparse Data with measurement errors -# Trueloglik <- rep(0, K) -# for(i in 1:K){ -# # marginal likelihood -# for(j in 1:n){ -# phi_i = ConvertSupport(fromGrid = pts, toGrid = test3$Lt[[j]], phi = phi) -# Sigma_yi <- phi_i[,1:i,drop=F] %*% (lambda[1:i]*diag(i)) %*% t(phi_i[,1:i,drop=F]) + sd^2 * diag(nrow(phi_i[,1:i,drop=F])) -# detSigma_yi <- det(Sigma_yi) -# invtempsub = solve(Sigma_yi, test3$Ly[[j]] - 0) -# Trueloglik[i] <- Trueloglik[i] + dmvnorm(x=test3$Ly[[j]],mean=rep(0,nrow(phi_i)), -# sigma=Sigma_yi, log=TRUE) -# } -# # conditional likelihood -# #Trueloglik[i] <- -(sum(diag((test2 - t(phi[,1:i] %*% t(scores[,1:i]))) %*% -# # t(test2 - t(phi[,1:i] %*% t(scores[,1:i])))))/(2*sd^2) - -# # n*length(pts)/2*log(2*pi) - n*length(pts)/2*log(sd^2)) -# } -# TrueAIC <- 2*(1:K) - 2*Trueloglik -# TrueBIC <- log(n)*(1:K) - 2*Trueloglik -# # FPCA -# #optnSparseError <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=FALSE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) -# optnSparseError_AIC <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='AIC', outPercent=c(0, 1), verbose=TRUE)) -# optnSparseError_BIC <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='BIC', outPercent=c(0, 1), verbose=TRUE)) -# optnSparseError_FVE <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='FVE', FVEthreshold = 0.85, outPercent=c(0, 1), verbose=TRUE)) -# test3FPCA_AIC <- FPCA(test3$Ly, test3$Lt, optnSparseError_AIC) -# test3FPCA_BIC <- FPCA(test3$Ly, test3$Lt, optnSparseError_BIC) -# test3FPCA_FVE <- FPCA(test3$Ly, test3$Lt, optnSparseError_FVE) -# expect_equal(test3FPCA_AIC$selectK, which(TrueAIC == min(TrueAIC))) -# expect_equal(test3FPCA_BIC$selectK, which(TrueBIC == min(TrueBIC))) -# expect_equal(test3FPCA_FVE$selectK, min(which(TrueFVE >= 85))) -#}) - -test_that("SelectK works outside FPCA function for Dense data and gives the same output with equivalent options",{ - n = 100; K = 10; pts = seq(0, 1, length=50) - lambda <- (1 / (1:K - 1/2) / pi)^2 - TrueFVE <- cumsum(lambda)/sum(lambda) * 100 - phi <- sqrt(2) * sin( pts %*% matrix(1:K - 1/2, 1, K) * pi ) - set.seed(1) - scores <- t(diag(1 / (1:K - 1/2) / pi) %*% matrix(rnorm(K * n), K, n)) - sd <- 0.01 - # generate Wiener process - test1 <- t(phi %*% t(scores)) # Dense data - test2 <- test1 + matrix(rnorm(nrow(test1)*ncol(test1),mean=0,sd=sd),nrow=nrow(test1)) - test4 <- Sparsify(test2, pts, rep(length(pts),n)) # Dense Data with measurement errors - Trueloglik <- rep(0, K) - for(i in 1:K){ - # marginal likelihood - Sigma_y <- phi[,1:i,drop=F] %*% (lambda[1:i]*diag(i)) %*% t(phi[,1:i,drop=F]) + sd^2 * diag(nrow(phi[,1:i,drop=F])) - detSigma_y <- det(Sigma_y) - for(j in 1:n){ - invtempsub = solve(Sigma_y, test4$Ly[[j]] - 0) - Trueloglik[i] <- Trueloglik[i] + dmvnorm(x=test4$Ly[[j]],mean=rep(0,nrow(phi)), - sigma=Sigma_y, log=TRUE) - } - # conditional likelihood - #Trueloglik[i] <- -(sum(diag((test2 - t(phi[,1:i] %*% t(scores[,1:i]))) %*% t(test2 - t(phi[,1:i] %*% t(scores[,1:i])))))/(2*sd^2) + - # length(pts)/2*log(2*pi) + length(pts)/2*log(sd^2)) - } - TrueAIC <- 2*(1:K) - 2*Trueloglik - TrueBIC <- log(n)*(1:K) - 2*Trueloglik - # FPCA - #optnDenseError <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorAIC <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'AIC', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorBIC <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'BIC', outPercent=c(0, 1), verbose=TRUE)) - optnDenseErrorFVE <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = 'FVE', FVEthreshold = 0.85, outPercent=c(0, 1), verbose=TRUE, lean = FALSE)) - test4FPCA_AIC <- FPCA(test4$Ly, test4$Lt, optnDenseErrorAIC) - test4FPCA_BIC <- FPCA(test4$Ly, test4$Lt, optnDenseErrorBIC) - test4FPCA_FVE <- FPCA(test4$Ly, test4$Lt, optnDenseErrorFVE) - # the following default FPCA run does not select number of components - optnDenseError <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE, lean = FALSE)) - test4FPCA <- FPCA(test4$Ly, test4$Lt, optnDenseError) - outAIC <- SelectK(fpcaObj = test4FPCA, criterion = 'AIC')$K - outBIC <- SelectK(fpcaObj = test4FPCA, criterion = 'BIC')$K - outFVE <- SelectK(fpcaObj = test4FPCA, criterion = 'FVE', FVEthreshold = 0.85)$K - expect_equal(test4FPCA_AIC$selectK, outAIC) - expect_equal(test4FPCA_BIC$selectK, outBIC) - expect_equal(test4FPCA_FVE$selectK, outFVE) - # the option fixedK is tested below - FixK <- 3 - optnDenseErrorfixedK <- SetOptions(test4$Ly, test4$Lt, list(dataType='Dense', error=TRUE, kernel='epan', methodSelectK = FixK, outPercent=c(0, 1), verbose=TRUE, lean = FALSE)) - test4FPCA_fixedK <- FPCA(test4$Ly, test4$Lt, optnDenseErrorfixedK) - expect_equal(test4FPCA_fixedK$selectK, FixK) - # we can get the same results if using SelectK outside FPCA - outfixedK <- SelectK(fpcaObj = test4FPCA, criterion = FixK)$K - expect_equal(outfixedK, FixK) -}) - -test_that("SelectK works outside FPCA function for Sparse data and gives the same output with equivalent options",{ - n = 1000; K = 5; pts = seq(0, 1, length=50) - lambda <- (1 / (1:K - 1/2) / pi)^2 - TrueFVE <- cumsum(lambda)/sum(lambda) * 100 - phi <- sqrt(2) * sin( pts %*% matrix(1:K - 1/2, 1, K) * pi ) - set.seed(1) - scores <- t(diag(1 / (1:K - 1/2) / pi) %*% matrix(rnorm(K * n), K, n)) - sd <- 0.01 - # generate Wiener process - test1 <- t(phi %*% t(scores)) # Dense data - test2 <- test1 + matrix(rnorm(nrow(test1)*ncol(test1),mean=0,sd=sd),nrow=nrow(test1)) - test3 <- Sparsify(test2, pts, 4:10) # Sparse Data with measurement errors - Trueloglik <- rep(0, K) - for(i in 1:K){ - # marginal likelihood - for(j in 1:n){ - phi_i = ConvertSupport(fromGrid = pts, toGrid = test3$Lt[[j]], phi = phi) - Sigma_yi <- phi_i[,1:i,drop=F] %*% (lambda[1:i]*diag(i)) %*% t(phi_i[,1:i,drop=F]) + sd^2 * diag(nrow(phi_i[,1:i,drop=F])) - detSigma_yi <- det(Sigma_yi) - invtempsub = solve(Sigma_yi, test3$Ly[[j]] - 0) - Trueloglik[i] <- Trueloglik[i] + dmvnorm(x=test3$Ly[[j]],mean=rep(0,nrow(phi_i)), - sigma=Sigma_yi, log=TRUE) - } - # conditional likelihood - #Trueloglik[i] <- -(sum(diag((test2 - t(phi[,1:i] %*% t(scores[,1:i]))) %*% - # t(test2 - t(phi[,1:i] %*% t(scores[,1:i])))))/(2*sd^2) - - # n*length(pts)/2*log(2*pi) - n*length(pts)/2*log(sd^2)) - } - TrueAIC <- 2*(1:K) - 2*Trueloglik - TrueBIC <- log(n)*(1:K) - 2*Trueloglik - # FPCA - #optnSparseError <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=FALSE, kernel='epan', outPercent=c(0, 1), verbose=TRUE)) - optnSparseError_AIC <- SetOptions(test3$Ly, test3$Lt, - list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='AIC', outPercent=c(0, 1), verbose=TRUE)) - optnSparseError_BIC <- SetOptions(test3$Ly, test3$Lt, - list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='BIC', outPercent=c(0, 1), verbose=TRUE)) - optnSparseError_FVE <- SetOptions(test3$Ly, test3$Lt, - list(dataType='Sparse', error=TRUE, kernel='epan', methodSelectK='FVE', FVEthreshold = 0.85, outPercent=c(0,1), verbose=TRUE)) - test3FPCA_AIC <- FPCA(test3$Ly, test3$Lt, optnSparseError_AIC) - test3FPCA_BIC <- FPCA(test3$Ly, test3$Lt, optnSparseError_BIC) - test3FPCA_FVE <- FPCA(test3$Ly, test3$Lt, optnSparseError_FVE) - # the following default FPCA run does not select number of components - optnSparseError <- SetOptions(test3$Ly, test3$Lt, list(dataType='Sparse', error=TRUE, kernel='epan', outPercent=c(0, 1), verbose=TRUE, lean = FALSE)) - test3FPCA <- FPCA(test3$Ly, test3$Lt, optnSparseError) - outAIC <- SelectK(fpcaObj = test3FPCA, criterion = 'AIC')$K - outBIC <- SelectK(fpcaObj = test3FPCA, criterion = 'BIC')$K - outFVE <- SelectK(fpcaObj = test3FPCA, criterion = 'FVE', FVEthreshold = 0.85)$K - expect_equal(test3FPCA_AIC$selectK, outAIC) - expect_equal(test3FPCA_BIC$selectK, outBIC) - expect_equal(test3FPCA_FVE$selectK, outFVE) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_trapzRcpp.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_trapzRcpp.R deleted file mode 100644 index d3f1cfbf..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_trapzRcpp.R +++ /dev/null @@ -1,14 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('trapzRcpp works on a trivial example', { - x = c(0,2) - y = c(0,2) - expect_equal( trapzRcpp(x,y), 2 ) -}) - -test_that('trapzRcpp works on a nearly trivial example', { - x = seq(0,4, length.out=100) - y = x + sin(x); - expect_equal(trapzRcpp(x,y), 9.653418652171286) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_useBin.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_useBin.R deleted file mode 100644 index 24cb9074..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_useBin.R +++ /dev/null @@ -1,18 +0,0 @@ -# devtools::load_all() -library(testthat) - -test_that('The binned version is exactly the same as the unbinned version.', { - set.seed(1) - pts <- seq(0, 1, by=0.05) - samp3 <- Wiener(300, pts, sparsify=5) - y <- samp3$Ly - t <- samp3$Lt - - resNoBin <- FPCA(y, t, list(dataType='Sparse', useBinnedData='OFF', useBinnedCov=FALSE)) - resBin <- FPCA(y, t, list(dataType='Sparse', useBinnedData='OFF', useBinnedCov=TRUE)) - - resBin$timings= NULL; - resNoBin$timings=NULL; - - expect_equal(resNoBin[names(resNoBin) != 'optns'], resBin[names(resBin) != 'optns']) -}) diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_wiener.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_wiener.R deleted file mode 100644 index bbab30bc..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat/test_wiener.R +++ /dev/null @@ -1,18 +0,0 @@ -# source('.../Wiener.R') - -pts <- seq(0, 1, length=20) -tmp <- Wiener(50, pts) -tmp1 <- Sparsify(tmp, pts, c(2, 4, 6)) - -sapply(tmp1$Lt, length) -sapply(tmp1$Ly, length) - -set.seed(1) -tmp2 <- Wiener(10, pts=seq(0, 1, by=0.1)) -set.seed(1) -tmp3 <- Wiener(10, pts=seq(0, 1, by=0.1), sparsify=2) - -pts <- seq(0, 1, by=0.02) -tmp <- Wiener(1000, pts) -tmp1 <- Sparsify(tmp, pts, 1:5, fragment=0.2) -CreateDesignPlot(tmp1[['Lt']], pts, TRUE, FALSE) \ No newline at end of file diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat_slow.R b/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat_slow.R deleted file mode 100644 index a53dccf5..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/tests/testthat_slow.R +++ /dev/null @@ -1,9 +0,0 @@ -# # Based on https://github.com/hadley/testthat#integration-with-r-cmd-check - -# Splitting test files into multiple ones so that each one runs within 10 mins, -# which is the limit on travis CI. -# This file contains the slow running tests. - -library(testthat) -library(fdapace) -test_check("fdapace", filter='FClust|FSVD|FPCA|FVPA|FCReg|FOptDes|GetCrCovYX|selectK|WFDA|MultiFAM|', perl=TRUE) # diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/fdapaceVig.Rmd b/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/fdapaceVig.Rmd deleted file mode 100644 index 34b25aaf..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/fdapaceVig.Rmd +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: "Functional PCA in R" -author: "Hadjipantelis, Dai, Ji, Han, Muller & Wang - UC Davis, USA" -date: "1 December 2017" -bibliography: roxygen.bib -output: html_document -vignette: > - %\VignetteIndexEntry{Introduction to fdapace} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -``` - -## Overview - -The basic work-flow behind the PACE approach for sparse functional data is as follows (see eg. [@Yao05; @Liu09] for more information): - -1. Calculate the smoothed mean $\hat{\mu}$ (using local linear smoothing) aggregating all the available readings together. -2. Calculate for each curve separately its own raw covariance and then aggregate all these raw covariances to generate the sample raw covariance. -3. Use the off-diagonal elements of the sample raw covariance to estimate the smooth covariance. -4. Perform eigenanalysis on the smoothed covariance to obtain the estimated eigenfunctions $\hat{\phi}$ and eigenvalues $\hat{\lambda}$, then project that smoothed covariance on a positive semi-definite surface [@Hall2008]. -5. Use Conditional Expectation (PACE step) to estimate the corresponding scores $\hat{\xi}$. -ie. \newline -$\hat{\xi}_{ik} = \hat{E}[\hat{\xi}_{ik}|Y_i] = \hat{\lambda}_k \hat{\phi}_{ik}^T \Sigma_{Y_i}^{-1}(Y_i-\hat{\mu}_i)$. - -As a working assumption a dataset is treated as sparse if it has on average less than 20, potentially irregularly sampled, measurements per subject. A user can manually change the automatically determined `dataType` if that is necessary. -For densely observed functional data simplified procedures are available to obtain the eigencomponents and associated functional principal components scores (see eg. [@Castro86] for more information). In particular in this case we: - -1. Calculate the cross-sectional mean $\hat{\mu}$. -2. Calculate the cross-sectional covariance surface (which is guaranteed to be positive semi-definite). -3. Perform eigenanalysis on the covariance to estimate the eigenfunctions $\hat{\phi}$ and eigenvalues $\hat{\lambda}$. -4. Use numerical integration to estimate the corresponding scores $\hat{\xi}$. - ie. \newline - $\hat{\xi}_{ik} = \int_0^T [ y(t) - \hat{\mu}(t)] \phi_i(t) dt$ - -In the case of sparse FPCA the most computational intensive part is the smoothing of the sample's raw covariance function. For this, we employ a local weighted bilinear smoother. - -A sibling MATLAB package for `fdapace` can be found in [here](http://www.stat.ucdavis.edu/PACE). - -## FPCA in R using fdapace - -The simplest scenario is that one has two lists `yList` and `tList` where `yList` is a list of vectors, each containing the observed values $Y_{ij}$ for the $i$th subject and `tList` is a list of vectors containing corresponding time points. In this case one uses: - -```{r,eval=FALSE} -FPCAobj <- FPCA(Ly=yList, Lt=tList) -``` -The generated `FPCAobj` will contain all the basic information regarding the desired FPCA. - -### Generating a toy dense functional dataset from scratch - - -```{r,eval=TRUE, echo=TRUE} - library(fdapace) - - # Set the number of subjects (N) and the - # number of measurements per subjects (M) - N <- 200; - M <- 100; - set.seed(123) - - # Define the continuum - s <- seq(0,10,length.out = M) - - # Define the mean and 2 eigencomponents - meanFunct <- function(s) s + 10*exp(-(s-5)^2) - eigFunct1 <- function(s) +cos(2*s*pi/10) / sqrt(5) - eigFunct2 <- function(s) -sin(2*s*pi/10) / sqrt(5) - - # Create FPC scores - Ksi <- matrix(rnorm(N*2), ncol=2); - Ksi <- apply(Ksi, 2, scale) - Ksi <- Ksi %*% diag(c(5,2)) - - # Create Y_true - yTrue <- Ksi %*% t(matrix(c(eigFunct1(s),eigFunct2(s)), ncol=2)) + t(matrix(rep(meanFunct(s),N), nrow=M)) -``` - -### Running FPCA on a dense dataset - -```{r,eval=TRUE, echo=TRUE} - L3 <- MakeFPCAInputs(IDs = rep(1:N, each=M), tVec=rep(s,N), t(yTrue)) - FPCAdense <- FPCA(L3$Ly, L3$Lt) - - # Plot the FPCA object - plot(FPCAdense) - - # Find the standard deviation associated with each component - sqrt(FPCAdense$lambda) - -``` -### Running FPCA on a sparse and noisy dataset - -```{r,eval=TRUE, echo=TRUE} - # Create sparse sample - # Each subject has one to five readings (median: 3) - set.seed(123) - ySparse <- Sparsify(yTrue, s, sparsity = c(1:5)) - - # Give your sample a bit of noise - ySparse$yNoisy <- lapply(ySparse$Ly, function(x) x + 0.5*rnorm(length(x))) - - # Do FPCA on this sparse sample - # Notice that sparse FPCA will smooth the data internally (Yao et al., 2005) - # Smoothing is the main computational cost behind sparse FPCA - FPCAsparse <- FPCA(ySparse$yNoisy, ySparse$Lt, list(plot = TRUE)) - -``` - -## Further functionality - - `FPCA` calculates the bandwidth utilized by each smoother using generalised cross-validation or $k$-fold cross-validation automatically. Dense data are not smoothed by default. The argument `methodMuCovEst` can be switched between `smooth` and `cross-sectional` if one wants to utilize different estimation techniques when work with dense data. - -The bandwidth used for estimating the smoothed mean and the smoothed covariance are available under `...bwMu` and `bwCov` respectively. Users can nevertheless provide their own bandwidth estimates: - -```{r,eval=TRUE, echo=TRUE} - FPCAsparseMuBW5 <- FPCA(ySparse$yNoisy, ySparse$Lt, optns= list(userBwMu = 5)) -``` -Visualising the fitted trajectories is a good way to see if the new bandwidth made any sense: - - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) -CreatePathPlot( FPCAsparse, subset = 1:3, main = "GCV bandwidth", pch = 16) -CreatePathPlot( FPCAsparseMuBW5, subset = 1:3, main = "User-defined bandwidth", pch = 16) -``` ---- - `FPCA` uses a Gaussian kernel when smoothing sparse functional data; other kernel types (eg. Epanechnikov/`epan`) are also available (see `?FPCA`). The kernel used for smoothing the mean and covariance surface is the same. It can be found under `$optns\$kernel` of the returned object. For instance, one can switch the default Gaussian kernel (`gauss`) for a rectangular kernel (`rect`) as follows: - -```{r,eval=TRUE, echo=TRUE} - FPCAsparseRect <- FPCA(ySparse$yNoisy, ySparse$Lt, optns = list(kernel = 'rect')) # Use rectangular kernel -``` - - `FPCA` returns automatically the smallest number of components required to explain 99.99% of a sample's variance. Using the function `selectK` one can determine the number of relevant components according to AIC, BIC or a different Fraction-of-Variance-Explained threshold. For example: - -```{r,eval=TRUE, echo=TRUE} -SelectK( FPCAsparse, criterion = 'FVE', FVEthreshold = 0.95) # K = 2 -SelectK( FPCAsparse, criterion = 'AIC') # K = 2 -``` -When working with functional data (usually not very sparse) the estimation of derivatives is often of interest. Using \texttt{fitted.FPCA} one can directly obtain numerical derivatives by defining the appropriate order `p`; `fdapace` provides for the first two derivatives ( `p =1` or `2`). Because the numerically differentiated data are smoothed the user can define smoothing specific arguments (see `?fitted.FPCA` for more information); the derivation is done by using the derivative of the linear fit. Similarly using the function `FPCAder` , one can augment an `FPCA` object with functional derivatives of a sample's mean function and eigenfunctions. - -```{r,eval=TRUE, echo=TRUE} -fittedCurvesP0 <- fitted(FPCAsparse) # equivalent: fitted(FPCAsparse, derOptns=list(p = 0)); -# Get first order derivatives of fitted curves, smooth using Epanechnikov kernel -fittedCurcesP1 <- fitted(FPCAsparse, derOptns=list(p = 1, kernelType = 'epan')) -``` - -## A real-world example - -We use the `medfly25` dataset that this available with `fdapace` to showcase `FPCA` and its related functionality. `medfly25` is a dataset containing the eggs laid from 789 medflies (Mediterranean fruit flies, Ceratitis capitata) during the first 25 days of their lives. It is a subset of the dataset used by Carey at al. (1998) [@Carey98]; only flies having lived at least 25 days are shown. The data are rather noisy, dense and with a characteristic flat start. For that reason in contrast with above we will use a smoothing estimating procedure despite having dense data. - -```{r,eval=TRUE, echo=TRUE} - # load data - data(medfly25) - - # Turn the original data into a list of paired amplitude and timing lists - Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) - fpcaObjFlies <- FPCA(Flies$Ly, Flies$Lt, list(plot = TRUE, methodMuCovEst = 'smooth', userBwCov = 2)) -``` - -Based on the scree-plot we see that the first three components appear to encapsulate most of the relevant variation. The number of eigencomponents to reach a 99.99% FVE is $11$ but just $3$ eigencomponents are enough to reach a 95.0%. We can easily inspect the following visually, using the `CreatePathPlot` command. - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), main = 'K = 11', pch = 4); grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', pch = 4) ; grid() -``` - -One can perform outlier detection [@Febrero2007] as well as visualize data using a functional box-plot. To achieve these tasks one can use the functions `CreateOutliersPlot` nd `CreateFuncBoxPlot`. Different ranking methodologies (KDE, bagplot [@Rousseeuw1999,@Hyndman2010] or point-wise) are available and can potentially identify different aspects of a sample. For example here it is notable that the kernel density estimator `KDE` variant identifies two main clusters within the main body of sample. By construction the `bagplot` method would use a single bag and this feature would be lost. Both functions return a (temporarily) invisible copy of a list containing the labels associated with each of sample curve0 .`CreateOutliersPlot` returns a (temporarily) invisible copy of a list containing the labels associated with each of sample curve. -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreateOutliersPlot(fpcaObjFlies, optns = list(K = 3, variant = 'KDE')) - CreateFuncBoxPlot(fpcaObjFlies, xlab = 'Days', ylab = '# of eggs laid', optns = list(K =3, variant='bagplot')) -``` - -Functional data lend themselves naturally to questions about their rate of change; their derivatives. As mentioned previously using `fdapace` one can generate estimates of the sample's derivatives ( `fitted.FPCA`) or the derivatives of the principal modes of variation (`FPCAder`). In all cases, one defines a `derOptns` list of options to control the derivation parameters. Getting derivatives is obtained by using a local linear smoother as above. - -```{r,eval=TRUE, echo=TRUE} -par(mfrow=c(1,2)) - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE) ; grid() - CreatePathPlot(fpcaObjFlies, subset = c(3,5,135), K = 3, main = 'K = 3', showObs = FALSE, derOptns = list(p = 1, bw = 1.01 , kernelType = 'epan') ) ; grid() -``` - -We note that if finite support kernel types are used (eg. `rect` or `epan` ), bandwidths smaller than the distance between two adjacent points over which the data are registered onto will lead to (expected) `NaN` estimates. In case of dense data, the grid used is (by default) equal to the grid the data were originally registered on; in the case of sparse data, the grid used (by default) spans the range of the sample's supports and uses 51 points. A user can change the number of points using the argument `nRegGrid` . -One can investigate the effect a particular kernel type ( `kernelType` ) or bandwidth size (`bw`) has on the generated derivatives by using the function `CreateBWPlot` and providing a relevant `derOptns` list. This will generate estimates about the mean function $\mu(t)$ as well as the first two principal modes of variation $\phi_1(t)$ and $\phi_2(t)$ for different multiples of `bw`. - -```{r,eval=TRUE, echo=TRUE} -fpcaObjFlies79 <- FPCA(Flies$Ly, Flies$Lt, list(nRegGrid = 79, methodMuCovEst = 'smooth', userBwCov = 2)) # Use 79 equidistant points for the support -CreateBWPlot(fpcaObjFlies79 , derOptns = list(p = 1, bw = 2.0 , kernelType = 'rect') ) -``` - -As the `medfly` sample is dense we can immediately use standard multivaritte clustering functionality to identify potential subgroups within it; the function `FClust` is the wrapper around the clustering functionality provided by `fdapace`. By default `FClust` utilises a Gaussian Mixture Model approach based on the package `Rmixmod` [@Biernacki2006], as a general rule clustering optimality is based on negative entropy criterion. In the `medfly` dataset clustering the data allows to immediately recognise a particular subgroup of flies that lay no or very few eggs during the period examined. - - -```{r,eval=TRUE, echo=TRUE} -A <- FClust(Flies$Ly, Flies$Lt, optnsFPCA = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), k = 2) -# The Neg-Entropy Criterion can be found as: A$clusterObj@bestResult@criterionValue -CreatePathPlot( fpcaObjFlies, K=2, showObs=FALSE, lty=1, col= A$cluster, xlab = 'Days', ylab = '# of eggs laid') -grid() -``` - -## References - - diff --git a/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/roxygen.bib b/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/roxygen.bib deleted file mode 100644 index fb2583b0..00000000 --- a/fdapace.Rcheck/00_pkg_src/fdapace/vignettes/roxygen.bib +++ /dev/null @@ -1,103 +0,0 @@ -@article{Castro86, - title={Principal modes of variation for processes with continuous sample curves}, - author={Castro, PE and Lawton, WH and Sylvestre, EA}, - journal={Technometrics}, - volume={28}, - number={4}, - pages={329--337}, - year={1986}, - publisher={Taylor \& Francis Group} -} - -@article{Liu09, - title={Estimating derivatives for samples of sparsely observed functions, with application to online auction dynamics}, - author={Liu, B and M{\"u}ller, H-G}, - journal={Journal of the American Statistical Association}, - volume={104}, - number={486}, - pages={704--717}, - year={2009}, - publisher={Taylor \& Francis} -} -@article{Yao05, - title={Functional data analysis for sparse longitudinal data}, - author={Yao, F and M{\"u}ller, H-G and Wang, J-L}, - journal={Journal of the American Statistical Association}, - volume={100}, - number={470}, - pages={577--590}, - year={2005}, - publisher={Taylor \& Francis} -} -@article{Higham88, - title={Computing a nearest symmetric positive semidefinite matrix}, - author={Higham, NJ}, - journal={Linear algebra and its applications}, - volume={103}, - pages={103--118}, - year={1988}, - publisher={Elsevier} -} -@article{Hyndman2010, - title={Rainbow plots, bagplots, and boxplots for functional data}, - author={Hyndman, RJ and Shang, HL}, - journal={Journal of Computational and Graphical Statistics}, - volume={19}, - number={1}, - year={2010} -} - -@article{Febrero2007, - title={A functional analysis of NOx levels: location and scale estimation and outlier detection}, - author={Febrero, M and Galeano, P and Gonz{\'a}lez-Manteiga, W}, - journal={Computational Statistics}, - volume={22}, - number={3}, - pages={411--427}, - year={2007}, - publisher={Springer} -} - -@article{Rousseeuw1999, - title={The bagplot: a bivariate boxplot}, - author={Rousseeuw, PJ and Ruts, I and Tukey, JW}, - journal={The American Statistician}, - volume={53}, - number={4}, - pages={382--387}, - year={1999}, - publisher={Taylor \& Francis Group} -} - -@article{Carey98, - title={Relationship of age patterns of fecundity to mortality, longevity, and lifetime reproduction in a large cohort of Mediterranean fruit fly females}, - author={Carey, JR and Liedo, P and M{\"u}ller, H-G and Wang, J-L and Chiou, J-M}, - journal={The Journals of Gerontology Series A: Biological Sciences and Medical Sciences}, - volume={53}, - number={4}, - pages={B245--B251}, - year={1998}, - publisher={Oxford University Press} -} - -@article{Hall2008, - title={Modelling sparse generalized longitudinal observations with latent Gaussian processes}, - author={Hall, P and M{\"u}ller, H-G and Yao, F}, - journal={Journal of the Royal Statistical Society: Series B (Statistical Methodology)}, - volume={70}, - number={4}, - pages={703--723}, - year={2008}, - publisher={Wiley Online Library} -} - -@article{Biernacki2006, - title={Model-based cluster and discriminant analysis with the MIXMOD software}, - author={Biernacki, C and Celeux, G and Govaert, G and Langrognet, F}, - journal={Computational Statistics \& Data Analysis}, - volume={51}, - number={2}, - pages={587--600}, - year={2006}, - publisher={Elsevier} -} diff --git a/fdapace.Rcheck/00install.out b/fdapace.Rcheck/00install.out deleted file mode 100644 index 89730396..00000000 --- a/fdapace.Rcheck/00install.out +++ /dev/null @@ -1,1831 +0,0 @@ -* installing *source* package ‘fdapace’ ... -** libs -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c CPPlwls1d.cpp -o CPPlwls1d.o -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Core:535: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/LU:47: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:12: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Jacobi:29: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/QR:17: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Householder:27: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:5: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SVD:48: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:6: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Geometry:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:7: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Eigenvalues:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:26: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCore:66: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:27: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/OrderingMethods:71: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:29: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseQR:35: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:33: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/IterativeLinearSolvers:46: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/CholmodSupport:45: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:35: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/KroneckerProduct:34: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:39: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/Polynomials:135: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from CPPlwls1d.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:40: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/SparseExtra:51: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -17 warnings generated. -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c GetIndCEScoresCPP.cpp -o GetIndCEScoresCPP.o -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Core:535: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/LU:47: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:12: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Jacobi:29: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/QR:17: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Householder:27: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:5: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SVD:48: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:6: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Geometry:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:7: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Eigenvalues:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:26: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCore:66: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:27: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/OrderingMethods:71: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:29: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseQR:35: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:33: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/IterativeLinearSolvers:46: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/CholmodSupport:45: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:35: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/KroneckerProduct:34: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:39: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/Polynomials:135: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPP.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:40: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/SparseExtra:51: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -17 warnings generated. -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c GetIndCEScoresCPPnewInd.cpp -o GetIndCEScoresCPPnewInd.o -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Core:535: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/LU:47: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:12: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Jacobi:29: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/QR:17: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Householder:27: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:5: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SVD:48: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:6: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Geometry:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:7: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Eigenvalues:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:26: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCore:66: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:27: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/OrderingMethods:71: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:29: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseQR:35: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:33: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/IterativeLinearSolvers:46: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/CholmodSupport:45: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:35: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/KroneckerProduct:34: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:39: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/Polynomials:135: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from GetIndCEScoresCPPnewInd.cpp:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:40: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/SparseExtra:51: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -17 warnings generated. -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RCPPmean.cpp -o RCPPmean.o -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RCPPvar.cpp -o RCPPvar.o -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RcppExports.cpp -o RcppExports.o -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Core:535: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/LU:47: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:12: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Jacobi:29: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/QR:17: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Householder:27: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:5: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SVD:48: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:6: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Geometry:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:7: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Eigenvalues:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:26: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCore:66: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:27: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/OrderingMethods:71: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:29: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseQR:35: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:33: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/IterativeLinearSolvers:46: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/CholmodSupport:45: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:35: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/KroneckerProduct:34: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:39: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/Polynomials:135: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppExports.cpp:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:40: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/SparseExtra:51: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -17 warnings generated. -clang++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RcppPseudoApprox.cpp -o RcppPseudoApprox.o -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:1: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Core:535: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/LU:47: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:12: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Jacobi:29: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:3: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Cholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:4: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/QR:17: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Householder:27: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:5: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SVD:48: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:6: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Geometry:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:30: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Dense:7: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Eigenvalues:58: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:26: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCore:66: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:27: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/OrderingMethods:71: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:29: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseCholesky:43: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/SparseQR:35: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:31: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/Sparse:33: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/IterativeLinearSolvers:46: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:32: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/CholmodSupport:45: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:35: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/KroneckerProduct:34: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:39: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/Polynomials:135: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -In file included from RcppPseudoApprox.cpp:2: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigen.h:25: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/RcppEigenForward.h:40: -In file included from /Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/SparseExtra:51: -/Library/Frameworks/R.framework/Versions/3.5/Resources/library/RcppEigen/include/unsupported/Eigen/../../Eigen/src/Core/util/ReenableStupidWarnings.h:10:30: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas] - #pragma clang diagnostic pop - ^ -RcppPseudoApprox.cpp:18:17: warning: variable 'xk' is used uninitialized whenever 'for' loop exits because its condition is false [-Wsometimes-uninitialized] - for (int i=1; i -library('fdapace') - -base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') -base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') -cleanEx() -nameEx("BwNN") -### * BwNN - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: BwNN -### Title: Minimum bandwidth based on kNN criterion. -### Aliases: BwNN - -### ** Examples - -tinyGrid = list(c(1,7), c(2,3), 6, c(2,4), c(4,5)) -BwNN(tinyGrid, k = 2) # c(3,2) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("BwNN", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateBWPlot") -### * CreateBWPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateBWPlot -### Title: Functional Principal Component Analysis Bandwidth Diagnostics -### plot -### Aliases: CreateBWPlot - -### ** Examples - -set.seed(1) -n <- 25 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -CreateBWPlot(res1) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateBWPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateBasis") -### * CreateBasis - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateBasis -### Title: Create an orthogonal basis of K functions in [0, 1], with nGrid -### points. -### Aliases: CreateBasis - -### ** Examples - -basis <- CreateBasis(3, type='fourier') -head(basis) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateBasis", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateCovPlot") -### * CreateCovPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateCovPlot -### Title: Create the covariance surface plot based on the results from -### FPCA() or FPCder(). -### Aliases: CreateCovPlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateCovPlot(res) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateCovPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateDesignPlot") -### * CreateDesignPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateDesignPlot -### Title: Create the design plot of the functional data. -### Aliases: CreateDesignPlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -CreateDesignPlot(sampWiener$Lt, sort(unique(unlist(sampWiener$Lt)))) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateDesignPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateFuncBoxPlot") -### * CreateFuncBoxPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateFuncBoxPlot -### Title: Create functional boxplot using 'bagplot', 'KDE' or 'pointwise' -### methodology -### Aliases: CreateFuncBoxPlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateFuncBoxPlot(res, list(addIndx=c(1:3)) ) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateFuncBoxPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateModeOfVarPlot") -### * CreateModeOfVarPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateModeOfVarPlot -### Title: Functional Principal Component Analysis mode of variation plot -### Aliases: CreateModeOfVarPlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateModeOfVarPlot(res) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateModeOfVarPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateOutliersPlot") -### * CreateOutliersPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateOutliersPlot -### Title: Functional Principal Component or Functional Singular Value -### Decomposition Scores Plot using 'bagplot' or 'KDE' methodology -### Aliases: CreateOutliersPlot - -### ** Examples - -## Not run: -##D set.seed(1) -##D n <- 420 -##D pts <- seq(0, 1, by=0.05) -##D sampWiener <- Wiener(n, pts) -##D sampWiener <- Sparsify(sampWiener, pts, 10) -##D res <- FPCA(sampWiener$Ly, sampWiener$Lt, -##D list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -##D CreateOutliersPlot(res) -## End(Not run) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateOutliersPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreatePathPlot") -### * CreatePathPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreatePathPlot -### Title: Create the fitted sample path plot based on the results from -### FPCA(). -### Aliases: CreatePathPlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', - verbose=TRUE)) -CreatePathPlot(res, subset=1:5) - -# CreatePathPlot has a lot of usages: -## Not run: -##D CreatePathPlot(res) -##D CreatePathPlot(res, 1:20) -##D CreatePathPlot(res, 1:20, showObs=FALSE) -##D CreatePathPlot(res, 1:20, showMean=TRUE, showObs=FALSE) -##D CreatePathPlot(res, 1:20, obsOnly=TRUE) -##D CreatePathPlot(res, 1:20, obsOnly=TRUE, showObs=FALSE) -##D CreatePathPlot(inputData=sampWiener, subset=1:20, obsOnly=TRUE) -## End(Not run) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreatePathPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateScreePlot") -### * CreateScreePlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateScreePlot -### Title: Create the scree plot for the fitted eigenvalues -### Aliases: CreateScreePlot - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -CreateScreePlot(res) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateScreePlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("CreateStringingPlot") -### * CreateStringingPlot - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateStringingPlot -### Title: Create plots for observed and stringed high dimensional data -### Aliases: CreateStringingPlot - -### ** Examples - -set.seed(1) -n <- 50 -wiener = Wiener(n = n)[,-1] -p = ncol(wiener) -rdmorder = sample(size = p, x=1:p, replace = FALSE) -stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -diff_rev = sum(abs(rdmorder[stringingfit$StringingOrder] - p:1)) -if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) -} -CreateStringingPlot(stringingfit, 1:20) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("CreateStringingPlot", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("DynCorr") -### * DynCorr - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: DynCorr -### Title: Dynamical Correlation -### Aliases: DynCorr - -### ** Examples - -set.seed(10) -n=200 # sample size -t=seq(0,1,length.out=100) # length of data -mu_quad_x=8*t^2-4*t+5 -mu_quad_y=8*t^2-12*t+6 -fun=rbind(rep(1,length(t)),-t,t^2) -z1=matrix(0,n,3) -z1[,1]=rnorm(n,0,2) -z1[,2]=rnorm(n,0,16/3) -z1[,3]=rnorm(n,0,4) -x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -for (i in 1:n){ - x1_quad_error[i,]=mu_quad_x+z1[i,]%*%fun+rnorm(length(t),0,0.01) - y1_quad_error[i,]=mu_quad_y+2*z1[i,]%*%fun +rnorm(length(t),0,0.01) -} -dyn1_quad=DynCorr(x1_quad_error,y1_quad_error,t) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("DynCorr", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("Dyn_test") -### * Dyn_test - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: Dyn_test -### Title: Bootstrap test of Dynamic correlation -### Aliases: Dyn_test - -### ** Examples - -n=200 # sample size -t=seq(0,1,length.out=100) # length of data -mu_quad_x=8*t^2-4*t+5 -mu_quad_y=8*t^2-12*t+6 -fun=rbind(rep(1,length(t)),-t,t^2) -z1=matrix(0,n,3) -z1[,1]=rnorm(n,0,2) -z1[,2]=rnorm(n,0,16/3) -z1[,3]=rnorm(n,0,4) # covariance matrix of random effects -x1_quad_error=y1_quad_error=matrix(0,nrow=n,ncol=length(t)) -for (i in 1:n){ - x1_quad_error[i,]=mu_quad_x+z1[i,]%*%fun+rnorm(length(t),0,0.01) - y1_quad_error[i,]=mu_quad_y+2*z1[i,]%*%fun +rnorm(length(t),0,0.01) -} -bt_DC=Dyn_test(x1_quad_error,y1_quad_error,t,B=1000) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("Dyn_test", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FAM") -### * FAM - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FAM -### Title: Functional Additive Models -### Aliases: FAM - -### ** Examples - -set.seed(1000) - -library(MASS) - -f1 <- function(t) 0.5*t -f2 <- function(t) 2*cos(2*pi*t/4) -f3 <- function(t) 1.5*sin(2*pi*t/4) -f4 <- function(t) 2*atan(2*pi*t/4) - -n<-250 -N<-500 - -sig <- diag(c(4.0,2.0,1.5,1.2)) - -scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) - -Y <- f1(scoreX[,1]) + f2(scoreX[,2]) + f3(scoreX[,3]) + f4(scoreX[,4]) + rnorm(n,0,0.1) -YTest <- f1(scoreXTest[,1]) + f2(scoreXTest[,2]) + - f3(scoreXTest[,3]) + f4(scoreXTest[,4]) + rnorm(N,0,0.1) - -phi1 <- function(t) sqrt(2)*sin(2*pi*t) -phi2 <- function(t) sqrt(2)*sin(4*pi*t) -phi3 <- function(t) sqrt(2)*cos(2*pi*t) -phi4 <- function(t) sqrt(2)*cos(4*pi*t) - -grid <- seq(0,1,length.out=21) -Lt <- Lx <- list() -for (i in 1:n) { - Lt[[i]] <- grid - Lx[[i]] <- scoreX[i,1]*phi1(grid) + scoreX[i,2]*phi2(grid) + - scoreX[i,3]*phi3(grid) + scoreX[i,4]*phi4(grid) + rnorm(1,0,0.01) -} - -LtTest <- LxTest <- list() -for (i in 1:N) { - LtTest[[i]] <- grid - LxTest[[i]] <- scoreXTest[i,1]*phi1(grid) + scoreXTest[i,2]*phi2(grid) + - scoreXTest[i,3]*phi3(grid) + scoreXTest[i,4]*phi4(grid) + rnorm(1,0,0.01) -} - - -# estimation -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt) - -xi <- fit$xi - -par(mfrow=c(2,2)) -j <- 1 -g1 <- f1(sort(xi[,j])) -tmpSgn <- sign(sum(g1*fit$fam[,j])) -plot(sort(xi[,j]),g1,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi1') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 2 -g2 <- f2(sort(xi[,j])) -tmpSgn <- sign(sum(g2*fit$fam[,j])) -plot(sort(xi[,j]),g2,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi2') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 3 -g3 <- f3(sort(xi[,j])) -tmpSgn <- sign(sum(g3*fit$fam[,j])) -plot(sort(xi[,j]),g3,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi3') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - -j <- 4 -g4 <- f4(sort(xi[,j])) -tmpSgn <- sign(sum(g4*fit$fam[,j])) -plot(sort(xi[,j]),g4,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi4') -points(sort(xi[,j]),tmpSgn*fit$fam[order(xi[,j]),j],type='l') - - -# fitting -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,nEval=0) -yHat <- fit$mu+apply(fit$fam,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,Y) -abline(coef=c(0,1),col=2) - - -# R^2 -R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -R2 - - -# prediction -fit <- FAM(Y=Y,Lx=Lx,Lt=Lt,newLx=LxTest,newLt=LtTest) -yHat <- fit$mu+apply(fit$fam,1,'sum') -par(mfrow=c(1,1)) -plot(yHat,YTest,xlim=c(-10,10)) -abline(coef=c(0,1),col=2) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FAM", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("FCCor") -### * FCCor - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FCCor -### Title: Calculate functional correlation between two simultaneously -### observed processes. -### Aliases: FCCor - -### ** Examples - -set.seed(1) -n <- 200 -nGridIn <- 50 -sparsity <- 1:5 # must have length > 1 -bw <- 0.2 -kern <- 'epan' -T <- matrix(seq(0.5, 1, length.out=nGridIn)) - -## Corr(X(t), Y(t)) = 1/2 -A <- Wiener(n, T) -B <- Wiener(n, T) -C <- Wiener(n, T) + matrix((1:nGridIn) , n, nGridIn, byrow=TRUE) -X <- A + B -Y <- A + C -indEach <- lapply(1:n, function(x) sort(sample(nGridIn, sample(sparsity, 1)))) -tAll <- lapply(1:n, function(i) T[indEach[[i]]]) -Xsp <- lapply(1:n, function(i) X[i, indEach[[i]]]) -Ysp <- lapply(1:n, function(i) Y[i, indEach[[i]]]) - -plot(T, FCCor(Xsp, Ysp, tAll, bw)[['corr']], ylim=c(-1, 1)) -abline(h=0.5) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FCCor", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FCReg") -### * FCReg - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FCReg -### Title: Functional Concurrent Regression by 2D smoothing method. -### Aliases: FCReg - -### ** Examples - -# Y(t) = \beta_0(t) + \beta_1(t) X_1(t) + \beta_2(t) Z_2 + \epsilon - -# Settings -set.seed(1) -n <- 75 -nGridIn <- 150 -sparsity <- 5:10 # Sparse data sparsity -T <- round(seq(0, 1, length.out=nGridIn), 4) # Functional data support -bw <- 0.1 -outGrid <- round(seq(min(T), 1, by=0.05), 2) - -# Simulate functional data -mu <- T * 2 # mean function for X_1 -sigma <- 1 - -beta_0 <- 0 -beta_1 <- 1 -beta_2 <- 1 - -Z <- MASS::mvrnorm(n, rep(0, 2), diag(2)) -X_1 <- Z[, 1, drop=FALSE] %*% matrix(1, 1, nGridIn) + matrix(mu, n, nGridIn, byrow=TRUE) -epsilon <- rnorm(n, sd=sigma) -Y <- matrix(NA, n, nGridIn) -for (i in seq_len(n)) { - Y[i, ] <- beta_0 + beta_1 * X_1[i, ] + beta_2 * Z[i, 2] + epsilon[i] -} - -# Sparsify functional data -set.seed(1) -X_1sp <- Sparsify(X_1, T, sparsity) -set.seed(1) -Ysp <- Sparsify(Y, T, sparsity) -vars <- list(X_1=X_1sp, Z_2=Z[, 2], Y=Ysp) -withError2D <- FCReg(vars, bw, bw, outGrid) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FCReg", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FClust") -### * FClust - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FClust -### Title: Functional clustering and identifying substructures of -### longitudinal data -### Aliases: FClust - -### ** Examples - -## Not run: -##D data(medfly25) -##D Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -##D newClust <- FClust(Flies$Ly, Flies$Lt, k = 2, optnsFPCA = -##D list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90)) -##D -##D # We denote as 'veryLowCount' the group of flies that lay less -##D # than twenty-five eggs during the 25-day period examined. -##D -##D veryLowCount = ifelse( sapply( unique(medfly25$ID), function(u) -##D sum( medfly25$nEggs[medfly25$ID == u] )) < 25, 0, 1) -##D N <- length(unique(medfly25$ID)) -##D (correctRate <- sum( (1 + veryLowCount) == newClust$cluster) / N) # 99.6% -## End(Not run) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FClust", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FOptDes") -### * FOptDes - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FOptDes -### Title: Optimal Designs for Functional and Longitudinal Data for -### Trajectory Recovery or Scalar Response Prediction -### Aliases: FOptDes - -### ** Examples - -set.seed(1) -n <- 50 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- MakeFPCAInputs(IDs = rep(1:n, each=length(pts)), - tVec = rep(pts, times = n), - yVec = t(sampWiener)) -res <- FOptDes(Ly=sampWiener$Ly, Lt=sampWiener$Lt, p=2, - isSequential=FALSE, RidgeCand = seq(0.02,0.2,0.02)) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FOptDes", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FPCA") -### * FPCA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FPCA -### Title: Functional Principal Component Analysis -### Aliases: FPCA - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -plot(res) # The design plot covers [0, 1] * [0, 1] well. -CreateCovPlot(res, 'Fitted') - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FPCA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FPCAder") -### * FPCAder - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FPCAder -### Title: Take derivative of an FPCA object -### Aliases: FPCAder - -### ** Examples - - -bw <- 0.2 -kern <- 'epan' -set.seed(1) -n <- 100 -M <- 40 -pts <- seq(0, 1, length.out=M) -lambdaTrue <- c(1, 0.8, 0.1)^2 -sigma2 <- 0.1 - -samp2 <- MakeGPFunctionalData(n, M, pts, K=length(lambdaTrue), - lambda=lambdaTrue, sigma=sqrt(sigma2), basisType='legendre01') -samp2 <- c(samp2, MakeFPCAInputs(tVec=pts, yVec=samp2$Yn)) -fpcaObj <- FPCA(samp2$Ly, samp2$Lt, list(methodMuCovEst='smooth', - userBwCov=bw, userBwMu=bw, kernel=kern, error=TRUE)) -CreatePathPlot(fpcaObj, showObs=FALSE) - -FPCoptn <- list(bw=bw, kernelType=kern, method='FPC') -DPCoptn <- list(bw=bw, kernelType=kern, method='DPC') -FPC <- FPCAder(fpcaObj, FPCoptn) -DPC <- FPCAder(fpcaObj, DPCoptn) - -CreatePathPlot(FPC, ylim=c(-5, 10)) -CreatePathPlot(DPC, ylim=c(-5, 10)) - -# Get the true derivatives -phi <- CreateBasis(K=3, type='legendre01', pts=pts) -basisDerMat <- apply(phi, 2, function(x) - ConvertSupport(seq(0, 1, length.out=M - 1), pts, diff(x) * (M - 1))) -trueDer <- matrix(1, n, M, byrow=TRUE) + tcrossprod(samp2$xi, basisDerMat) -matplot(t(trueDer), type='l', ylim=c(-5, 10)) - -# DPC is slightly better in terms of RMSE -mean((fitted(FPC) - trueDer)^2) -mean((fitted(DPC) - trueDer)^2) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FPCAder", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FPCReg") -### * FPCReg - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FPCReg -### Title: Function for performing functonal linear regression where the -### covariates are functions X1(t1),X2(t2),.. and the response is a -### function Y(t_y). -### Aliases: FPCReg - -### ** Examples - -set.seed(1000) -#Model: E(Y(t)|X) = int(beta(s,t)*X(s)) -n <- 200 #number of subjects -ngrids <- 51 #number of grids in [0,1] for X(s) -ngridt <- 101 #number of grids in [0,1] for Y(t) -grids <- seq(0, 1, length.out=ngrids) #regular grids in [0,1] for X(s) -gridt <- seq(0, 1, length.out=ngridt) #regular grids in [0,1] for Y(t) - -#generate X -#{1, sqrt(2)*sin(2*pi*s), sqrt(2)*cos(2*pi*t)} are used to generate X. -eigenFun <- list( function(s){1 + 0 * s}, - function(s){sqrt(2) * sin(2*pi*s)}, - function(s){sqrt(2) * cos(2*pi*s)}) - -sig <- matrix(c(1.5, 0.0, 0.0, 0.9, -.5, 0.1, - 0.0, 1.2, 0.0, -.3, 0.8, 0.4, - 0.0, 0.0, 1.0, 0.4, -.3, 0.7, - 0.9, -.3, 0.4, 2.0, 0.0, 0.0, - -.5, 0.8, -.3, 0.0, 1.5, 0.0, - 0.1, 0.4, 0.7, 0.0, 0.0, 1.0), - nrow=6,ncol=6) - -scoreX <- MASS::mvrnorm(n,mu=rep(0,6),Sigma=sig) -scoreX1 <- scoreX[,1:3] -scoreX2 <- scoreX[,4:6] - -basisX1 <- sapply(eigenFun,function(x){x(grids)}) -latentX1 <- scoreX1 %*% t(basisX1) -measErrX1 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX1 <- latentX1 + measErrX1 - -basisX2 <- sapply(eigenFun,function(x){x(grids)}) -latentX2 <- scoreX2 %*% t(basisX2) -measErrX2 <- sqrt(0.03) * matrix(rnorm(n * ngrids), n, ngrids) #0.01 is sigma^2. -denseX2 <- latentX2 + measErrX2 - -#generate Y -#beta(s, t) <- sin(2 * pi * s)*cos(2 * pi * t) -betaEigen1 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (1+0*s)}; return(f)} -betaEigen2 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*sin(2*pi*s))}; return(f)} -betaEigen3 <- function(t){f <- function(s){ - sin(2*pi*s) * cos(2*pi*t) * (sqrt(2)*cos(2*pi*s))}; return(f)} -betaEigen <- list(betaEigen1, betaEigen2, betaEigen3) -basisY <- array(0,c(ngridt, 3)) -for(i in 1:3){ - intbetaEigen <- function (t) {integrate(betaEigen[[i]](t), lower = 0, upper = 1)$value} - basisY[, i] <- sapply(1:ngridt, function(x){intbetaEigen(gridt[x])}) - } -latentY <- scoreX1 %*% t(basisY) - scoreX2 %*% t(basisY) -measErrY <- sqrt(0.01) * matrix(rnorm(n*ngridt), n, ngridt) #0.01 is sigma^2 -denseY <- latentY + measErrY - -#======Dense data=============================================== -timeX <- t(matrix(rep(grids, n),length(grids), n)) -timeY <- t(matrix(rep(gridt, n),length(gridt), n)) -denseVars <- list(X1 = list(Ly = denseX1, Lt = timeX), - X2 = list(Ly = denseX2, Lt = timeX), - Y=list(Ly = denseY,Lt = timeY)) - -resuDense <- FPCReg(denseVars, method="FVE") - -par(mfrow=c(1,2)) -estiBetaX1Y_Dense <- resuDense$estiBeta$betaX1Y -args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Dense(s, t)', - lighting = FALSE, phi = 45, theta = 45) -args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX1Y_Dense[1:ngrids, 1:ngridt]) -do.call(plot3D::persp3D,c(args2, args1)) - -estiBetaX2Y_Dense <- resuDense$estiBeta$betaX2Y -args1 <- list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Dense(s, t)', - lighting = FALSE, phi = 45, theta = 45) -args2 <- list(x = 1:ngrids, y = 1:ngridt, z = estiBetaX2Y_Dense[1:ngrids, 1:ngridt]) - # do.call(plot3D::persp3D,c(args2, args1)) - -#======Sparse data=============================================== -## Not run: -##D sparsity = 5:8 -##D sparseX1 <- Sparsify(denseX1, grids, sparsity) -##D sparseX2 <- Sparsify(denseX2, grids, sparsity) -##D sparseY <- Sparsify(denseY, gridt, sparsity) -##D sparseVars <- list(X1 = sparseX1, X2 = sparseX2, Y = sparseY) -##D -##D resuSparse <- FPCReg(sparseVars, method="FVE", FVEthreshold=0.98) -##D #or resuSparse <- FPCReg(vars = sparseVars, -##D # varsOptns = list(X1=list(userBwCov = 0.03))) -##D -##D par(mfrow=c(1,2)) -##D estiBetaX1Y_Sparse = resuSparse$estiBeta$betaX1Y -##D args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX1Y_Sparse(s,t)', -##D lighting = FALSE, phi = 45,theta = 45) -##D args2 = list(x = 1:51, y = 1:51, z = estiBetaX1Y_Sparse[1:51, 1:51]) -##D do.call(plot3D::persp3D, c(args2, args1)) -##D -##D estiBetaX2Y_Sparse = resuSparse$estiBeta$betaX2Y -##D args1 = list(xlab = 's', ylab = 't', zlab = 'estiBetaX2Y_Sparse(s,t)', -##D lighting = FALSE, phi = 45,theta = 45) -##D args2 = list(x = 1:51, y = 1:51, z = estiBetaX2Y_Sparse[1:51, 1:51]) -##D do.call(plot3D::persp3D, c(args2, args1)) -##D -##D par(mfrow=c(2,3)) -##D for(i in 1:6){ -##D plot(sparseVars[['Y']]$Lt[[i]], sparseVars[['Y']]$Ly[[i]], -##D xlab = 'time', ylab = 'observations', ylim = c(-1.5, 1.5)) -##D lines(seq(0, 1, length.out = 51), resuSparse$predictY[[i]]) -##D lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,2], lty = 2) -##D lines(seq(0, 1, length.out = 51), resuSparse$cbandY[[i]][,1], lty = 2) -##D } -##D -## End(Not run) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FPCReg", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("FPCquantile") -### * FPCquantile - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FPCquantile -### Title: Conditional Quantile estimation with functional covariates -### Aliases: FPCquantile - -### ** Examples - -set.seed(10) - -n = 200 -npred = 50 -m = 50 -xi <- Wiener(n, 0:m/m) - -x=list() -t_x=list() -y=numeric(n) -for(i in 1:n){ - t_x = c(t_x,list(0:m/m)) - x = c(x,list(xi[i,])) - y[i] = 5*rnorm(1)+2*sum(xi[i,]) -} - -outQ = c(0.1,0.25,0.5,0.75,0.9,0.95) -isNewsub = c(rep(0,150),rep(1,50)) -qtreg = FPCquantile(x, t_x, y, outQ,optns_x = NULL,isNewsub) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FPCquantile", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("FVPA") -### * FVPA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: FVPA -### Title: Functional Variance Process Analysis for dense functional data -### Aliases: FVPA - -### ** Examples - -set.seed(1) -n <- 25 -pts <- seq(0, 1, by=0.01) -sampWiener <- Wiener(n, pts) -# Data have to dense for FVPA to be relevant! -sampWiener <- Sparsify(sampWiener, pts, 101) -fvpaObj <- FVPA(sampWiener$Ly, sampWiener$Lt) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("FVPA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("GetCrCovYX") -### * GetCrCovYX - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: GetCrCovYX -### Title: Functional Cross Covariance between longitudinal variable Y and -### longitudinal variable X -### Aliases: GetCrCovYX - -### ** Examples - -Ly1= list( rep(2.1,7), rep(2.1,3),2.1 ); -Lt1 = list(1:7,1:3, 1); -Ly2 = list( rep(1.1,7), rep(1.1,3),1.1); -Lt2 = list(1:7,1:3, 1); -Ymu1 = rep(55,7); -Ymu2 = rep(1.1,7); -AA<-GetCrCovYX(Ly1 = Ly1, Ly2= Ly2, Lt1=Lt1, Lt2=Lt2, Ymu1=Ymu1, Ymu2=Ymu2) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("GetCrCovYX", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("GetCrCovYZ") -### * GetCrCovYZ - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: GetCrCovYZ -### Title: Functional Cross Covariance between longitudinal variable Y and -### scalar variable Z -### Aliases: GetCrCovYZ - -### ** Examples - -Ly <- list( runif(5), c(1:3), c(2:4), c(4)) -Lt <- list( c(1:5), c(1:3), c(1:3), 4) -Z = rep(4,4) # Constant vector so the covariance has to be zero. -sccObj = GetCrCovYZ(bw=1, Z= Z, Ly=Ly, Lt=Lt, Ymu=rep(4,5)) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("GetCrCovYZ", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("GetNormalisedSample") -### * GetNormalisedSample - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: GetNormalisedSample -### Title: Normalise sparse functional sample -### Aliases: GetNormalisedSample GetNormalizedSample - -### ** Examples - -set.seed(1) -n <- 100 -M <- 51 -pts <- seq(0, 1, length.out=M) -mu <- rep(0, length(pts)) -sampDense <- MakeGPFunctionalData(n, M, mu, K=1, basisType='sin', sigma=0.01) -samp4 <- MakeFPCAInputs(tVec=sampDense$pts, yVec=sampDense$Yn) -res4E <- FPCA(samp4$Ly, samp4$Lt, list(error=TRUE)) -sampN <- GetNormalisedSample(res4E, errorSigma=TRUE) - -CreatePathPlot(subset=1:20, inputData=samp4, obsOnly=TRUE, showObs=FALSE) -CreatePathPlot(subset=1:20, inputData=sampN, obsOnly=TRUE, showObs=FALSE) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("GetNormalisedSample", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("MultiFAM") -### * MultiFAM - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: MultiFAM -### Title: Functional Additive Models with Multiple Predictor Processes -### Aliases: MultiFAM - -### ** Examples - -set.seed(1000) - -library(MASS) - -f11 <- function(t) t -f12 <- function(t) 2*cos(2*pi*t/4) -f21 <- function(t) 1.5*sin(2*pi*t/4) -f22 <- function(t) 1.5*atan(2*pi*t/4) - -n<-100 -N<-200 - -sig <- matrix(c(2.0, 0.0, 0.5, -.2, - 0.0, 1.2, -.2, 0.3, - 0.5, -.2, 1.7, 0.0, - -.2, 0.3, 0.0, 1.0), - nrow=4,ncol=4) - -scoreX <- mvrnorm(n,mu=rep(0,4),Sigma=sig) -scoreXTest <- mvrnorm(N,mu=rep(0,4),Sigma=sig) - -Y <- f11(scoreX[,1]) + f12(scoreX[,2]) + f21(scoreX[,3]) + f22(scoreX[,4]) + rnorm(n,0,0.5) -YTest <- f11(scoreXTest[,1]) + f12(scoreXTest[,2]) + -f21(scoreXTest[,3]) + f22(scoreXTest[,4]) + rnorm(N,0,0.5) - -phi11 <- function(t) sqrt(2)*sin(2*pi*t) -phi12 <- function(t) sqrt(2)*sin(4*pi*t) -phi21 <- function(t) sqrt(2)*cos(2*pi*t) -phi22 <- function(t) sqrt(2)*cos(4*pi*t) - -grid <- seq(0,1,length.out=21) -Lt <- Lx1 <- Lx2 <- list() -for (i in 1:n) { - Lt[[i]] <- grid - Lx1[[i]] <- scoreX[i,1]*phi11(grid) + scoreX[i,2]*phi12(grid) + rnorm(1,0,0.01) - Lx2[[i]] <- scoreX[i,3]*phi21(grid) + scoreX[i,4]*phi22(grid) + rnorm(1,0,0.01) -} - -LtTest <- Lx1Test <- Lx2Test <- list() -for (i in 1:N) { - LtTest[[i]] <- grid - Lx1Test[[i]] <- scoreXTest[i,1]*phi11(grid) + scoreXTest[i,2]*phi12(grid) + rnorm(1,0,0.01) - Lx2Test[[i]] <- scoreXTest[i,3]*phi21(grid) + scoreXTest[i,4]*phi22(grid) + rnorm(1,0,0.01) -} - -X1 <- list(Ly=Lx1, Lt=Lt) -X2 <- list(Ly=Lx2, Lt=Lt) - -X1Test <- list(Ly=Lx1Test, Lt=LtTest) -X2Test <- list(Ly=Lx2Test, Lt=LtTest) - -X <- list(X1, X2) -XTest <- list(X1Test, X2Test) - -# estimation -sbf <- MultiFAM(Y=Y,X=X) - -xi <- sbf$xi - -par(mfrow=c(2,2)) -j <- 1 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g11 <- f11(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f11(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g11*sbf$SBFit[,j])) -plot(sort(xi[,j]),g11,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi11') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 2 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g12 <- f12(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f12(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g12*sbf$SBFit[,j])) -plot(sort(xi[,j]),g12,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi12') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 3 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g21 <- f21(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f21(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g21*sbf$SBFit[,j])) -plot(sort(xi[,j]),g21,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi21') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -j <- 4 -p0 <- trapzRcpp(sort(xi[,j]),dnorm(sort(xi[,j]),0,sqrt(sig[j,j]))) -g22 <- f22(sort(xi[,j])) - -trapzRcpp(sort(xi[,j]),f22(sort(xi[,j]))*dnorm(sort(xi[,j]),0,sqrt(sig[j,j])))/p0 -tmpSgn <- sign(sum(g22*sbf$SBFit[,j])) -plot(sort(xi[,j]),g22,type='l',col=2,ylim=c(-2.5,2.5),xlab='xi22') -points(sort(xi[,j]),tmpSgn*sbf$SBFit[order(xi[,j]),j],type='l') -legend('top',c('true','SBF'),col=c(2,1),lwd=2,bty='n',horiz=TRUE) - -## Not run: -##D # fitting -##D sbf <- MultiFAM(Y=Y,X=X,nEval=0) -##D yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -##D par(mfrow=c(1,1)) -##D plot(yHat,Y) -##D abline(coef=c(0,1),col=2) -##D -##D -##D # R^2 -##D R2 <- 1-sum((Y-yHat)^2)/sum((Y-mean(Y))^2) -##D R2 -##D -##D -##D # prediction -##D sbf <- MultiFAM(Y=Y,X=X,XTest=XTest) -##D yHat <- sbf$mu+apply(sbf$SBFit,1,'sum') -##D par(mfrow=c(1,1)) -##D plot(yHat,YTest) -##D abline(coef=c(0,1),col=2) -## End(Not run) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("MultiFAM", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("SBFitting") -### * SBFitting - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: SBFitting -### Title: Iterative Smooth Backfitting Algorithm -### Aliases: SBFitting - -### ** Examples - -set.seed(100) - -n <- 100 -d <- 2 -X <- pnorm(matrix(rnorm(n*d),nrow=n,ncol=d)%*%matrix(c(1,0.6,0.6,1),nrow=2,ncol=2)) - -f1 <- function(t) 2*(t-0.5) -f2 <- function(t) sin(2*pi*t) - -Y <- f1(X[,1])+f2(X[,2])+rnorm(n,0,0.1) - -# component function estimation -N <- 101 -x <- matrix(rep(seq(0,1,length.out=N),d),nrow=N,ncol=d) -h <- c(0.12,0.08) - -sbfEst <- SBFitting(Y,x,X,h) -fFit <- sbfEst$SBFit - -par(mfrow=c(1,2)) -plot(x[,1],f1(x[,1]),type='l',lwd=2,col=2,lty=4,xlab='X1',ylab='Y') -points(x[,1],fFit[,1],type='l',lwd=2,col=1) -points(X[,1],Y,cex=0.3,col=8) -legend('topleft',legend=c('SBF','true'),col=c(1,2),lwd=2,lty=c(1,4),horiz=FALSE,bty='n') -abline(h=0,col=8) - -plot(x[,2],f2(x[,2]),type='l',lwd=2,col=2,lty=4,xlab='X2',ylab='Y') -points(x[,2],fFit[,2],type='l',lwd=2,col=1) -points(X[,2],Y,cex=0.3,col=8) -legend('topright',legend=c('SBF','true'),col=c(1,2),lwd=2,lty=c(1,4),horiz=FALSE,bty='n') -abline(h=0,col=8) - -# prediction -x <- X -h <- c(0.12,0.08) - -sbfPred <- SBFitting(Y,X,X,h) -fPred <- sbfPred$mY+apply(sbfPred$SBFit,1,'sum') - -par(mfrow=c(1,1)) -plot(fPred,Y,cex=0.5,xlab='SBFitted values',ylab='Y') -abline(coef=c(0,1),col=8) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("SBFitting", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("Stringing") -### * Stringing - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: Stringing -### Title: Stringing for High-Dimensional data -### Aliases: Stringing - -### ** Examples - -set.seed(1) -n <- 50 -wiener = Wiener(n = n)[,-1] -p = ncol(wiener) -rdmorder = sample(size = p, x=1:p, replace = FALSE) -stringingfit = Stringing(X = wiener[,rdmorder], disOptns = "correlation") -diff_norev = sum(abs(rdmorder[stringingfit$StringingOrder] - 1:p)) -diff_rev = sum(abs(rdmorder[stringingfit$StringedOrder] - p:1)) -if(diff_rev <= diff_norev){ - stringingfit$StringingOrder = rev(stringingfit$StringingOrder) - stringingfit$Ly = lapply(stringingfit$Ly, rev) -} -plot(1:p, rdmorder[stringingfit$StringingOrder], pch=18); abline(a=0,b=1) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("Stringing", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("TVAM") -### * TVAM - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: TVAM -### Title: Iterative Smooth Backfitting Algorithm -### Aliases: TVAM - -### ** Examples - - -set.seed(1000) - -n <- 100 -Lt <- list() -Ly <- list() -Lx1 <- list() -Lx2 <- list() - -for (i in 1:n) { - Ni <- sample(10:15,1) - - Lt[[i]] <- sort(runif(Ni,0,1)) - Lx1[[i]] <- runif(Ni,0,1) - Lx2[[i]] <- runif(Ni,0,1) - Ly[[i]] <- Lt[[i]]*(cos(2*pi*Lx1[[i]]) + sin(2*pi*Lx2[[i]])) + rnorm(Ni,0,0.1) - -} - -LLx <- list(Lx1,Lx2) - -gridT <- seq(0,1,length.out=41) -x0 <- seq(0,1,length.out=51) -x <- cbind(x0,x0) - -ht <- 0.1 -hx <- c(0.1,0.1) - -tvam <- TVAM(Lt,Ly,LLx,gridT=gridT,x=x,ht=ht,hx=hx,K='epan') - -g0Sbf <- tvam$tvamMean -gjSbf <- tvam$tvamComp - -par(mfrow=c(1,2)) -par(mar=c(1,1,1,1)+0.1) -persp(gridT,x0,gjSbf[[1]],theta=60,phi=30, - xlab='time',ylab='x1',zlab='g1(t, x1)') -persp(gridT,x0,gjSbf[[2]],theta=60,phi=30, - xlab='time',ylab='x2',zlab='g1(t, x2)') - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("TVAM", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("VCAM") -### * VCAM - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: VCAM -### Title: Sieve estimation -### Aliases: VCAM - -### ** Examples - - -library(MASS) - -set.seed(100) - -n <- 100 -d <- 2 - -Lt <- list() -Ly <- list() - -m <- rep(0,2) -S <- matrix(c(1,0.5,0.5,1),nrow=2,ncol=2) -X <- pnorm(mvrnorm(n,m,S)) - -beta0 <- function(t) 1.5*sin(3*pi*(t+0.5)) -beta1 <- function(t) 3*(1-t)^2 -beta2 <- function(t) 4*t^3 - -phi1 <- function(x) sin(2*pi*x) -phi2 <- function(x) 4*x^3-1 - -for (i in 1:n) { - Ni <- sample(10:20,1) - - Lt[[i]] <- sort(runif(Ni,0,1)) - Ly[[i]] <- beta0(Lt[[i]]) + beta1(Lt[[i]])*phi1(X[i,1]) + beta2(Lt[[i]])*phi2(X[i,2]) + rnorm(Ni,0,0.1) - -} - - -vcam <- VCAM(Lt,Ly,X) - -par(mfrow=c(1,1)) -plot(unlist(vcam$LyHat),unlist(Ly),xlab='observed Y',ylab='fitted Y') -abline(coef=c(0,1),col=8) - -par(mfrow=c(1,2)) -plot(vcam$gridX[,1],vcam$phiEst[,1],type='l',ylim=c(-1,1),xlab='x1',ylab='phi1') -points(vcam$gridX[,1],phi1(vcam$gridX[,1]),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridX[,2],vcam$phiEst[,2],type='l',ylim=c(-1,3),xlab='x2',ylab='phi2') -points(vcam$gridX[,2],phi2(vcam$gridX[,2]),col=2,type='l',lty=2,lwd=2) -legend('topleft',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -par(mfrow=c(1,3)) -plot(vcam$gridT,vcam$beta0Est,type='l',xlab='t',ylab='beta0') -points(vcam$gridT,beta0(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridT,vcam$betaEst[,1],type='l',xlab='t',ylab='beta1') -points(vcam$gridT,beta1(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - -plot(vcam$gridT,vcam$betaEst[,2],type='l',xlab='t',ylab='beta2') -points(vcam$gridT,beta2(vcam$gridT),col=2,type='l',lty=2,lwd=2) -legend('topright',c('true','est'),lwd=2,lty=c(1,2),col=c(1,2)) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("VCAM", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("WFDA") -### * WFDA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: WFDA -### Title: Warped Functional Data Analysis -### Aliases: WFDA - -### ** Examples - -N = 44; -eps = 0.123; -M = 41; -set.seed(123) -Tfinal = 3 -me <- function(t) exp(-Tfinal*(((t/Tfinal^2)-0.5))^2); -T = seq(0,Tfinal,length.out = M) -recondingTimesMat = matrix(nrow = N, ncol = M) -yMat = matrix(nrow = N, ncol = M) - -for (i in 1:N){ - peak = runif(min = 0.2,max = 0.8,1) * Tfinal - recondingTimesMat[i,] = sort( unique(c( seq(0.0 , peak, length.out = round((M+1)/2)), - seq( peak, Tfinal, length.out = round((M+1)/2))))) * Tfinal - yMat[i,] = me(recondingTimesMat[i,]) * rnorm(1, mean=4.0, sd= eps) - + rnorm(M, mean=0.0, sd= eps) -} - -Y = as.list(as.data.frame(t(yMat))) -X = rep(list(T),N) - -sss = WFDA(Ly = Y, Lt = X, list( choice = 'weighted' )) -par(mfrow=c(1,2)) -matplot(x= T, t(yMat), t='l', main = 'Raw', ylab = 'Y'); grid() -matplot(x= T, t(sss$aligned), t='l', main = 'Aligned', ylab='Y'); grid() - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("WFDA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("fitted.FPCA") -### * fitted.FPCA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: fitted.FPCA -### Title: Fitted functional sample from FPCA object -### Aliases: fitted.FPCA - -### ** Examples - -set.seed(1) -n <- 100 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 5:10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=TRUE)) -fittedY <- fitted(res, ciOptns = list(alpha=0.05)) - -workGrid <- res$workGrid -cvgUpper <- fittedY$cvgUpper -cvgLower <- fittedY$cvgLower - -par(mfrow=c(2,3)) -ind <- sample(1:n,6) -for (i in 1:6) { - j <- ind[i] - plot(workGrid,cvgUpper[j,],type='l',ylim=c(min(cvgLower[j,]),max(cvgUpper[j,])),col=4,lty=2, - xlab='t', ylab='X(t)', main=paste(j,'-th subject',sep='')) - points(workGrid,cvgLower[j,],type='l',col=4,lty=2) - points(res$inputData$Lt[[j]],res$inputData$Ly[[j]]) -} - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("fitted.FPCA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -graphics::par(get("par.postscript", pos = 'CheckExEnv')) -cleanEx() -nameEx("fitted.FPCAder") -### * fitted.FPCAder - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: fitted.FPCAder -### Title: Fitted functional sample from FPCAder object -### Aliases: fitted.FPCAder - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("fitted.FPCAder", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("kCFC") -### * kCFC - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: kCFC -### Title: Functional clustering and identifying substructures of -### longitudinal data using kCFC. -### Aliases: kCFC - -### ** Examples - -data(medfly25) -Flies <- MakeFPCAInputs(medfly25$ID, medfly25$Days, medfly25$nEggs) -kcfcObj <- kCFC(Flies$Ly[1:250], Flies$Lt[1:250], # using only 250 for speed consideration - optnsSW = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.90), - optnsCS = list(methodMuCovEst = 'smooth', userBwCov = 2, FVEthreshold = 0.70)) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("kCFC", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("plot.FPCA") -### * plot.FPCA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: CreateDiagnosticsPlot -### Title: Functional Principal Component Analysis Diagnostics plot -### Aliases: CreateDiagnosticsPlot plot.FPCA - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res1 <- FPCA(sampWiener$Ly, sampWiener$Lt, - list(dataType='Sparse', error=FALSE, kernel='epan', verbose=FALSE)) -plot(res1) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("plot.FPCA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("predict.FPCA") -### * predict.FPCA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: predict.FPCA -### Title: Predict FPC scores for a new sample given an FPCA object -### Aliases: predict.FPCA - -### ** Examples - -set.seed(1) -n <- 50 -pts <- seq(0, 1, by=0.05) -# The first n samples are for training and the rest testing -sampWiener <- Wiener(2 * n, pts) -sparsity <- 2:5 -train <- Sparsify(sampWiener[seq_len(n), , drop=FALSE], pts, sparsity) -test <- Sparsify(sampWiener[seq(n + 1, 2 * n), , drop=FALSE], pts, sparsity) -res <- FPCA(train$Ly, train$Lt) -pred <- predict(res, test$Ly, test$Lt, K=5) -plot(pred[, 1], pred[, 2]) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("predict.FPCA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("print.FPCA") -### * print.FPCA - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: print.FPCA -### Title: Print an FPCA object -### Aliases: print.FPCA - -### ** Examples - -set.seed(1) -n <- 20 -pts <- seq(0, 1, by=0.05) -sampWiener <- Wiener(n, pts) -sampWiener <- Sparsify(sampWiener, pts, 10) -res <- FPCA(sampWiener$Ly, sampWiener$Lt) -res - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("print.FPCA", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -### *