Phân tích Bayes phân cấp về sự khác biệt của tỷ lệ


8

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 Bu1,u2,u3...uNTABpiTi{1...N}iTpiApiB

Để 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 BpApB

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 BpiApiB

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 BnAB

Đưa ra dữ liệu này, tôi cần trả lời các câu hỏi sau:

  1. 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 BuxpxApxBΔ=pxApxB
  2. Đố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 Buyy{1,2,3...,n}syfypyApyBΔypyApyB

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 ppApBp

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 ΔpApBΔ

  • 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 ΔpApBΔ

  • 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ới dpar(0.5,1)các linh mục mà không phải với dgamma(2,20)các linh mục. Cả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ọi 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)

Một hình ảnh của 4 bộ dữ liệu có trong tệp Excel

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.


Bạn đã bỏ qua các khía cạnh quan trọng trong mô tả của bạn. Sau khi bạn thống nhất vẽ một , điều gì xảy ra tiếp theo? Một cái gì đó phải, vì nếu không bạn hoàn toàn không có thông tin về bất kỳ ! Sau đó, bạn quan sát cái gì? Bạn có quan sát và, giả sử, một trận hòa độc lập từ không? Hay bạn chỉ quan sát rút thăm từ và không ghi ? Để ước tính tất cả các phân phối mật độ này, chắc chắn bạn phải lặp lại quá trình nhiều, nhiều lần - bao nhiêu? Hoặc, bằng cách "ước tính", bạn có cho rằng bạn biết tất cả và bạn muốn tính toán phân phối kết quả của thử nghiệm của mình không? p x x o x o x x p xxpxxoxoxxpx
whuber

xoxpx

Tôi đã thêm một ví dụ vào cuối câu hỏi, hy vọng làm cho nó rõ ràng những gì tôi đang cố gắng làm.
Fabio Beltramini

Cảm ơn. Câu hỏi vẫn còn khó hiểu, mặc dù. Trong ví dụ bạn đang quan sát một cặp giá trị theo thứ tự: lần cuộn và thành công. Chính xác thì "phân phối" mà bạn đang tìm hiểu là gì? Chính xác thì tài sản của túi xúc xắc lớn sẽ tương ứng với cái gì?
whuber

1
Cặp giá trị (cuộn và thành công) truyền tải thông tin về một biến tiềm ẩn, p. Phân phối tôi muốn là phân phối p trong túi. Tất nhiên, nếu chúng ta không giả sử một lớp phân phối mà nó thuộc về, có rất nhiều khả năng, nhưng nếu chúng ta nói rằng p là ví dụ phân phối beta, thì sẽ chỉ chọn các tham số phù hợp nhất cho điều này lớp phân phối. Nếu nó giúp, bây giờ hãy xem xét thay vì súc sắc với p = 1 / 4,1 / 6,1 / 8, rằng mỗi đối tượng có ap từ Beta (2,2) ... hoặc Beta (4,4), v.v.
Fabio Beltramini

Câu trả lời:


2

Vì thời gian tiền thưởng đã hết hạn và tôi không nhận được câu trả lời, tôi sẽ đăng câu trả lời mà tôi có thể đưa ra, mặc dù kinh nghiệm hạn chế của tôi với suy luận Bayes cho thấy rằng điều này nên được thực hiện với một sự hoài nghi lành mạnh.

I) Thiết lập

  1. Tôi đã tải xuống và cài đặt JAGS 3.4 và R 3.0.1
  2. Tôi đã cài đặt các gói rjags và coda bằng cách khởi tạo R và sử dụng install.packages (pkgname)

II) Mô hình & Dữ liệu - Được sử dụng mô hình & tệp dữ liệu đã được nêu chi tiết trong câu hỏi. Để trả lời câu hỏi số 1, tôi đã thêm một quan sát bổ sung vào dữ liệu với tất cả bốn biến là 0.

III) Trả lời câu hỏi

  1. Tôi đã chạy JAGS trên mô hình / dữ liệu (mở dòng lệnh, vào thư mục chứa các tệp của bạn và nhập> jags-terminal Command.cmd. Nó chạy và xuất một vài tệp
  2. Trong R, tôi đã sử dụng các lệnh sau:
    • thư viện ("rjags") để tải gói đã cài đặt (và gói coda yêu cầu của nó)
    • setwd () để đến thư mục chứa tệp đầu ra
    • results = read.coda ("STEMchain1.txt", "STEMindex.txt")
  3. Để trả lời câu hỏi đầu tiên:
    • Là một âm mưu PDF, "âm mưu (kết quả [, 3 * N])"
    • Là lượng tử, "lượng tử (kết quả [, 3 * N], c (0,025,0.25,0,5,0,75,0.975))"
    • Trong đó N là số lượng quan sát và quan sát cuối cùng tương ứng với vị trí quan sát "tất cả 0". (1 đến n là cho biến p_A, n + 1 đến 2n là cho p_B và 2n + 1 đến 3n là dành cho delta)
  4. Để trả lời câu hỏi thứ hai, giống như trên, nhưng thay đổi 3 * N -> 2 * N + y

Tôi không chắc đây là cách chính xác để có câu trả lời, hoặc liệu một mô hình phức tạp hơn sẽ tạo ra kết quả tốt hơn, đặc biệt là trong trường hợp tương quan, nhưng hy vọng cuối cùng ai đó có kinh nghiệm hơn sẽ kêu vang ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.