---
title: "Model fitting"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{fit}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

For showing model fitting in `SSLR`, we will use *Wine* dataset with 20% labeled data:

```{r eval=FALSE}

library(SSLR)
library(tidymodels)
library(caret)
```

```{r include=FALSE}
knitr::opts_chunk$set(
  digits = 3,
  collapse = TRUE,
  comment = "#>"
)
options(digits = 3)

library(SSLR)
library(tidymodels)
library(caret)
```


```{r wine, results="hide"}
data(wine)

set.seed(1)

#Train and test data
train.index <- createDataPartition(wine$Wine, p = .7, list = FALSE)
train <- wine[ train.index,]
test  <- wine[-train.index,]

cls <- which(colnames(wine) == "Wine")

# 20 % LABELED
labeled.index <- createDataPartition(wine$Wine, p = .2, list = FALSE)
train[-labeled.index,cls] <- NA
```

In this package we have three functions to fit the different models:

## Fit with formula

We can use a formula with data (matrix or data.frame, with unlabeled data NAs in column to predict):

```{r fitformula, results="hide", eval=FALSE}
m <- SSLRDecisionTree() %>% fit(Wine ~ ., data = train)

```

## Fit with x and y

We can use x data (matrix or data.frame) and y vector (factor or numeric, with unlabeled data NAs):

```{r fitxy, results="hide", eval=FALSE}
m <- SSLRDecisionTree() %>% fit_xy(x = train[,-cls], y = train$Wine)

```


## Fit with x, y and data from unlabeled data

We can use a x (matrix or data.frame) and y vector (factor or numeric, without NAs) and unalabeled data without y column (matrix or data.frame):

```{r fitxyu, results="hide", eval=FALSE}
m <- SSLRDecisionTree() %>% fit_x_u(x = train[labeled.index,-cls], y = train[labeled.index,cls],
                                     x_U = train[-labeled.index,-cls])

```
