2-नमूना अनुपात परीक्षण के लिए एलएम का उपयोग करना


12

मैं कुछ समय के लिए 2-नमूना अनुपात परीक्षण करने के लिए रैखिक मॉडल का उपयोग कर रहा हूं, लेकिन महसूस किया है कि पूरी तरह से सही नहीं हो सकता है। ऐसा प्रतीत होता है कि एक द्विपदीय परिवार + पहचान लिंक के साथ सामान्यीकृत रैखिक मॉडल का उपयोग करना बिल्कुल अप्रकाशित 2-नमूना अनुपात परीक्षण परिणाम देता है। हालांकि, एक रैखिक मॉडल (या गॉसियन परिवार के साथ चमक) का उपयोग करना थोड़ा अलग परिणाम देता है। मैं तर्क दे रहा हूं कि यह इसलिए हो सकता है कि कैसे आर द्विपद बनाम गाऊसी परिवारों के लिए चमक को हल करता है, लेकिन क्या कोई और कारण हो सकता है?

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

जवाबों:


8

यह ऐसा नहीं है कि वे अनुकूलन समस्याओं को कैसे हल करते हैं जो मॉडल को फिटिंग करने के अनुरूप हैं, यह वास्तविक अनुकूलन समस्याओं के साथ करना है जो मॉडल पोज देते हैं।

विशेष रूप से, बड़े नमूनों में, आप इसे प्रभावी ढंग से दो भारित कम से कम वर्गों की समस्याओं की तुलना के रूप में मान सकते हैं

लीनियर मॉडल ( lm) एक मानता है (जब अनवीट किया जाता है) कि अनुपात का विचरण स्थिर है। Glm मानता है कि आनुपातिकता का विचरण द्विपद अनुमान _ । यह डेटा बिंदुओं को अलग-अलग मापता है, और इसलिए कुछ हद तक अलग-अलग अनुमानों * और भिन्नताओं के अलग-अलग रूपों में आता है।Var(p^)=Var(X/n)=p(1p)/n

* कम से कम कुछ स्थितियों में, हालांकि अनुपात की सीधी तुलना में जरूरी नहीं है


0

गणना के संदर्भ में, उपचार के मानक त्रुटि की तुलना करें lm बनाम द्विपद glm के लिए गुणांक। आपके पास उपचार की मानक त्रुटि के लिए फार्मूला है, जो द्विपद की चमक में गुणांक (z_unpooled का भाजक) है। मानक lm में उपचार गुणांक की मानक त्रुटि है (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))

इस पोस्ट को एक व्युत्पत्ति के लिए देखें , एकमात्र अंतर यह है कि यहाँ नमूना त्रुटि के बजाय पाया जाता है (यानी स्वतंत्रता की खोई हुई डिग्री के लिए से 2 घटाएं )। उस बिना , lm और द्विपद glm मानक त्रुटियाँ वास्तव में से मेल खाती हैं ।σ2nA+nB2nA=nB

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.