हां , यह संभव है और हां, ऐसे R
कार्य हैं जो इसे करते हैं। हाथ से कंप्यूटिंग दोहराया विश्लेषण के पी-मूल्यों के बजाय, आप पैकेज का उपयोग कर सकते Zelig
हैं, जो में संदर्भित किया जाता है शब्दचित्र की Amelia
(-package एक अधिक सूचनात्मक विधि के लिए नीचे मेरी अपडेट हुआ )। मैं इसे Amelia
प्रदर्शित करने के लिए -vignette से एक उदाहरण का उपयोग करूंगा:
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()
पीघच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