我感兴趣的是pTgh_y(q,g,h)关于q 的自定义函数的一阶数值导数.对于特殊情况,pTgh_y(q,0,0)= pnorm(q).换句话说pTgh_y(q,g,h),当g = h = 0时,降低到标准法线的CDF(见下图).
这意味着d pTgh_y(0,0,0)/ dq应等于以下
dnorm(0)
Run Code Online (Sandbox Code Playgroud)
0.3989423
grad(pnorm,0)
Run Code Online (Sandbox Code Playgroud)
0.3989423
以下是我在{pracma}库中使用grad函数的一些尝试.
library(pracma)
# load pTgh and all relevant functions
grad(function(x){pTgh_y(x,0,0)},0)
Run Code Online (Sandbox Code Playgroud)
0
grad(function(x){pTgh_y(x,0,0)},0,heps=1e-10)
Run Code Online (Sandbox Code Playgroud)
0
以下是我在{numDeriv}库中使用grad函数的一些尝试.
library(numDeriv)
# load pTgh and all relevant functions
grad(function(x){pTgh_y(x,0,0)},0,method='simple')
Run Code Online (Sandbox Code Playgroud)
0.3274016
grad(function(x){pTgh_y(x,0,0)},0,method='Richardson')
Run Code Online (Sandbox Code Playgroud)
-0.02505431
grad(function(x){pTgh_y(x,0,0)},0,method='complex')
Run Code Online (Sandbox Code Playgroud)
pmin中的错误(x,.Machine $ double.xmax):无效的输入类型grad.default中的错误(函数(x){:函数不接受方法'complex'所需的复杂参数.
这些功能都没有给出正确的结果.
我的pTgh_y(q,g,h)功能定义如下
qTgh_y = function(p,g,h){
zp = qnorm(p)
if(g==0) q = zp
else q = (exp(g*zp)-1)*exp(0.5*h*zp^2)/g
q[p==0] = -Inf
q[p==1] = Inf
return(q)
}
pTgh_y = function(q,g,h){
if (q==-Inf) return(0) …Run Code Online (Sandbox Code Playgroud) 我想从日期中仅提取季度,例如,从"2003-02-08"日期获得整数1.我一直在尝试这条线
library(mondate)
as.yearqtr(dat$DATE)
Run Code Online (Sandbox Code Playgroud)
"2003 Q1"
as.character(as.yearqtr(dat$DATE))[1]
Run Code Online (Sandbox Code Playgroud)
"2003 Q1"
没有给出我想要的结果.当然我可以写如下条件
library(data.table)
data$DATE = as.Date(data$DATE, format='%d%b%Y')
data$month=month(data$DATE)
setDT(data)[month==1, quarter:=1]
...
Run Code Online (Sandbox Code Playgroud)
这会起作用,但根本不优雅.这样做有更美妙的方式吗?
谢谢lmo和user2100721!我真的希望我能接受所有的答案!