Learn R Programming

SEMsensitivity (version 0.1.0)

Test2: Naive Method with Approximate Influence

Description

Remove a fixed percentage of samples (determined by the approximate influence) at a time and refit the model to observe the change in the parameter of interest. Use method 2 - Naive Method with Approximate Influence.

Usage

Test2(
  df,
  model,
  var_one,
  var_two,
  PAR,
  threshold,
  fit,
  estimates,
  conc,
  int,
  par_value,
  max_final,
  N,
  signFactor,
  equalCons = 0L,
  calcMeth = "Hessian",
  ...
)

Value

A list of class TestResult containing:

value

The value of the parameter after dropping the influential points.

points

The indices of the most influential data points.

methodname

The name of the method used.

testindex

The index of the test performed.

Arguments

df

A data frame containing the dataset.

model

A specified SEM model.

var_one

The first variable of interest.

var_two

The second variable of interest.

PAR

The path of interest.

threshold

The threshold for percentage of data dropped.

fit

The SEM object.

estimates

The estimates from the SEM model.

conc

A data frame containing the parameter of interest.

int

The value of the path of interest.

par_value

The original value of the parameter of interest.

max_final

The maximum number of influential data points to consider.

N

The total number of data points.

signFactor

A factor indicating the direction of parameter change (positive or negative).

equalCons

The equality constraint used in the SEM model (default is 0).

calcMeth

The method used for approximation (default is 'Hessian').

...

Other arguments.

Examples

Run this code
# \donttest{
library(lavaan)
library(dplyr)
library(semfindr)
library(R.utils)


# Import data
df <- PoliticalDemocracy

# Build Model
model <- '
  # measurement model
  ind60 =~ x1 + x2 + x3
  dem60 =~ y1 + y2 + y3 + y4
  dem65 =~ y5 + y6 + y7 + y8
  # regressions
  dem60 ~ ind60
  dem65 ~ ind60 + dem60
  # residual correlations
  y1 ~~ y5
  y2 ~~ y4 + y6
  y3 ~~ y7
  y4 ~~ y8
  y6 ~~ y8
'

var_one <- 'dem65' # first term
var_two <- 'ind60' # second term
PAR <- c("dem65~ind60") # full relation
threshold <- 10

# Fit SEM model
fit <- lavaan::sem(model, data = df)
summary(fit)

# Get Estimates of Parameters from SEM
estimates <- parameterEstimates(fit)

# Determine The Value of The Parameter of Interest
conc <- data.frame(lhs = estimates$lhs, rhs = estimates$rhs, est = estimates$est)
int <- conc %>% filter(lhs == var_one & rhs == var_two)
par_value <- int$est # this is the value of the parameter of interest

# Compute max number of points to be dropped
max_final <- ceiling(threshold * nrow(df) / 100) # perform rounding if necessary
N <- nrow(df) # store number of observations in df for convenience

# Determine whether parameter is negative or positive in order
# to assess which direction to perturb it
signFactor <- ifelse(par_value >= 0L, TRUE, FALSE)

Test2_result <- Test2(df, model, var_one, var_two, PAR, threshold, fit, estimates,
conc, int, par_value, max_final, N, signFactor)
summary(Test2_result)
# }

Run the code above in your browser using DataLab