Ich arbeite an einem Forschungsprojekt, bei dem ich die Äquivalenz zweier Verteilungen bestimmen möchte. Ich verwende derzeit den Mann-Whitney-Test für Äquivalenz, und der Code, den ich führe (unten), wurde mit dem Buch Testing Statistical Hypotheses of Equivalence and Noninferiority von Stefan Wellek (2010) bereitgestellt. Vor dem Ausführen meiner Daten teste ich diesen Code mit zufälligen Normalverteilungen, die den gleichen Mittelwert und die Standardabweichung haben. Mein Problem ist, dass es drei verschachtelte For-Schleifen gibt und wenn größere Distributionsgrößen ausgeführt werden (wie im Beispiel unten), dauert es ewig, bis der Code ausgeführt wird. Wenn ich es nur einmal ausführen müsste, wäre das kein Problem, aber ich mache einen Simulationstest und erstelle Leistungskurven, so dass ich viele Iterationen dieses Codes (etwa 10.000) ausführen muss. Im Moment dauert es, je nachdem, wie ich die Verteilungsgrößen verändere, bis zu 10.000 Iterationen.Verschachtelte For-Schleifen in R effizienter machen
Jede Hilfe in einer Weise, die Leistung von diesem zu erhöhen, würde sehr geschätzt werden.
x <- rnorm(n=125, m=3, sd=1)
y <- rnorm(n=500, m=3, sd=1)
alpha <- 0.05
m <- length(x)
n <- length(y)
eps1_ <- 0.2 #0.1382 default
eps2_ <- 0.2 #0.2602 default
eqctr <- 0.5 + (eps2_-eps1_)/2
eqleng <- eps1_ + eps2_
wxy <- 0
pihxxy <- 0
pihxyy <- 0
for (i in 1:m)
for (j in 1:n)
wxy <- wxy + trunc(0.5*(sign(x[i] - y[j]) + 1))
for (i in 1:m)
for (j1 in 1:(n-1))
for (j2 in (j1+1):n)
pihxyy <- pihxyy + trunc(0.5*(sign(x[i] - max(y[j1],y[j2])) + 1))
for (i1 in 1:(m-1))
for (i2 in (i1+1):m)
for (j in 1:n)
pihxxy <- pihxxy + trunc(0.5*(sign(min(x[i1],x[i2]) - y[j]) + 1))
wxy <- wxy/(m*n)
pihxxy <- pihxxy*2/(m*(m-1)*n)
pihxyy <- pihxyy*2/(n*(n-1)*m)
sigmah <- sqrt((wxy-(m+n-1)*wxy**2+(m-1)*pihxxy+(n-1)*pihxyy)/(m*n))
crit <- sqrt(qchisq(alpha,1,(eqleng/2/sigmah)**2))
if (abs((wxy-eqctr)/sigmah) >= crit) rej <- 1
if (abs((wxy-eqctr)/sigmah) < crit) rej <- 0
if (is.na(sigmah) || is.na(crit)) rej <- 1
MW_Decision <- rej
cat(" ALPHA =",alpha," M =",m," N =",n," EPS1_ =",eps1_," EPS2_ =",eps2_,
"\n","WXY =",wxy," SIGMAH =",sigmah," CRIT =",crit," REJ=",MW_Decision)
Nur um uns zu helfen, gibt es irgendwelche Linien insbesondere können Sie darauf hinweisen, dass Sie lange brauchen? – giraffehere
Zusätzlich können einige der "Apply" -Funktionen hilfreich sein. Vielleicht können Sie Ihren pihxyy Ausdruck in 'lapply' oder' sapply' verpacken. – giraffehere
Könnten Sie einfach die integrierte Funktion wilcox.test verwenden? – Dave2e