R에서 베이지안 분산 분석 및 회귀 분석을 어떻게 수행 하시겠습니까? [닫은]


14

하나의 독립 변수, 하나의 종속 변수 및 범주 변수로 구성된 상당히 간단한 데이터 세트가 있습니다. 나는 aov()and 같은 잦은 테스트를 수행 한 경험이 lm()많지만 R에서 베이지안 등가물을 수행하는 방법을 알 수 없습니다.

첫 번째 두 변수에 대해 베이지안 선형 회귀 분석을 수행하고 범주 형 변수를 그룹화로 사용하여 분산의 베이 시안 분석을 수행하고 싶지만 R을 사용하여이를 수행하는 방법에 대한 간단한 예를 찾을 수 없습니다. 양자 모두? 또한 베이지안 분석에 의해 생성 된 출력 통계는 정확히 무엇이며 어떻게 표현됩니까?

나는 통계에 대해 잘 정통하지는 않지만 p- 값으로 기본 테스트를 사용하는 것이 다소 잘못 안내 된 것으로 생각되며 계속 유지하려고합니다. 문안 인사.


2
베이지안 데이터 분석하기 : R과 BUGS 가 포함 된 튜토리얼을 시작하는 것이 좋습니다. 이 관련 질문에 대한 베이지안 분산 분석에 대한 링크도 있습니다 : 베이지안 2 요인 분산 분석 . p-value를 해석하는 대신 일반적으로 effect size 측정을 사용하는 것이 좋습니다 .
chl

답변:


12

많은 베이지안 통계를 수행하려는 경우 R2OpenBUGS 또는 R2WinBUGS 패키지를 통해 R로 액세스 할 수있는 BUGS / JAGS 언어를 배우는 것이 도움이 될 것입니다.

그러나 BUGS 구문을 이해하지 않아도되는 간단한 예제를 위해 사후 분포에서 샘플링하기 위해 runiregGibbs 함수가있는 "bayesm"패키지를 사용할 수 있습니다. 다음은 설명하는 것과 유사한 데이터가있는 예입니다 .....

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 *  

간단한 선형 회귀 분석 : 베이지안 :

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 공변량 모델 : 베이지안 :

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 진단 플롯 (후부 밀도, 추적 플롯, 자동 상관 관계)을 검사하는 것도 가치가 있습니다.


그래서 나는 두 개의 독립 변수에 대해 선형 회귀를 실행했습니다.이 두 변수는 잦은 lm () 테스트를 사용하여 상당히 좋은 (~ 0.01) p 값으로 수행합니다. 베이지안 검정을 사용하면 이러한 변수 중 하나가 절편과 기울기에 대해 매우 유사하고 중요한 결과를 생성하지만 실제로 p- 값이 약간 더 낮은 다른 변수의 경우 베이지안 결과가 크게 다른 (통계적으로 중요하지 않은) 값을 제공합니다. 이것이 무엇을 의미하는지 아십니까?
Barzov

@Barzov는 새로운 질문을 게시하고 코드와 가능한 경우 데이터를 포함해야합니다.
P Sellaz


1

이것은 LearnBayes패키지에서 매우 편리 합니다.

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

그만큼 blinreg 함수는 기본적으로 비 적인 정보를 사용하므로 잦은 주의자에 매우 가까운 추론을 생성합니다.

견적 :

> # 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.