z-test của tỷ lệ
Điều này áp dụng cho một trường hợp khác khi bạn có kết quả nhị phân. Phép thử z về tỷ lệ so sánh tỷ lệ của các kết quả nhị phân đó.
(Bên dưới một số đối số được đưa ra là bạn sẽ có thể thực hiện kiểm tra t, với số lượng lớn gần bằng với kiểm tra z. Với tỷ lệ bạn có thể thực hiện kiểm tra z vì phân phối nhị thức có một tham số xác định phương sai và giá trị trung bình, không giống như phân phối bình thường)
Bootstrapping
Điều này sẽ có thể nhưng không thực sự cần thiết vì phương pháp Delta cung cấp lỗi của thống kê quan sát của bạn đơn giản hơn.
Phương pháp Delta
Bạn quan tâm đến tỷ lệ của hai biến có thể tương quan, 1. tổng doanh số và 2. doanh số trong các mặt hàng sao.
Các biến này có khả năng được phân phối bình thường một cách bất thường vì chúng là tổng doanh số từ nhiều cá nhân (quy trình thử nghiệm có thể được coi là một quá trình như chọn một mẫu bán hàng từ người dùng cá nhân từ phân phối doanh số từ người dùng cá nhân). Vì vậy bạn có thể sử dụng phương pháp Delta.
Việc sử dụng phương pháp Delta để ước tính tỷ lệ được mô tả ở đây . Kết quả của ứng dụng phương pháp Delta này thực sự trùng khớp với kết quả gần đúng của Hinkley , một biểu thức chính xác cho tỷ lệ của hai biến phân phối bình thường tương quan (Hinkley DV, 1969, Trên Tỷ lệ của hai biến ngẫu nhiên bình thường tương quan, Biometrica vol. 56 số 3).
Dành cho Z= =XY với [XY] ~N( [μxμy] , [σ2xρσxσyρσxσyσ2y] )
Kết quả chính xác là: f( z) = =b ( z) d( z)một ( z)312 π--√σXσY[ Φ (b ( z)1 -ρ2-----√một ( z))−Φ(−b(z)1−ρ2−−−−−√a(z))]+1−ρ2−−−−−√πσXσYa(z)2exp(−c2(1−ρ2))
với a(z)b(z)cd(z)====(z2σ2X−2ρzσXσY+1σ2Y)12μXzσ2X−ρ(μX+μYz)σXσY+μYσ2Yμ2Xσ2Y−2ρμXμY+σXσY+μ2Yσ2Yexp(b(z)2−ca(z)22(1−ρ2)a(z)2)
Và một xấp xỉ dựa trên một hành vi giả định là: (cho θY/σY→∞): F(z)→Φ(z−μX/μYσXσYa(z)/μY)
Bạn kết thúc với kết quả phương thức Delta khi bạn chèn xấp xỉ 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)12
Các giá trị cho μX,μY,σX,σY, ρ có thể được ước tính từ các quan sát của bạn cho phép bạn ước tính phương sai và giá trị trung bình của phân phối cho một người dùng và liên quan đến phương sai này và trung bình cho phân phối mẫu của tổng số người dùng.
Thay đổi số liệu
Tôi tin rằng việc can thiệp vào việc phân phối doanh số (không phải là tỷ lệ) từ những người dùng đơn lẻ là điều đáng ngại. Cuối cùng, bạn có thể kết thúc với một tình huống mà ở đó là một sự khác biệt giữa các thành viên trong nhóm A và B, nhưng nó chỉ xảy ra là không đáng kể khi bạn xem các biến duy nhất của tỷ lệ (điều này là một chút tương tự như MANOVA là mạnh hơn hơn các xét nghiệm ANOVA đơn).
Trong khi sự hiểu biết về sự khác biệt giữa các nhóm, mà không có một sự khác biệt đáng kể trong số liệu mà bạn đang interrested trong, có thể không giúp bạn nhiều trong việc đưa ra các quyết định, nó không giúp bạn trong việc tìm hiểu lý thuyết cơ bản và có khả năng thiết kế tốt hơn thay đổi / thí nghiệm lần sau.
Hình minh họa
Dưới đây là một minh họa đơn giản:
Hãy để sự phân bố giả định doanh thu từ những người dùng được phân phối như phân số a , b , c , d cho biết có bao nhiêu người dùng trong một trường hợp cụ thể (trong thực tế phân phối này sẽ phức tạp hơn):
star item sales
0$ 40$
other item sales 0$ a b
10$ c d
Sau đó, phân phối mẫu cho tổng số từ một nhóm có 10000 người dùng, với một thuật toán a = 0,125 , b = 0,001 , c = 0,800 , d= 0,009
và thuật toán khác a = 0,170 , b = 0,001 , c = 0,820 , d= 0,009
sẽ giống như:
Trong đó cho thấy 10000 lượt chạy thu hút người dùng mới và tính toán doanh số và tỷ lệ. Biểu đồ là để phân phối các tỷ lệ. Các dòng là tính toán sử dụng chức năng từ Hinkley.
- Bạn có thể thấy rằng phân phối của hai tổng doanh số xấp xỉ một mức bình thường đa biến. Các cách ly cho tỷ lệ cho thấy rằng bạn có thể ước tính tỷ lệ rất tốt bằng tổng tuyến tính (như trong phương pháp Delta được tuyến tính hóa được liên kết / đã đề cập trước đó) và một phép tính gần đúng bằng phân phối Gaussian sẽ hoạt động tốt (và sau đó bạn có thể sử dụng t- kiểm tra với số lượng lớn sẽ giống như kiểm tra z).
- Bạn cũng có thể thấy rằng một biểu đồ phân tán như thế này có thể cung cấp cho bạn nhiều thông tin và hiểu biết hơn so với việc chỉ sử dụng biểu đồ.
Mã R để tính toán biểu đồ:
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)