Tại sao phân cấp? : Tôi đã thử nghiên cứu vấn đề này và theo những gì tôi hiểu, đây là vấn đề "phân cấp", bởi vì bạn đang quan sát về các quan sát từ dân số, thay vì quan sát trực tiếp từ dân số đó. Tham khảo: http://www.econ.umn.edu/~bajari/iosp07/rossi1.pdf
Tại sao Bayes? : Ngoài ra, tôi đã gắn thẻ nó là Bayesian vì một giải pháp tiệm cận / thường xuyên có thể tồn tại cho một "thiết kế thử nghiệm" trong đó mỗi "tế bào" được chỉ định quan sát đầy đủ, nhưng cho các mục đích thực tế là các bộ dữ liệu trong thế giới thực / không thử nghiệm (hoặc tại ít nhất của tôi) là dân cư thưa thớt. Có rất nhiều dữ liệu tổng hợp, nhưng các ô riêng lẻ có thể để trống hoặc chỉ có một vài quan sát.
Mô hình trừu tượng:
Đặt U là dân số của các đơn vị cho mỗi đơn vị chúng ta có thể áp dụng một điều trị, , của hoặc , và từ đó chúng ta quan sát các quan sát iid của 1 hoặc 0 aka thành công và thất bại. Đặt cho là xác suất quan sát từ đối tượng đang điều trị dẫn đến thành công. Lưu ý rằng có thể tương quan với . TAB p i T i∈{1 ...N}iT p i A p i B
Để làm cho phân tích khả thi, chúng tôi (a) giả định rằng các phân phối và là mỗi phiên bản của một họ phân phối cụ thể, chẳng hạn như phân phối beta, (b) và chọn một số phân phối trước cho siêu âm.p B
Ví dụ về mô hình
Tôi có một túi Magic 8 Balls thực sự lớn. Mỗi quả bóng 8, khi bị rung, có thể tiết lộ "Có" hoặc "Không". Ngoài ra, tôi có thể lắc chúng với quả bóng từ bên phải hoặc lộn ngược (giả sử Magic 8 Balls của chúng tôi hoạt động lộn ngược ...). Hướng của quả bóng có thể thay đổi hoàn toàn xác suất dẫn đến "Có" hoặc "Không" (nói cách khác, ban đầu bạn không tin rằng có tương quan với ). p i B
Câu hỏi:
Ai đó đã lấy mẫu ngẫu nhiên một con số, , các đơn vị từ dân số, và cho mỗi đơn vị đã thực hiện và ghi lại một số tùy ý quan sát dưới điều trị và một số tùy ý quan sát dưới điều trị . (Trong thực tế, trong bộ dữ liệu của chúng tôi, hầu hết các đơn vị sẽ chỉ có các quan sát trong một lần điều trị)A B
Đưa ra dữ liệu này, tôi cần trả lời các câu hỏi sau:
- Nếu tôi lấy ngẫu nhiên một đơn vị mới từ dân số, làm thế nào tôi có thể tính toán (phân tích hoặc ngẫu nhiên) phân phối sau chung của và ? (Chủ yếu để chúng tôi có thể xác định sự khác biệt dự kiến về tỷ lệ, )p x A p x B Δ = p x A - p x B
- Đối với một đơn vị cụ thể , , với các quan sát về thành công của và , làm thế nào tôi có thể tính toán (phân tích hoặc ngẫu nhiên) phân phối sau cho và , một lần nữa để xây dựng phân phối về sự khác biệt về tỷ lệ y ∈ { 1 , 2 , 3 ... , n } s y f y p y A p y B Δ y p y A - p y B
Câu hỏi về phần thưởng: Mặc dù chúng tôi thực sự mong đợi và sẽ rất tương quan, nhưng chúng tôi không mô hình hóa rõ ràng điều đó. Trong trường hợp có khả năng là một giải pháp ngẫu nhiên, tôi tin rằng điều này sẽ khiến một số người lấy mẫu, bao gồm cả Gibbs, kém hiệu quả trong việc khám phá phân phối sau. Đây có phải là trường hợp không, và nếu vậy, chúng ta nên sử dụng một bộ lấy mẫu khác, bằng cách nào đó mô hình hóa mối tương quan thành một biến riêng biệt và biến đổi các phân phối để làm cho chúng không bị lỗi, hoặc chỉ chạy bộ lấy mẫu lâu hơn?p B p
Trả lời tiêu chí
Tôi đang tìm kiếm một câu trả lời rằng:
Có mã, tốt nhất là sử dụng Python / PyMC hoặc chặn, JAGS, mà tôi có thể chạy
Có thể xử lý đầu vào của hàng ngàn đơn vị
Cho đủ đơn vị và mẫu, có thể xuất các bản phân phối cho , và dưới dạng câu trả lời cho Câu hỏi 1, có thể được hiển thị để khớp với các phân phối dân số cơ bản (để được kiểm tra đối với các bảng excel được cung cấp trong "bộ dữ liệu thử thách" phần)p B Δ
Cung cấp đủ đơn vị và mẫu, có thể xuất các bản phân phối phù hợp cho , và (Tôi sẽ sử dụng các bảng excel được cung cấp trong phần "bộ dữ liệu thử thách" để kiểm tra) như một câu trả lời cho Câu hỏi 2 và cung cấp một số lý do tại sao các phân phối này là chính xácp B Δ
Nếu câu trả lời tương tự như mô hình JAGS cuối cùng mà tôi đã đăng, hãy giải thích lý do tại sao nó hoạt động vớiCảm ơn Martyn Plummer trên diễn đàn JAGS vì đã bắt lỗi trong mô hình JAGS của tôi. Khi cố gắng đặt trước Gamma (Shape = 2, Scale = 20), tôi đã gọidpar(0.5,1)
các linh mục mà không phải vớidgamma(2,20)
các linh mục.dgamma(2,20)
mà thực sự đặt trước Gamma (Shape = 2, InverseScale = 20) = Gamma (Shape = 2, Scale = 0,05).
Bộ dữ liệu thử thách
Tôi đã tạo một vài bộ dữ liệu mẫu trong Excel, với một vài tình huống có thể khác nhau, thay đổi độ chặt của phân phối p, mối tương quan giữa chúng và giúp dễ dàng thay đổi các đầu vào khác. https://docs.google.com/file/d/0B_rPBjs4Cp0zLVBybU1nVnd0ZFU/edit?usp=shaming (~ 8Mb)
Giải pháp cố gắng / một phần của tôi cho đến nay
1) Tôi đã tải xuống và cài đặt Python 2.7 và PyMC 2.2. Ban đầu, tôi có một mô hình không chính xác để chạy, nhưng khi tôi cố gắng cải tổ mô hình, phần mở rộng bị đóng băng. Bằng cách thêm / xóa mã, tôi đã xác định mã kích hoạt đóng băng là mc.Binomial (...), mặc dù chức năng này đã hoạt động trong mô hình đầu tiên, vì vậy tôi cho rằng có gì đó không đúng với cách tôi đã chỉ định mô hình.
import pymc as mc
import numpy as np
import scipy.stats as stats
from __future__ import division
cases=[0,0]
for case in range(2):
if case==0:
# Taken from the sample datasets excel sheet, Focused Correlated p's
c_A_arr, n_A_arr, c_B_arr, n_B_arr=np.loadtxt("data/TightCorr.tsv", unpack=True)
if case==1:
# Taken from the sample datasets excel sheet, Focused Uncorrelated p's
c_A_arr, n_A_arr, c_B_arr, n_B_arr=np.loadtxt("data/TightUncorr.tsv", unpack=True)
scale=20.0
alpha_A=mc.Uniform("alpha_A", 1,scale)
beta_A=mc.Uniform("beta_A", 1,scale)
alpha_B=mc.Uniform("alpha_B", 1,scale)
beta_B=mc.Uniform("beta_B", 1,scale)
p_A=mc.Beta("p_A",alpha=alpha_A,beta=beta_A)
p_B=mc.Beta("p_B",alpha=alpha_B,beta=beta_B)
@mc.deterministic
def delta(p_A=p_A,p_B=p_B):
return p_A-p_B
obs_n_A=mc.DiscreteUniform("obs_n_A",lower=0,upper=20,observed=True, value=n_A_arr)
obs_n_B=mc.DiscreteUniform("obs_n_B",lower=0,upper=20,observed=True, value=n_B_arr)
obs_c_A=mc.Binomial("obs_c_A",n=obs_n_A,p=p_A, observed=True, value=c_A_arr)
obs_c_B=mc.Binomial("obs_c_B",n=obs_n_B,p=p_B, observed=True, value=c_B_arr)
model = mc.Model([alpha_A,beta_A,alpha_B,beta_B,p_A,p_B,delta,obs_n_A,obs_n_B,obs_c_A,obs_c_B])
cases[case] = mc.MCMC(model)
cases[case].sample(24000, 12000, 2)
lift_samples = cases[case].trace('delta')[:]
ax = plt.subplot(211+case)
figsize(12.5,5)
plt.title("Posterior distributions of lift from 0 to T")
plt.hist(lift_samples, histtype='stepfilled', bins=30, alpha=0.8,
label="posterior of lift", color="#7A68A6", normed=True)
plt.vlines(0, 0, 4, color="k", linestyles="--", lw=1)
plt.xlim([-1, 1])
2) Tôi đã tải xuống và cài đặt JAGS 3.4. Sau khi nhận được sự điều chỉnh về các linh mục của tôi từ diễn đàn JAGS, bây giờ tôi có mô hình này, chạy thành công:
Mô hình
var alpha_A, beta_A, alpha_B, beta_B, p_A[N], p_B[N], delta[N], n_A[N], n_B[N], c_A[N], c_B[N];
model {
for (i in 1:N) {
c_A[i] ~ dbin(p_A[i],n_A[i])
c_B[i] ~ dbin(p_B[i],n_B[i])
p_A[i] ~ dbeta(alpha_A,beta_A)
p_B[i] ~ dbeta(alpha_B,beta_B)
delta[i] <- p_A[i]-p_B[i]
}
alpha_A ~ dgamma(1,0.05)
alpha_B ~ dgamma(1,0.05)
beta_A ~ dgamma(1,0.05)
beta_B ~ dgamma(1,0.05)
}
Dữ liệu
"N" <- 60
"c_A" <- structure(c(0,6,0,3,0,8,0,4,0,6,1,5,0,5,0,7,0,3,0,7,0,4,0,5,0,4,0,5,0,4,0,2,0,4,0,5,0,8,2,7,0,6,0,3,0,3,0,8,0,4,0,4,2,6,0,7,0,3,0,1))
"c_B" <- structure(c(5,0,2,2,2,0,2,0,2,0,0,0,5,0,4,0,3,1,2,0,2,0,2,0,0,0,3,0,6,0,4,1,5,0,2,0,6,0,1,0,2,0,4,0,4,1,1,0,3,0,5,0,0,0,5,0,2,0,7,1))
"n_A" <- structure(c(0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3))
"n_B" <- structure(c(9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3,9,0,9,0,9,0,3,0,9,0,9,0,9,3))
Điều khiển
model in Try1.bug
data in Try1.r
compile, nchains(2)
initialize
update 400
monitor set p_A, thin(3)
monitor set p_B, thin(3)
monitor set delta, thin(3)
update 1000
coda *, stem(Try1)
Ứng dụng thực tế cho bất cứ ai muốn chọn mô hình :)
Trên web, thử nghiệm A / B điển hình xem xét tác động đến tỷ lệ chuyển đổi từ một trang hoặc đơn vị nội dung, với các biến thể có thể có. Các giải pháp điển hình bao gồm một thử nghiệm có ý nghĩa cổ điển đối với các giả thuyết null hoặc hai tỷ lệ bằng nhau hoặc các giải pháp Bayes phân tích gần đây tận dụng phân phối beta như một liên hợp trước.
Thay vì cách tiếp cận một đơn vị nội dung này, tình cờ sẽ cần rất nhiều khách truy cập cho mỗi đơn vị tôi quan tâm đến thử nghiệm, chúng tôi muốn so sánh các biến thể trong một quy trình tạo ra nhiều đơn vị nội dung (thực sự không phải là một kịch bản bất thường ...). Vì vậy, về tổng thể, các đơn vị / trang được tạo bởi quá trình A hoặc B có rất nhiều lượt truy cập / dữ liệu, nhưng mỗi đơn vị riêng lẻ có thể chỉ có một vài quan sát.