| Type: | Package | 
| Title: | Partial Linear Single Index Models for Environmental Mixture Analysis | 
| Version: | 0.1.1 | 
| Date: | 2025-05-04 | 
| Maintainer: | Yuyan Wang <yuyan.wang@nyumc.org> | 
| Description: | Collection of ancillary functions and utilities for Partial Linear Single Index Models for Environmental mixture analyses, which currently provides functions for scalar outcomes. The outputs of these functions include the single index function, single index coefficients, partial linear coefficients, mixture overall effect, exposure main and interaction effects, and differences of quartile effects. In the future, we will add functions for binary, ordinal, Poisson, survival, and longitudinal outcomes, as well as models for time-dependent exposures. See Wang et al (2020) <doi:10.1186/s12940-020-00644-4> for an overview. | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| Depends: | R (≥ 2.10) | 
| Imports: | splines, ggplot2, MASS, ciTools | 
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0) | 
| URL: | https://github.com/YuyanWangSixTwo/EPLSIM | 
| BugReports: | https://github.com/YuyanWangSixTwo/EPLSIM/issues | 
| VignetteBuilder: | knitr | 
| LazyData: | true | 
| NeedsCompilation: | no | 
| Packaged: | 2025-05-05 14:26:44 UTC; wangy40 | 
| Author: | Yuyan Wang  | 
| Repository: | CRAN | 
| Date/Publication: | 2025-05-05 14:40:02 UTC | 
Transformation for confounder vector Z
Description
Transformation for confounder vector Z
Usage
confounder.trans(Z_continuous, Z_discrete, data)
Arguments
Z_continuous | 
 A character name vector for continuous confounders  | 
Z_discrete | 
 A character name vector for discrete confounders  | 
data | 
 Orginial data set  | 
Value
Transformed confounder vector and data set ready for further analysis.
Author(s)
Yuyan Wang
Examples
# example to normalize the continuous confounders and
# make dummy variables for categorical confoduners
dat.cov <- data.frame(
  age = c(1.5, 2.3, 3.1, 4.8, 5.2),
  sex = c(1, 2, 1, 2, 2),
  race = c(1, 2, 3, 4, 5)
)
# specify the confounder vector
Z.name <- c("age", "sex", "race")
# set levels and make the reference level first for categorical confounders
dat.cov$sex <- factor(dat.cov$sex, 1:2, c('Male', 'Female'))
dat.cov$race <- factor(dat.cov$race,1:5,c("NH-White", "NH-Black",
                                        "MexicanAmerican", "OtherRace", "Hispanic"))
# transform the confounder vector and check
cov_m <- confounder.trans(Z_continuous = c("age"), Z_discrete = c("sex", "race"), data = dat.cov)
Z.name <- cov_m$New.Name
dat.cov <- cov_m$Updated.data
print(Z.name)
plot interaction effect of two exposures
Description
plot interaction effect of two exposures
Usage
e.interaction.plot(fit, data, exp_1, exp_2)
Arguments
fit | 
 Fitted model from function 'plsi.lr.v1'  | 
data | 
 Original data set  | 
exp_1 | 
 exposure name hoping to be checked  | 
exp_2 | 
 exposure name hoping to be checked  | 
Value
plot of interaction effect of two exposures with others at average level
Author(s)
Yuyan Wang
Examples
# example to plot interaction effect of two exposures
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot two exposures' interaction effect
e.interaction.plot(model_1, dat, "X4_a.tocopherol", "X3_g.tocopherol")
e.interaction.plot(model_1, dat, "X4_a.tocopherol", "X10_2.3.4.6.7.8.hxcdf")
# exchange exposures' names
e.interaction.plot(model_1, dat, "X8_3.3.4.4.5.pncb", "X6_PCB156")
e.interaction.plot(model_1, dat, "X6_PCB156", "X8_3.3.4.4.5.pncb")
plot single exposure's main effect
Description
plot single exposure's main effect
Usage
e.main.plot(fit, data, exp_name)
Arguments
fit | 
 Fitted model from function 'plsi.lr.v1'  | 
data | 
 Original data set  | 
exp_name | 
 exposure name hoping to be plotted  | 
Value
plot of exposure's main effect with other exposures at average level 0
Author(s)
Yuyan Wang
Examples
# example to plot some exposure's main effect
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot some exposure's main effect
e.main.plot(model_1, dat, exp_name = c("X4_a.tocopherol"))
e.main.plot(model_1, dat, exp_name = c("X5_PCB99"))
e.main.plot(model_1, dat, exp_name = c("X10_2.3.4.6.7.8.hxcdf"))
plot interquartile effect of specific exposure based on quartile of other exposures
Description
plot interquartile effect of specific exposure based on quartile of other exposures
Usage
interquartile.quartile.plot(fit, data)
Arguments
fit | 
 Fitted model from function 'plsi.lr.v1'  | 
data | 
 Original data set  | 
Value
plot of main interquartile effect of exposure based on quartile of other exposures
Author(s)
Yuyan Wang
Examples
# example to interquartile effect based on quartile of other exposures
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot interquartile quartile
interquartile.quartile.plot(model_1, dat)
plot mixture's overall effect based on quantile of exposures
Description
plot mixture's overall effect based on quantile of exposures
Usage
mixture.overall.plot(fit, data)
Arguments
fit | 
 Fitted model from function 'plsi.lr.v1'  | 
data | 
 Original data set  | 
Value
plot of predicted outcomes based on quantile of exposures
Author(s)
Yuyan Wang
Examples
# example to plot mixture's overall effect
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot mixture overall effect
mixture.overall.plot(model_1, dat)
This is data from NHANES 2003–2004
Description
A data set containing outcome triglyceride, ten exposures, and three confounders.
Usage
nhanes
Format
An object of class data.frame with 800 rows and 14 columns.
Details
- triglyceride
 outcome triglyceride level, unite mg/dl
- a1.trans.b.carotene
 exposure: trans-b-carotene (ug/dL)
- a5.Retinol
 exposure: retinol (ug/dL)
- a6.g.tocopherol
 exposure: g-tocopherol (ug/dL)
- a7.a.Tocopherol
 exposure: a-tocopherol (ug/dL)
- a10.PCB99
 exposure: Polychlorinated Biphenyl (PCB) 99 Lipid Adj (ng/g)
- a13.PCB156
 exposure: Polychlorinated Biphenyl (PCB) 156 Lipid Adj (ng/g)
- a19.PCB206
 exposure: Polychlorinated Biphenyl (PCB) 206 Lipid Adj (ng/g)
- a20.3.3.4.4.5.pncb
 exposure: 3,3,4,4,5-Pentachlorobiphenyl (pncb) Lipid Adj (pg/g)
- a21.1.2.3.4.7.8.hxcdf
 exposure: 1,2,3,4,7,8-hxcdf Lipid Adj (pg/g)
- a22.2.3.4.6.7.8.hxcdf
 exposure: 2,3,4,6,7,8-hxcdf Lipid Adj (pg/g)
- age
 subject age at measurement
- sex
 subject sex
- race
 subject race
Author(s)
Yuyan Wang yuyan.wang@nyumc.org
This is updated data from original data based on NHANES 2003–2004 survey
Description
A data set containing outcome triglyceride, re-named ten exposures, and transformed confounders.
Usage
nhanes.new
Format
An object of class data.frame with 789 rows and 17 columns.
Details
- triglyceride
 outcome triglyceride level, unite mg/dl
- X1_trans.b.carotene
 renamed exposure: trans-b-carotene (ug/dL)
- X2_retinol
 renamed exposure: retinol (ug/dL)
- X3_g.tocopherol
 renamed exposure: g-tocopherol (ug/dL)
- X4_a.tocopherol
 renamed exposure: a-tocopherol (ug/dL)
- X5_PCB99
 renamed exposure: Polychlorinated Biphenyl (PCB) 99 Lipid Adj (ng/g)
- X6_PCB156
 renamed exposure: Polychlorinated Biphenyl (PCB) 156 Lipid Adj (ng/g)
- X7_PCB206
 renamed exposure: Polychlorinated Biphenyl (PCB) 206 Lipid Adj (ng/g)
- X8_3.3.4.4.5.pncb
 renamed exposure: 3,3,4,4,5-Pentachlorobiphenyl (pncb) Lipid Adj (pg/g)
- X9_1.2.3.4.7.8.hxcdf
 renamed exposure: 1,2,3,4,7,8-hxcdf Lipid Adj (pg/g)
- X10_2.3.4.6.7.8.hxcdf
 renamed exposure: 2,3,4,6,7,8-hxcdf Lipid Adj (pg/g)
- AGE.c
 rescaled continuous confounder: subject age at measurement
- SEX.Female
 categorical confounder dummy variable: subject sex as Female
- RACE.NH.Black
 categorical dummy variable: subject race as Non-Hispanic Black
- RACE.MexicanAmerican
 categorical dummy variable: subject race as Mexican American
- RACE.OtherRace
 categorical dummy variable: subject race as Other Races
- RACE.Hispanic
 categorical dummy variable: subject race as Hispanic
Author(s)
Yuyan Wang yuyan.wang@nyumc.org
Partial linear single index linear regression for scalar outcome
Description
Partial linear single index linear regression for scalar outcome
Usage
plsi.lr.v1(
  data,
  Y.name,
  X.name,
  Z.name,
  spline.num,
  spline.degree,
  initial.random.num
)
Arguments
data | 
 A data set including all needed variables  | 
Y.name | 
 Variable name for scalar outcome  | 
X.name | 
 Variable name vector for exposures  | 
Z.name | 
 Variable name vector for confounders  | 
spline.num | 
 A number representing the degree of freedom of B-spline basis for link function  | 
spline.degree | 
 A number representing the degree of the piece-wise polynomial of B-spline basis for link function  | 
initial.random.num | 
 A number representing the number of random initials used in the function  | 
Value
A list of model estimation and prediction results
Author(s)
Yuyan Wang
Examples
# example to run the function
data(nhanes.new)
dat <- nhanes.new
# specify variable names
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
# specify spline degree of freedom
spline.num = 5
# specify spline degree
spline.degree = 3
# specify number of random initials for estimation
initial.random.num = 1
# run the model
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
plot estimated single index coefficients
Description
plot estimated single index coefficients
Usage
si.coef.plot(si.coef.est)
Arguments
si.coef.est | 
 A data set of estimated single index coefficients  | 
Value
single index coefficient plot
Author(s)
Yuyan Wang
Examples
# example to plot estimated single index coefficients
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot estimated single index coefficients
si.coef.plot(model_1$si.coefficient)
# check estimated single index coefficients
model_1$si.coefficient
plot estimated single index function
Description
plot estimated single index function
Usage
si.fun.plot(si.ci)
Arguments
si.ci | 
 A data set of estimated index and corresponding single index values  | 
Value
Single index function plot
Author(s)
Yuyan Wang
Examples
# example to plot estimated single index function
data(nhanes.new)
dat <- nhanes.new
# specify variable names and parameters
Y.name <- "log.triglyceride"
X.name <- c("X1_trans.b.carotene", "X2_retinol", "X3_g.tocopherol", "X4_a.tocopherol",
            "X5_PCB99", "X6_PCB156", "X7_PCB206",
            "X8_3.3.4.4.5.pncb", "X9_1.2.3.4.7.8.hxcdf", "X10_2.3.4.6.7.8.hxcdf")
Z.name <- c("AGE.c", "SEX.Female", "RACE.NH.Black",
           "RACE.MexicanAmerican", "RACE.OtherRace", "RACE.Hispanic" )
spline.num = 5
spline.degree = 3
initial.random.num = 1
# run PLSI linear regression
set.seed(2023)
model_1 <- plsi.lr.v1(data = dat, Y.name = Y.name, X.name = X.name, Z.name = Z.name,
                      spline.num, spline.degree, initial.random.num)
# plot single index function
si.fun.plot(model_1$si.fun)