象征性地计算雅卡斯(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