การติดตั้งโมเดลเชิงเส้นตรงแบบเฮเทอโรเซสติกสำหรับการตอบสนองแบบทวินาม


9

ผมมีข้อมูลจากการออกแบบการทดลองต่อไปนี้: ข้อสังเกตของฉันมีการนับจำนวนของตัวเลขของความสำเร็จ (คนK) ออกจากจำนวนของการทดลอง (ตรงN) วัดสองกลุ่มแต่ละประกอบด้วยIบุคคลจากTการรักษาที่ในแต่ละชุดปัจจัยดังกล่าวมีRการทำซ้ำ . ดังนั้นทั้งหมดที่ฉันมี 2 * I * T * R K 'และสอดคล้องN ' s

ข้อมูลมาจากชีววิทยา แต่ละคนเป็นยีนที่ฉันวัดระดับการแสดงออกของสองรูปแบบทางเลือก (เนื่องจากปรากฏการณ์ที่เรียกว่าการประกบทางเลือก) ดังนั้นKคือระดับการแสดงออกของหนึ่งในรูปแบบและNคือผลรวมของระดับการแสดงออกของทั้งสองรูปแบบ ตัวเลือกระหว่างสองรูปแบบในสำเนาที่แสดงออกเพียงครั้งเดียวถือว่าเป็นการทดลองของ Bernoulli ดังนั้นKจากNสำเนาตามทวินาม แต่ละกลุ่มประกอบด้วยยีนที่แตกต่างกัน ~ 20 และยีนในแต่ละกลุ่มมีหน้าที่ทั่วไปซึ่งแตกต่างกันระหว่างสองกลุ่ม สำหรับยีนแต่ละตัวในแต่ละกลุ่มฉันมีการวัดประมาณ 30 ตัวอย่างจากแต่ละเนื้อเยื่อที่แตกต่างกัน (การรักษา) ฉันต้องการประเมินผลกระทบที่กลุ่มและการรักษามีต่อความแปรปรวนของ K / N

การแสดงออกของยีนเป็นที่รู้กันว่า overdispersed ดังนั้นการใช้ทวินามลบในรหัสด้านล่าง

เช่นRรหัสของข้อมูลจำลอง:

library(MASS)
set.seed(1)
I = 20 # individuals in each group
G = 2  # groups
T = 3  # treatments
R = 30 # replicates of each individual, in each group, in each treatment

groups     = letters[1:G]
ids        = c(sapply(groups, function(g){ paste(rep(g, I), 1:I, sep=".") }))
treatments = paste(rep("t", T), 1:T, sep=".")
 # create random mean number of trials for each individual and 
 #  dispersion values to simulate trials from a negative binomial:
mean.trials = rlnorm(length(ids), meanlog=10, sdlog=1)
thetas      = 10^6/mean.trials
 # create the underlying success probability for each individual:
p.vec = runif(length(ids), min=0, max=1)
 # create a dispersion factor for each success probability, where the 
 #  individuals of group 2 have higher dispersion thus creating a group effect:
dispersion.vec = c(runif(length(ids)/2, min=0, max=0.1),
                   runif(length(ids)/2, min=0, max=0.2))
 # create empty an data.frame:
data.df = data.frame(id=rep(sapply(ids, function(i){ rep(i, R) }), T),
                     group=rep(sapply(groups, function(g){ rep(g, I*R) }), T),
                     treatment=c(sapply(treatments, 
                                        function(t){ rep(t, length(ids)*R) })),
                     N=rep(NA, length(ids)*T*R), 
                     K=rep(NA, length(ids)*T*R) )
 # fill N's and K's - trials and successes
for(i in 1:length(ids)){
  N     = rnegbin(T*R, mu=mean.trials[i], theta=thetas[i])
  probs = runif(T*R, min=max((1-dispersion.vec[i])*p.vec[i],0),
                max=min((1+dispersion.vec)*p.vec[i],1))
  K     = rbinom(T*R, N, probs)
  data.df$N[which(as.character(data.df$id) == ids[i])] = N
  data.df$K[which(as.character(data.df$id) == ids[i])] = K
}

ฉันสนใจที่จะประเมินผลกระทบที่กลุ่มและการรักษามีต่อการกระจายตัว (หรือความแปรปรวน) ของความน่าจะเป็นที่จะประสบความสำเร็จ (เช่นK/N) ดังนั้นฉันกำลังมองหา glm ที่เหมาะสมซึ่งการตอบสนองเป็น K / N แต่นอกเหนือจากการสร้างแบบจำลองมูลค่าที่คาดหวังของการตอบสนองความแปรปรวนของการตอบสนองยังเป็นแบบจำลอง

เห็นได้ชัดว่าความแปรปรวนของความน่าจะเป็นที่ประสบความสำเร็จแบบทวินามนั้นได้รับผลกระทบจากจำนวนการทดลองและความน่าจะเป็นความสำเร็จพื้นฐาน (ยิ่งจำนวนการทดลองมากขึ้นและยิ่งความน่าจะเป็นความสำเร็จขั้นพื้นฐานมากขึ้น (เช่นใกล้ 0 หรือ 1) ยิ่งต่ำ ความแปรปรวนของความน่าจะเป็นที่ประสบความสำเร็จ) ดังนั้นฉันจึงให้ความสนใจในการมีส่วนร่วมของกลุ่มและการรักษามากกว่าจำนวนการทดลองและความน่าจะเป็นความสำเร็จพื้นฐาน ฉันเดาว่าการใช้การแปลงอาร์ซินสแควร์รูทกับการตอบสนองจะกำจัดสิ่งหลัง แต่ไม่ใช่จำนวนการทดลอง

ถึงแม้ว่าในตัวอย่างข้อมูลที่จำลองขึ้นด้านบนการออกแบบนั้นมีความสมดุล (จำนวนเท่ากันของแต่ละคนในแต่ละกลุ่มและจำนวนซ้ำกันในแต่ละคนจากแต่ละกลุ่มในการรักษาแต่ละครั้ง) ในข้อมูลจริงของฉันมันไม่ใช่ - ทั้งสองกลุ่มทำ ไม่มีจำนวนบุคคลที่เท่ากันและจำนวนของการทำซ้ำแตกต่างกันไป นอกจากนี้ฉันคิดว่าบุคคลควรถูกตั้งค่าเป็นลักษณะพิเศษแบบสุ่ม

การพล็อตความแปรปรวนตัวอย่างเทียบกับค่าเฉลี่ยตัวอย่างของความน่าจะเป็นความสำเร็จโดยประมาณ (แสดงเป็น p hat = K / N) ของแต่ละบุคคลแสดงให้เห็นว่าความน่าจะเป็นที่จะประสบความสำเร็จอย่างมากมีความแปรปรวนต่ำกว่า: ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้จะถูกตัดออกเมื่อความน่าจะเป็นที่ประสบความสำเร็จโดยประมาณถูกเปลี่ยนโดยใช้การเปลี่ยนแปลงความแปรปรวนแบบอาร์ซินสแควร์รูทแบบเสถียร (แสดงเป็นอาร์คซิน (sqrt (p หมวก)): ป้อนคำอธิบายรูปภาพที่นี่

การพล็อตความแปรปรวนตัวอย่างของความน่าจะเป็นที่คาดคะเนความสำเร็จที่ได้รับการแปลงเทียบกับค่าเฉลี่ย N แสดงความสัมพันธ์เชิงลบที่คาดหวัง: ป้อนคำอธิบายรูปภาพที่นี่

การพล็อตความแปรปรวนตัวอย่างของความน่าจะเป็นที่คาดคะเนความสำเร็จที่แปลงแล้วสำหรับทั้งสองกลุ่มแสดงให้เห็นว่ากลุ่ม b มีความแปรปรวนสูงกว่าเล็กน้อยซึ่งเป็นวิธีที่ฉันจำลองข้อมูล: ป้อนคำอธิบายรูปภาพที่นี่

ในที่สุดการพล็อตความแปรปรวนตัวอย่างของความน่าจะเป็นที่จะเกิดความสำเร็จโดยประมาณสำหรับการรักษาทั้งสามไม่แสดงความแตกต่างระหว่างการรักษาซึ่งเป็นวิธีที่ฉันจำลองข้อมูล: ป้อนคำอธิบายรูปภาพที่นี่

มีรูปแบบของโมเดลเชิงเส้นทั่วไปที่ฉันสามารถหาจำนวนกลุ่มและผลการรักษาต่อความแปรปรวนของความน่าจะเป็นที่ประสบความสำเร็จหรือไม่?

บางทีแบบจำลองเชิงเส้นตรงแบบเฮเทอโรเซสติกหรือรูปแบบของรูปแบบความแปรปรวนเชิงเส้นบางรูปแบบ?

บางอย่างในบรรทัดของแบบจำลองที่แปรปรวน (y) = Zλนอกเหนือจาก E (y) = Xβโดยที่ Z และ X เป็น regressors ของค่าเฉลี่ยและความแปรปรวนตามลำดับซึ่งในกรณีของฉันจะเหมือนกันและรวม การรักษา (ระดับ t.1, t.2 และ t.3) และกลุ่ม (ระดับ a และ b) และอาจเป็น N และ R และด้วยเหตุนี้λและβจะประเมินผลกระทบที่เกี่ยวข้อง

อีกทางเลือกหนึ่งฉันสามารถปรับโมเดลให้เหมาะกับความแปรปรวนตัวอย่างข้ามการจำลองแบบของยีนแต่ละตัวจากแต่ละกลุ่มในการรักษาแต่ละครั้งโดยใช้ glm ซึ่งเป็นแบบจำลองเฉพาะค่าคาดหวังของการตอบสนอง คำถามเดียวที่นี่คือวิธีการบัญชีสำหรับข้อเท็จจริงที่ว่ายีนที่แตกต่างกันมีจำนวนซ้ำกัน ฉันคิดว่าน้ำหนักใน glm สามารถอธิบายได้ว่า (ตัวอย่างความแปรปรวนที่ยึดตามการจำลองซ้ำมากขึ้นควรมีน้ำหนักที่สูงขึ้น) แต่ควรตั้งค่าน้ำหนักใด

หมายเหตุ: ฉันได้ลองใช้dglmแพ็คเกจ R:

library(dglm)
dglm.fit = dglm(formula = K/N ~ 1, dformula = ~ group + treatment, family = quasibinomial, weights = N, data = data.df)
summary(dglm.fit)
Call: dglm(formula = K/N ~ 1, dformula = ~group + treatment, family = quasibinomial, 
    data = data.df, weights = N)

Mean Coefficients:
               Estimate Std. Error   t value     Pr(>|t|)
(Intercept) -0.09735366 0.01648905 -5.904138 3.873478e-09
(Dispersion Parameters for quasibinomial family estimated as below )

    Scaled Null Deviance: 3600 on 3599 degrees of freedom
Scaled Residual Deviance: 3600 on 3599 degrees of freedom

Dispersion Coefficients:
                Estimate Std. Error      z value  Pr(>|z|)
(Intercept)  9.140517930 0.04409586 207.28746254 0.0000000
group       -0.071009599 0.04714045  -1.50634107 0.1319796
treatment   -0.001469108 0.02886751  -0.05089138 0.9594121
(Dispersion parameter for Gamma family taken to be 2 )

    Scaled Null Deviance: 3561.3 on 3599 degrees of freedom
Scaled Residual Deviance: 3559.028 on 3597 degrees of freedom

Minus Twice the Log-Likelihood: 29.44568 
Number of Alternating Iterations: 5 

เอฟเฟกต์ของกลุ่มตาม dglm.fit นั้นค่อนข้างอ่อนแอ ฉันสงสัยว่าแบบจำลองนั้นตั้งไว้ถูกต้องหรือเป็นพลังที่รุ่นนี้มี


1
นี่เป็นทึบแสงเล็กน้อย คุณสามารถพูดได้อย่างเฉพาะเจาะจงว่าสถานการณ์ของคุณคืออะไรในรูปธรรม?
gung - Reinstate Monica

1
ฉันแก้ไขโพสต์ของฉัน แต่โดยทั่วไปแล้วฉันกำลังมองหา glm ที่นอกเหนือจาก E (y) = Xβ, รุ่น Variance (y) = Z where โดยที่คอลัมน์ของ X คือ regressors สำหรับค่าเฉลี่ยของการตอบสนองและคอลัมน์ของ Z คือ regressors สำหรับความแปรปรวนของการตอบสนองและβและλเป็นพารามิเตอร์ที่ประเมินผลกระทบต่อค่าเฉลี่ยและความแปรปรวนตามลำดับ
user1701545

2
ฉันรวบรวมมาก แต่ก็ยากที่จะคิดผ่านสิ่งนี้ในแง่คลุมเครือดังกล่าว คุณหารือเกี่ยวกับตัวแปร X หรือ Z ไม่เช่น คุณกำลังศึกษาเรื่องอะไร ข้อมูลของคุณคืออะไร? อื่น ๆ
gung - Reinstate Monica

ไม่มีปัญหา - ดูโพสต์ที่อัปเดต
user1701545

คำตอบ:


1

บางทีสิ่งที่คุณกำลังมองหาคือสิ่งที่เรียกว่าโมเดลเชิงเส้นคู่ทั่วไปที่ทั้งพารามิเตอร์ค่าเฉลี่ยและพารามิเตอร์การกระจายเป็นแบบจำลอง แม้จะมีแพ็คเกจdglm ที่ออกแบบมาเพื่อให้เหมาะกับรุ่นดังกล่าว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.