首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未安装Stata的R中的Stata公式

未安装Stata的R中的Stata公式
EN

Stack Overflow用户
提问于 2019-01-15 07:11:21
回答 1查看 149关注 0票数 1

是否可以将Stata公式转换为R,而无需在PC上安装Stata?

我的问题只是上面的,但让我给你一些背景知识:我有以下Stata公式

代码语言:javascript
运行
复制
Mtilde=((M:/p):/d)'*M

(M是一个矩阵,pd是向量)

我想将它转换为R。我知道有Rstata包,但它需要Stata安装,这在我正在工作的PC上不可用。

这是我在R中做的:

代码语言:javascript
运行
复制
Mtilde <- ((M/p)/d) %>% t() %>% `%*%`(M)

但它似乎不起作用,我想不出解决它的方法……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 09:04:06

这是技术上的Mata代码,而不是Stata代码。Mata是Stata的两种矩阵编程语言中较新的一种。您可以通过在Stata命令窗口中输入mata来调用它。

如果不对M和p有更多的了解,就很难给出具体的建议。你可以在网上找到pdf格式的Mata手册。请参阅op_colon条目here和c_conformability条目here

冒号运算符执行逐个元素的操作,因此M :/ p将M的每个元素除以p的相应元素(如果两者大小相同)。

如果它们的大小不同,则会发生类似的情况(例如除以相同的行向量或列向量),只要向量的维度合适,就可以工作。

完成后,计算两次除法矩阵的转置,并将矩阵乘以原始M。

以下是一些mata示例:

代码语言:javascript
运行
复制
. mata
------------------------------------------------- mata (type end to exit) ------------------------------------------------------------------
: M=(1,2\3,4)

: M
       1   2
    +---------+
  1 |  1   2  |
  2 |  3   4  |
    +---------+

: p=(1,2)

: p
       1   2
    +---------+
  1 |  1   2  |
    +---------+

: M:/p
       1   2
    +---------+
  1 |  1   1  |
  2 |  3   2  |
    +---------+

: M:/p'
         1     2
    +-------------+
  1 |    1     2  |
  2 |  1.5     2  |
    +-------------+

: ((M:/p):/p)
        1    2
    +-----------+
  1 |   1   .5  |
  2 |   3    1  |
    +-----------+

: ((M:/p):/p)'*M
         1     2
    +-------------+
  1 |   10    14  |
  2 |  3.5     5  |
    +-------------+

: end

以下是相应的R版本:

代码语言:javascript
运行
复制
> M <- matrix(1:4,2,2,byrow=TRUE)
> M
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> p <- matrix((1:2), 1, 2)
> p
     [,1] [,2]
[1,]    1    2
> t(p)
     [,1]
[1,]    1
[2,]    2
> # the second argument needs to be 1 for row or 2 for column
> sweep(M, 2, p, FUN = '/') 
     [,1] [,2]
[1,]    1    1
[2,]    3    2
> sweep(M, 1, t(p), FUN = '/')
     [,1] [,2]
[1,]  1.0    2
[2,]  1.5    2
> sweep(sweep(M, 2, p, FUN = '/'),2,p,FUN = '/')
     [,1] [,2]
[1,]    1  0.5
[2,]    3  1.0
> t(sweep(sweep(M, 2, p, FUN = '/'),2,p,FUN = '/'))%*%M
     [,1] [,2]
[1,] 10.0   14
[2,]  3.5    5
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54190560

复制
相关文章

相似问题

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