Avec les précautions suggérées par @ G.Grothendieck à l'esprit: un mnémotechnique utile pour des produits et des quotients de indépendants X et Y des variables est
CV^2(X/Y) = CV^2(X*Y) = CV^2(X) + CV^2(Y)
où CV
est le coefficient de variation (sd(X)/mean(X)
), de sorte CV^2
est Var/mean^2
. En d'autres termes
Var(Y/X)/(m(Y/X))^2 = Var(X)/m(X)^2 + Var(Y)/m(Y)^2
ou réorganisés
sd(Y/X) = sqrt[ Var(X)*m(Y/X)^2/m(X)^2 + Var(Y)*m(Y/X)^2/m(Y)^2 ]
Pour les variables aléatoires avec la moyenne loin de zéro, c'est une approximation raisonnable.
set.seed(101)
y <- rnorm(1000,mean=5)
x <- rnorm(1000,mean=10)
myx <- mean(y/x)
sqrt(var(x)*myx^2/mean(x)^2 + var(y)*myx^2/mean(y)^2) ## 0.110412
sd(y/x) ## 0.1122373
En utilisant votre exemple est bien pire parce que le CV de Y est proche de 1 - J'ai d'abord pensé qu'il avait l'air correct, mais maintenant je vois qu'il est partial et ne pas capturer la variabilité très bien (je m de brancher aussi dans les valeurs attendues de la moyenne et SD plutôt que leurs valeurs simulées, mais pour un si grand échantillon qui devrait être une partie mineure de l'erreur.)
me.x <- 4; sd.x <- 1
me.y <- 5; sd.y <- 4
myx <- me.y/me.x - 0/me.x^2 + sd.x*me.y/me.x^3
x <- rnorm(1e4,me.x,sd.x); y <- rnorm(1e4,me.y,sd.y)
c(myx,mean(y/x))
sdyx <- sqrt(sd.x^2*myx^2/me.x^2 + sd.y^2*myx^2/me.y^2)
c(sdyx,sd(y/x))
## 1.113172 1.197855
rvals <- replicate(1000,
sd(rnorm(1e4,me.y,sd.y)/rnorm(1e4,me.x,sd.x)))
hist(log(rvals),col="gray",breaks=100)
abline(v=log(sdyx),col="red",lwd=2)
min(rvals) ## 1.182698
Tous les mis en conserve méthode delta approches pour le calcul de la varia nce de Y/X utilise l'estimation ponctuelle pour Y/X (c.-à-d.m (Y/X) = mY/mX), plutôt que l'approximation de second ordre que vous avez utilisée ci-dessus. La construction de formes d'ordre supérieur pour la moyenne et la variance devrait être simple si peut-être fastidieux (un système d'algèbre informatique pourrait aider ...)
mvec <- c(x = me.x, y = me.y)
V <- diag(c(sd.x, sd.y)^2)
car::deltaMethod(mvec, "y/x", V)
## Estimate SE
## y/x 1.25 1.047691
library(emdbook)
sqrt(deltavar(y/x,meanval=mvec,Sigma=V)) ## 1.047691
sqrt(sd.x^2*(me.y/me.x)^2/me.x^2 + sd.y^2*(me.y/me.x)^2/me.y^2) ## 1.047691
Pour ce que ça vaut, je pris le code dans la réponse de @ SeverinPappadeux et fait en une fonction gratio(mx,my,sx,sy)
. Pour le cas de Cauchy (gratio(0,0,1,1)
), il devient confus et rapporte une moyenne de 0 (qui devrait être NA
/divergent) mais signale correctement la variance/std dev comme divergent. Pour les paramètres spécifiés par l'OP (gratio(5,4,4,1)
) il donne la moyenne = 1.352176, sd = NA comme ci-dessus. Pour les premiers paramètres que j'ai essayés ci-dessus (gratio(10,5,1,1)
) il donne la moyenne = 0.5051581, sd = 0.1141726.
Ces expériences numériques suggèrent fortement pour moi que le rapport de gaussiennes parfois a une variance bien définie, mais je ne sais pas quand (temps pour une autre question sur les mathématiques StackOverflow ou CrossValidated?)
Avez-vous regardé http://www.stat.cmu.edu/~hseltman/files/ratio.pdf? –
Oui, mais honnêtement, j'étais plus débordé que tout le reste. Pourriez-vous me tenir un peu la main et me montrer les premiers pas? –
Dans quelques heures? un peu occupé maintenant –