2017-07-19 4 views
0

J'ai une fonction R qui trace deux courbes de superposition pour les arguments utilisateur d, n1 et n2. Ces deux courbes (tracés) se rapportent à "d".détermination d'une plage pour afficher côte à côte deux distributions dynamiquement changeantes

Ma question est de savoir comment puis-je mieux mange la plage (à savoir, from et to au sein curve) de telle sorte que cette gamme permet toujours les deux courbes de montrer correctement?

J'ai essayé d'utiliser la règle: de =min.d = d-(15*d.SE)à =max.d = d+(15*d.SE) (où d.SE est l'erreur type de "d" Mais cette règle échoue dans de nombreuses situations..)

d.sampling = function(d, n1, n2 = NA){ 

    N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2)) 
    df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2) 
d.SE = 1/sqrt(N) 

min.d = d-(15*d.SE) ; max.d = d+(15*d.SE) 

curve(dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2) 

curve(dt(x*sqrt(N), df, d*sqrt(N))*sqrt(N), n = 1e4, lty = 2, col = 4, add = T) 

} 
# Example of use: 
d.sampling(n1 = 86, d = 1) # shows fine now, but change `d` to 2 and it fails 

Répondre

0

Est-ce que quelque chose comme ceci donnerait les résultats que vous attendez?

d.sampling = function(d, n1, n2 = NA){ 

    N = ifelse(is.na(n2), n1, (n1 * n2)/(n1 + n2)) 
    df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2) 
    d.SE = 1/sqrt(N) 

    min.d = d.SE*min(qt(0.0001, df), qt(0.0001, df, d*sqrt(N))) #d-(15*d.SE) 
    max.d = d.SE*max(qt(0.9999, df), qt(0.9999, df, d*sqrt(N))) #d+(15*d.SE) 

    curve(dt(x*sqrt(N), df)*sqrt(N), from = min.d, to = max.d, col = 2) 

    curve(dt(x*sqrt(N), df, d*sqrt(N))*sqrt(N), n = 1e4, lty = 2, col = 4, add = T) 

} 

# Example of use: 
d.sampling(n1 = 86, d = 2) 
+0

C'était moi de tricher un peu. Le 'x * sqrt (N)' dans vos appels à 'curve()' a pour effet de compresser la courbe de distribution t résultante d'un facteur de sqrt (N) dans la direction x. Je profitais du fait que 'd.SE == 1/sqrt (N)' pour redimensionner les valeurs quantiles pour les mettre dans les endroits appropriés sur l'échelle de la parcelle. –

+0

Honnêtement, j'ai commencé avec 'qt()' à l'esprit pour renvoyer des quantiles, puis je me suis baladé jusqu'à ce que je trouve quelque chose qui donne des limites de traçage raisonnables ... –