Gini
setwd("C:/Users/18507/Dropbox/charity/Tex/ceq/jikan-first round revision/second round revision/third round revision/fourth round/fifth round/sixth round/2023-01016+数据/B-代码及数据/B-fig")
install.packages(c("readxl","data.table","ggstatsplot","gplot2","gridExtra","ggsignif","showtext","latex2exp","patchwork","svglite"))
library(readxl)
library(data.table)
library(ggstatsplot)
library(ggplot2)
library(gridExtra)
library(ggstatsplot)
library(ggsignif)
library(showtext)
library(latex2exp)
showtext_auto()
font_add('sung','simsun.ttc')
read_xlsx('datafig1.xlsx')->dat
setDT(dat)
g<-c('1同伴设置',
'2名称设置-中国红十字基金会' ,
'3名称设置-壹基金',
'4名称设置-联合国儿童基金会' ,
'5名称设置-中国儿童青少年基金会' ,
'6声誉得分设置-低分' ,
'7声誉得分设置-高分',
'8基准设置',
'9声誉排名设置-后25%',
'10声誉排名设置-前25%')
dat[,treatment:=g[as.integer(treatment)]]
dat<-dat[!is.na(treatment)]
dat[,treatment:=gsub('^\\d+','',treatment)]
setnames(dat,'wg','outcome')
my.points.arg<-list(position = ggplot2::position_jitterdodge(dodge.width = 0.6),
alpha= 0.75, size = 3, stroke = 0)
gg<-c(
'g1'='基准设置 同伴设置',
'g2'='基准设置 名称设置-中国红十字基金会 名称设置-壹基金  名称设置-中国儿童青少年基金会 名称设置-联合国儿童基金会',
'g3'='基准设置 声誉得分设置-高分 声誉得分设置-低分',
'g4'='基准设置 声誉排名设置-前25% 声誉排名设置-后25%')
setdiff(unlist(strsplit(gg,"\\s+")) ,dat[,unique(treatment)])
col16 = c('#e6194b', '#3cb44b', '#ffe119', '#0082c8',
'#f58231', '#911eb4', '#46f0f0', '#f032e6',
'#d2f53c', '#fabebe', '#008080', '#e6beff',
'#aa6e28', '#fffac8', '#800000', '#aaffc3')
col16<-rep('gray50',16)
col16<-setNames(col16[1:dat[,length(unique(treatment))]],dat[,unique(treatment)])
strsplit(gg,"\\s+")->gg
all(unlist(gg) %in% dat[,treatment])
my.points.arg<-list(position = ggplot2::position_jitterdodge(dodge.width = 0.6),
alpha= 0.5, size = 2.8, stroke = 0)
lapply(1:length(gg),function(ind)
{
inter.data<-dat[treatment %in% gg[[ind]]]
inter.data[,treatment:=ordered(treatment,levels=gg[[ind]])]
t(combn(inter.data[,unique(as.character(treatment))],2))->coms
as.data.table(coms)->coms
apply(coms,1,function(x)
{
if(x[2]=='t8') x<-rev(x)
wilcox.test(x=inter.data[treatment==x[1],outcome],y=inter.data[treatment==x[2],outcome])->inter.test
data.table(g1=x[1],g2=x[2],statistic=inter.test$statistic,p=inter.test$p.value)
})->coms
rbindlist(coms)->coms
coms<-data.table(zu=ind,coms)
coms[,sig:=fcase(p<=0.1,"*",default='')]
coms
})->kan
rbindlist(kan)->kan
####################1
ind<-1
inter.data<-dat[treatment %in% gg[[ind]]]
inter.data[,treatment:=ordered(treatment,levels=gg[[ind]])]
kan[zu==ind & sig=='*']->sig.pairs
as.list(transpose(sig.pairs[,.(g1,g2)]))->sig.pairs
inter.data[,.(mean=mean(outcome),sd=sd(outcome)),by=.(treatment)]->sta
p1<-ggbetweenstats(data=inter.data,
x=treatment,
y=outcome,
xlab='a',
ylab='WG',
bf.message=F,
point.args=my.points.arg,
results.subtitle=F,
pairwise.comparisons=F,
pairwise.display='none',
plot.type='violin',
boxplot.args=list(color=NA,fill=NA),
centrality.label.args=list(color='transparent',fill='transparent'),
centrality.point.args=list(shape=18,size=8,color='darkred')
)+
#geom_signif(comparisons = sig.pairs,y_position=62,map_signif_level=function(x) paste('pv= ',sprintf("%4.3f",x)))+
geom_signif(comparisons = sig.pairs,y_position=62,annotations='')+
annotate('text',x=1.5,y=62+3.5,vjust=0,label=TeX(R"($\textit{p}<0.01$)"))+
ggplot2::scale_color_manual(values=col16[gg[[ind]]])+
ggplot2::scale_y_continuous(breaks=seq(0,60,by=20),limits=c(0,78),expand=expansion(c(0.05,0)))+
geom_errorbar(data=sta,mapping=aes(x=treatment,y=mean,ymin=mean-sd,ymax=mean+sd),inherit.aes=F,width=0.05)+
theme(axis.text.x=element_text(family='sung',size=9))
###########2
ind<-2
inter.data<-dat[treatment %in% gg[[ind]]]
inter.data[,treatment:=ordered(treatment,levels=gg[[ind]])]
kan[zu==ind & sig=='*']->sig.pairs
as.list(transpose(sig.pairs[,.(g1,g2)]))->sig.pairs
inter.data[,.(mean=mean(outcome),sd=sd(outcome)),by=.(treatment)]->sta
p2<-ggbetweenstats(data=inter.data,
x=treatment,
y=outcome,
xlab='b',
ylab='WG',
bf.message=F,
point.args=my.points.arg,
results.subtitle=F,
pairwise.display='none',
pairwise.comparisons=F,
plot.type='violin',
boxplot.args=list(color=NA,fill=NA),
centrality.label.args=list(color='transparent',fill='transparent'),
centrality.point.args=list(shape=18,size=8,color='darkred')
)+
#geom_signif(comparisons = sig.pairs[4],y_position=c(60),map_signif_level=function(x) paste('pv= ',sprintf("%4.3f",x)))+
geom_signif(comparisons = sig.pairs[4],y_position=60,annotations='')+
annotate('text',x=2.5,y=60+3.5,vjust=0,label=TeX(R"($\textit{p}<0.05$)"))+
#geom_signif(comparisons = sig.pairs[3],y_position=c(65),map_signif_level=function(x) paste('pv= ',sprintf("%4.3f",x)))+
geom_signif(comparisons = sig.pairs[3],y_position=65,annotations='')+
annotate('text',x=3,y=65+3.5,vjust=0,label=TeX(R"($\textit{p}<0.1$)"))+
ggplot2::scale_color_manual(values=col16[gg[[ind]]])+
ggplot2::scale_y_continuous(breaks=seq(0,60,by=20),limits=c(0,78),expand=expansion(c(0.05,0)))+
geom_errorbar(data=sta,mapping=aes(x=treatment,y=mean,ymin=mean-sd,ymax=mean+sd),inherit.aes=F,width=0.05)+
theme(axis.text.x=element_text(family='sung',size=9))
###########2
ind<-3
inter.data<-dat[treatment %in% gg[[ind]]]
inter.data[,treatment:=ordered(treatment,levels=gg[[ind]])]
kan[zu==ind & sig=='*']->sig.pairs
as.list(transpose(sig.pairs[,.(g1,g2)]))->sig.pairs
inter.data[,.(mean=mean(outcome),sd=sd(outcome)),by=.(treatment)]->sta
p3<-ggbetweenstats(data=inter.data,
x=treatment,
y=outcome,
xlab='c',
ylab='WG',
bf.message=F,
point.args=my.points.arg,
results.subtitle=F,
pairwise.comparisons=F,
pairwise.display='none',
plot.type='violin',
boxplot.args=list(color=NA,fill=NA),
centrality.label.args=list(color='transparent',fill='transparent'),
centrality.point.args=list(shape=18,size=8,color='darkred')
)+
#geom_signif(comparisons = sig.pairs,y_position=62,map_signif_level=function(x) paste('pv= ',sprintf("%4.3f",x)))+
geom_signif(comparisons = sig.pairs[2],y_position=62,annotations='')+
annotate('text',x=1.5,y=62+3.5,vjust=0,label=TeX(R"($\textit{p}<0.05$)"))+
ggplot2::scale_color_manual(values=col16[gg[[ind]]])+
ggplot2::scale_y_continuous(breaks=seq(0,60,by=20),limits=c(0,78),expand=expansion(c(0.05,0)))+
geom_errorbar(data=sta,mapping=aes(x=treatment,y=mean,ymin=mean-sd,ymax=mean+sd),inherit.aes=F,width=0.05)+
theme(axis.text.x=element_text(family='sung',size=9))
###########4
ind<-4
inter.data<-dat[treatment %in% gg[[ind]]]
inter.data[,treatment:=ordered(treatment,levels=gg[[ind]])]
kan[zu==ind & sig=='*']->sig.pairs
as.list(transpose(sig.pairs[,.(g1,g2)]))->sig.pairs
inter.data[,.(mean=mean(outcome),sd=sd(outcome)),by=.(treatment)]->sta
p4<-ggbetweenstats(data=inter.data,
x=treatment,
y=outcome,
xlab='d',
ylab='WG',
bf.message=F,
point.args=my.points.arg,
results.subtitle=F,
pairwise.comparisons=F,
pairwise.display='none',
plot.type='violin',
boxplot.args=list(color=NA,fill=NA),
centrality.label.args=list(color='transparent',fill='transparent'),
centrality.point.args=list(shape=18,size=8,color='darkred')
)+
#geom_signif(comparisons = sig.pairs[1],y_position=c(61),map_signif_level=function(x) paste('pv= ',sprintf("%4.3f",x)))+
geom_signif(comparisons = sig.pairs[1],y_position=61,annotations='')+
annotate('text',x=2,y=61+3.5,vjust=0,label=TeX(R"($\textit{p}<0.01$)"))+
ggplot2::scale_color_manual(values=col16[gg[[ind]]])+
ggplot2::scale_y_continuous(breaks=seq(0,60,by=20),limits=c(0,78),expand=expansion(c(0.05,0)))+
geom_errorbar(data=sta,mapping=aes(x=treatment,y=mean,ymin=mean-sd,ymax=mean+sd),inherit.aes=F,width=0.05)+
theme(axis.text.x=element_text(family='sung',size=9))
####
library(patchwork)
library(svglite)
svglite('fig1.svg',width=13.2,height=8.7)
layout <- "
AAABBBBBBBBB
CCCCCCDDDDDD
"
p1+p2+p3+p4+
plot_layout(design = layout)
dev.off()
