Dear all Please, can you advice me how to compute an error, standard deviation or another measure of variability of computed value. I would like to do something like: var(y) = some.function(var(x1),var(x2),var(x3)) for level F1 (2,3,...) Let say I have some variables - x1, x2, x3 (two computed for levels of factor F and one which is same for all levels) and I want to compute y = f(x1,x2,x3) for some levels of factor F I can compute variation of variables for levels of F, I know a variation of one variable but I am not sure how to transfer it to variation of y within respective levels. I found some methods which I can use but I wonder if there is some method implemented in R (Manly B.F. Biom.J.28,949,(1986), some local statistical books available to me). I have a feeling I could use bootstrap method for this but I am not sure how. Thank you and merry Christmas to all Petr Pikal petr.pikal at precheza.cz
Thomas W Blackwell
2003-Dec-22 13:56 UTC
[R] error propagation - hope it is correct subject
Petr - Very briefly, I think of three ways to approximate the standard deviation of y = f(x1,x2,x3). (1) linearise f() and use the covariance matrix of [x1,x2,x3]. (2) simulate draws from the joint distribution of [x1,x2,x3], then compute the sample std dev of resulting f()s. (3) go back to the original data set from which [x1,x2,x3] were estimated as parameters, re-sample rows with replacement, estimate [x1,x2,x3] and compute f, then take sample std dev. Other names for these three would be (1) the "delta method" or Taylor series expansion, (2) parametric bootstrap, (3) bootstrap. Different choices are appropriate in different situations. If the std devs of x1,x2,x3 are small relative to the curvature (2nd derivative) in f(), then use (1) and compute by matrix algebra Var(f(x1,x2,x3)) approx t(grad f) %*% Cov(x1,x2,x3) %*% grad f. If the curvature in f() is an issue, use (2) with draws of x1,x2,x3 from some parametric distribution (eg, rnorm()) with each component properly conditioned on the ones already drawn. Only if there were no set of intermediate parameters [x1,x2,x3] would I use (3) to get the precision of f directly. I'm sure Brad Efron would say something different. (3) is the only one that is canned in R, simply because the other two are practically one-liners. - tom blackwell - u michigan medical school - ann arbor - On Mon, 22 Dec 2003, Petr Pikal wrote:> Dear all > > Please, can you advice me how to compute an error, standard deviation or > another measure of variability of computed value. > > I would like to do something like: > > var(y) = some.function(var(x1),var(x2),var(x3)) > > for level F1 (2,3,...) > > Let say I have some variables - x1, x2, x3 (two computed for levels of factor F > and one which is same for all levels) and I want to compute > > y = f(x1,x2,x3) > > for some levels of factor F > > I can compute variation of variables for levels of F, I know a variation of one > variable but I am not sure how to transfer it to variation of y within respective > levels. > > I found some methods which I can use but I wonder if there is some method > implemented in R (Manly B.F. Biom.J.28,949,(1986), some local statistical books > available to me). > > I have a feeling I could use bootstrap method for this but I am not sure how. > > Thank you and merry Christmas to all > > Petr Pikal > petr.pikal at precheza.cz > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help >
Hallo Thomas Thank you for your answer, even I am not sure how to do it in R (or maybe at all). My mathematics background is only faint so I drop the first possibility which is for me rather cryptic. Does your second suggestion mean: 1: compute random variable y <- f(rnorm(n,mymeanx1,mysdx1), rnorm(n,mymeanx2, ...), ...) according to my function f (based on assumption x variables values can be considered normally distributed and and independent) 2: sd(y) can be considered as variation of y? Or is it necessary to do something like vysled<-NULL for (i in 1:300) vysled[i]<-sd(sample(y,100)) mean(vysled) to get bootstraped estimation of sd(y) My actual data have some missing values and some outliers which I can either remove or to use some robust statistics for mean and variation estimates. Thank you and have a nice Christmas Petr On 22 Dec 2003 at 8:56, Thomas W Blackwell wrote:> Petr - > > Very briefly, I think of three ways to approximate the standard > deviation of y = f(x1,x2,x3). > > (1) linearise f() and use the covariance matrix of [x1,x2,x3]. > (2) simulate draws from the joint distribution of [x1,x2,x3], > then compute the sample std dev of resulting f()s. > (3) go back to the original data set from which [x1,x2,x3] were > estimated as parameters, re-sample rows with replacement, > estimate [x1,x2,x3] and compute f, then take sample std dev. > > Other names for these three would be (1) the "delta method" or > Taylor series expansion, (2) parametric bootstrap, (3) bootstrap. > > Different choices are appropriate in different situations. > > If the std devs of x1,x2,x3 are small relative to the curvature > (2nd derivative) in f(), then use (1) and compute by matrix algebra > > Var(f(x1,x2,x3)) approx t(grad f) %*% Cov(x1,x2,x3) %*% grad f. > > If the curvature in f() is an issue, use (2) with draws of x1,x2,x3 > from some parametric distribution (eg, rnorm()) with each component > properly conditioned on the ones already drawn. > > Only if there were no set of intermediate parameters [x1,x2,x3] > would I use (3) to get the precision of f directly. I'm sure > Brad Efron would say something different. (3) is the only one > that is canned in R, simply because the other two are practically > one-liners. > > - tom blackwell - u michigan medical school - ann arbor - > > On Mon, 22 Dec 2003, Petr Pikal wrote: > > > Dear all > > > > Please, can you advice me how to compute an error, standard > > deviation or another measure of variability of computed value. > > > > I would like to do something like: > > > > var(y) = some.function(var(x1),var(x2),var(x3)) > > > > for level F1 (2,3,...) > > > > Let say I have some variables - x1, x2, x3 (two computed for levels > > of factor F and one which is same for all levels) and I want to > > compute > > > > y = f(x1,x2,x3) > > > > for some levels of factor F > > > > I can compute variation of variables for levels of F, I know a > > variation of one variable but I am not sure how to transfer it to > > variation of y within respective levels. > > > > I found some methods which I can use but I wonder if there is some > > method implemented in R (Manly B.F. Biom.J.28,949,(1986), some local > > statistical books available to me). > > > > I have a feeling I could use bootstrap method for this but I am not > > sure how. > > > > Thank you and merry Christmas to all > > > > Petr Pikal > > petr.pikal at precheza.cz > > > > ______________________________________________ > > R-help at stat.math.ethz.ch mailing list > > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > > > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-helpPetr Pikal petr.pikal at precheza.cz