teste z de proporções
Isso se aplica a um caso diferente quando você tem resultados binários. O teste z de proporções compara as proporções desses resultados binários.
(Abaixo é apresentado algum argumento de que você poderá fazer um teste t, que para números grandes é aproximadamente o mesmo que o teste z. Com proporções, você pode fazer um teste z porque a distribuição binomial tem um parâmetro que determina a variância e média, diferentemente de uma distribuição normal)
Bootstrapping
Isso será possível, mas não realmente necessário, devido ao método Delta, que fornece o erro da sua estatística observada mais diretamente.
Método Delta
Você está interessado na proporção de duas variáveis possivelmente correlatas: 1. o total de vendas e 2. as vendas em itens em estrela.
É provável que essas variáveis sejam distribuídas assintoticamente normais, pois são somas das vendas de muitos indivíduos (o procedimento de teste pode ser considerado um processo como escolher uma amostra de vendas de usuários individuais de uma distribuição de vendas de usuários individuais). Assim, você pode usar o método Delta.
O uso do método Delta para a estimativa de razões é descrito aqui . O resultado dessa aplicação do método Delta na verdade coincide com uma aproximação do resultado de Hinkley , uma expressão exata para a razão de duas variáveis distribuídas normais correlacionadas (Hinkley DV, 1969, Sobre a razão entre duas variáveis aleatórias normais correlacionadas, Biometrica vol. 56 n ° 3).
Para Z=XY com [XY]∼N([μxμy],[σ2xρσxσyρσxσyσ2y])
O resultado exato é: f( z) =b ( z) d( z)a ( z)31 12 π--√σXσY[ Φ (b ( z)1 -ρ2-----√a ( z)) -Φ ( -b ( z)1 -ρ2-----√a ( z)) ]+1 -ρ2-----√πσXσYa ( z)2exp( -c2 ( 1 -ρ2))
com a ( z)b ( z)cd( z)====(z2σ2X-2 ρ zσXσY+1 1σ2Y)1 12μXzσ2X-ρ (μX+μYz)σXσY+μYσ2Yμ2Xσ2Y-2 ρμXμY+σXσY+μ2Yσ2Yexp (b ( z)2- c a ( z)22 ( 1 -ρ2) a ( z)2)
E uma aproximação baseada em um comportamento assintótico é: (por θY/σY→ ∞): F( z) → Φ (z-μX/μYσXσYa ( z) /μY)
Você acaba com o resultado do método Delta ao inserir a aproximação a ( z) = a (μX/μY) a ( z)σXσY/μY≈ a (μX/μY)σXσY/μY=(μ2Xσ2Yμ4Y-2μXσXσYμ3Y+σ2Xμ2Y)1 12
Os valores para μX,μY,σX,σY, ρ pode ser estimado a partir de suas observações, que permitem estimar a variação e a média da distribuição para usuários únicos e, relacionado a isso, a variação e a média para a distribuição amostral da soma de vários usuários.
Alterar a métrica
Eu acredito que é interessante fazer pelo menos um gráfico inicial da distribuição das vendas (e não dos índices) dos usuários únicos. Eventualmente, você pode acabar com uma situação que não é uma diferença entre os usuários do grupo A e B, mas só acontece de ser não significativa quando se considera a única variável da razão (isto é um pouco semelhante ao MANOVA ser mais poderoso testes ANOVA únicos).
Enquanto o conhecimento de uma diferença entre os grupos, sem diferença significativa na métrica que você está interrested em, pode não ajudar muito na tomada de decisões, que faz ajuda-lo a compreender a teoria subjacente e, possivelmente, projetar melhores Alterações / experimentos próxima vez.
Ilustração
Abaixo está uma ilustração simples:
Que a distribuição hipotética de vendas dos usuários seja distribuída como frações a , b , c , d que indicam quantos usuários são de um caso específico (na realidade, essa distribuição será mais complexa):
star item sales
0$ 40$
other item sales 0$ a b
10$ c d
Em seguida, a distribuição de amostra para totais de grupos com 10000 usuários, com um algoritmo a = 0,190 , b = 0,001 , c = 0,800 , d= 0,009
e o outro algoritmo a = 0,170 , b = 0,001 , c = 0,820 , d= 0,009
vai parecer:
O que mostra 10000 execuções atraindo novos usuários e calculando as vendas e os índices. O histograma é para a distribuição das proporções. As linhas são cálculos usando a função de Hinkley.
- Você pode ver que a distribuição dos dois números totais de vendas é aproximadamente um normal multivariado. As isolinhas da razão mostram que você pode estimar muito bem a razão como uma soma linear (como no método Delta linearizado mencionado / vinculado anteriormente) e que uma aproximação por uma distribuição gaussiana deve funcionar bem (e então você pode usar um t- teste que, para grandes números, será como um teste z).
- Você também pode ver que um gráfico de dispersão como esse pode fornecer mais informações e insights em comparação ao uso apenas do histograma.
Código R para calcular o gráfico:
set.seed(1)
#
#
# function to sampling hypothetic n users
# which will buy star items and/or regular items
#
# star item sales
# 0$ 40$
#
# regular item sales 0$ a b
# 10$ c d
#
#
sample_users <- function(n,a,b,c,d) {
# sampling
q <- sample(1:4, n, replace=TRUE, prob=c(a,b,c,d))
# total dolar value of items
dri = (sum(q==3)+sum(q==4))*10
dsi = (sum(q==2)+sum(q==4))*40
# output
list(dri=dri,dsi=dsi,dti=dri+dsi, q=q)
}
#
# function for drawing those blocks for the tilted histogram
#
block <- function(phi=0.045+0.001/2, r=100, col=1) {
if (col == 1) {
bgs <- rgb(0,0,1,1/4)
cols <- rgb(0,0,1,1/4)
} else {
bgs <- rgb(1,0,0,1/4)
cols <- rgb(1,0,0,1/4)
}
angle <- c(atan(phi+0.001/2),atan(phi+0.001/2),atan(phi-0.001/2),atan(phi-0.001/2))
rr <- c(90000,90000+r,90000+r,90000)
x <- cos(angle)*rr
y <- sin(angle)*rr
polygon(x,y,col=cols,bg=bgs)
}
block <- Vectorize(block)
#
# function to compute Hinkley's density formula
#
fw <- function(w,mu1,mu2,sig1,sig2,rho) {
#several parameters
aw <- sqrt(w^2/sig1^2 - 2*rho*w/(sig1*sig2) + 1/sig2^2)
bw <- w*mu1/sig1^2 - rho*(mu1+mu2*w)/(sig1*sig2)+ mu2/sig2^2
c <- mu1^2/sig1^2 - 2 * rho * mu1 * mu2 / (sig1*sig2) + mu2^2/sig2^2
dw <- exp((bw^2 - c*aw^2)/(2*(1-rho^2)*aw^2))
# output from Hinkley's density formula
out <- (bw*dw / ( sqrt(2*pi) * sig1 * sig2 * aw^3)) * (pnorm(bw/aw/sqrt(1-rho^2),0,1) - pnorm(-bw/aw/sqrt(1-rho^2),0,1)) +
sqrt(1-rho^2)/(pi*sig1*sig2*aw^2) * exp(-c/(2*(1-rho^2)))
out
}
fw <- Vectorize(fw)
#
# function to compute
# theoretic distribution for sample with parameters (a,b,c,d)
# lazy way to compute the mean and variance of the theoretic distribution
fwusers <- function(na,nb,nc,nd,n=10000) {
users <- c(rep(1,na),rep(2,nb),rep(3,nc),rep(4,nd))
dsi <- c(0,40,0,40)[users]
dri <- c(0,0,10,10)[users]
dti <- dsi+dri
sig1 <- sqrt(var(dsi))*sqrt(n)
sig2 <- sqrt(var(dti))*sqrt(n)
cor <- cor(dti,dsi)
mu1 <- mean(dsi)*n
mu2 <- mean(dti)*n
w <- seq(0,1,0.001)
f <- fw(w,mu1,mu2,sig1,sig2,cor)
list(w=w,f=f,sig1 = sig1, sig2=sig2, cor = cor, mu1= mu1, mu2 = mu2)
}
# sample many ntr time to display sample distribution of experiment outcome
ntr <- 10^4
# sample A
dsi1 <- rep(0,ntr)
dti1 <- rep(0,ntr)
for (i in 1:ntr) {
users <- sample_users(10000,0.19,0.001,0.8,0.009)
dsi1[i] <- users$dsi
dti1[i] <- users$dti
}
# sample B
dsi2 <- rep(0,ntr)
dti2 <- rep(0,ntr)
for (i in 1:ntr) {
users <- sample_users(10000,0.19-0.02,0.001,0.8+0.02,0.009)
dsi2[i] <- users$dsi
dti2[i] <- users$dti
}
# hiostograms for ratio
ratio1 <- dsi1/dti1
ratio2 <- dsi2/dti2
h1<-hist(ratio1, breaks = seq(0, round(max(ratio2+0.04),2), 0.001))
h2<-hist(ratio2, breaks = seq(0, round(max(ratio2+0.04),2), 0.001))
# plotting
plot(0, 0,
xlab = "sum of total sales", ylab = "sum of star item sales",
xlim = c(82000,92000),
ylim = c(2500,6000),
pch=21, col = rgb(0,0,1,1/10), bg = rgb(0,0,1,1/10))
title("sample distribution for sum of 10 000 users")
# isolines
brks <- seq(0, round(max(ratio2+0.02),2), 0.001)
for (ls in 1:length(brks)) {
col=rgb(0,0,0,0.25+0.25*(ls%%5==1))
lines(c(0,10000000),c(0,10000000)*brks[ls],lty=2,col=col)
}
# scatter points
points(dti1, dsi1,
pch=21, col = rgb(0,0,1,1/10), bg = rgb(0,0,1,1/10))
points(dti2, dsi2,
pch=21, col = rgb(1,0,0,1/10), bg = rgb(1,0,0,1/10))
# diagonal axis
phi <- atan(h1$breaks)
r <- 90000
lines(cos(phi)*r,sin(phi)*r,col=1)
# histograms
phi <- h1$mids
r <- h1$density*10
block(phi,r,col=1)
phi <- h2$mids
r <- h2$density*10
block(phi,r,col=2)
# labels for histogram axis
phi <- atan(h1$breaks)[1+10*c(1:7)]
r <- 90000
text(cos(phi)*r-130,sin(phi)*r,h1$breaks[1+10*c(1:7)],srt=-87.5,cex=0.9)
text(cos(atan(0.045))*r-400,sin(atan(0.045))*r,"ratio of sum of star items and sum of total items", srt=-87.5,cex=0.9)
# plotting functions for Hinkley densities using variance and means estimated from theoretic samples distribution
wf1 <- fwusers(190,1,800,9,10000)
wf2 <- fwusers(170,1,820,9,10000)
rf1 <- 90000+10*wf1$f
phi1 <- atan(wf1$w)
lines(cos(phi1)*rf1,sin(phi1)*rf1,col=4)
rf2 <- 90000+10*wf2$f
phi2 <- atan(wf2$w)
lines(cos(phi2)*rf2,sin(phi2)*rf2,col=2)