## Introducing ‘propagate’

With this post, I want to introduce the new ‘propagate’ package on CRAN.
It has one single purpose: propagation of uncertainties (“error propagation”). There is already one package on CRAN available for this task, named ‘metRology’ (http://cran.r-project.org/web/packages/metRology/index.html).
‘propagate’ has some additional functionality that some may find useful. The most important functions are:

* propagate: A general function for the calculation of uncertainty propagation by first-/second-order Taylor expansion and Monte Carlo simulation including covariances. Input data can be any symbolic/numeric differentiable expression and data based on replicates, summaries (mean & s.d.) or sampled from a distribution. Uncertainty propagation is based completely on matrix calculus accounting for full covariance structure. Monte Carlo simulation is conducted using multivariate normal or t-distributions with covariance structure. The second-order Taylor approximation is the new aspect, because it is not based on the assumption of linearity around $f(x)$ but uses a second-order polynomial to account for nonlinearities, making heavy use of numerical or symbolical Hessian matrices. Interestingly, the second-order approximation gives results quite similar to the MC simulations!
* plot.propagate: Graphing error propagation with the histograms of the MC simulations and MC/Taylor-based confidence intervals.
* predictNLS: The propagate function is used to calculate the propagated error to the fitted values of a nonlinear model of type nls or nlsLM. Please refer to my post here: http://rmazing.wordpress.com/2013/08/26/predictnls-part-2-taylor-approximation-confidence-intervals-for-nls-models/.
* makeGrad, makeHess, numGrad, numHess are functions to create symbolical or numerical gradient and Hessian matrices from an expression containing first/second-order partial derivatives. These can then be evaluated in an environment with evalDerivs.
* fitDistr: This function fits 21 different continuous distributions by (weighted) NLS to the histogram or kernel density of the Monte Carlo simulation results as obtained by propagate or any other vector containing large-scale observations. Finally, the fits are sorted by ascending AIC.
* random samplers for 15 continuous distributions under one hood, some of them previously unavailable:
Skewed-normal distribution, Generalized normal distributionm, Scaled and shifted t-distribution, Gumbel distribution, Johnson SU distribution, Johnson SB distribution, 3P Weibull distribution, 4P Beta distribution, Triangular distribution, Trapezoidal distribution, Curvilinear Trapezoidal distribution, Generalized trapezoidal distribution, Laplacian distribution, Arcsine distribution, von Mises distribution.
Most of them sample from the inverse cumulative distribution function, but 11, 12 and 15 use a vectorized version of “Rejection Sampling” giving roughly 100000 random numbers/s.

An example (without covariance for simplicity): $\mu_a = 5, \sigma_a = 0.1, \mu_b = 10, \sigma_b = 0.1, \mu_x = 1, \sigma_x = 0.1$
$f(x) = a^{bx}$:
 >DAT <- data.frame(a = c(5, 0.1), b = c(10, 0.1), x = c(1, 0.1)) >EXPR <- expression(a^b*x) >res <- propagate(EXPR, DAT)

 Results from error propagation: Mean.1 Mean.2 sd.1 sd.2 2.5% 97.5% 9765625 10067885 2690477 2739850 4677411 15414333 

Results from Monte Carlo simulation: Mean sd Median MAD 2.5% 97.5% 10072640 2826027 9713207 2657217 5635222 16594123 

The plot reveals the resulting distribution obtained from Monte Carlo simulation:
 >plot(res) 

Seems like a skewed distributions. We can now use fitDistr to find out which comes closest:
 > fitDistr(res$resSIM) Fitting Normal distribution...Done. Fitting Skewed-normal distribution...Done. Fitting Generalized normal distribution...Done. Fitting Log-normal distribution...Done. Fitting Scaled/shifted t- distribution...Done. Fitting Logistic distribution...Done. Fitting Uniform distribution...Done. Fitting Triangular distribution...Done. Fitting Trapezoidal distribution...Done. Fitting Curvilinear Trapezoidal distribution...Done. Fitting Generalized Trapezoidal distribution...Done. Fitting Gamma distribution...Done. Fitting Cauchy distribution...Done. Fitting Laplace distribution...Done. Fitting Gumbel distribution...Done. Fitting Johnson SU distribution...........10.........20.........30.........40.........50 .........60.........70.........80.Done. Fitting Johnson SB distribution...........10.........20.........30.........40.........50 .........60.........70.........80.Done. Fitting 3P Weibull distribution...........10.........20.......Done. Fitting 4P Beta distribution...Done. Fitting Arcsine distribution...Done. Fitting von Mises distribution...Done.$aic Distribution AIC 4 Log-normal -4917.823 16 Johnson SU -4861.960 15 Gumbel -4595.917 19 4P Beta -4509.716 12 Gamma -4469.780 9 Trapezoidal -4340.195 1 Normal -4284.706 5 Scaled/shifted t- -4283.070 6 Logistic -4266.171 3 Generalized normal -4264.102 14 Laplace -4144.870 13 Cauchy -4099.405 2 Skewed-normal -4060.936 11 Generalized Trapezoidal -4032.484 10 Curvilinear Trapezoidal -3996.495 8 Triangular -3970.993 7 Uniform -3933.513 20 Arcsine -3793.793 18 3P Weibull -3783.041 21 von Mises -3715.034 17 Johnson SB -3711.034

 Log-normal wins, which makes perfect sense after using an exponentiation function... Have fun with the package. Comments welcome! Cheers, Andrej About these ads var wpcom_adclk_hovering = false; var wpcom_adclk_recorded = false; var wpcom_adclk_theme = "Contempt"; var wpcom_adclk_slot = "wpcom_below_post"; var wpcom_adclk_network = ( typeof wpcom_adclk_network === "undefined" ) ? "" : wpcom_adclk_network ; jQuery(document).ready( function() { function wpcom_adclk_hover_yes() { wpcom_adclk_hovering = true; } function wpcom_adclk_hover_no() { wpcom_adclk_hovering = false; } jQuery(".wpa").click(wpcom_adclk_click); jQuery(".wpa iframe").hover( wpcom_adclk_hover_yes, wpcom_adclk_hover_no ); jQuery(".wpa object").hover( wpcom_adclk_hover_yes, wpcom_adclk_hover_no ); jQuery(window).blur( function() { if ( wpcom_adclk_hovering ) { wpcom_adclk_click(); } }); }); function wpcom_adclk_impression() { var stat_gif = document.location.protocol + "//pixel.wp.com/g.gif?v=wpcom-no-pv"; stat_gif += "&x_ads_imp_theme=" + wpcom_adclk_theme; stat_gif += "&x_ads_imp_placement="+wpcom_adclk_slot; stat_gif += "&x_ads_imp_network=" + wpcom_adclk_network; stat_gif += "&x_ads_imp_theme_network="+wpcom_adclk_theme+"_"+wpcom_adclk_network; new Image().src = stat_gif + "&baba=" + Math.random(); return true; } function wpcom_adclk_click() { if (wpcom_adclk_recorded) { return true; } // no double counting var stat_gif = document.location.protocol + "//pixel.wp.com/g.gif?v=wpcom-no-pv"; stat_gif += "&x_ads_click_theme=" + wpcom_adclk_theme; stat_gif += "&x_ads_click_placement="+wpcom_adclk_slot; stat_gif += "&x_ads_click_network=" + wpcom_adclk_network; stat_gif += "&x_ads_click_theme_network="+wpcom_adclk_theme+"_"+wpcom_adclk_network; new Image().src = stat_gif + "&baba=" + Math.random(); wpcom_adclk_recorded = true; var now=new Date(); var end=now.getTime()+250; while(true){now=new Date();if(now.getTime()>end){break;}} return true; } if ( typeof GA_googleAddAttr == 'function' ) { GA_googleAddAttr("AdOpt", "1"); GA_googleAddAttr("Origin", "other"); GA_googleAddAttr("LangId", "1"); GA_googleAddAttr("Domain", "rmazing.wordpress.com"); GA_googleAddAttr("BlogId", "37379885"); GA_googleAddAttr("PageURL", "http://rmazing.wordpress.com/2013/08/31/introducing-propagate/"); GA_googleAddAttr("Autotag", "tips"); GA_googleAddAttr("Tag", "general"); GA_googleAddAttr("Tag", "r-internals"); GA_googleAddAttr("Tag", "confidence-interval"); GA_googleAddAttr("Tag", "first-order"); GA_googleAddAttr("Tag", "fitting"); GA_googleAddAttr("Tag", "monte-carlo"); GA_googleAddAttr("Tag", "nls"); GA_googleAddAttr("Tag", "nonlinear"); GA_googleAddAttr("Tag", "predict"); GA_googleAddAttr("Tag", "second-order"); GA_googleAddAttr("Tag", "taylor-approximation"); GA_googleAddAttr("theme_bg", "ffffff"); GA_googleAddAttr("theme_text", "333333"); GA_googleAddAttr("theme_link", "0066cc"); GA_googleAddAttr("theme_border", "5581C0"); GA_googleAddAttr("theme_url", "114477"); GA_googleAddAdSensePageAttr("google_page_url", "http://rmazing.wordpress.com/2013/08/31/introducing-propagate/"); GA_googleFillSlot("wpcom_below_post"); } jQuery( window ).load( function() { if ( jQuery(".wpa script[src*='virool.com']").length > 0 || jQuery(".wpa script[src*='shareth.ru']").length > 0 || jQuery(".wpa iframe[src*='boomvideo.tv']").length > 0 || jQuery(".wpa iframe[src*='viewablemedia.net']").length > 0 || jQuery(".wpa .sharethrough-placement").length > 0 ) { jQuery( '.wpa' ).css( 'width', '400px' ); } setTimeout(function(){if(typeof GS_googleAddAdSenseService !== 'function'){new Image().src=document.location.protocol+"//pixel.wp.com/g.gif?v=wpcom-no-pv&x_noads=adblock&baba="+Math.random()}},100); } ); Share this:TwitterFacebookLike this:Like Loading... Related This entry was posted on Saturday, August 31st, 2013 at 10:19 pm and is filed under General, R Internals. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site. Post navigation « Previous Post Next Post » 
 
 5 Responses to Introducing ‘propagate’ Paul Prew says: September 2, 2013 at 6:11 am Is EXPR <- expression(a^b*x) in R the same as EXPR <- expression(a^(b*x))? I'm not familiar with the function 'expression'. Thanks for the useful package. Reply anspiess says: September 2, 2013 at 8:13 am Nope: > 3^2*5 [1] 45 > 3^(2*5) [1] 59049 Reply Katharine Mullen says: September 5, 2013 at 6:14 am This is a great package. Congrats on its publication, which significantly extends the framework for uncertainty quantification in R. Reply Karin Rivera says: December 18, 2014 at 12:21 am Hello, I am new using this package, I am working in the uncertainty analysis of the biomass data obtained from a forest inventory (variables: DBH, height and wood density) and my formula for biomass is : 0.112*(wood.density*DBH^2*height)^0.916 Actually I used “propagate” as: DAT <- inventory EXPR <- function(DBH, height, wood.density)0.112*(wood.density*DBH^2*height)^0.916 res <- propagate(EXPR, DAT) my results: Results from error propagation: Mean.1 Mean.2 sd.1 sd.2 2.5% 97.5% 13.82681 -188.77689 247.42702 390.59668 -952.64302 582.66181 Results from Monte Carlo simulation: Mean sd Median MAD 2.5% 97.5% 39.89066744 69.42375773 13.90524871 19.39363104 0.03365433 232.22693809 and I obtained as the best distribution : 3P Weibull with an AIC of: -2874.265 I would like if someone can clear me the meaning of the results from error propagation?? What is MAD??? and also if I need the standar error of the biomass, how can i get it? Thanks and best regards Reply anspiess says: December 19, 2014 at 7:28 am Check your email… Reply Leave a Reply Enter your comment here... Fill in your details below or click an icon to log in: Email (required) (Address never made public) Name (required) Website You are commenting using your WordPress.com account. ( Log Out / Change ) You are commenting using your Twitter account. ( Log Out / Change ) You are commenting using your Facebook account. ( Log Out / Change ) You are commenting using your Google+ account. ( Log Out / Change ) Cancel Connecting to %s var highlander_expando_javascript = function(){ var input = document.createElement( 'input' ), comment = jQuery( '#comment' ); if ( 'placeholder' in input ) { comment.attr( 'placeholder', jQuery( '.comment-textarea label' ).remove().text() ); } // Expando Mode: start small, then auto-resize on first click + text length jQuery( '#comment-form-identity' ).hide(); jQuery( '#comment-form-subscribe' ).hide(); jQuery( '#commentform .form-submit' ).hide(); comment.css( { 'height':'10px' } ).one( 'focus', function() { var timer = setInterval( HighlanderComments.resizeCallback, 10 ) jQuery( this ).animate( { 'height': HighlanderComments.initialHeight } ).delay( 100 ).queue( function(n) { clearInterval( timer ); HighlanderComments.resizeCallback(); n(); } ); jQuery( '#comment-form-identity' ).slideDown(); jQuery( '#comment-form-subscribe' ).slideDown(); jQuery( '#commentform .form-submit' ).slideDown(); }); } jQuery(document).ready( highlander_expando_javascript ); Notify me of new comments via email. 
 Search Recent Posts Error propagation based on interval arithmetics I’ll take my NLS with weights, please… Introducing ‘propagate’ predictNLS (Part 2, Taylor approximation): confidence intervals for ‘nls’ models predictNLS (Part 1, Monte Carlo simulation): confidence intervals for ‘nls’ models Archives September 2014 January 2014 August 2013 July 2013 April 2013 February 2013 January 2013 November 2012 July 2012 June 2012 Categories General nonlinear regression R Internals Meta Register Log in Entries RSS Comments RSS WordPress.com Blogroll R-bloggers The Contempt Theme. Create a free website or blog at WordPress.com. 
 /* <![CDATA[ */ var WPGroHo = {"my_hash":""}; /* ]]> */ //initialize and attach hovercards to all gravatars jQuery( document ).ready( function( $) { if (typeof Gravatar === "undefined"){ return; } if ( typeof Gravatar.init !== "function" ) { return; } Gravatar.profile_cb = function( hash, id ) { WPGroHo.syncProfileData( hash, id ); }; Gravatar.my_hash = WPGroHo.my_hash; Gravatar.init( 'body', '#wp-admin-bar-my-account' ); }); /* <![CDATA[ */ var HighlanderComments = {"loggingInText":"Logging In\u2026","submittingText":"Posting Comment\u2026","postCommentText":"Post Comment","connectingToText":"Connecting to %s","commentingAsText":"%1$s: You are commenting using your %2$s account.","logoutText":"Log Out","loginText":"Log In","connectURL":"http:\/\/rmazing.wordpress.com\/public.api\/connect\/?action=request","logoutURL":"https:\/\/rmazing.wordpress.com\/wp-login.php?action=logout&_wpnonce=def646b38c","homeURL":"http:\/\/rmazing.wordpress.com\/","postID":"407","gravDefault":"identicon","enterACommentError":"Please enter a comment","enterEmailError":"Please enter your email address here","invalidEmailError":"Invalid email address","enterAuthorError":"Please enter your name here","gravatarFromEmail":"This picture will show whenever you leave a comment. Click to customize it.","logInToExternalAccount":"Log in to use details from one of these accounts.","change":"Change","changeAccount":"Change Account","comment_registration":"0","userIsLoggedIn":"","isJetpack":"0"}; /* ]]> */ Follow Follow “Rmazing” Get every new post delivered to your Inbox. Build a website with WordPress.com WPCOM_sharing_counts = {"http:\/\/rmazing.wordpress.com\/2013\/08\/31\/introducing-propagate\/":407} jQuery(document).on( 'ready post-load', function(){ jQuery( 'a.share-twitter' ).on( 'click', function() { window.open( jQuery(this).attr( 'href' ), 'wpcomtwitter', 'menubar=1,resizable=1,width=600,height=350' ); return false; }); }); jQuery(document).on( 'ready post-load', function(){ jQuery( 'a.share-facebook' ).on( 'click', function() { window.open( jQuery(this).attr( 'href' ), 'wpcomfacebook', 'menubar=1,resizable=1,width=600,height=400' ); return false; }); }); %d bloggers like this: //<![CDATA[ var jetpackLikesWidgetQueue = []; var jetpackLikesWidgetBatch = []; var jetpackLikesMasterReady = false; function JetpackLikespostMessage( message, target ) { if ( "string" === typeof message ){ try{ message = JSON.parse( message ); } catch(e) { return; } } pm( { target: target, type: 'likesMessage', data: message, origin: '*' } ); } function JetpackLikesBatchHandler() { var requests = []; jQuery( 'div.jetpack-likes-widget-unloaded' ).each( function( i ) { if ( jetpackLikesWidgetBatch.indexOf( this.id ) > -1 ) return; jetpackLikesWidgetBatch.push( this.id ); var regex = /like-(post|comment)-wrapper-(\d+)-(\d+)-(\w+)/; var match = regex.exec( this.id ); if ( ! match || match.length != 5 ) return; var info = { blog_id: match[2], width: this.width }; if ( 'post' == match[1] ) { info.post_id = match[3]; } else if ( 'comment' == match[1] ) { info.comment_id = match[3]; } info.obj_id = match[4]; requests.push( info ); }); if ( requests.length > 0 ) { JetpackLikespostMessage( { event: 'initialBatch', requests: requests }, window.frames['likes-master'] ); } } function JetpackLikesMessageListener( event ) { if ( "undefined" == typeof event.event ) return; if ( 'masterReady' == event.event ) { jQuery( document ).ready( function() { jetpackLikesMasterReady = true; var stylesData = { event: 'injectStyles' }; if ( jQuery( 'iframe.admin-bar-likes-widget' ).length > 0 ) { JetpackLikespostMessage( { event: 'adminBarEnabled' }, window.frames[ 'likes-master' ] ); stylesData.adminBarStyles = { background: jQuery( '#wpadminbar .quicklinks li#wp-admin-bar-wpl-like > a' ).css( 'background' ), isRtl: ( 'rtl' == jQuery( '#wpadminbar' ).css( 'direction' ) ) }; } if ( !window.addEventListener ) jQuery( '#wp-admin-bar-admin-bar-likes-widget' ).hide(); stylesData.textStyles = { color: jQuery( '.sd-text-color').css( 'color' ), fontFamily: jQuery( '.sd-text-color' ).css( 'font-family' ), fontSize: jQuery( '.sd-text-color' ).css( 'font-size' ), direction: jQuery( '.sd-text-color' ).css( 'direction' ), fontWeight: jQuery( '.sd-text-color' ).css( 'font-weight' ), fontStyle: jQuery( '.sd-text-color' ).css( 'font-style' ), textDecoration: jQuery( '.sd-text-color' ).css('text-decoration') }; stylesData.linkStyles = { color: jQuery( '.sd-link-color' ).css('color'), fontFamily: jQuery( '.sd-link-color' ).css('font-family'), fontSize: jQuery( '.sd-link-color' ).css('font-size'), textDecoration: jQuery( '.sd-link-color' ).css('text-decoration'), fontWeight: jQuery( '.sd-link-color' ).css( 'font-weight' ), fontStyle: jQuery( '.sd-link-color' ).css( 'font-style' ) }; JetpackLikespostMessage( stylesData, window.frames[ 'likes-master' ] ); JetpackLikesBatchHandler(); jQuery( document ).on( 'inview', 'div.jetpack-likes-widget-unloaded', function() { jetpackLikesWidgetQueue.push( this.id ); }); }); } if ( 'showLikeWidget' == event.event ) { jQuery( '#' + event.id + ' .post-likes-widget-placeholder' ).fadeOut( 'fast', function() { jQuery( '#' + event.id + ' .post-likes-widget' ).fadeIn( 'fast', function() { JetpackLikespostMessage( { event: 'likeWidgetDisplayed', blog_id: event.blog_id, post_id: event.post_id, obj_id: event.obj_id }, window.frames['likes-master'] ); }); }); } if ( 'clickReblogFlair' == event.event ) { wpcom_reblog.toggle_reblog_box_flair( event.obj_id ); } if ( 'showOtherGravatars' == event.event ) { var$container = jQuery( '#likes-other-gravatars' ); var $list =$container.find( 'ul' ); $container.hide();$list.html( '' ); $container.find( '.likes-text span' ).text( event.total ); jQuery.each( event.likers, function( i, liker ) {$list.append( '<li class="' + liker.css_class + '"><a href="' + liker.profile_URL + '" class="wpl-liker" rel="nofollow" target="_parent"><img src="' + liker.avatar_URL + '" alt="' + liker.name + '" width="30" height="30" style="padding-right: 3px;" /></a></li>'); } ); var offset = jQuery( "[name='" + event.parent + "']" ).offset(); $container.css( 'left', offset.left + event.position.left - 10 + 'px' );$container.css( 'top', offset.top + event.position.top - 33 + 'px' ); var rowLength = Math.floor( event.width / 37 ); var height = ( Math.ceil( event.likers.length / rowLength ) * 37 ) + 13; if ( height > 204 ) { height = 204; } $container.css( 'height', height + 'px' );$container.css( 'width', rowLength * 37 - 7 + 'px' ); $list.css( 'width', rowLength * 37 + 'px' );$container.fadeIn( 'slow' ); var scrollbarWidth = $list[0].offsetWidth -$list[0].clientWidth; if ( scrollbarWidth > 0 ) { $container.width($container.width() + scrollbarWidth ); $list.width($list.width() + scrollbarWidth ); } } } pm.bind( 'likesMessage', function(e) { JetpackLikesMessageListener(e); } ); jQuery( document ).click( function( e ) { var $container = jQuery( '#likes-other-gravatars' ); if ($container.has( e.target ).length === 0 ) { $container.fadeOut( 'slow' ); } }); function JetpackLikesWidgetQueueHandler() { var wrapperID; if ( ! jetpackLikesMasterReady ) { setTimeout( JetpackLikesWidgetQueueHandler, 500 ); return; } if ( jetpackLikesWidgetQueue.length > 0 ) { // We may have a widget that needs creating now var found = false; while( jetpackLikesWidgetQueue.length > 0 ) { // Grab the first member of the queue that isn't already loading. wrapperID = jetpackLikesWidgetQueue.splice( 0, 1 )[0]; if ( jQuery( '#' + wrapperID ).hasClass( 'jetpack-likes-widget-unloaded' ) ) { found = true; break; } } if ( ! found ) { setTimeout( JetpackLikesWidgetQueueHandler, 500 ); return; } } else if ( jQuery( 'div.jetpack-likes-widget-unloaded' ).length > 0 ) { // Grab any unloaded widgets for a batch request JetpackLikesBatchHandler(); // Get the next unloaded widget wrapperID = jQuery( 'div.jetpack-likes-widget-unloaded' ).first()[0].id; if ( ! wrapperID ) { // Everything is currently loaded setTimeout( JetpackLikesWidgetQueueHandler, 500 ); return; } } if ( 'undefined' === typeof wrapperID ) { setTimeout( JetpackLikesWidgetQueueHandler, 500 ); return; } var$wrapper = jQuery( '#' + wrapperID ); $wrapper.find( 'iframe' ).remove(); if ($wrapper.hasClass( 'slim-likes-widget' ) ) { $wrapper.find( '.post-likes-widget-placeholder' ).after( "<iframe class='post-likes-widget jetpack-likes-widget' name='" +$wrapper.data( 'name' ) + "' height='22px' width='68px' frameBorder='0' scrolling='no' src='" + $wrapper.data( 'src' ) + "'></iframe>" ); } else {$wrapper.find( '.post-likes-widget-placeholder' ).after( "<iframe class='post-likes-widget jetpack-likes-widget' name='" + $wrapper.data( 'name' ) + "' height='55px' width='100%' frameBorder='0' src='" +$wrapper.data( 'src' ) + "'></iframe>" ); } $wrapper.removeClass( 'jetpack-likes-widget-unloaded' ).addClass( 'jetpack-likes-widget-loading' );$wrapper.find( 'iframe' ).load( function( e ) { var $iframe = jQuery( e.target );$wrapper.removeClass( 'jetpack-likes-widget-loading' ).addClass( 'jetpack-likes-widget-loaded' ); JetpackLikespostMessage( { event: 'loadLikeWidget', name: $iframe.attr( 'name' ), width:$iframe.width() }, window.frames[ 'likes-master' ] ); if ( $wrapper.hasClass( 'slim-likes-widget' ) ) {$wrapper.find( 'iframe' ).Jetpack( 'resizeable' ); } }); setTimeout( JetpackLikesWidgetQueueHandler, 250 ); } JetpackLikesWidgetQueueHandler(); //]]> /* <![CDATA[ */ var JetpackEmojiSettings = {"base_url":"http:\/\/s0.wp.com\/wp-content\/mu-plugins\/emoji\/twemoji\/"}; /* ]]> */ /* <![CDATA[ */ var recaptcha_options = {"lang":"en"}; /* ]]> */ // <![CDATA[ (function() { try{ if ( window.external &&'msIsSiteMode' in window.external) { if (window.external.msIsSiteMode()) { var jl = document.createElement('script'); jl.type='text/javascript'; jl.async=true; jl.src='/wp-content/plugins/ie-sitemode/custom-jumplist.php'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(jl, s); } } }catch(e){} })(); // ]]> var skimlinks_pub_id = "725X584219" var skimlinks_sitename = "rmazing.wordpress.com"; _tkq = window._tkq || []; _tkq.push(['storeContext', {'blog_id':'37379885','blog_tz':'1','user_lang':'en','blog_lang':'en','user_id':'0'}]); st_go({'blog':'37379885','v':'wpcom','tz':'1','user_id':'0','post':'407','subd':'rmazing'}); ex_go({'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWFnNncxc1tjZG9XVXhRVz1bVXJlWWRQcV0mPUt0RWJPdiU5Qz81TWhaZ2ZrZzBQX3pTRE1sRjVJaC9LU35PYUcuJnY4QUFucVpVVis9T2dqY0Y0fGtDMyU4MkV1SktvS3F8fkxMYnU0WC5dJlBMRWh6azJKS1VORzFTJlI2WHQyYW5ZM2NtUm5CR2Y5bCxPTiUtemZabnIrd0pVMWQxK2ImOTJqPSstdFpfQkZkQk43QmtFMFtTfDU5REc/R0lOaWk4QnZJLTNyaEM9WmR6YnBxWUkucG4xbEd0SHlpLEtNLktiZ2VOaytZJWJTJTZySW9CNDA5MkNJeVBIQzAvdXcua3NLMQ=='}); addLoadEvent(function(){linktracker_init('37379885',407);}); if ( 'object' === typeof wpcom_mobile_user_agent_info ) { wpcom_mobile_user_agent_info.init(); var mobileStatsQueryString = ""; if( false !== wpcom_mobile_user_agent_info.matchedPlatformName ) mobileStatsQueryString += "&x_" + 'mobile_platforms' + '=' + wpcom_mobile_user_agent_info.matchedPlatformName; if( false !== wpcom_mobile_user_agent_info.matchedUserAgentName ) mobileStatsQueryString += "&x_" + 'mobile_devices' + '=' + wpcom_mobile_user_agent_info.matchedUserAgentName; if( wpcom_mobile_user_agent_info.isIPad() ) mobileStatsQueryString += "&x_" + 'ipad_views' + '=' + 'views'; if( "" != mobileStatsQueryString ) { new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?v=wpcom-no-pv' + mobileStatsQueryString + '&baba=' + Math.random(); } }