PROCEDIMIENTO PARA LA DETERMINACIÓN DEL TAMAÑO MUESTRAL

CONTENIDO

  • Introducción
  • Normas de uso de estos scripts
  • Generacion de funciones
  • Introduccion de parametros
  • Inicio de cálculos
  • Obtención de resultados
  • Cálculo de la Potencia para un Test de comparación de 2 grupos
  • Contenido Extra

INTRODUCCIÓN

Se quiere calcular el número necesario de observaciones necesarias para que los resultados de un estudio con las mismas tengan un error máximo prefijado. Este sería un error máximo admisible. Normalmente se conoce el universo muestral o una estima del mismo. Desde el número de organismos hasta una serie de habitats de los cuales conocemos su superficie ocupada o el número de cuadrículas que ocupa o el numero de masas de agua, lagos en el que está presente a escala global, nacional y/o por región biogeográfica. Imaginemos que queremos estimar qué proporción de un habitat cumple cierta caracter?stica. Podríamos recorrer todo el hábitat, tomar muestras de todos los habitantes de un país o una ciudad. Todas estas opciones serían muy costosas y, en ocasiones incluso imposible. Por lo tanto, se necesario e indispensable muestrear solo una parte. Pero… ¿cuál será el tamaño de esa muestra? Para responder a esta respuesta es necesario realizar una estimación del tamaño de la muestra para que ésta sea representativa. Así, para conocer qué número de observaciones debemos muestrear partiendo de un intervalo de confianza. El resultado será la proporción del hábitat a muestrear para que sea representativo del total. El intervalo de confianza, nos da una confianza fijada de antemano. Se suele denotar como 1-alpha, aunque se suele dar en tanto por cierto, (1-α)%, (1-alpha)% (a alpha o α se le denomina nivel de significación).

Por ejemplo, para un nivel de confianza del 95% (valor que se usa muy frecuentemente) alpha o α o error sería 0.05.

Los niveles de confianza habituales son #(99% - y un error del 1%) #(95% - y un error del 5%) #(90% - y un error del 10%) #(80% - y un error del 20%) #(60% - y un error del 40%).

Debemos establecer un nivel de confianza a priori.

El Universo o población son los puntos de muestreo (individuos, organimos, masas de agua, parcelas, cuadriculas), en este caso la referencia con que contamos es la superficie en km2 de cada habitat o las masas de agua n es el tamaño de muestra o numero de observaciones que queremos medir para un intervalo de confianza determinado a priori.

nivel de confianza \(p = 0.5\).

error \(e = 0.05\).

\(z = 1.96\) para el 95% de confiabilidad y 5% error. \(z = 1.65\) para el 90% de confiabilidad y 10% error.

En ocasiones desconocemos el tamaño de nuestro universo. No sabemos el número de parcelas, km2 o masas de agua. En ese caso el cálculo del tamaño muestral o el número de observaciones se calcula como \(p*q/e^2\). Si por contra conocemos el tamaño de dicho universo los calculos se basan en la formula:

\((N *(z)^2*p*(1-p))/(e^2*(N-1)+z^2*p*(1-p))\)

n es el tamaño de la muestra p es la probabilidad a favor o nivel de confianza q es la probabilidad en contra (q=1-p) Z es el nivel de confianza α es el nivel de significancia v es la varianza de una variable que se ha medido en un estudio previo sigma es la desviaci?n de esa misma variable

NORMAS DE USO DE ESTOS SCRIPTS

Estos scripts tienen una primera parte de introducción. A continuación se generan las funciones que van a emplearse. Estas funciones no deben ser editadas ni modificadas al no ser que se tengan conocimientos de R y de programación. Están disponibles para que el usuario pueda saber qué se está haciendo y puedan ser revisadas y corregidas si fuese necesario. En el apartado de introducción de los parámetros el usuario debe sustituir los valores existentes por los que disponga y a eliminar los que se muestran como ejemplo. Con los que hay establecidos como ejemplo, se puede ver como funcionan estos scripts, pero conviene eliminar los que no se disponga o haya decidido el usuario para evitar que se obtengan valores no adecuados ni vinculados al caso con el que se trabaja. Al trabajar con valores en blanco algunos scripts darán error. Esto debe ser así porque no ha podido calcular el tamaño muestral con los parametros que posee. A continuación seleccione su caso (con N conocido o desconocido) y ejecute (CTRL+r) una a una cada una de las líneas. El contenido Extra es para usuarios más avanzados y permiten ver valores centrales y de dispersión de las muestras, así como realizar un bootstrap.

GENERACIÓN DE FUNCIONES

NOTA: Desde esta línea y hasta la palabra final NO se puede editar nada. Las siguientes lineas deben ser ejecutadas en su totalidad hasta la palabra FINAL.Para ello debe seleccionarse todo hasta FINAL y clicar CRTL+INTRO, CTRL+r o RUN en RStudio

tamanomuestral1<-function (p,e)   {(p*(1-p))/(e^2)}
tamanomuestral2<-function (o,v)     {(o^2)/(v^2)}
tamanomuestral_corrected1a<-function (n1,N) {(n1)/(1+(n1/N))}
tamanomuestral_corrected2a<-function (n2,N) {(n2)/(1+(n2/N))}
tamanomuestral3a<-function (N,z,p,e) {(N *((z)^2)*p*(1-p))/(((e^2)*N)+(z^2)*p*(1-p))}
tamanomuestral3b<-function (N,z,p,e) {(N *((z)^2)*p*(1-p))/(((e^2)*(N-1))+((z^2)*p*(1-p)))}
tamanomuestral4<- function (N,z,o,e) {(N *((o)^2)*((z)^2))/(((e^2)*(N-1))+((o^2)*(z^2)))}
tamanomuestral5<- function (N,z,p,alpha) {ss = (z^2 * p * (1 - p))/(alpha^2)
          return(ss/(1 + ((ss - 1)/N))) }

sample.size.table = function(p, alpha, population) {
  z.val=c(1.281551565545, 1.644853626951, 1.959963984540,
          2.326347874041, 2.575829303549, 2.807033768344,
          3.090232306168, 3.290526731492, 3.890591886413)
  ss = (z.val^2 * p * (1-p))/(alpha^2)
  p.ss = ss/(1 + ((ss-1)/population))
  c.level = c("80%","90%","95%","98%","99%",
              "99.5%","99.8%","99.9%","99.99%")
  results = data.frame(c.level, round(p.ss, digits = 0))
  names(results) = c("Nivel de Confianza", "Tama?o Muestral")
  METHOD = c("Tama?o muestral sugerido a diferentes niveles de confianza")
  moe = paste((alpha*100), "%", sep="")
  resp.dist = paste((p*100),"%", sep="")
  pre = structure(list(N=population,
                       "Margen de Error" = moe,
                       "Distribuci?n de respuesta" = resp.dist,
                       method = METHOD),
                  class = "power.htest")
  print(pre)
  print(results)
}


sample.size = function(c.lev, p,
                           alpha=.05, N) 
  {
  if (c.lev==80) {
    z=1.281551565545
  } else if (c.lev==90) {
    z=1.644853626951
  } else if (c.lev==95) {
    z=1.959963984540
  } else if (c.lev==98) {
    z=2.326347874041
  } else if (c.lev==99) {
    z=2.575829303549
  } else if (c.lev==99.5) {
    z=2.807033768344
  } else if (c.lev==99.8) {
    z=3.090232306168
  } else if (c.lev==99.9) {
    z=3.290526731492
  } else if (c.lev==99.99) {
    z=3.890591886413
  }
  ss = (z^2 * p * (1-p))/alpha^2
  p.ss = round((ss/(1 + ((ss-1)/N))), digits=0)
  METHOD = paste("Tama?o de muestra recomendado para una poblaci?n de ",
                 N, " con un ", c.lev,
                 "% de nivel de confianza", sep = "")
  structure(list(Poblacion = N,
                 "Nivel de Confianza" = c.lev,
                 "Nivel de significancia" = alpha,
                 "Distribuci?n de respuesta" = p,
                 "Tama?o muestral recomendado" = p.ss,
                 method = METHOD),
            class = "power.htest")
}

sample.size.qnorm = function(c.lev, p=.5,
                       alpha=.05, N) {
  z = qnorm(.5+c.lev/200)
  ss = (z^2 * p * (1-p))/alpha^2
  p.ss = round((ss/(1 + ((ss-1)/N))), digits=0)
  METHOD = paste("Tama?o de muestra recomendado para una poblaci?n de ",
                 N, " con un ", c.lev,
                 "% de nivel de confianza", sep = "")
  structure(list(Population = N,
                 "Nivel de Confianza" = c.lev,
                 "Nivel de significancia" = alpha,
                 "Distribuci?n de respuesta" = p,
                 "Tama?o muestral recomendado" = p.ss,
                 method = METHOD),
            class = "power.htest")
}

INTRODUCCIÓN DE PARÁMETROS

A continuación punto deben introducirse los datos de que se disponga o que se decidan arbitrariamente Para ello se deben sustituir los valores de la lista que se muestra a continuación por los valores disponibles y dejar en blanco los otros.

El caso del ejemplo es de una población de N=1000 (observaciones, individuos, masas de agua, kilometros cuadrados, etc.) habitats.

En este caso, por ser el más frecuente se ha establecido una confianza del 95 %.

Modifique los siguientes par?metros de acuerdo a los de su proyecto y ejecútelos. Para ellos seleccionelos y clique \(CTRL+r\).

Nota: El signo decimal es el punto “.”.

Una vez hayan modificado los parametros de acuerdo a su caso ejecute (CTRL+R) las 8 lineas en las que están situados

p=0.5      #Distribución de respuesta o proporción de positivos
N=1000     #Tamaño de la poblacion 
e=0.05     #error muestral deseado
z=1.96     #la variable aleatoria normal estándar
o=0.2      #Sigma o desviación estandar 
v=0.04     #varianza
alpha=0.05 #Nivel de significancia
c.lev=95   #Nivel de confianza

NOTA: recuerde eliminar los parametros que no posee o desconoce.

INICIO DE LOS CÁLCULOS

Obtención de resultados

Ejecute (CTRL+r) los scripts que desee según su caso para obtener los resultados.

N desconocida

Metodo 1

No se conocen N, σ ni v.

tamanomuestral1<-function (p,e)   {(p*(1-p))/(e^2)}
n1<-tamanomuestral1 (p,e)
n1
## [1] 100

Metodo 2

No se conocen N, p ni e.

tamanomuestral2<-function (o,v)  {(o^2)/(v^2)}
n2<-tamanomuestral2 (o,v)
n2
## [1] 25

N conocida

Metodo 3

Se conoce N pero no se conocen σ ni v.

tamanomuestral_corrected1a<-function (n1,N) {(n1)/(1+(n1/N))}
n1a<-tamanomuestral_corrected1a (n1,N)
n1a
## [1] 90.90909

Metodo 4

Se conocen N, σ y v

tamanomuestral_corrected2a<-function (n2,N) {(n2)/(1+(n2/N))}
n2a<-tamanomuestral_corrected2a (n2,N)
n2a
## [1] 24.39024

Metodo 5

Se conoce N pero no se conocen σ ni v

tamanomuestral3a<-function (N,z,p,e) {(N *((z)^2)*p*(1-p))/(((e^2)*N)+(z^2)*p*(1-p))}
n3a<-tamanomuestral3a (N,z,p,e) 
n3a
## [1] 277.5402

Metodo 6

Se conoce N pero no se conocen σ ni v

tamanomuestral3b<-function (N,z,p,e) {(N *((z)^2)*p*(1-p))/(((e^2)*(N-1))+((z^2)*p*(1-p)))}
n3b<-tamanomuestral3b (N,z,p,e)
n3b
## [1] 277.7408

Metodo 7

Se conoce N, σ y v

tamanomuestral4<- function (N,z,o,e) {(N *((o)^2)*((z)^2))/(((e^2)*(N-1))+((o^2)*(z^2)))}
n4 <-tamanomuestral4  (N,z,o,e)
n4
## [1] 57.96096

Metodo 8

Se conoce N, α y v

tamanomuestral5<- function (N,z,p,alpha) {ss = (z^2 * p * (1 - p))/(alpha^2) 
              return(ss/(1 + ((ss - 1)/N))) }
n5 <-tamanomuestral5  (N,z,p,alpha) 
n5
## [1] 277.7408

A continuación puede redondenar los resultados obtenidos, ya que para redondear los valores obtenidos.

n1<-ceiling(n1)
n2<-ceiling(n2)
n1a<-ceiling(n1a)
n2a<-ceiling(n2a)
n3a<-ceiling(n3a)
n3b<-ceiling(n3b)
n4<-ceiling(n4)
n5<-ceiling(n5)

OBTENCIÓN DE RESULTADOS

Finalmente puede obtener tablas y presentaciones de resultados. Simplemente ejecute (CTRL+r) cada uno de los resultaos que desea visualizar.

n1
## [1] 100
n2
## [1] 26
n1a
## [1] 91
n2a
## [1] 25
n3a
## [1] 278
n3b
## [1] 278
n4
## [1] 58
n5
## [1] 278

Tablas y presentacion en modo esquema:

sample.size.qnorm (c.lev, p, alpha, N)
## 
##      Tama?o de muestra recomendado para una poblaci?n de 1000 con un 95% de nivel de confianza 
## 
##                  Population = 1000
##          Nivel de Confianza = 95
##      Nivel de significancia = 0.05
##   Distribuci?n de respuesta = 0.5
## Tama?o muestral recomendado = 278
tamano.muestral.table = function(p, alpha, population) {
  z.val=c(1.281551565545, 1.644853626951, 1.959963984540,
          2.326347874041, 2.575829303549, 2.807033768344,
          3.090232306168, 3.290526731492, 3.890591886413)
  ss = (z.val^2 * p * (1-p))/(alpha^2)
  p.ss = ss/(1 + ((ss-1)/population))
  c.level = c("80%","90%","95%","98%","99%",
              "99.5%","99.8%","99.9%","99.99%")
  results = data.frame(c.level, round(p.ss, digits = 0))
  names(results) = c("Nivel de Confianza", "Tamano Muestral")
  METHOD = c("Tamano muestral sugerido a diferentes niveles de confianza")
  moe = paste((alpha*100), "%", sep="")
  resp.dist = paste((p*100),"%", sep="")
  pre = structure(list(N=population,
                       "Margen de Error" = moe,
                       "Distribucion de respuesta" = resp.dist,
                       method = METHOD),
                  class = "power.htest")
  print(pre)
  print(results)
}

Para mostrar la tabla:

tamano.muestral.table(p,alpha,N)
## 
##      Tamano muestral sugerido a diferentes niveles de confianza 
## 
##                         N = 1000
##           Margen de Error = 5%
## Distribucion de respuesta = 50%
## 
##   Nivel de Confianza Tamano Muestral
## 1                80%             141
## 2                90%             213
## 3                95%             278
## 4                98%             351
## 5                99%             399
## 6              99.5%             441
## 7              99.8%             489
## 8              99.9%             520
## 9             99.99%             602
tamano.muestral.qnorm = function(c.lev, p=.5,
                       alpha=.05, N) {
  z = qnorm(.5+c.lev/200)
  ss = (z^2 * p * (1-p))/alpha^2
  p.ss = round((ss/(1 + ((ss-1)/N))), digits=0)
  METHOD = paste("Tamano de muestra recomendado para una poblacion de ",
                 N, " con un ", c.lev,
                 "% de nivel de confianza", sep = "")
  structure(list(Population = N,
                 "Nivel de Confianza" = c.lev,
                 "Nivel de significancia" = alpha,
                 "Distribuci?n de respuesta" = p,
                 "Tama?o muestral recomendado" = p.ss,
                 method = METHOD),
            class = "power.htest")
}
sample.size (c.lev, p, alpha, N)
## 
##      Tama?o de muestra recomendado para una poblaci?n de 1000 con un 95% de nivel de confianza 
## 
##                   Poblacion = 1000
##          Nivel de Confianza = 95
##      Nivel de significancia = 0.05
##   Distribuci?n de respuesta = 0.5
## Tama?o muestral recomendado = 278

CALCULO DE LA POTENCIA PARA UN TEST DE COMPARACIÓN DE 2 GRUPOS

muA, muB, sd tau, beta y alpha deben ser determinados por el usuario y obtenidos de las muestras

muA=5
muB=10
sd=10
tau=1
alpha=0.05
beta=0.20

(n=2*(sd*(qnorm(1-alpha/(2/tau))+qnorm(1-beta))/(muA-muB))^2)
## [1] 62.79104
ceiling(n)
## [1] 63
z=(muA-muB)/(sd*sqrt(2/n))
(Power=pnorm(z-qnorm(1-alpha/(2/tau)))+pnorm(-z-qnorm(1-alpha/(2/tau))))
## [1] 0.800001

CONTENIDO EXTRA

MEDIDAS CENTRALES

Media \(mean(var01)\)

Mediana \(median(var01)\)

Moda \(mode(var01)\)

MEDIDAS DE DISPERSIÓN

Varianza
\(var (var01)\)

Desviación estandar \(sd()\)

Rango \(range()\)

Valor máximo \(max()\)

Valor mínimo \(min(var01)\)

Covarianza \(cor(var01,var02)\)

Rango \(rank(var01)\)

Ordena los datos de la variable \(sort(var01)\)

Muestras la estructura y características de los datos de la variable \(str(var01)\)

La función summary muestra algunas de estas medidas
\(summary(var01)\)

REMUESTREO o BOOTSTRAP

data es la tabla: encabezado TRUE. Es necesario crear una tabla y guardarla como texto separada por tabulaciones con la primera linea de encabezados y la primera columna de nombres que no pueden repetirse

data<-read.table( "H:/R_package_SampleSizeR/project/data/datos.txt", dec=".", header=TRUE)

motrar la tabla

data
##     peso_g
## 1   6.8826
## 2   6.9622
## 3   7.1246
## 4   8.0873
## 5   8.0039
## 6   9.0433
## 7   7.9671
## 8   9.9276
## 9   7.2570
## 10  9.3477
## 11  8.2650
## 12  8.5830
## 13  8.3643
## 14  9.6232
## 15  8.4065
## 16 11.8061
## 17 12.7649
## 18 12.2004
## 19 11.7091
## 20 12.4987
## 21 11.0424
## 22 10.7354
## 23 11.1323
## 24  9.6648
## 25 10.6683
## 26 11.3042
## 27 12.2843
## 28 11.5242
## 29 12.9647

referir variables de la tabla por sus nombres

attach(data)
names(data)
## [1] "peso_g"

para mostrar un resumen de los datos:

summary(data)
##      peso_g      
##  Min.   : 6.883  
##  1st Qu.: 8.265  
##  Median : 9.665  
##  Mean   : 9.867  
##  3rd Qu.:11.524  
##  Max.   :12.965

Imaginemos que tenemos sólo 30 observaciones y queremos hacer un bootstrap para incrementarlas md es decir numerico de 1 a 100 (100 es el número de NAs que tengo, espacios sin datos o el númeor de datos que quiero obtener)

md <- numeric(100)
for (i in 1:100){
 
md [i] <- (sample(peso_g,replace=T)) }

md es decir sample columna var replace (volver a poner)

mostrar los creados

md
##   [1]  9.0433 12.2004  8.5830  9.3477 11.3042 11.1323  8.5830  7.9671 11.1323
##  [10] 11.8061  8.0039  9.6648  6.8826  8.0039 10.7354  9.6648  7.2570  9.9276
##  [19]  9.3477  6.8826 10.7354  8.5830 11.3042  7.2570  9.6232 12.2004  8.3643
##  [28]  9.6648  6.9622  8.2650 11.8061  7.2570  7.9671  9.9276  8.2650 11.0424
##  [37]  8.2650  6.8826  9.9276  8.4065  9.0433  6.9622 12.9647  6.8826 11.3042
##  [46] 12.4987 11.5242 10.6683 12.4987  8.3643 11.5242  9.6232 12.7649 11.0424
##  [55]  9.6232 12.9647 10.6683  8.2650  8.5830  8.4065 12.9647  8.5830 12.2004
##  [64]  7.9671  7.1246 12.7649  9.6648  9.9276  9.6648  9.6232 12.7649 12.4987
##  [73]  9.3477  9.6648  7.2570 11.0424  7.1246  6.9622 11.7091  6.9622 12.4987
##  [82]  9.9276 11.1323  7.2570 11.1323 11.0424  8.0039  8.2650 11.1323 10.7354
##  [91] 11.3042  9.6648  8.0039  8.0873  8.0873  7.9671 10.7354 12.2004 10.6683
## [100]  8.0039

guardar los datos creados

write.table(md,"nuevos_datos.txt")