Jeff_Lischer@mksinst.com
2000-Dec-28 17:18 UTC
[R] Dynamic Memory Allocation Errors in 1.2.0?
Let me first say I'm new to R and new to this mail list, so I apologize ahead if this issue has already been discussed here. The dynamic memory allocation of 1.2.0 seems to be an improvement over the static allocation of 1.1.1. However, I have run across at least one case where the dynamic allocation might be corrupting my results. I am interested in calculating the 95% confidence margins of performance results based on the number of wins, draws, and losses in a match. For example, for a match with 10 wins, 20 draws, and 10 losses, the observed performance is 50% and the 95% margins are about (39.0%, 61.0%). I wrote the following simple file to calculate these margins using the ABC method from Resampling: # main function to calculate margins based on ABC method margins.abc <- function(W,D,L) { # Create arrays with correct number of wins, draws, and losses w <- rep(1.0,W) d <- rep(0.5,D) l <- rep(0.0,L) # Call abcnon with the mean as the function being used results.abc <<- abcnon(c(w,d,l),function(p,x) {sum(p*x)/sum(p)}, alpha = c(0.025, 0.975)) print("Actual Results") print(c(results.abc$stats$t0)) print("Estimated 95% Margins") results.abc$limits } The 'abcnon' routine is from the 'bootstrap' package and it also calculates the margins based on standard theory so you can easily see the difference between standard and ABC margins. In R 1.1.1, my file always seems to work just fine. However, when I run the same file in 1.2.0 I get incorrect results when the number of games in the match is large. ** Score ** ************** 95 % Margins (%) ************* W/D/L Standard 1.1.1 1.2.0 10/20/10 (39.0, 61.0) (39.0, 61.0) (39.0, 61.0) 100/200/100 (46.5, 53.5) (46.5, 53.5) (46.5, 53.5) 400/800/400 (48.3, 51.7) (48.3, 51.7) (45.8, 49.2) 800/1600/800 (48.8, 51.2) (48.8, 51.2) (52.8, 55.8) The 1.1.1 results are always the same as the standard results, which is correct for these symmetric cases. The 1.2.0 results, however, are meaningless for the largest two cases as they don't even enclose the observed result of 50%. My guess is that some critical data is getting written over by the dynamic memory allocation. I got the same results on Windows 98 and Windows NT with various settings of the min/max/vsize/nsize parameters. I also tried using the 'abc.ci' routine from the 'boot' package but got similar results for large matches. Has anyone else observed this behaviour in 1.2.0? Is there anything I can do differently to prevent it from happening? Until I figure this out, I will stay with 1.1.1 -- I don't want to be always worrying about the validity of the 1.2.0 results. ______________________________ D. Jeffrey Lischer, Ph.D. Principal Mechanical Engineer MKS Instruments, Inc. E-Mail: Jeff_Lischer at mksinst.com -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
>>>>> Jeff Lischer writes:> Let me first say I'm new to R and new to this mail list, so I apologize > ahead if this issue has already been discussed here.> The dynamic memory allocation of 1.2.0 seems to be an improvement over the > static allocation of 1.1.1. However, I have run across at least one case > where the dynamic allocation might be corrupting my results. I am > interested in calculating the 95% confidence margins of performance results > based on the number of wins, draws, and losses in a match. For example, for > a match with 10 wins, 20 draws, and 10 losses, the observed performance is > 50% and the 95% margins are about (39.0%, 61.0%).> I wrote the following simple file to calculate these margins using the ABC > method from Resampling:> # main function to calculate margins based on ABC method > margins.abc <- function(W,D,L) { > # Create arrays with correct number of wins, draws, and losses > w <- rep(1.0,W) > d <- rep(0.5,D) > l <- rep(0.0,L)> # Call abcnon with the mean as the function being used > results.abc <<- abcnon(c(w,d,l),function(p,x) {sum(p*x)/sum(p)}, > alpha = c(0.025, 0.975))> print("Actual Results") > print(c(results.abc$stats$t0)) > print("Estimated 95% Margins") > results.abc$limits > }> The 'abcnon' routine is from the 'bootstrap' package and it also calculates > the margins based on standard theory so you can easily see the difference > between standard and ABC margins. In R 1.1.1, my file always seems to work > just fine. However, when I run the same file in 1.2.0 I get incorrect > results when the number of games in the match is large.> ** Score ** ************** 95 % Margins (%) ************* > W/D/L Standard 1.1.1 1.2.0> 10/20/10 (39.0, 61.0) (39.0, 61.0) (39.0, 61.0) > 100/200/100 (46.5, 53.5) (46.5, 53.5) (46.5, 53.5) > 400/800/400 (48.3, 51.7) (48.3, 51.7) (45.8, 49.2) > 800/1600/800 (48.8, 51.2) (48.8, 51.2) (52.8, 55.8)> The 1.1.1 results are always the same as the standard results, which > is correct for these symmetric cases. The 1.2.0 results, however, are > meaningless for the largest two cases as they don't even enclose the > observed result of 50%. My guess is that some critical data is getting > written over by the dynamic memory allocation. I got the same results > on Windows 98 and Windows NT with various settings of the > min/max/vsize/nsize parameters. I also tried using the 'abc.ci' > routine from the 'boot' package but got similar results for large > matches.> Has anyone else observed this behaviour in 1.2.0? Is there anything I > can do differently to prevent it from happening? Until I figure this > out, I will stay with 1.1.1 -- I don't want to be always worrying > about the validity of the 1.2.0 results.On Debian GNU/Linux, I get R> margins.abc(400, 800, 400) [1] "Actual Results" [1] 0.5 [1] "Estimated 95% Margins" alpha abc stan [1,] 0.025 0.4826762 0.4826762 [2,] 0.975 0.5173238 0.5173238 R> margins.abc(800, 1600, 800) [1] "Actual Results" [1] 0.5 [1] "Estimated 95% Margins" alpha abc stan [1,] 0.025 0.4877502 0.4877502 [2,] 0.975 0.5122498 0.5122498 which seems right. Maybe this is only a problem on Windows? -k -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._