From 20faf8c23a9ef122d460efdc428bfbdc7e63ce78 Mon Sep 17 00:00:00 2001 From: Jaroslav Borodavka <df2994@kit.edu> Date: Fri, 15 Mar 2024 13:03:17 +0100 Subject: [PATCH] Adjusted code after addition of Bingham test --- R/Comp_Statistics_Powertests_d_equal_2.R | 66 ++++++++++++------------ 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/R/Comp_Statistics_Powertests_d_equal_2.R b/R/Comp_Statistics_Powertests_d_equal_2.R index 8907b7a..4d7ee4a 100644 --- a/R/Comp_Statistics_Powertests_d_equal_2.R +++ b/R/Comp_Statistics_Powertests_d_equal_2.R @@ -112,26 +112,26 @@ Bingham <- function(data){ return(n*d*(d+2)/2*(sum(diag(S %*% S)) - 1/d)) } -# Alle Teststatistiken fuer MonteCarlo +# collecting all test statistic in a list for MonteCarlo package ls <- list(Kuiper, Watson, Ajne, Rayleigh, Cuesta_Albertos_multi, Bingham) CircComp_stat_value <- function(data, index){ return(as.numeric(ls[[index]](data))) } -# Teststatistik mit gleichverteilten Daten +# test realizations for uniform distribution CircComp_unif <- function(n, dim, index){ return(list("Realisierung" = CircComp_stat_value(data = runif_sphere(n, dim), index = index))) } -# Alternativen gemaeß Paper von Cutting, Pandaveine und Verdebout +# alternatives according to paper by Cutting, Pandaveine und Verdebout ("TESTING UNIFORMITY ON HIGH-DIMENSIONAL SPHERES AGAINST MONOTONE ROTATIONALLY SYMMETRIC ALTERNATIVES") CircComp_vMF <- function(n, dim, kappa, index){ return(list("Realisierung" = CircComp_stat_value(data = rvmf(n, c(1,rep(0, dim-1)), kappa), index = index))) } -# Andere Alternativen +# other alternatives CircComp_mixvmf_1 <- function(n, dim, p, index){ U = runif(n, 0, 1) sample = (U<p)*rvmf(n, c(-1,rep(0,dim-1)), 1) + (U>=p)*rvmf(n, c(1,rep(0,dim-1)), 1) @@ -173,34 +173,34 @@ CircComp_LP <- function(n, dim, m, kappa, index){ } ################################################################################################# -## Berechnung kritischer Werte per Monte Carlo unter der Nullhypothese ## +## Calculation of critical values under the null hypothesis ## -# Umlaeufe fuer kritische Werte +# replication number l (cf. main manuscript) for critical values reps = 20000 -# Parameter +# hyperparameters numCores = 18 n_grid = c(20, 50, 100, 500) dim_grid = c(2) -index_grid = seq(1, 5) +index_grid = seq(1, 6) grp_number = length(n_grid)*length(dim_grid)*length(index_grid) -# Parameterkonstellationen fuer Monte Carlo +# parameter constellation for MonteCarlo package parameter = list("n" = n_grid, "dim" = dim_grid, "index" = index_grid) -# Export benötigter Daten, Pakete und Funktionen +# export of required data, packages and functions export_list = list("functions" = c("euclidtoangular", "F_0", "Cuesta_Albertos_unique", "runif_sphere"), "packages" = "MASS", "data" = "rdirections") # Monte Carlo Loops res_CircComp_unif <- MonteCarlo::MonteCarlo(CircComp_unif, nrep = reps, param_list = parameter, ncpus = numCores, export_also = export_list) -# Erstellung eines Dataframes der Realisierungen +# producing a data.frame with all realizations DF_CircComp_unif <- MonteCarlo::MakeFrame(res_CircComp_unif) summary(DF_CircComp_unif) -# In data.table umwandeln +# converting to a data.table DT_CircComp_unif <- setDT(DF_CircComp_unif) -# Gruppen bilden +# creating groups DT_CircComp_unif[, grp := .GRP, by = c("n", "dim", "index")] DT_CircComp_unif = DT_CircComp_unif[order(grp, Realisierung)] DT_CircComp_unif_CA = DT_CircComp_unif[index == 5, list(n, "Dimension" = dim, "Index" = index, "Realisierung" = Realisierung, @@ -208,7 +208,7 @@ DT_CircComp_unif_CA = DT_CircComp_unif[index == 5, list(n, "Dimension" = dim, "I "Niveau_5" = lapply(.SD, quantile, probs = 0.05, na.rm = T), "Niveau_1" = lapply(.SD, quantile, probs = 0.01, na.rm = T)), by = grp, .SDcols = c("Realisierung")] -DT_CircComp_unif = DT_CircComp_unif[index %in% seq(1,4), list(n, "Dimension" = dim, "Index" = index, "Realisierung" = Realisierung, +DT_CircComp_unif = DT_CircComp_unif[index %in% c(seq(1,4), 6), list(n, "Dimension" = dim, "Index" = index, "Realisierung" = Realisierung, "Niveau_10" = lapply(.SD, quantile, probs = 0.90, na.rm = T), "Niveau_5" = lapply(.SD, quantile, probs = 0.95, na.rm = T), "Niveau_1" = lapply(.SD, quantile, probs = 0.99, na.rm = T)), @@ -218,9 +218,11 @@ print(DT_CircComp_unif) ################################################################################################# -## Niveau-Test fuer konkurrierende Teststatistiken fuer d = 2 ## +## level test for competing tests for d = 2 ## -# Umlaeufe fuer Powertests +# uniform distribution + +# replication number for power tests a = 5000 CircComp_Test <- MonteCarlo::MonteCarlo(CircComp_unif, nrep = a, param_list = parameter, ncpus = numCores, export_also = export_list) @@ -258,7 +260,7 @@ for (k in 1:grp_number) { Power_CircComp[k, 2] = n Power_CircComp[k, 3] = dim - Power_CircComp[k, 4] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp[k, 4] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp[k, 5] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp[k, 6] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp[k, 7] = sum(dec_1[dec_1==1])/length(dec_1) @@ -269,9 +271,9 @@ Power_CircComp = data.frame("Gruppe" = Power_CircComp[,1], "n" = Power_CircComp[ print(Power_CircComp) ################################################################################################# -## Power-Test fuer konkurrierende Teststatistiken fuer d = 2 ## +## power tests for competing tests for d = 2 ## -# vMF +# vMF alternative kappa_grid = c(0.05, 0.1, 0.25, 0.5, 0.75, 1, 2) grp_number = length(n_grid)*length(dim_grid)*length(kappa_grid)*length(index_grid) @@ -316,7 +318,7 @@ for (k in 1:grp_number) { Power_CircComp_vMF[k, 2] = umfang Power_CircComp_vMF[k, 3] = dim Power_CircComp_vMF[k, 4] = kappa - Power_CircComp_vMF[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_vMF[k, 4] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_vMF[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_vMF[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_vMF[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -327,7 +329,7 @@ Power_CircComp_vMF = data.frame("Gruppe" = Power_CircComp_vMF[,1], "n" = Power_C "Niveau_5" = Power_CircComp_vMF[,7], "Niveau_1" = Power_CircComp_vMF[,8]) print(Power_CircComp_vMF) -# Mix FvML mit zwei Zentren (1) +# Mix vMF with two centers (1) p_grid = c(0.25, 0.5) grp_number = length(n_grid)*length(dim_grid)*length(p_grid)*length(index_grid) @@ -372,7 +374,7 @@ for (k in 1:grp_number) { Power_CircComp_mixvmf_1[k, 2] = umfang Power_CircComp_mixvmf_1[k, 3] = dim Power_CircComp_mixvmf_1[k, 4] = prob - Power_CircComp_mixvmf_1[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_mixvmf_1[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_mixvmf_1[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_mixvmf_1[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_mixvmf_1[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -383,7 +385,7 @@ Power_CircComp_mixvmf_1 = data.frame("Gruppe" = Power_CircComp_mixvmf_1[,1], "n" "Niveau_5" = Power_CircComp_mixvmf_1[,7], "Niveau_1" = Power_CircComp_mixvmf_1[,8]) print(Power_CircComp_mixvmf_1) -# Mix FvML mit zwei Zentren (2) +# Mix vMF with two centers (2) p_grid = c(0.5, 0.75) grp_number = length(n_grid)*length(dim_grid)*length(p_grid)*length(index_grid) @@ -428,7 +430,7 @@ for (k in 1:grp_number) { Power_CircComp_mixvmf_2[k, 2] = umfang Power_CircComp_mixvmf_2[k, 3] = dim Power_CircComp_mixvmf_2[k, 4] = prob - Power_CircComp_mixvmf_2[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_mixvmf_2[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_mixvmf_2[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_mixvmf_2[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_mixvmf_2[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -439,7 +441,7 @@ Power_CircComp_mixvmf_2 = data.frame("Gruppe" = Power_CircComp_mixvmf_2[,1], "n" "Niveau_5" = Power_CircComp_mixvmf_2[,7], "Niveau_1" = Power_CircComp_mixvmf_2[,8]) print(Power_CircComp_mixvmf_2) -# Mix FvML mit drei Zentren (1) +# Mix vMF with three centers (1) grp_number = length(n_grid)*length(dim_grid)*length(index_grid) @@ -482,7 +484,7 @@ for (k in 1:grp_number) { Power_CircComp_mixvmf_3[k, 2] = umfang Power_CircComp_mixvmf_3[k, 3] = dim Power_CircComp_mixvmf_3[k, 4] = 0.25 - Power_CircComp_mixvmf_3[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_mixvmf_3[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_mixvmf_3[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_mixvmf_3[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_mixvmf_3[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -493,7 +495,7 @@ Power_CircComp_mixvmf_3 = data.frame("Gruppe" = Power_CircComp_mixvmf_3[,1], "n" "Niveau_1" = Power_CircComp_mixvmf_3[,8]) print(Power_CircComp_mixvmf_3) -# Mix FvML mit drei Zentren (2) +# Mix vMF with three centers (2) grp_number = length(n_grid)*length(dim_grid)*length(index_grid) @@ -534,7 +536,7 @@ for (k in 1:grp_number) { Power_CircComp_mixvmf_4[k, 2] = umfang Power_CircComp_mixvmf_4[k, 3] = dim Power_CircComp_mixvmf_4[k, 4] = round(1/3, digits = 2) - Power_CircComp_mixvmf_4[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_mixvmf_4[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", , "Bingham") Power_CircComp_mixvmf_4[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_mixvmf_4[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_mixvmf_4[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -591,7 +593,7 @@ for (k in 1:grp_number) { Power_CircComp_bing_1[k, 2] = umfang Power_CircComp_bing_1[k, 3] = dim Power_CircComp_bing_1[k, 4] = tau - Power_CircComp_bing_1[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_bing_1[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_bing_1[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_bing_1[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_bing_1[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -647,7 +649,7 @@ for (k in 1:grp_number) { Power_CircComp_bing_2[k, 2] = umfang Power_CircComp_bing_2[k, 3] = dim Power_CircComp_bing_2[k, 4] = tau - Power_CircComp_bing_2[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_bing_2[k, 5] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_bing_2[k, 6] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_bing_2[k, 7] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_bing_2[k, 8] = sum(dec_1[dec_1==1])/length(dec_1) @@ -658,7 +660,7 @@ Power_CircComp_bing_2 = data.frame("Gruppe" = Power_CircComp_bing_2[,1], "n" = P "Niveau_5" = Power_CircComp_bing_2[,7], "Niveau_1" = Power_CircComp_bing_2[,8]) print(Power_CircComp_bing_2) -# Legendre-Polynom +# Legendre polynomial m_grid = c(3, 4) kappa_grid = c(0.1, 0.5, 1) @@ -706,7 +708,7 @@ for (k in 1:grp_number) { Power_CircComp_LP[k, 3] = dim Power_CircComp_LP[k, 4] = m Power_CircComp_LP[k, 5] = kappa - Power_CircComp_LP[k, 6] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos") + Power_CircComp_LP[k, 6] = switch(index, "Kuiper", "Watson", "Ajne", "Rayleigh", "Cuesta-Albertos", "Bingham") Power_CircComp_LP[k, 7] = sum(dec_10[dec_10==1])/length(dec_10) Power_CircComp_LP[k, 8] = sum(dec_5[dec_5==1])/length(dec_5) Power_CircComp_LP[k, 9] = sum(dec_1[dec_1==1])/length(dec_1) -- GitLab