2 örnekli oran testi için lm kullanma


12

Bir süredir 2 örnek oranlı testler yapmak için doğrusal modeller kullanıyorum, ancak bunun tamamen doğru olmayabileceğini fark ettim. Binom ailesi + kimlik bağlantısı ile genelleştirilmiş doğrusal bir modelin kullanılmasının tam olarak ayrılmamış 2 örnek oranlı test sonuçları verdiği görülmektedir. Bununla birlikte, doğrusal bir model (veya gaussian ailesiyle glm) kullanmak biraz farklı bir sonuç verir. Bunun rasyonelleştiriyorum, R'nin binomial ve gaussian aileler için glm'yi nasıl çözdüğünden kaynaklanıyor olabilir, ancak başka bir neden olabilir mi?

## prop.test gives pooled 2-sample proportion result
## glm w/ binomial family gives unpooled 2-sample proportion result
## lm and glm w/ gaussian family give unknown result

library(dplyr)
library(broom)
set.seed(12345)

## set up dataframe -------------------------
n_A <- 5000
n_B <- 5000

outcome <- rbinom(
  n = n_A + n_B,
  size = 1,
  prob = 0.5
)
treatment <- c(
  rep("A", n_A),
  rep("B", n_B)
)

df <- tbl_df(data.frame(outcome = outcome, treatment = treatment))


## by hand, 2-sample prop tests ---------------------------------------------
p_A <- sum(df$outcome[df$treatment == "A"])/n_A
p_B <- sum(df$outcome[df$treatment == "B"])/n_B

p_pooled <- sum(df$outcome)/(n_A + n_B)
z_pooled <- (p_B - p_A) / sqrt( p_pooled * (1 - p_pooled) * (1/n_A + 1/n_B) )
pvalue_pooled <- 2*(1-pnorm(abs(z_pooled)))

z_unpooled <- (p_B - p_A) / sqrt( (p_A * (1 - p_A))/n_A + (p_B * (1 - p_B))/n_B )
pvalue_unpooled <- 2*(1-pnorm(abs(z_unpooled)))


## using prop.test --------------------------------------
res_prop_test <- tidy(prop.test(
  x = c(sum(df$outcome[df$treatment == "A"]), 
        sum(df$outcome[df$treatment == "B"])),
  n = c(n_A, n_B),
  correct = FALSE
))
res_prop_test # same as pvalue_pooled
all.equal(res_prop_test$p.value, pvalue_pooled)
# [1] TRUE


# using glm with identity link -----------------------------------
res_glm_binomial <- df %>%
  do(tidy(glm(outcome ~ treatment, family = binomial(link = "identity")))) %>%
  filter(term == "treatmentB")
res_glm_binomial # same as p_unpooled
all.equal(res_glm_binomial$p.value, pvalue_unpooled)
# [1] TRUE


## glm and lm gaussian --------------------------------

res_glm <- df %>%
  do(tidy(glm(outcome ~ treatment))) %>%
  filter(term == "treatmentB")
res_glm 
all.equal(res_glm$p.value, pvalue_unpooled)
all.equal(res_glm$p.value, pvalue_pooled)

res_lm <- df %>%
  do(tidy(lm(outcome ~ treatment))) %>% 
  filter(term == "treatmentB")
res_lm
all.equal(res_lm$p.value, pvalue_unpooled)
all.equal(res_lm$p.value, pvalue_pooled)

all.equal(res_lm$p.value, res_glm$p.value)
# [1] TRUE

Yanıtlar:


8

O ilgisi olmadığını onlar çözmek nasıl tekabül modelleri uydurma nedeniyle, modelleri poz gerçek optimizasyon sorunları ile ilgisi olduğunu optimizasyon problemlerini.

Özellikle, büyük örneklerde, bunu iki ağırlıklı en küçük kareler problemlerini karşılaştırma olarak etkili bir şekilde düşünebilirsiniz.

Doğrusal model ( lm), oranların varyansının sabit olduğunu (ağırlıksız olduğunda) varsayar. Glm, oranların varyansının binom varsayımı geldiğini varsayar . Bu, veri noktalarını farklı şekilde ağırlaştırır ve bu nedenle biraz farklı tahminlere * ve farklı farklılık varyanslarına yol açar.Var(p^)=Var(X/n)=p(1p)/n

* en azından bazı durumlarda, oranların düz bir şekilde karşılaştırılması gerekmese de


0

Hesaplama açısından, lm ve binom glm için tedaviB katsayısının standart hatasını karşılaştırın. Binom glm'deki (z_unpooled paydası) tedaviB katsayısının standart hatası formülüne sahipsiniz. Standart lm'deki tedaviB katsayısının standart hatası (SE_lm):

    test = lm(outcome ~ treatment, data = df)
    treat_B =  as.numeric(df$treatment == "B")
    SE_lm = sqrt( sum(test$residuals^2)/(n_A+n_B-2) / 
              sum((treat_B - mean(treat_B))^2))

Bir türetme için bu bakın , tek fark burada yerine örnek hatanın bulunmasıdır (yani kayıp serbestlik dereceleri için 2 ). Bu olmadan , lm ve binom glm standart hataları olduğunda gerçekten .σ2nA+nB2nA=nB

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.