คุณจะทำ Bayesian ANOVA และการถดถอยใน R อย่างไร [ปิด]


14

ฉันมีชุดข้อมูลที่ค่อนข้างง่ายซึ่งประกอบด้วยตัวแปรอิสระหนึ่งตัวหนึ่งตัวแปรขึ้นอยู่กับหนึ่งตัวและตัวแปรเด็ดขาด ผมมีประสบการณ์มากมายการทดสอบการทำงาน frequentist ชอบaov()และlm()แต่ฉันไม่สามารถหาวิธีการดำเนินการเทียบเท่าแบบเบย์ในอาร์

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

ฉันไม่ได้มีความเชี่ยวชาญในสถิติมากนัก แต่ฉันทามติดูเหมือนว่าการใช้การทดสอบขั้นพื้นฐานที่มีค่า p นั้นตอนนี้คิดว่าค่อนข้างผิดและฉันพยายามติดตาม ความนับถือ.


2
การวิเคราะห์ข้อมูลแบบเบย์: การสอนด้วย R และ BUGSอาจเป็นการเริ่มต้นที่ดี นอกจากนี้ยังมีการเชื่อมโยงบางอย่างสำหรับคชกรรม ANOVA ในคำถามที่เกี่ยวข้องนี้: เบส์สองปัจจัย ANOVA ฉันไม่ชัดเจนกับประโยคสุดท้ายของคุณเพราะแทนที่จะตีความค่า p เรามักแนะนำให้ใช้การวัดขนาดของเอฟเฟกต์
chl

คำตอบ:


12

หากคุณตั้งใจจะทำสถิติแบบเบย์จำนวนมากคุณจะพบว่ามีประโยชน์ในการเรียนรู้ภาษา BUGS / JAGS ซึ่งสามารถเข้าถึงได้ใน R ผ่านแพ็คเกจ R2OpenBUGS หรือ R2WinBUGS

อย่างไรก็ตามสำหรับตัวอย่างด่วนที่ไม่ต้องการความเข้าใจไวยากรณ์ของ BUGS คุณสามารถใช้แพ็คเกจ "bayesm" ซึ่งมีฟังก์ชัน runiregGibbs สำหรับการสุ่มตัวอย่างจากการแจกแจงหลัง นี่คือตัวอย่างที่มีข้อมูลคล้ายกับที่คุณอธิบาย .....

library(bayesm)

podwt <- structure(list(wt = c(1.76, 1.45, 1.03, 1.53, 2.34, 1.96, 1.79, 1.21, 0.49, 0.85, 1, 1.54, 1.01, 0.75, 2.11, 0.92), treat = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("I", "U"), class = "factor"), mus = c(4.15, 2.76, 1.77, 3.11, 4.65, 3.46, 3.75, 2.04, 1.25, 2.39, 2.54, 3.41, 1.27, 1.26, 3.87, 1.01)), .Names = c("wt", "treat", "mus"), row.names = c(NA, -16L), class = "data.frame")

# response
y1 <- podwt$wt

# First run a one-way anova

# Create the design matrix - need to insert a column of 1s
x1 <- cbind(matrix(1,nrow(podwt),1),podwt$treat)

# data for the Bayesian analysis
dt1 <- list(y=y1,X=x1)

# runiregGibbs uses a normal prior for the regression coefficients and 
# an inverse chi-squared prior for va

# mean of the normal prior. We have 2 estimates - 1 intercept 
# and 1 regression coefficient
betabar1 <- c(0,0)

# Pecision matrix for the normal prior. Again we have 2
A1 <- 0.01 * diag(2)
# note this is a very diffuse prior

# degrees of freedom for the inverse chi-square prior
n1 <- 3  

# scale parameter for the inverse chi-square prior
ssq1 <- var(y1) 

Prior1 <- list(betabar=betabar1, A=A1, nu=n1, ssq=ssq1)

# number of iterations of the Gibbs sampler
iter <- 10000  

# thinning/slicing parameter. 1 means we keep all all values
slice <- 1 

MCMC <- list(R=iter, keep=slice)

sim1 <- runiregGibbs(dt1, Prior1, MCMC)

plot(sim1$betadraw)
    plot(sim1$sigmasqdraw)

summary(sim1$betadraw)
    summary(sim1$sigmasqdraw)

# compare with maximum likelihood estimates:
fitpodwt <- lm(wt~treat, data=podwt)
summary(fitpodwt)
anova(fitpodwt)


# now for ordinary linear regression

x2 <- cbind(matrix(1,nrow(podwt),1),podwt$mus)

dt2 <- list(y=y1,X=x2)

sim2 <- runiregGibbs(dt1, Prior1, MCMC)

summary(sim1$betadraw)
    summary(sim1$sigmasqdraw)
plot(sim$betadraw)
    plot(sim$sigmasqdraw)

# compare with maximum likelihood estimates:
summary(lm(podwt$wt~mus,data=podwt))


# now with both variables

x3 <- cbind(matrix(1,nrow(podwt),1),podwt$treat,podwt$mus)

dt3 <- list(y=y1,X=x3)

# now we have an additional estimate so modify the prior accordingly

betabar1 <- c(0,0,0)
A1 <- 0.01 * diag(3)
Prior1 <- list(betabar=betabar1, A=A1, nu=n1, ssq=ssq1)

sim3 <- runiregGibbs(dt3, Prior1, MCMC)

plot(sim3$betadraw)
    plot(sim3$sigmasqdraw)
summary(sim3$betadraw)
    summary(sim3$sigmasqdraw)

# compare with maximum likelihood estimates:
summary(lm(podwt$wt~treat+mus,data=podwt))

สารสกัดจากผลลัพธ์คือ: Anova: Bayesian:

Summary of Posterior Marginal Distributions 
Moments 
   mean std dev num se rel eff sam size
1  2.18    0.40 0.0042    0.99     9000
2 -0.55    0.25 0.0025    0.87     9000

Quantiles 
  2.5%    5%   50%   95%  97.5%
1  1.4  1.51  2.18  2.83  2.976
2 -1.1 -0.97 -0.55 -0.13 -0.041

LM ():

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.6338     0.1651   9.895 1.06e-07 ***
treatU       -0.5500     0.2335  -2.355   0.0336 *  

การถดถอยเชิงเส้นอย่างง่าย: Bayesian:

Summary of Posterior Marginal Distributions 
Moments 
  mean std dev  num se rel eff sam size
1 0.23   0.208 0.00222     1.0     4500
2 0.42   0.072 0.00082     1.2     4500

Quantiles
   2.5%    5%  50%  95% 97.5%
1 -0.18 -0.10 0.23 0.56  0.63
2  0.28  0.31 0.42 0.54  0.56

LM ():

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.23330    0.14272   1.635    0.124    
mus          0.42181    0.04931   8.554 6.23e-07 ***

2 รุ่นโควาเรีย: Bayesian:

Summary of Posterior Marginal Distributions 
Moments 
   mean std dev  num se rel eff sam size
1  0.48   0.437 0.00520     1.3     4500
2 -0.12   0.184 0.00221     1.3     4500
3  0.40   0.083 0.00094     1.2     4500

Quantiles 
   2.5%    5%   50%  95% 97.5%
1 -0.41 -0.24  0.48 1.18  1.35
2 -0.48 -0.42 -0.12 0.18  0.25
3  0.23  0.26  0.40 0.53  0.56

LM ():

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.36242    0.19794   1.831   0.0901 .  
treatU      -0.11995    0.12688  -0.945   0.3617    
mus          0.39590    0.05658   6.997 9.39e-06 ***

ซึ่งเราจะเห็นได้ว่าผลลัพธ์มีความคล้ายคลึงกันอย่างกว้างขวางตามที่คาดไว้กับโมเดลที่เรียบง่ายเหล่านี้ แน่นอนว่ามันก็คุ้มค่าที่จะตรวจสอบแผนการวินิจฉัย MCMC - ความหนาแน่นด้านหลังพล็อตการติดตามความสัมพันธ์อัตโนมัติ - ที่ฉันยังให้รหัสสำหรับข้างต้นซึ่ง (ไม่แสดงแผนการ)


ดังนั้นฉันจึงรันการถดถอยเชิงเส้นกับตัวแปรอิสระสองตัวแยกกันซึ่งทั้งคู่ทำงานได้ดีกับค่า p ค่อนข้างดี (~ 0.01) โดยใช้การทดสอบ lm () บ่อยครั้ง ด้วยการทดสอบแบบเบส์หนึ่งในตัวแปรเหล่านี้สร้างผลลัพธ์ที่คล้ายกันและมีความสำคัญมากสำหรับการสกัดกั้นและความชัน ความคิดใด ๆ สิ่งนี้อาจหมายถึงอะไร
Barzov

@Barzov คุณควรโพสต์คำถามใหม่และรวมรหัสของคุณและ (ถ้าเป็นไปได้) ข้อมูลของคุณ
P Sellaz

2

แพ็คเกจ BayesFactor (แสดงไว้ที่นี่: http://bayesfactorpcl.r-forge.r-project.org/และมีให้บริการบน CRAN) ช่วยให้ Bayesian ANOVA และการถดถอย มันใช้ปัจจัย Bayes สำหรับการเปรียบเทียบแบบจำลองและอนุญาตให้มีการสุ่มตัวอย่างหลังสำหรับการประมาณค่า


1

ค่อนข้างสะดวกกับLearnBayesแพ็คเกจ

fit <- lm(Sepal.Length ~ Species, data=iris, x=TRUE, y=TRUE)
library(LearnBayes)
posterior_sims <- blinreg(fit$y, fit$x, 50000)

blinregฟังก์ชั่นใช้ noninformative ก่อนโดยค่าเริ่มต้นและอัตราผลตอบแทนถัวอนุมานใกล้กับ frequentist หนึ่ง

ค่าประมาณ :

> # frequentist 
> fit$coefficients
      (Intercept) Speciesversicolor  Speciesvirginica 
            5.006             0.930             1.582 
> # Bayesian
> colMeans(posterior_sims$beta)
      X(Intercept) XSpeciesversicolor  XSpeciesvirginica 
         5.0066682          0.9291718          1.5807763 

ช่วงความเชื่อมั่น :

> # frequentist
> confint(fit)
                      2.5 %   97.5 %
(Intercept)       4.8621258 5.149874
Speciesversicolor 0.7265312 1.133469
Speciesvirginica  1.3785312 1.785469
> # Bayesian
> apply(posterior_sims$beta, 2, function(x) quantile(x, c(0.025, 0.975)))
      X(Intercept) XSpeciesversicolor XSpeciesvirginica
2.5%      4.862444          0.7249691          1.376319
97.5%     5.149735          1.1343101          1.783060
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.