Sigma convergence is a reduction in disparities between Member States over time. It can be investigated with the standard deviation or with the coefficient of variation.
## ## 2019-12-12 ## Chunk moved on top of indica_fi_2.Rmd file to be sure it will be ## always executed ## ##wkDF2 <- filter(wkDF, .data[[timeName]] <= ptime_t & .data[[timeName]] >= ptime_0) sigCores <- sigma_conv(wkDF2, timeName = timeName, time_0 = ptime_0, time_t = ptime_t) #sigCores lastRowAveragesSig <- nrow(sigCores$res) sd_enne <<- function(vec_obs){ enne <- length(vec_obs) esse_n <- sd(vec_obs)*sqrt((enne-1)/enne) esse_n } CV_enne <<- function(vec_obs){ enne <- length(vec_obs) std_dev <- sd_enne(vec_obs) val_CV_n <- 100*std_dev /mean(vec_obs) val_CV_n } dichia_con_stddev <- upDo_CoDi(wkDF2, timeName = timeName, indiType = params$indiType, time_0 = ptime_0, time_t = ptime_t, heter_fun = "sd_enne" ) dichia_con_CV <- upDo_CoDi(wkDF2, timeName = timeName, indiType = params$indiType, time_0 = ptime_0, time_t = ptime_t, heter_fun = "CV_enne" ) # here stddev if(dichia_con_stddev$res$declaration_strict != "none"){ label_dichia_con_stddev <- paste( dichia_con_stddev$res$declaration_strict, dichia_con_stddev$res$declaration_type ) }else{ label_dichia_con_stddev <- paste( dichia_con_stddev$res$declaration_weak, dichia_con_stddev$res$declaration_type ) } # now CV if(dichia_con_CV$res$declaration_strict != "none"){ label_dichia_con_CV <- paste( dichia_con_CV$res$declaration_strict, dichia_con_CV$res$declaration_type ) }else{ label_dichia_con_CV <- paste( dichia_con_CV$res$declaration_weak, dichia_con_CV$res$declaration_type ) }
Standard deviation allows for the comparison across time periods and is preferable if no comparison across indicators is needed because the measure of dispersion will not be affected by changes in its average. Sigma convergence exists if the overall change is negative.
The key concept in sigma-convergence is variability with respect to the mean. Let $Y_{m,i,t}$ be the value of indicator $i$ for member state $m$ at time $t$, and $\overline{Y} _{A,i,t}$ the average over aggregation $A$, than:
the average is $$\overline{Y}{A,i,t} = n(A)^{-1}\sum{m \in A} Y_{m,i,t}$$
where $n(A)$ is the number of member states within aggregation $A$;
* the standard deviation is
$$s_{A,i,t} = \sqrt{n(A)^{-1} \sum_{m \in A} (Y_{m,i,t} -\overline{Y}_{A,i,t})^2}$$
For each year, the above summaries are calculated to assess if a reduction in heterogeneity took place.
require(gridExtra) plot2sig <- qplot( sigCores$res$time,sigCores$res$stdDev, xlab= paste("Years "), ylab= paste("Standard Deviation (",aggregation,")")) + geom_line() + ggplot2::scale_x_continuous( breaks = seq(ptime_0,ptime_t), labels = seq(ptime_0,ptime_t)) + ggplot2::theme( axis.text.x=ggplot2::element_text( angle = 45 , vjust = 1, hjust=1)) sigma_gr1 <- grid.arrange( plot2sig, ncol=1 ) # export out_packed_list$sigma_gr1 <- sigma_gr1 invisible(sigma_gr1)
The coefficient of variation allows for the comparison across time periods and since it is a scale invariant measure it allows the comparison among different indicators. Sigma convergence exists if the overall change is negative.
The key concept in sigma-convergence is variability with respect to the mean. Let $Y_{m,i,t}$ be the value of indicator $i$ for member state $m$ at time $t$, and $\overline{Y} _{A,i,t}$ the average over aggregation $A$, than:
the average is $$\overline{Y}{A,i,t} = n(A)^{-1}\sum{m \in A} Y_{m,i,t}$$
where $n(A)$ is the number of member states within aggregation $A$;
the coefficient of variation is $$CV(A,i,t) = 100 \cdot \frac{s_{A,i,t}}{\overline{Y}_{A,i,t}}$$
For each year, the above summaries are calculated to assess if a reduction in heterogeneity took place.
plot3sig <- qplot( sigCores$res$time,sigCores$res$CV*100, xlab= paste("Years "), ylab= paste("Coefficient of variation (",aggregation,")")) + geom_line() + ggplot2::scale_x_continuous( breaks = seq(ptime_0,ptime_t), labels = seq(ptime_0,ptime_t)) + ggplot2::theme( axis.text.x=ggplot2::element_text( #size = ggplot2::rel(myfont_scale ), angle = 45 , vjust = 1, hjust=1)) sigma_gr2 <- grid.arrange( #plot1sig, plot3sig, ncol=2) plot3sig, ncol=1) # export out_packed_list$sigma_gr2 <- sigma_gr2 invisible(sigma_gr2)
## ## 2019-12-12 ## Chunk moved on top of the indica_fi_2.Rmd file to be sure it will be ## alaways executed. # overall sigma convergence diffeSTDdev <- as.numeric(sigCores$res[lastRowAverages,'stdDev'])-as.numeric(sigCores$res[1,'stdDev']) diffeCV <- 100*(as.numeric(sigCores$res[lastRowAveragesSig,'CV'])-as.numeric(sigCores$res[1,'CV'])) if(diffeSTDdev < 0){ label_sigmaSTDdev <- "convergence" }else if(diffeSTDdev == 0) { label_sigmaSTDdev <- "unchanged" }else{ label_sigmaSTDdev <- "divergence" } if(diffeCV < 0){ label_sigmaCV <- "convergence" }else if(diffeCV == 0){ label_sigmaCV <- "unchanged" }else{ label_sigmaCV <- "divergence" } label_sigma_joint<- paste("Standard Deviation: ",label_sigmaSTDdev,"; CV: ",label_sigmaCV)
Sigma summary list:
r params$indiType Change in average:
r ptime_0, average: r as.numeric(outMed[1,aggregation]) r ptime_t, average: r as.numeric(outMed[lastRowAverages,aggregation]) r as.numeric(outMed[lastRowAverages,aggregation])-as.numeric(outMed[1,aggregation]) Change in Standard Deviation:
Year r ptime_0, standard deviation: r as.numeric(sigCores$res[1,'stdDev'])
r ptime_t, standard deviation: r as.numeric(sigCores$res[lastRowAveragesSig,'stdDev']) r diffeSTDdev r label_sigmaSTDdev Change in Coefficient of Variation (CV):
Year r ptime_0, CV: r 100*as.numeric(sigCores$res[1,'CV'])
r ptime_t, CV: r 100*as.numeric(sigCores$res[lastRowAveragesSig,'CV']) r diffeCV r label_sigmaCV Results for year r ptime_t with reference year r ptime_0:
Standard Deviation: r label_dichia_con_stddev
r label_dichia_con_CV out_packed_list$sigmaSummary <- list( indicatorType= params$indiType, #diagnosis= diagnosis, startingYear = ptime_0, endingYear = ptime_t, startingAverage = as.numeric(outMed[1,aggregation]), endingAverage = as.numeric(outMed[lastRowAverages,aggregation]), DeltaAverage = as.numeric(outMed[lastRowAverages,aggregation])- as.numeric(outMed[1,aggregation]), # startingStdDev = as.numeric(sigCores$res[1,'stdDev']), endingStdDev = as.numeric(sigCores$res[lastRowAveragesSig,'stdDev']), DeltaStdDev = as.numeric(sigCores$res[lastRowAverages,'stdDev'])-as.numeric(sigCores$res[1,'stdDev']), # startingCV = 100*as.numeric(sigCores$res[1,'CV']), endingCV = 100*as.numeric(sigCores$res[lastRowAveragesSig,'CV']), DeltaCV = 100*(as.numeric(sigCores$res[lastRowAveragesSig,'CV'])-as.numeric(sigCores$res[1,'CV'])) )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.