比率のz検定
これは、バイナリの結果がある場合の別のケースに適用されます。比率のz検定は、これらのバイナリ結果の比率を比較します。
(以下では、t検定を実行できるといういくつかの議論が行われます。これは、大きな数の場合、z検定とほぼ同じです。比率を使用すると、2項分布が1つのパラメーターを決定するため、z検定を実行できます。正規分布とは異なり、分散と平均)
ブートストラップ
これは可能ですが、観測された統計のエラーをより簡単に提供するDeltaメソッドのため、実際には必要ではありません。
デルタ法
2つの、おそらく相関する変数の比率、1。総売上高と2.スターアイテムの売上高に関心があります。
これらの変数は、多くの個人からの売上の合計であるため、漸近的に正規分布している可能性があります(テスト手順は、個々のユーザーからの売上の分布から個々のユーザーからの売上のサンプルを選ぶようなプロセスと見なすことができます)。したがって、Deltaメソッドを使用できます。
ここでは、比率の推定にデルタ法を使用する方法について説明します。デルタ方法のこの適用の結果は、実際の近似値と一致ヒンクリーの結果、両者の比の正確な表現は、2つの相関正規確率変数の比で正常に分布変数(ヒンクリーDV、1969、相関Biometricaの体積56 3番)。
ために Z=XY と [XY]∼N([μxμy],[σ2xρσxσyρσxσyσ2y])
正確な結果は次のとおりです。 f(z)=b(z)d(z)a(z)312π−−√σXσY[Φ(b(z)1−ρ2−−−−−√a(z))−Φ(−b(z)1−ρ2−−−−−√a(z))]+1−ρ2−−−−−√πσXσYa(z)2exp(−c2(1−ρ2))
と 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)
そして、漸近的な振る舞いに基づく近似は: θY/σY→∞): F(z)→Φ(z−μX/μYσXσYa(z)/μY)
近似を挿入すると、デルタ法の結果になります 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
の値 μX,μY,σX,σY,ρ 単一のユーザーの分散の分散と平均を推定できる観測値から推定でき、これに関連して、複数のユーザーの合計の標本分布の分散と平均を推定できます。
指標を変更する
私は、単一のユーザーからの売上高の分布(比率ではなく)の最初のプロットを行うことは興味深いと思います。最終的にあなたがそこにいることを状況に終わるかもしれないですグループAとBのユーザーとの違いは、それはちょうどあなたが比率の単一の変数を考える際に重要ではないことを起こる(これは、MANOVAはと少し似ているがより強力であること単一の分散分析テストより)。
あなたがでinterrestedされていることをメトリックに有意差なしのグループ、との差の知識が意思決定を行う際に多くのお手伝いをしていないかもしれないが、それはありませんあなたの基本的な理論を理解する上で、おそらくより良い変更/実験次回の設計を支援します。
図
以下は簡単な図です。
ユーザーからの売上の架空の分布を分数として分布させる a,b,c,d 特定のケースのユーザー数を示します(実際には、この分布はより複雑になります)。
star item sales
0$ 40$
other item sales 0$ a b
10$ c d
次に、1つのアルゴリズムで、10000ユーザーのグループの合計の標本分布 a=0.190,b=0.001,c=0.800,d=0.009
そして他のアルゴリズム a=0.170,b=0.001,c=0.820,d=0.009
次のようになります。
これは、10000回の実行が新しいユーザーを引き、売上と比率を計算していることを示しています。ヒストグラムは比率の分布です。線は、Hinkleyの関数を使用した計算です。
- 2つの合計販売数の分布は、ほぼ多変量正規であることがわかります。比率の等値線は、比率を線形合計として非常に適切に推定できること(前述の/リンクされた線形化デルタ法のように)、およびガウス分布による近似が適切に機能することを示します(その後、t-多数の場合はz検定のようになります。
- このような散布図は、ヒストグラムのみを使用する場合と比較して、より多くの情報と洞察を提供することもわかります。
グラフを計算するためのRコード:
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)