From 61dd6d399495486e035aebaddc7b55fef5eef46f Mon Sep 17 00:00:00 2001 From: Jaroslav Borodavka <df2994@kit.edu> Date: Wed, 17 Apr 2024 09:47:01 +0200 Subject: [PATCH] Superfluous script, hence removed. --- R/Powertest_LP_Alternative.R | 266 ----------------------------------- 1 file changed, 266 deletions(-) delete mode 100644 R/Powertest_LP_Alternative.R diff --git a/R/Powertest_LP_Alternative.R b/R/Powertest_LP_Alternative.R deleted file mode 100644 index 252f929..0000000 --- a/R/Powertest_LP_Alternative.R +++ /dev/null @@ -1,266 +0,0 @@ -library(Directional) -library(MASS) -library(MonteCarlo) -library(data.table) -library(zipfR) # incomplete Beta function Ibeta - -setwd("/Users/faik/Desktop/Mathematik/Masterarbeit/Ansatz_2/R-Codes") - -source("/Users/faik/Desktop/Mathematik/Masterarbeit/Ansatz_2/R-Codes/Legendre_Polynomial_Alternative.R") - -################################################################################################# -## Funktionen und Teststatistik ## - -# Erwartungswerte Psi_d -psi_d <- function(d, beta){ - return(if (beta%%2 == 0) gamma((beta+1)/2)*gamma(d/2)/(sqrt(pi)*gamma((beta+d)/2)) else 0) -} - -# Quadrierte und zentrierte Projektionen -projection <- function(unif_point_cover, data, beta){ - n = dim(data)[1] - d = dim(data)[2] - scalarproducts = data %*% t(unif_point_cover) - summen = colSums((scalarproducts)^beta) - return((1/n*summen - psi_d(d, beta))^2) -} - -# Teststatistik T_n,beta von Ebner, cover_n ist die Anzahl gleichverteilter Punkte auf der Sphäre -T_stat_value <- function(data, beta){ - n = dim(data)[1] - d = dim(data)[2] - cover_n = 0 - if (d < 5) cover_n = 5000 else cover_n = 20000 - unif_points = rvmf(cover_n, rep(1,d), 0) - projections = projection(unif_point_cover = unif_points, data = data, beta = beta) - return(n*max(projections)) -} - -T_LP <- function(n, dim, m, kappa, beta){ - return(list("Realisierung" = T_stat_value(data = rLP(n, m, c(1,rep(0,dim-1)), kappa/sqrt(n)), beta = beta))) -} - -SpherComp_LP <- function(n, dim, m, kappa, index){ - return(list("Realisierung" = SpherComp_stat_value(data = rLP(n, m, c(1,rep(0,dim-1)), kappa), index = index))) -} - -# Ajne-Teststatistik -Ajne <- function(data){ - n = dim(data)[1] - temp = data %*% t(data) - Psi = acos(temp[upper.tri(temp)]) - return(n/4 - 1/(n*pi)*sum(Psi)) -} - -# Rayleigh-Teststatistik basierend auf Directional-Paket -Rayleigh <- function(data){ - return(Directional::rayleigh(data, modif = TRUE)[1]) -} - -# Bingham-Teststatistik -Bingham <- function(data){ - n = dim(data)[1] - d = dim(data)[2] - temp = matrix(0, d, d) - for (i in 1:n) { - temp = temp + data[i,] %*% t(data[i,]) - } - S = 1/n*temp - return(n*d*(d+2)/2*(sum(diag(S %*% S)) - 1/d)) -} - -# Gine-Teststatistik G -Gine_G <- function(data){ - n = dim(data)[1] - d = dim(data)[2] - temp = data %*% t(data) - Psi = acos(temp[upper.tri(temp)]) - return(n/2 - (d-1)*gamma((d-1)/2)^2/(2*n*gamma(d/2)^2)*sum(sin(Psi))) -} - -# Cuesta-Albertos-Teststatistik -F_CA <- function(d){ - if (d==2){ - res <- function(t) 1 - acos(t)/pi - } else if(d==3){ - res <- function(t) (t+1)/2 - } else{ - res <- function(t) 1/2*(1 + sign(t)*Ibeta(t^2, a = 1/2, b = (d-1)/2)/Cbeta(a = 1/2, b = (d-1)/2)) - } - return(res) -} - -Cuesta_Albertos_unique <- function(data, rdirection){ - d = dim(data)[2] - cdf = F_CA(d) - projected_data = data %*% rdirection - return(ks.test(projected_data, "cdf")$p.value) -} - -# 100 gleichverteilte Richtungen fuer die CA-Teststatistik -rdirections_2 <- runif_sphere(25, 2) -rdirections_3 <- runif_sphere(100, 3) -rdirections_5 <- runif_sphere(100, 5) -rdirections_10 <- runif_sphere(100, 10) - -Cuesta_Albertos_multi <- function(data){ - d = dim(data)[2] - if (d==2){ - rdirections = rdirections_2 - } else if (d==3){ - rdirections = rdirections_3 - } else if (d==5){ - rdirections = rdirections_5 - } else { - rdirections = rdirections_10 - } - p_values = apply(rdirections, 1, Cuesta_Albertos_unique, data = data) - return(min(p_values)) -} - -# Cramér-von Mises-Teststatistik -integrand <- function(t, angle, dim){ - return(F_CA(dim)(t)*F_CA(dim-1)(t*tan(angle/2)/sqrt(1-t^2))/Cbeta(a = 1/2, b = (dim-1)/2)*(1-t^2)^((dim-3)/2)) -} - -psi_CvM <- function(d){ - if (d==2){ - res <- function(theta) 1/2 + theta/(2*pi)*(theta/(2*pi) - 1) - } else if(d==3){ - res <- function(theta) 1/2 - 1/4*sin(theta/2) - } else{ - res <- function(theta){ - return(-3/4 + theta/(2*pi) + 2*(F_CA(d)(cos(theta/2)))^2 - 4*integrate(integrand, - lower = 0, - upper = cos(theta/2), - angle = theta, - dim = d)$value) - } - } - return(res) -} - -CramerVonMises <- function(data){ - n = dim(data)[1] - d = dim(data)[2] - temp = data %*% t(data) - func = psi_CvM(d) - psi_q_acos = sapply(acos(temp[upper.tri(temp)]), func) - return(2/n*sum(psi_q_acos) + (3-2*n)/6) -} - -# Transformation von Einheitsvektoren in zirkuläre Daten via Bogenmaß (nur d = 2), siehe n-sphere auf Wiki -euclidtoangular <- function(unit_data){ - return(matrix(data = atan2(unit_data[,2], unit_data[,1]), ncol = 1)) -} - -# Kuiper-Teststatistik basierend auf Directional-Paket (nur d = 2) -Kuiper <- function(data){ - return(Directional::kuiper(euclidtoangular(data), rads = TRUE)[1]) -} - -# Watson-Teststatistik basierend auf Directional-Paket (nur d = 2) -Watson <- function(data){ - return(Directional::watson(euclidtoangular(data), rads = TRUE)[1]) -} - -# Alle Teststatistiken fuer MonteCarlo -ls_spher <- list(Ajne, Rayleigh, Bingham, Gine_G, Cuesta_Albertos_multi, CramerVonMises) - -# Alle Teststatistiken fuer MonteCarlo -ls_circ <- list(Kuiper, Watson, Ajne, Rayleigh, Cuesta_Albertos_multi) - -SpherComp_stat_value <- function(data, index){ - return(as.numeric(ls_spher[[index]](data))) -} - -CircComp_stat_value <- function(data, index){ - return(as.numeric(ls_circ[[index]](data))) -} - -T_LP <- function(n, dim, m, kappa, beta){ - return(list("Realisierung" = T_stat_value(data = rLP(n, m, c(1,rep(0,dim-1)), kappa), beta = beta))) -} - -SpherComp_LP <- function(n, dim, m, kappa, index){ - return(list("Realisierung" = SpherComp_stat_value(data = rLP(n, m, c(1,rep(0,dim-1)), kappa), index = index))) -} - -CircComp_LP <- function(n, dim, m, kappa, index){ - return(list("Realisierung" = CircComp_stat_value(data = rLP(n, m, c(1,rep(0,dim-1)), kappa), index = index))) -} - -################################################################################################# -## Berechnung kritischer Werte per Monte Carlo unter der Nullhypothese ## - -# Parameter -a = 5000 -numCores = 2 -n_grid = c(20, 50, 100, 500) -dim_grid = c(2, 3, 5, 10) -beta_grid = seq(1, 6) -m_grid = seq(2, 6) -kappa_grid = c(0.1, 0.5, 1) - -parameter = list("n" = n_grid, "dim" = dim_grid, "m" = m_grid, "kappa" = kappa_grid, "beta" = beta_grid) - -export_list = list("functions" = c("psi_d", "projection", "euclidtoangular", "F_CA", "Cuesta_Albertos_unique", "integrand", "psi_CvM"), - "packages" = c("MASS", "Directional", "zipfR"), - "data" = c("rdirections_2", "rdirections_3", "rdirections_5", "rdirections_10", "ls_circ", "ls_spher")) - -# T_n,beta - -parameter = list("n" = n_grid, "dim" = dim_grid, "m" = m_grid, "kappa" = kappa_grid, "beta" = beta_grid) - -res_T_LP_neu <- MonteCarlo::MonteCarlo(T_LP, nrep = a, param_list = parameter, - ncpus = numCores, max_grid = 1500, time_n_test = TRUE, export_also = export_list) -DF_T_LP_neu <- MonteCarlo::MakeFrame(res_T_LP_neu) -summary(DF_T_LP_neu) - -DT_T_LP_neu <- setDT(DF_T_LP_neu) -print(DT_T_LP_neu) - -DT_T_LP_neu[, grp := .GRP, by = c("n", "dim", "m", "kappa", "beta")] -DT_T_LP_neu = DT_T_LP_neu[order(grp)] -DT_T_LP_neu = na.omit(DT_T_LP_neu) - -# Konkurrierende Teststatistiken, d > 2 - -dim_grid = c(3, 5, 10) -index_grid = seq(1, 6) - -parameter = list("n" = n_grid, "dim" = dim_grid, "m" = m_grid, "kappa" = kappa_grid, "index" = index_grid) - -res_SpherComp_LP_neu <- MonteCarlo::MonteCarlo(SpherComp_LP, nrep = a, param_list = parameter, - ncpus = numCores, max_grid = 1500, export_also = export_list) -DF_SpherComp_LP_neu <- MonteCarlo::MakeFrame(res_SpherComp_LP_neu) -summary(DF_SpherComp_LP_neu) - -DT_SpherComp_LP_neu <- setDT(DF_SpherComp_LP_neu) -print(DT_SpherComp_LP_neu) - -DT_SpherComp_LP_neu[, grp := .GRP, by = c("n", "dim", "m", "kappa", "index")] -DT_SpherComp_LP_neu = DT_SpherComp_LP_neu[order(grp)] -DT_SpherComp_LP_neu = na.omit(DT_SpherComp_LP_neu) - -# Konkurrierende Teststatistiken, d = 2 - -dim_grid = c(2) -index_grid = seq(1, 5) - -parameter = list("n" = n_grid, "dim" = dim_grid, "m" = m_grid, "kappa" = kappa_grid, "index" = index_grid) - -res_CircComp_LP_neu <- MonteCarlo::MonteCarlo(CircComp_LP, nrep = a, param_list = parameter, - ncpus = numCores, export_also = export_list) -DF_CircComp_LP_neu <- MonteCarlo::MakeFrame(res_CircComp_LP_neu) -summary(DF_CircComp_LP_neu) - -DT_CircComp_LP_neu <- setDT(DF_CircComp_LP_neu) -print(DT_CircComp_LP_neu) - -DT_CircComp_LP_neu[, grp := .GRP, by = c("n", "dim", "m", "kappa", "index")] -DT_CircComp_LP_neu = DT_CircComp_LP_neu[order(grp)] -DT_CircComp_LP_neu = na.omit(DT_CircComp_LP_neu) - -save.image(file = "Powertest_LP_Alternative_Daten.RData") - -- GitLab