# Perform a Search on the Number of Knots and Fit Free-Knot Splines To Data Using the Optimal Number of Knots

### Description

This function fits free-knot splines to data using every value for the number of knots between `minknot`

and `maxknot`

. The number of knots is then chosen to optimize a fit criterion. The free-knot spline with the optimum number of knots is returned.

### Usage

1 2 3 4 | ```
fit.search.numknots(x, y, degree, minknot = 1, maxknot = 5,
alg = "LS", search = "genetic",
knotnumcrit = "adjGCV", k = 2, d = 3, seed = 5,
stream = 0)
``` |

### Arguments

`x` |
A vector containing the values of the independent variable. |

`y` |
A vector containing the values of the dependent variable. |

`degree` |
The degree of the spline fit. |

`minknot` |
The minimum number of knots to search. Defaults to 1. |

`maxknot` |
The maximum number of knots to search. Defaults to 5. |

`alg` |
The spline-fitting algorithm. Choices are "LS" for least-squares and "PS" for P-splines. Defaults to "LS." |

`search` |
The random search algorithm. Choices are "genetic" for a genetic algorithm and "golden" for a blind random search with golden section adjustment. Defaults to "genetic." |

`knotnumcrit` |
The criterion to be used for determining the number of knots. Choices are "GCV" for generalized cross-validation, "AIC" for the Akaike information criterion, "AICc" for corrected Akaike information criterion, "BIC" for Bayesian information criterion, "adjAIC" for an adjusted version of the Akaiki information criterion, and "adjGCV" for an adjusted version of generalized cross-validation. Defaults to "adjGCV." |

`k` |
The amount of penalty when AIC is used. Has no effect with criteria other than AIC. Defaults to 2. |

`d` |
The amount of penalty when adjGCV is used. Has no effect with criteria other than adjGCV. Defaults to 3. |

`seed` |
The value of the initial seed. Defaults to 5. |

`stream` |
The value of the initial stream to be used for parallel programming. Defaults to 0. |

### Value

An object of class "`freekt`

" containing the following components:

`x` |
A vector containing the x values. |

`y` |
A vector containing the y values. |

`degree` |
The degree of the spline fit. |

`seed` |
The value of the initial seed. |

`stream` |
The value of the stream. |

`lambda` |
The optimum amount of penalty. This is automatically equal to 0 for |

`optknot` |
A vector containing the optimal knots. |

`tracehat` |
The trace of the hat matrix for the optimal fit. |

`GCV` |
The value of generalized cross validation (GCV) for the optimal fit.) |

`GSJS` |
The GSJS estimator, an estimator of the variance of the data. |

`call` |
The function call. |

### Author(s)

Steven Spiriti

### References

Eubank, R. (1999), *Nonparametric Regression and Spline Smoothing*, New York: Marcel Dekker, Inc., Second ed.

Spiriti, S., Eubank, R., Smith, P., Young, D., "Knot Selection for Least-Squares and Penalized Splines," *Journal of Statistical Computation and Simulation*, in press.

### See Also

`fitcriteria`

for the fit criteria, `freeknotfit`

for the free-knot spline algorithms.

### Examples

1 2 3 4 5 6 | ```
x <- 0:30/30
truey <- x*sin(10*x)
set.seed(10556)
y <- truey + rnorm(31, 0, 0.2)
xy.freekt <- fit.search.numknots(x, y, degree = 2, minknot = 1, maxknot = 3, seed = 555)
plot(xy.freekt, xfit = 0:1000/1000)
``` |