#' Implements simple linear regression by hand
#'
#' @param dat A data frame
#' @param response The name of a response variable in the data frame (unquoted)
#' @param explanatory The name of the explanatory variable in the data frame (unquoted)
#' @param method The method used to compute the coefficients (NULL, "qr", "gradientdescent")
#'
#' @return A data frame of coefficients
#'
#' @import dplyr
#'
#' @export
simple_linear_regression <- function(dat, response, explanatory, method = NULL){
x <- dat %>% pull({{explanatory}})
y <- dat %>% pull({{response}})
explan_name <- dat %>%
select({{explanatory}}) %>%
names()
x_bar <- mean(x)
y_bar <- mean(y)
### Edit code after here
sd_x <- sd(x)
sd_y <- sd(y)
beta_1 <- cov(x,y)/(sd_x)^2
beta_0 <- y_bar - (x_bar*beta_1)
### Stop editing
results <- tibble::tibble(
Intercept = beta_0,
Slope = beta_1
)
names(results)[2] <- explan_name
return(results)
}
#' Implements linear regression with many predictors by hand
#'
#' This function computes coefficients for multiple regression by hand.
#' All columns of the provided data frame are used as predictors, except the
#' one specified as a response.
#'
#' No interaction terms are included.
#'
#'
#' @param dat A data frame
#' @param response The name of a response variable in the data frame (unquoted)
#' @param method The method used to compute the coefficients (NULL, "qr", "gradientdescent")
#'
#' @return A data frame of coefficients
#'
#' @import dplyr
#'
#'@export
multiple_linear_regression <- function(dat, response, method = NULL) {
x <- dat %>% select(-{{response}})
x <- as.matrix(x)
int <- as.matrix(rep(1, nrow(x)), ncol = 1)
x <- cbind(int, x)
y <- dat %>% select({{response}})
y <- as.matrix(y)
results <- solve(crossprod(x)) %*% (t(x) %*% y)
results <- as.data.frame(t(results))
names(results)[1] <- "Intercept"
return(results)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.