Description Usage Arguments Value Examples
View source: R/coef_transform.R
Transforms linear model coefficients from a model fitted using latent features z back to the original feature space x. This is possible since the dimension reduction methods PCA, SPCA and ISPCA are all linear, and consequently, if a linear model is fitted using features z, it will correspond exactly to a linear model with features x. This function can be used to compute the regression coefficients and intercept of that model.
1 2 | ## S3 method for class 'dimred'
coef_transform(object, beta, alpha, ...)
|
object |
Dimension reduction object. |
beta |
Regression coefficients in the z-space (latent space). |
alpha |
Intercept in the z-space (latent space). |
... |
Currently ignored. |
A list with elements beta
and alpha
that give the model's
regression coefficients and intercept, respectively, in the original feature space.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ###
# load data
data("ovarian", package = "dimreduce")
x <- ovarian$x
y <- ovarian$y
# perform dimension reduction (use first two latent features)
dr <- ispca(x, y, nctot = 2, normalize = TRUE)
z <- predict(dr, x)
# fit model
data <- data.frame(z, y)
if (requireNamespace("rstanarm", quietly = TRUE)) {
# Bayesian logistic regression
model <- rstanarm::stan_glm(y ~ ., data = data, family = binomial(), chains = 2, iter = 500)
param_z <- as.data.frame(model)
alpha_z <- t(param_z[, 1])
beta_z <- t(param_z[, 2:3])
# transform the linear model back to original feature space
param_x <- coef_transform(dr, beta_z, alpha_z)
beta_x <- param_x$beta
alpha_x <- param_x$alpha
intervals <- apply(beta_x, 1, quantile, probs = c(0.05, 0.5, 0.95))
if (require("ggplot2", quietly = TRUE)) {
# plot the coefficient posteriors in the original space
p <- ncol(x)
ggplot() +
geom_linerange(aes(x = 1:p, ymin = intervals[1, ], ymax = intervals[3, ])) +
geom_point(aes(x = 1:p, y = intervals[2, ])) +
ylab("Coefficient") +
xlab("Feature")
}
} else {
# logistic regression
model <- glm(y ~ ., data = data, family = binomial())
param_z <- coef(model)
alpha_z <- param_z[1]
beta_z <- param_z[2:3]
# transform the linear model back to original feature space
param_x <- coef_transform(dr, beta_z, alpha_z)
beta_x <- param_x$beta
alpha_x <- param_x$alpha
if (requireNamespace("ggplot2", quietly = TRUE)) {
# plot the coefficients in the original space
p <- ncol(x)
ggplot2::ggplot() +
ggplot2::geom_point(ggplot2::aes(x = 1:p, y = beta_x)) +
ggplot2::ylab("Coefficient") +
ggplot2::xlab("Feature")
}
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.