Processing math: 100%

5 votos

Generación de datos con un ratio de predefinidos

Tengo que simular (en javascript) la probabilidad de que los miembros de una determinada población tendría una enfermedad, dado un valor contextual. Toda la información que tenemos proviene de los documentos que muestran los odds ratios con 95% intervalo de confianza.

He encontrado Box-Muller método y otros enfoques para la distribución normal, pero no me doy cuenta de la forma de generar números aleatorios con O, CI porcentaje y el intervalo.

4voto

Niall Puntos 51

Parece que estás preguntando cómo generar bivariado de datos binarios con un pre-especificado odds ratio. Aquí voy a describir cómo se puede hacer esto, como usted puede generar un discretas variables aleatorias (como se describe aquí), por ejemplo.

Si desea generar datos con un determinado odds ratio, estamos hablando de los binarios que viene de una 2×2 tabla, por lo que la distribución normal no es relevante. Deje X,Y ser los dos resultados binarios; el 2×2 tabla puede ser parametrizado en términos de la célula probabilidades de pij=P(Y=i,X=j). Los parámetros de p11,p01,p10 será suficiente, ya que p00=1p11p01p10.

Se puede demostrar que hay un 1-a-1 es invertible asignación de {p11,p01,p10}{MX,MY,OR} donde MX=p11+p01,MY=p11+p10 son las probabilidades marginales y OR es el odds ratio.

Es decir, podemos mapa de ida y vuelta entre el {celular probabilidades de } { las probabilidades marginales y Odds ratio}. El uso de este hecho, se puede generar bivariado de datos binarios con un pre-especificado odds ratio. Este resto de esta respuesta tendrá que caminar a través de ese proceso y el suministro de algunos crudo, R código para llevarlo a cabo

El '' es bastante simple; para generar datos con un determinado odds ratio usted tiene para invertir esta asignación. Para un valor fijo de MX,MY, tenemos

log(OR)=log(p11)+log(1MYMX+p11)log(MYp11)log(MXp11).

Es un hecho que

max(0,MX+MY1)p11min(MX,MY).

Como p11 se mueve a través de este rango, OR aumenta monótonamente desde 0 a , por lo que existe una única raíz de

log(p11)+log(1MYMX+p11)log(MYp11)log(MXp11)log(OR)

como una función de la p11. Después de la resolución de esta raíz, p10=MYp11p01=MXp11p00=1p11p01p10, punto en el cual tenemos la celda de probabilidades y el problema se reduce a simplemente generar discretas variables aleatorias.

El ancho del intervalo de confianza será una función de la cantidad de glóbulos rojos así que se necesita más información para, precisamente, reproducir los resultados.

Aquí hay algunos crudo, R código para generar los datos como se especifica anteriormente.

 # return a 2x2 table of n outcomes with row marginal prob M1, column marginal prob 
 # M2, and odds ratio OR
 f = function(n, M1, M2, OR)
 {
    # find p11
    g = function(p) log(p) + log(1-M1-M2+p) - log(M1-p) - log(M2-p) - log(OR)
    br = c( max(0,M1+M2-1), min(M1,M2) ) 
    p11 = uniroot(g, br)$root

    # fill in other cell probabilities
    p10 = M1 - p11
    p01 = M2 - p11
    p00 = 1-p11-p10-p01

    # generate random numbers with those cell probabilities
    x = runif(n)
    n11 = sum(x < p11)
    n10 = sum(x < (p11+p10)) - n11 
    n01 = sum(x < (p11+p10+p01)) - n11 - n10
    n00 = n - (n11+n10+n01)

    z = matrix(0,2,2)
    z[1,] = c(n11,n10)
    z[2,] = c(n01,n00)

    return(z)
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X