একাধিক অভিযুক্ত ডেটাসেটে পরীক্ষাগুলিতে পোল্ড পি-মানগুলি কীভাবে পাবেন?


11

আর-তে অ্যামেলিয়া ব্যবহার করে আমি একাধিক অভিযুক্ত ডেটাসেট পেয়েছি। এর পরে, আমি এসপিএসএসে একটি পুনরাবৃত্তি ব্যবস্থা পরীক্ষা করেছি। এখন, আমি পরীক্ষার ফলাফল পুল করতে চাই। আমি জানি যে আমি রুবিনের নিয়মগুলি (আরে কোনও একাধিক অভিবাসন প্যাকেজের মাধ্যমে প্রয়োগ করা) পুলের অর্থ এবং মানগত ত্রুটিগুলি ব্যবহার করতে পারি, তবে আমি কীভাবে পি-মানগুলিকে পুল করব? এটা কি সম্ভব? আর কি এমন কোনও ফাংশন আছে? আগাম ধন্যবাদ.


আপনি পি-মান মেটা-বিশ্লেষণ সম্পর্কিত তথ্য পরীক্ষা করতে চাইতে পারেন। এক ভাল শুরু পয়েন্ট: en.wikipedia.org/wiki/Fisher%27s_method
user29889

উত্তর:


13

হ্যাঁ , এটি সম্ভব এবং হ্যাঁ , এটির Rকাজগুলি রয়েছে functions হাত দ্বারা কম্পিউটিং পুনরাবৃত্তি বিশ্লেষণ P-মূল্যবোধের পরিবর্তে, আপনি প্যাকেজ ব্যবহার করতে পারেন Zelig, যা মধ্যে উল্লেখ করা হয় চিত্র এর Amelia(-package আরো একটি তথ্যপূর্ণ পদ্ধতির জন্য নীচের আমার আপডেট দেখতে )। আমি এটি Ameliaপ্রদর্শনের জন্য- উইগনেট থেকে একটি উদাহরণ ব্যবহার করব :

library("Amelia")
data(freetrade)
amelia.out <- amelia(freetrade, m = 15, ts = "year", cs = "country")

library("Zelig")
zelig.fit <- zelig(tariff ~ pop + gdp.pc + year + polity, data = amelia.out$imputations, model = "ls", cite = FALSE)
summary(zelig.fit)

এটি মূল্যগুলি সহ সংশ্লিষ্ট আউটপুট :পি

  Model: ls
  Number of multiply imputed data sets: 15 

Combined results:

Call:
lm(formula = formula, weights = weights, model = F, data = data)

Coefficients:
                Value Std. Error t-stat  p-value
(Intercept)  3.18e+03   7.22e+02   4.41 6.20e-05
pop          3.13e-08   5.59e-09   5.59 4.21e-08
gdp.pc      -2.11e-03   5.53e-04  -3.81 1.64e-04
year        -1.58e+00   3.63e-01  -4.37 7.11e-05
polity       5.52e-01   3.16e-01   1.75 8.41e-02

For combined results from datasets i to j, use summary(x, subset = i:j).
For separate results, use print(summary(x), subset = i:j).

zeligকমপক্ষে স্কোয়ার ছাড়াও বেশ কয়েকটি মডেলকে ফিট করতে পারে ।

আপনার অনুমানের জন্য আত্মবিশ্বাসের ব্যবধান এবং স্বাধীনতার ডিগ্রি পেতে আপনি ব্যবহার করতে পারেন mitools:

library("mitools")
imp.data <- imputationList(amelia.out$imputations)
mitools.fit <- MIcombine(with(imp.data, lm(tariff ~ polity + pop + gdp.pc + year)))
mitools.res <- summary(mitools.fit)
mitools.res <- cbind(mitools.res, df = mitools.fit$df)
mitools.res

এটি আপনাকে আত্মবিশ্বাসের অন্তর এবং মোট অনুপাতের অনুপাত দেবে যা অনুপস্থিত তথ্যের জন্য দায়ী:

              results       se    (lower    upper) missInfo    df
(Intercept)  3.18e+03 7.22e+02  1.73e+03  4.63e+03     57 %  45.9
pop          3.13e-08 5.59e-09  2.03e-08  4.23e-08     19 % 392.1
gdp.pc      -2.11e-03 5.53e-04 -3.20e-03 -1.02e-03     21 % 329.4
year        -1.58e+00 3.63e-01 -2.31e+00 -8.54e-01     57 %  45.9
polity       5.52e-01 3.16e-01 -7.58e-02  1.18e+00     41 %  90.8

অবশ্যই আপনি আকর্ষণীয় ফলাফলগুলি কেবল একটি বস্তুর সাথে একত্রিত করতে পারেন:

combined.results <- merge(mitools.res, zelig.res$coefficients[, c("t-stat", "p-value")], by = "row.names", all.x = TRUE)

হালনাগাদ

কিছুটা খেলার পরে, miceপ্যাকেজটি ব্যবহার করে প্রয়োজনীয় প্রয়োজনীয় সমস্ত তথ্য পাওয়ার আরও নমনীয় উপায় খুঁজে পেয়েছি। এটি কাজ করার জন্য, আপনাকে প্যাকেজের as.mids()ফাংশনটি পরিবর্তন করতে হবে । আমার ফলো-আপ প্রশ্নে পোস্ট করা জেরকো সংস্করণটি ব্যবহার করুন :

as.mids2 <- function(data2, .imp=1, .id=2){
  ini <- mice(data2[data2[, .imp] == 0, -c(.imp, .id)], m = max(as.numeric(data2[, .imp])), maxit=0)
  names  <- names(ini$imp)
  if (!is.null(.id)){
    rownames(ini$data) <- data2[data2[, .imp] == 0, .id]
  }
  for (i in 1:length(names)){
    for(m in 1:(max(as.numeric(data2[, .imp])))){
      if(!is.null(ini$imp[[i]])){
        indic <- data2[, .imp] == m & is.na(data2[data2[, .imp]==0, names[i]])
        ini$imp[[names[i]]][m] <- data2[indic, names[i]]
      }
    } 
  }
  return(ini)
}

এই সংজ্ঞায়িত করে, আপনি অভিযুক্ত ডেটা সেটগুলি বিশ্লেষণ করতে যেতে পারেন:

library("mice")
imp.data <- do.call("rbind", amelia.out$imputations)
imp.data <- rbind(freetrade, imp.data)
imp.data$.imp <- as.numeric(rep(c(0:15), each = nrow(freetrade)))
mice.data <- as.mids2(imp.data, .imp = ncol(imp.data), .id = NULL)

mice.fit <- with(mice.data, lm(tariff ~ polity + pop + gdp.pc + year))
mice.res <- summary(pool(mice.fit, method = "rubin1987"))

এই আপনি সমস্ত ফলাফল আপনি ব্যবহার করতে দেব Zeligএবং mitoolsএবং আরো:

                  est       se     t    df Pr(>|t|)     lo 95     hi 95 nmis   fmi lambda
(Intercept)  3.18e+03 7.22e+02  4.41  45.9 6.20e-05  1.73e+03  4.63e+03   NA 0.571  0.552
pop          3.13e-08 5.59e-09  5.59 392.1 4.21e-08  2.03e-08  4.23e-08    0 0.193  0.189
gdp.pc      -2.11e-03 5.53e-04 -3.81 329.4 1.64e-04 -3.20e-03 -1.02e-03    0 0.211  0.206
year        -1.58e+00 3.63e-01 -4.37  45.9 7.11e-05 -2.31e+00 -8.54e-01    0 0.570  0.552
polity       5.52e-01 3.16e-01  1.75  90.8 8.41e-02 -7.58e-02  1.18e+00    2 0.406  0.393

দ্রষ্টব্য, pool()আপনি ব্যবহার করে -পরিমিতি বাদ দিয়ে ছোট নমুনাগুলির জন্য সমন্বিত মূল্যগুলি গণনা করতে পারেন । এর থেকে আরও ভাল, আপনি এখন গণনা এবং নেস্টেড মডেলগুলির সাথে তুলনা করতে পারেন :d f আর 2পিmethodআর2

pool.r.squared(mice.fit)

mice.fit2 <- with(mice.data, lm(tariff ~ polity + pop + gdp.pc))
pool.compare(mice.fit, mice.fit2, method = "Wald")$pvalue

1
গ্রেট উত্তর, শুধু একটি সামান্য টাইপো বাতলান চেয়েছিলেন, আমি মনে করি আপনি বোঝানো: mice.res <- summary(pool(mice.fit, method = "rubin1987"))
ফ্রাঙ্কড

ভালো বল ধরা. আমি টাইপ সংশোধন করেছি।
ক্রিশ

8

সাধারণত আপনি রিগ্রেশন ওজনের মতো প্রচলিত পরিসংখ্যানের পরামিতিগুলিতে রুবিনের বিধি প্রয়োগ করে পি-মানটি গ্রহণ করবেন। সুতরাং, প্রায়ই পি-মানগুলি সরাসরি পুল করার প্রয়োজন হয় না। এছাড়াও, সম্ভাবনা অনুপাতের পরিসংখ্যানগুলিকে মডেলগুলির তুলনা করতে পুল করা যেতে পারে। অন্যান্য পরিসংখ্যানগুলির জন্য পুলের পদ্ধতিগুলি আমার বইয়ের ফ্লেক্সিবল ইমপুটেশন অফ মিসিং ডেটা, অধ্যায় in-এ পাওয়া যাবে।

যেসব ক্ষেত্রে জ্ঞাত বিতরণ বা পদ্ধতি নেই সেখানে, লিক্ট এবং রুবিনের একতরফা পরীক্ষার জন্য একটি অপ্রকাশিত প্রক্রিয়া রয়েছে। আমি প্রক্রিয়াটি থেকে পি-মানগুলি পুল করার জন্য এই পদ্ধতিটি ব্যবহার করেছি wilcoxon(), তবে অন্যান্য ব্যবহারের সাথে খাপ খাইয়ে নেওয়া সাধারণ এবং সোজা।

কেবলমাত্র নীচে প্রক্রিয়াটি ব্যবহার করুন যদি অন্য সমস্ত কিছু ব্যর্থ হয় তবে আপাতত আমরা এর পরিসংখ্যানগত বৈশিষ্ট্য সম্পর্কে খুব কম জানি।

lichtrubin <- function(fit){
    ## pools the p-values of a one-sided test according to the Licht-Rubin method
    ## this method pools p-values in the z-score scale, and then transforms back 
    ## the result to the 0-1 scale
    ## Licht C, Rubin DB (2011) unpublished
    if (!is.mira(fit)) stop("Argument 'fit' is not an object of class 'mira'.")
    fitlist <- fit$analyses
        if (!inherits(fitlist[[1]], "htest")) stop("Object fit$analyses[[1]] is not an object of class 'htest'.")
    m <- length(fitlist)
    p <- rep(NA, length = m)
    for (i in 1:m) p[i] <- fitlist[[i]]$p.value
    z <- qnorm(p)  # transform to z-scale
    num <- mean(z)
    den <- sqrt(1 + var(z))
    pnorm( num / den) # average and transform back
}

@ স্টিফ ভ্যান বুউরেন 'রিগ্রেশন ওজনের মতো প্রচলিত পরিসংখ্যানগত পরামিতিগুলিতে রুবিনের বিধি প্রয়োগ করে পি-ভ্যালু গ্রহণ করার অর্থ কী? কেমন করে pool() আপনার প্যাকেজ (যা ফাংশন চমৎকার উপায় দ্বারা) পুঞ্জিকৃত P-মান উতরান?
llewmills
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.