From 600805641219816e0239ea347ef25aaefaccbf80 Mon Sep 17 00:00:00 2001 From: Joakim Skogholt Date: Sat, 18 May 2024 15:07:39 +0200 Subject: [PATCH] Added CV function for old reg coeffs --- src/Ting.jl | 1 + src/variousRegressionFunctions.jl | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/Ting.jl b/src/Ting.jl index 0d5fe0f..daff2c0 100644 --- a/src/Ting.jl +++ b/src/Ting.jl @@ -31,6 +31,7 @@ export TRSegCVNaive export TRSegCVFair # From "variousRegressionFunctions.jl" +export oldRegCoeffs export PCR export bidiag2 diff --git a/src/variousRegressionFunctions.jl b/src/variousRegressionFunctions.jl index 29032a8..253770d 100644 --- a/src/variousRegressionFunctions.jl +++ b/src/variousRegressionFunctions.jl @@ -2,7 +2,34 @@ +""" + function oldRegCoeffs(X, y, cvfolds, ncomps, regFunction=bidiag2) +Calculates "old" regression coefficients using CV and the 1 S.E. rule. +""" +function oldRegCoeffs(X, y, cvfolds, ncomps, regFunction=bidiag2) # bidiag2 OR PCR + cverror = zeros(20,1); + + for i=1:length(unique(cvfolds)) + Xtrain = X[vec(i .!= cvfolds), :]; + ytrain = y[vec(i .!= cvfolds), :]; + Xtest = X[vec(i .== cvfolds), :]; + ytest = y[vec(i .== cvfolds), :]; + + betas, _ = regFunction(Xtrain, ytrain, ncomps) + cverror += sum((ytest .- Xtest*betas[2:end,:] .- betas[1,:]').^2, dims=1)'; + end + + cverror = cverror ./ n + #rmsecv = sqrt.(rmsecv ./ size(X, 1)) + #minInd = argmin(rmsecv)[1] + regCoeffsInds = findfirst(cverror .< (minimum(cverror) + std(cverror)/sqrt(length(unique(cvfolds)))))[1] # 1 S.E. rule + + betas, _ = regFunction(X, y, ncomps) + bold = betas[2:end, regCoeffsInds] + + return bold, regCoeffsInds, cverror +end """ function PCR(X, y, kmax, centre=true)#, standardize=true)