象征性地计算雅卡斯(r)中的黑森山脉

象征性地计算雅卡斯(r)中的黑森山脉,r,yacas,R,Yacas,背景: 我正在使用Ryacas包,试图找出MLE估计量的大样本方差的符号表达式 为此,我需要似然函数的(逆)Hessian矩阵。我没有mathematica(在线版本对我来说太麻烦了),因此我尝试使用Ryacas软件包,它是雅卡斯计算机代数系统的接口 问题: 然而,我似乎不知道如何计算Hessian。在这里使用指南:给了我一个错误。这是一个最小的可复制示例(取自该指南) L错误,error in Hessian(L):找不到函数“Hessian”,原因是Hessian函数不是Ryacas包的一部

背景: 我正在使用
Ryacas
包,试图找出
MLE
估计量的大样本方差的符号表达式

为此,我需要似然函数的(逆)
Hessian
矩阵。我没有mathematica(在线版本对我来说太麻烦了),因此我尝试使用
Ryacas
软件包,它是雅卡斯计算机代数系统的接口

问题: 然而,我似乎不知道如何计算Hessian。在这里使用指南:给了我一个错误。这是一个最小的可复制示例(取自该指南)


L错误,
error in Hessian(L):找不到函数“Hessian”
,原因是
Hessian
函数不是
Ryacas
包的一部分,而是R中
numDeriv
包的一部分

下面是R中的
Hessian
函数的文档:

我希望这能解决你的问题。因此,请先安装
numDeriv
软件包,然后使用
Hessian
功能

我还尝试使用上述示例,结果如下:

library(Ryacas)
library(numDeriv)
L <- yac_symbol("x^2 * (y/4) - a*(3*x + 3*y/2 - 45)")
Hessian(L)

输出为空集,但我想您可以参考
Hessian
函数的文档,它肯定会有所帮助。

错误,
error in Hessian(L):找不到函数“Hessian”
,是因为
Hessian
函数不是
Ryacas
包的一部分,相反,它是R中的
numDeriv
包的一部分

library(Ryacas)

yac_str("HessianMatrix(x^2 * (y/4) - a*(3*x + 3*y/2 - 45), {x,y})")
# "{{y/2,x/2},{x/2,0}}"

yac_str("PrettyForm(HessianMatrix(x^2 * (y/4) - a*(3*x + 3*y/2 - 45), {x,y}))") %>% cat
# /              \
# | / y \ / x \  |
# | | - | | - |  |
# | \ 2 / \ 2 /  |
# |              |
# | / x \ ( 0 )  |
# | | - |        |
# | \ 2 /        |
# \              /
下面是R中的
Hessian
函数的文档:

我希望这能解决你的问题。因此,请先安装
numDeriv
软件包,然后使用
Hessian
功能

我还尝试使用上述示例,结果如下:

library(Ryacas)
library(numDeriv)
L <- yac_symbol("x^2 * (y/4) - a*(3*x + 3*y/2 - 45)")
Hessian(L)
输出为空集,但我想您可以参考
Hessian
函数的文档,它肯定会有所帮助

library(Ryacas)

yac_str("HessianMatrix(x^2 * (y/4) - a*(3*x + 3*y/2 - 45), {x,y})")
# "{{y/2,x/2},{x/2,0}}"

yac_str("PrettyForm(HessianMatrix(x^2 * (y/4) - a*(3*x + 3*y/2 - 45), {x,y}))") %>% cat
# /              \
# | / y \ / x \  |
# | | - | | - |  |
# | \ 2 / \ 2 /  |
# |              |
# | / x \ ( 0 )  |
# | | - |        |
# | \ 2 /        |
# \              /
参考:


参考:

以下是您可以使用Ryacas v1.1.1执行的操作:

> library(Ryacas)
> packageVersion("Ryacas")
[1] ‘1.1.1’
> x <- ysym("x")
> y <- ysym("y")
> a <- ysym("a")
> L <- x^2 * (y/4) - a*(3*x + 3*y/2 - 45)
> H <- Hessian(L, c("x", "y", "a"))
> H
{{   y/2,    x/2,     -3},
 {   x/2,      0, (-3)/2},
 {    -3, (-3)/2,      0}} 
> as_r(H)
expression(rbind(c(y/2, x/2, -3), c(x/2, 0, -3/2), c(-3, -3/2, 
    0)))
> eval(as_r(H), list(x = 2, y = 2, a = 2))
     [,1] [,2] [,3]
[1,]    1  1.0 -3.0
[2,]    1  0.0 -1.5
[3,]   -3 -1.5  0.0
>库(Ryacas)
>包装版本(“Ryacas”)
[1] ‘1.1.1’
>x y a L H
{{y/2,x/2,-3},
{x/2,0,(-3)/2},
{    -3, (-3)/2,      0}} 
>as_r(H)
表达式(rbind(c(y/2,x/2,-3),c(x/2,0,-3/2),c(-3,-3/2,
0)))
>评估(如r(H),列表(x=2,y=2,a=2))
[,1] [,2] [,3]
[1,]    1  1.0 -3.0
[2,]    1  0.0 -1.5
[3,]   -3 -1.5  0.0

以下是您可以使用Ryacas v1.1.1执行的操作:

> library(Ryacas)
> packageVersion("Ryacas")
[1] ‘1.1.1’
> x <- ysym("x")
> y <- ysym("y")
> a <- ysym("a")
> L <- x^2 * (y/4) - a*(3*x + 3*y/2 - 45)
> H <- Hessian(L, c("x", "y", "a"))
> H
{{   y/2,    x/2,     -3},
 {   x/2,      0, (-3)/2},
 {    -3, (-3)/2,      0}} 
> as_r(H)
expression(rbind(c(y/2, x/2, -3), c(x/2, 0, -3/2), c(-3, -3/2, 
    0)))
> eval(as_r(H), list(x = 2, y = 2, a = 2))
     [,1] [,2] [,3]
[1,]    1  1.0 -3.0
[2,]    1  0.0 -1.5
[3,]   -3 -1.5  0.0
>库(Ryacas)
>包装版本(“Ryacas”)
[1] ‘1.1.1’
>x y a L H
{{y/2,x/2,-3},
{x/2,0,(-3)/2},
{    -3, (-3)/2,      0}} 
>as_r(H)
表达式(rbind(c(y/2,x/2,-3),c(x/2,0,-3/2),c(-3,-3/2,
0)))
>评估(如r(H),列表(x=2,y=2,a=2))
[,1] [,2] [,3]
[1,]    1  1.0 -3.0
[2,]    1  0.0 -1.5
[3,]   -3 -1.5  0.0

谢谢,但恐怕这不是我想要的。原因如下:如果您向下滚动到Ryacas文档链接的底部,您将看到“Hessian”函数。此外,您提供的函数链接显示函数的名称不同(带有一个小h而不是大h),最后,numDeriv包中的hessian函数给出了一个数值近似值-不是我在这里寻找的(正如标题所述,我正在寻找一个符号计算)。谢谢,但恐怕这不是我要找的。原因如下:如果您向下滚动到Ryacas文档链接的底部,您将看到“Hessian”函数。此外,你给出的函数的链接显示函数的名称不同(用一个小h而不是大h),最后,numDeriv包中的hessian函数给出了一个数值近似值-不是我在这里寻找的(正如标题所述,我在寻找一个符号计算)。谢谢你,Stephane,这适用于玩具示例!不幸的是,当我使用我的实函数(这相当复杂)时,我在Hessian中得到了很多没有得到计算的“Deriv”表达式。在这种情况下,PrettyForm没有用处,因为我想进一步处理输出,并从中减去另一个估计量的大样本方差的表达式(试图证明一个估计量对于真实(多项式)基础分布的所有值都比另一个估计量更有效)。谢谢你,我认为你的答案是正确的,它给了我一些关于如何继续的建议@谢谢,很高兴知道。我也会为你提到这个包裹;这是基于SymPy而不是yacas的。谢谢你,Stephane,这对玩具示例很有用!不幸的是,当我使用我的实函数(这相当复杂)时,我在Hessian中得到了很多没有得到计算的“Deriv”表达式。在这种情况下,PrettyForm没有用处,因为我想进一步处理输出,并从中减去另一个估计量的大样本方差的表达式(试图证明一个估计量对于真实(多项式)基础分布的所有值都比另一个估计量更有效)。谢谢你,我认为你的答案是正确的,它给了我一些关于如何继续的建议@谢谢,很高兴知道。我也会为你提到这个包裹;这是基于SymPy而不是yacas。我回到这个问题上的时间要晚得多,因为我重新开始研究这个问题。在此期间,我不得不切换到nlsDeriv来帮助我解决问题,但您的解决方案有效,正是我所需要的,谢谢!我希望现在能更多地与Ryacas合作,更好地了解它。我回到这个问题上的时间要晚得多,因为我重新开始研究这个问题。在此期间,我不得不切换到nlsDeriv来帮助我解决问题,但您的解决方案有效,正是我所需要的,谢谢!我希望现在能和Ryacas合作更多,并去k