我是新手R用户。我安装了Zelig版本4.1-3和Amelia II版本1.7。我很困惑我如何使用R包和函数获得组合乘法推算数据的自由度,t统计量和f值。
首先,我加载了Amelia和Zelig:
require(Amelia)
require(Zelig)
然后,我加载了Amelia附带的样本数据:
data(freetrade)
我使用amelia函数为此数据集创建了5个插补。
a.out <- amelia(freetrade, m = 5, ts = "year", cs = "country")
然后,为了组合插补,我使用了zelig函数:
z.out.imp <- zelig(tariff ~ polity + pop + gdp.pc + year + country,
data = a.out$imputations, model = "ls" )
然而,当我使用这段代码时,我得到的系数似乎是单个插补的系数,而不是组合集的系数:
summary(z.out.imp)
他们如下:
Coefficients:
Value Std. Error t-stat p-value
(Intercept) 2.766176e+03 6.670110e+02 4.1471215 0.0003572868
polity 1.645011e-01 3.078134e-01 0.5344183 0.5938286336
pop -6.079963e-08 6.518429e-08 -0.9327345 0.3774275934
gdp.pc -4.246794e-04 1.945866e-03 -0.2182470 0.8319093062
year -1.335563e+00 3.519513e-01 -3.7947390 0.0009787456
countryIndonesia -7.000319e+01 4.646330e+01 -1.5066343 0.1700377061
countryKorea -8.643855e+01 4.671629e+01 -1.8502870 0.0926657863
countryMalaysia -8.815182e+01 5.389486e+01 -1.6356256 0.1393312364
countryNepal -8.215250e+01 5.475828e+01 -1.5002753 0.1702129176
countryPakistan -4.349869e+01 5.149729e+01 -0.8446791 0.4238033944
countryPhilippines -8.088975e+01 5.320694e+01 -1.5202857 0.1673234716
countrySriLanka -7.668840e+01 5.695485e+01 -1.3464771 0.2161986616
countryThailand -7.400481e+01 5.186395e+01 -1.4269026 0.1903428838
Amelia手册显示了合并的多重插补数据集的某些系数应该是什么,尽管没有解释如何使用R获得所有这些系数(参见http://cran.r-project.org/web/packages/Amelia/vignettes/amelia.pdf的第46页)
Complete DF = 167
DF: min = 10.36
avg = 18.81
max = 37.62
F( 2, 10.4) = 15.50
Prob > F = 0.0008
Value Std. Error t-stat p-value
polity -0.206 0.39 -0.53 0.61
pop -3.21 e-08 8.72e-09 3.68 0.004
gdp.pc -0.0027 0.000644 -4.28 0.000
Intercept 32.7 2.66 12.29 0.000
因为amelia函数使用蒙特卡罗模拟,我们可以预期运行之间的差异很小。然而,截距的巨大差异是一个线索,即zelig函数返回的回归统计数据不是合并集合。
Amelia手册提供了以下代码:
> b.out <-NULL
> se.out <-NULL
> for(i in 1:a.out$m){
+ ols.out <- lm(tariff ~ polity + pop + gdp.pc, data = a.out$imputations[[i]])
+ b.out <- rbind(b.out, ols.out$coef)
+ se.out <-rbind(se.out, coef(summary(ols.out))[,2])
+ }
> combined.results<-mi.meld(q=b.out, se = se.out)
> combined.results
我尝试过使用它。返回的结果非常接近第46页上显示的值和标准错误:
$q.mi
(Intercept) polity pop gdp.pc
[1,] 33.17325 -0.1499587 2.967196e-08 -0.002724229
$se.mi
(Intercept) polity pop gdp.pc
[1,] 2.116721 0.276968 6.061993e-09 0.0006596203
但是,它们不包括t统计量,自由度或f值。
R中是否有可用的开源软件包或函数,以便我可以获得自由度,t统计量和f值而无需进行手动计算?
感谢。
答案 0 :(得分:1)
以下是我试图重现您的问题的注释和编辑记录:
> library(Zelig)
ZELIG (Versions 4.1-3, built: 2013-01-30)
> a.out <- amelia(freetrade, idvars="country", m = 5)
Error: could not find function "amelia"
我遇到的第一个问题是你没有提到我们需要加载Amelia包。在纠正之后我再次尝试运行第一行:
> library(Amelia)
## (Version 1.7, built: 2013-02-10)
> a.out <- amelia(freetrade, idvars="country", m = 5)
Error in amelia(freetrade, idvars = "country", m = 5) :
object 'freetrade' not found
这失败了,因为您没有说明如何获取freetrade数据。在这里猜测:
> data(freetrade)
> a.out <- amelia(freetrade, m = 5)
Amelia Error Code: 38
The following variable(s) are characters:
country
You may have wanted to set this as a ID variable to remove it
from the imputation model or as an ordinal or nominal
variable to be imputed. Please set it as either and
try again.
您的示例不起作用,因为需要告知amelia
函数如何处理字符变量。所以我修改了你的例子以获得一个实际运行的例子:
> a.out <- amelia(freetrade, idvars="country", m = 5)
> z.out.imp <- zelig(tariff ~ polity + pop + gdp.pc + year + country,
+ data = a.out$imputations, model = "ls")
在结果上运行summary
为我提供了组合模型统计信息“
# This part works just fine.
> summary(z.out.imp)
Model: ls
Number of multiply imputed data sets: 5
Combined results:
Call:
lm(formula = formula, weights = weights, model = F, data = data)
Coefficients:
Value Std. Error t-stat p-value
(Intercept) 3.294715e+03 6.425487e+02 5.1275725 1.330807e-05
polity 2.761343e-01 3.354271e-01 0.8232319 4.145813e-01
pop -6.443769e-08 5.526885e-08 -1.1658953 2.659143e-01
gdp.pc 4.549885e-04 1.354139e-03 0.3359984 7.382138e-01
year -1.599422e+00 3.306932e-01 -4.8365739 2.649602e-05
countryIndonesia -7.396526e+01 4.112206e+01 -1.7986760 1.009329e-01
countryKorea -9.673542e+01 5.036909e+01 -1.9205317 8.713903e-02
countryMalaysia -9.271187e+01 4.998836e+01 -1.8546690 9.424041e-02
countryNepal -8.863525e+01 4.920061e+01 -1.8015072 9.990792e-02
countryPakistan -4.789370e+01 4.362907e+01 -1.0977475 2.960914e-01
countryPhilippines -8.548672e+01 4.662372e+01 -1.8335456 9.533829e-02
countrySriLanka -8.446560e+01 4.939918e+01 -1.7098586 1.170170e-01
countryThailand -8.026702e+01 4.741244e+01 -1.6929529 1.213329e-01
For combined results from datasets i to j, use summary(x, subset = i:j).
For separate results, use print(summary(x), subset = i:j).
简而言之,你的例子中唯一对我有用的是你声称不适合你的一件事。请发布代码和输出,准确显示您所做的以及发生了什么,因为目前我没有足够的信息来帮助解决问题。