@@ -974,3 +974,65 @@ test_that("Compare with Stata ivreg2 output", {
974974#
975975# . di Fsw21
976976# 81.812373
977+
978+ set.seed(20250519 )
979+
980+ # Define the number of observations you want to generate
981+ n <- 300000
982+
983+ # Define the data structure
984+ # Binary alc_deaths variable
985+ alc_deaths <- rbinom(n , 1 , p = 0.01 )
986+ # Binary sex variable
987+ sex <- rbinom(n , 1 , p = 0.5 )
988+ # Binary belief variable
989+ bileve <- rbinom(n , 1 , p = 0.1 )
990+ # Normal distribution for log_dpw
991+ log_dpw <- rnorm(n , 2 , 1 )
992+ # Normal distribution for education years
993+ eduyears <- rnorm(n , 14 , 5 )
994+ # Normal distribution for intervention
995+ inter <- rnorm(n , 30 , 18 )
996+ # Normal distribution for age
997+ age <- rnorm(n , 57 , 8 )
998+ # Normal distribution for dpw_main_grs
999+ dpw_main_grs <- rnorm(n , 0 , 1 )
1000+ # Normal distribution for edu_main_grs
1001+ edu_main_grs <- rnorm(n , 0 , 1 )
1002+ # Normal distribution for inter_grs
1003+ inter_grs <- rnorm(n , 0.2 , 1 )
1004+
1005+ # Create data.frame
1006+ simulated_data <- data.frame (alc_deaths , sex , bileve , log_dpw , eduyears , inter , age , dpw_main_grs , edu_main_grs , inter_grs )
1007+
1008+ test_that(" Example from Zoe Reed with factor variables in covariate list" , {
1009+ # Run with no error
1010+ tsls_sim <- ivreg :: ivreg(alc_deaths ~ log_dpw + eduyears + inter + age + sex + bileve | dpw_main_grs + edu_main_grs + inter_grs + age + sex + bileve , data = simulated_data )
1011+
1012+ expect_no_error({fswres1 <- fsw(tsls_sim )})
1013+
1014+ # Including factor variable causes error
1015+ simulated_data $ sex <- as.factor(simulated_data $ sex )
1016+
1017+ tsls_sim2 <- ivreg :: ivreg(alc_deaths ~ log_dpw + eduyears + inter + age + sex + bileve | dpw_main_grs + edu_main_grs + inter_grs + age + sex + bileve , data = simulated_data )
1018+
1019+ expect_no_error({fswres2 <- fsw(tsls_sim2 )})
1020+
1021+ expect_equal(fswres1 , fswres2 )
1022+ })
1023+
1024+ # Expect failure if a binary exposure is a factor
1025+ simulated_data $ expfct <- as.factor(rbinom(n , 1 , p = 0.4 ))
1026+
1027+ test_that(" Test fsw() when exposure is class factor" , {
1028+ tsls_sim3 <- ivreg :: ivreg(alc_deaths ~ log_dpw + eduyears + expfct + age + sex + bileve | dpw_main_grs + edu_main_grs + inter_grs + age + sex + bileve , data = simulated_data )
1029+ expect_error({fsw(tsls_sim3 )})
1030+ })
1031+
1032+ # Expect no error if a binary exposure is numeric
1033+ simulated_data $ expfct <- as.numeric(simulated_data $ expfct )
1034+
1035+ test_that(" Test fsw() when exposure is binary but numeric" , {
1036+ tsls_sim4 <- ivreg :: ivreg(alc_deaths ~ log_dpw + eduyears + expfct + age + sex + bileve | dpw_main_grs + edu_main_grs + inter_grs + age + sex + bileve , data = simulated_data )
1037+ expect_no_error({fswres4 <- fsw(tsls_sim4 )})
1038+ })
0 commit comments