# Computes K-fold cross validation for selecting lambda

### Description

Computes a K-fold cross validation for

### Usage

1 | ```
cv.sisVIVE(Y, D, Z, lambdaSeq, K = 10, intercept = TRUE, normalize = TRUE)
``` |

### Arguments

`Y` |
A numeric vector of outcomes |

`D` |
A numeric vector of exposures |

`Z` |
A numeric matrix of instruments, with each column referring to one instrument |

`lambdaSeq` |
A numeric vector of lambdas to cross-validate from. Cross-validation will be performed only on these sequence of lambdas. You can either supply lambdaSeq or nLambda. See Details |

`K` |
Number of cross-validation folds |

`intercept` |
A logical declaring whether the intercept be included. Default is TRUE |

`normalize` |
A logical declaring whether the columns of Z should be scaled with variance 1. Default is TRUE |

### Details

Performs K-fold cross validiation to select lambda and returns the "best" lambda based on this cross-validation. If lambdaSeq is unspecified, the algorithm defaults to using the sequence of lambdas selected by sisVIVE. If lambdaSeq is specified, the algorithm will only evaluate its cross-validation on the specified lambdaSeq.

### Value

A list is returned, which contains the estimates of alpha, beta, and the set of invalid instruments for the "best" lambda chosen by cross validation

`lambda` |
"best" lambda as chosen by cross validation |

`estCVError` |
Estimated cross-validated error at this lambda |

`alpha` |
Estimate of alpha at the said lambda |

`beta` |
Estimate of beta, the causal effect of exposure on outcome, at the said lambda |

`whichInvalid` |
Estimate of set of invalid instruments at the said lambda |

### Author(s)

Hyunseung Kang

### Examples

1 2 3 4 5 6 7 8 9 10 11 | ```
library(MASS)
library(lars)
n = 1000; L = 10; s= 3;
Z <- matrix(rnorm(n*L),n,L)
error <- mvrnorm(n,rep(0,2),matrix(c(1,0.8,0.8,1),2,2))
intD = rnorm(1); ZtoD = rnorm(L,0,1); ZtoY = c(rnorm(s),rep(0,L-s)); DtoY = 1; intY = rnorm(1)
D = intD + Z %*% ZtoD + error[,1]
Y = intY + Z %*% ZtoY + D * DtoY + error[,2]
result = cv.sisVIVE(Y,D,Z,K=10)
``` |