首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将小鼠对象导入Stata进行分析

将小鼠对象导入Stata进行分析
EN

Stack Overflow用户
提问于 2018-04-22 10:58:08
回答 2查看 673关注 0票数 1

我正在尝试使用在Stata中用老鼠创建的推测数据。

我对这些步骤的理解是:

1)在R中将mids对象转换为mi

代码语言:javascript
复制
 m=20
 completed=lapply(1:20,function(i)complete(imp,i))
 completed.mi=do.call(Zelig::mi,completed)

2)制备小鼠R输出对象

(a) mi2stata

代码语言:javascript
复制
 STATA=mi::mi2stata(completed.mi, m=20, file="C:\\Users\\STATA.csv", 
 missing.ind = FALSE)
 Note: after loading the data into Stata, version 11 or later, type 'mi 
 import ice' to register the data as being multiply imputed. 
 For Stata 10 and earlier, install MIM by typing 'findit mim' and include 
 'mim:' as a prefix for any command using the MI data.
 Error in lapply(X = X, FUN = FUN, ...) : 
 trying to get slot "data" from an object (class "mi") that is not an S4 
 object 

(b)按照下面的建议,在没有mi2stata的情况下编写一份csv:

代码语言:javascript
复制
   data_out <- data.table::rbindlist(completed, idcol="m")
   write.csv(data_out, "C:\\deleted\\STATA2.csv", row.names=FALSE)

3)将原始数据的CSV文件导入Stata

**似乎运作良好。CSV文件中的所有变量都显示在右侧。

4)在Stata中使用mi导入冰命令。

(a)错误re: mi2stata (我实际上导入了非加密文件)

代码语言:javascript
复制
. mi import ice STATA
varlist not allowed
r(101);

(b)读取计算数据的CSV版本时出错

代码语言:javascript
复制
 mi import ice[stata2]
 weights not allowed
 r(101);

我遇到了2,4,可能还有1的错误(因为2的错误指的是鼠标对象到mi类数据的转换)。我真的很感激一个用户友好的逐步指导。虽然mi2stata可能不能直接用于鼠标对象,但我仍然有兴趣学习一种解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-22 18:16:31

收集上面的注释:您不能将mi::mi2stata与来自Zelig::mimice::complete的数据一起使用。但是,如果您查看mi::mi2stata的代码,它似乎只是堆叠了原始数据和每个估算的数据集。然后,它添加索引来标记每个数据集和每个观察。

代码语言:javascript
复制
library(mice)
# don't really need data.table but makes adding the indices easier
library(data.table) 

# Function to export mice imputed datasets
mice2stata <- function(imp, path="stata", type="dta"){ 

          completed <- lapply(seq_len(imp$m),function(i) complete(imp,i))     
          data_out <- rbindlist(completed, idcol="_mj")     
          data_out <- rbind(imp$data, data_out, fill=TRUE)     
          data_out[, `_mj` := replace(`_mj`, is.na(`_mj`), 0L)]     
          data_out[, `_mi` := rowid(`_mj`)]     
          if(type=="dta") {

              foreign::write.dta(data_out, file=paste(path, type, sep="."))             

          } else {

              write.csv(data_out, file=paste(path, type, sep="."), na="", row.names=FALSE)
          }

    }

一个例子

代码语言:javascript
复制
imp <- mice(nhanes, m=2, print=FALSE) 
mice2stata(imp, type="dta")

然后在Stata中使用

代码语言:javascript
复制
use path\to\stata.dta 
mi import ice
票数 2
EN

Stack Overflow用户

发布于 2018-04-22 11:08:12

Q4看起来很简单。该命令的语法(而不是函数)记录为

代码语言:javascript
复制
   mi import ice [, options]

因此,STATA看起来像是试图指定一个变量列表。那是从哪来的?

如果Q2失败了,Q3和Q4的重点是什么?

我希望一些R用户可以在Q2上添加一些评论。从表面上看,您得到了一个明确的错误消息,所以您认为这是错误的吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49965155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档