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)