es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Repetir un bucle for en R X veces y guardar cada valor en un vector.

Tengo el siguiente código que es una función que repite una prueba t 100 veces para producir un valor de potencia necesario a partir de grupos de muestra aleatorios (grp1 y grp2). Lo que quiero hacer es repetir esta función X veces (donde X es un valor ingresado por el usuario) y capturar el valor (en este caso pwr) cada vez en un vector. He probado con las funciones repeat y lapply, pero estoy obteniendo ya sea el mismo valor repetido o nada en absoluto. ¿Alguien podría ayudarme a orientarme para lograr lo que quiero hacer?

“`{R}
fun <- function (n1, n2, mu1, mu2, sig1, sig2, reps) {
grp1 <- matrix(rnorm(reps<em>n1, mu1, sig1), nrow = n1, ncol = reps) # Generar grupo 1 aleatorio
grp2 <- matrix(rnorm(reps</em>n2, mu2, sig2), nrow = n2, ncol = reps) # Generar grupo 2 aleatorio
pvals <- NULL
for (i in 1:reps) {
pvals[i] <- t.test(grp1[,i], grp2[,i])$p.value
}
pwr <- sum(pvals < 0.05)/reps
print(pwr)
}

<pre><code><br />Ejemplo de respuesta después de ejecutar el código anterior:
“`{R}
fun(20, 30, 25, 32, 15, 20, 100)
[1] 0.24 # < – Este es el valor final que quiero repetir 1000 veces y colocar en un vector

Ejemplo de respuesta de lo que quiero:
{R}
[1] 0.48 0.42 0.68 0.17 0.2 0.97 0.95 0.53 0.42 0.61 0.64 0.62 0.42 0.40 0.57 0.50
...
...
...
[997] 0.85 0.37 0.40 0.67

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para capturar el valor pwr X número de veces en un vector, podemos utilizar la función replicate(). La función replicate() toma el número de repeticiones X como su primer argumento, seguido de la función que se replicará, que en este caso es fun() con sus argumentos.

    Podemos modificar ligeramente la función fun() para que devuelva el valor pwr en lugar de imprimirlo. Luego, podemos usar replicate() de la siguiente manera para generar un vector de valores pwr:

    “`{r}
    fun <- function(n1, n2, mu1, mu2, sig1, sig2, reps) {
    grp1 <- matrix(rnorm(repsn1, mu1, sig1), nrow = n1, ncol = reps)
    grp2 <- matrix(rnorm(reps
    n2, mu2, sig2), nrow = n2, ncol = reps)
    pvals <- NULL
    for (i in 1:reps) {
    pvals[i] <- t.test(grp1[,i], grp2[,i])$p.value
    }
    pwr <- sum(pvals < 0.05)/reps
    return(pwr)
    }

    set.seed(123) # para reproducibilidad
    X <- 1000 # número de veces que se ejecutará la prueba t

    pwr_values <- replicate(X, fun(20, 30, 25, 32, 15, 20, 100))

    pwr_values # muestra los valores de pwr
    “`

    Esto generará un vector pwr_values con X número de valores pwr, cada uno calculado al ejecutar la función fun() reps número de veces con n1=20, n2=30, mu1=25, mu2=32, sig1=15 y sig2=20.

    Nota: añadimos set.seed(123) para garantizar la reproducibilidad de la aleatorización en fun(). Si no establece la semilla, obtendrá valores diferentes (aleatorios) cada vez que ejecute el código.

Comments are closed.