麻烦各位大佬走过路过瞅一瞅啊
请教一下如下的function在R里面如何写出来
zhangice001 这里面讲了如何在 R 里写公式,你参考一下。
Liechi 好的,谢谢!
- 已编辑
您好,我现在问题是这样,因为这里是有xitβ1和xitβ2,我想请问下这个如何定义
比如说只有一个β的情况下,直接使用一个beta和X %*% beta 这种模式就行了,出现两个beta请问下该怎么处理,谢谢!
probit <- function (beta) {
eta <- X %*% beta
p <- pnorm(eta)
-sum((1 - Y) * log(1 - p) + Y * log(p),na.rm=T)
}
- 已编辑
zhangice001 试试 beta[1] 和 beta[2]。展示公式的话可以通过方括号加下角标,不知这是否符合你的要求。
- 已编辑
Liechi 谢谢您的建议,还有就是我想请问一下使用dnorm如何定义
我现在是这样的,以ols的极大似然估计为例:
ols.nll <- function (beta) {
eta <- (Y-X %*% beta)/sigma
p <- dnorm(Y,eta,sigma)
-sum(log(p),na.rm=T)
}
fit <- optim(vi, ols.nll , method = "BFGS", hessian = TRUE)
结果显示,Error in (Y - X %*% beta)/sigma : non-numeric argument to binary operator,请问下这个该怎么使用dnorm去定义,再次麻烦您了
- 已编辑
zhangice001 表示两个数的乘积直接写 *
就可以了,如 eta <- (Y - X * beta)/sigma
。你写成 %*%
在 R 里面表示矩阵乘法,所以得到的结果会是个矩阵。
定义函数的时候,就直接按照平时的习惯写四则运算符号。%*%
一般用于做图的时候,在图像上标注的公式里显示 x
号;用于定义函数时,%*%
用于表示两个矩阵相乘。
Liechi 好的,谢谢!
zhangice001 写了一个比较无聊的例子,你参考一下吧。
set.seed(12345)
beta1 <- rnorm(10)
beta2 <- rnorm(10)
beta3 <- rnorm(10)
plot(x = beta1, y = beta1 * beta3 / beta2)
text(-1, -1, expression(frac(beta[1] * beta[3], beta[2])), cex = 3)
text(0, -1, expression(frac(beta[1] %*% beta[3], beta[2])), cex = 3)
Liechi zhangice001 这个帖子我这几天一直都没太搞明白到底是要问什么,从我一个旁观者的角度来看,你们似乎各自在说不同的问题啊。所以你到底是要把一个数学公式画到图里(如楼上的答案给的一样),还是要写一个混合概率密度函数?我感觉你是要问后者。
- 已编辑
yihui 从zhangice001 新发的帖子看,他/她想问的应该是后者。
其实在回复这个问题的时候,我已意识到了可能有这方面的理解分歧,所以在以上这个憋足的例子里面写了 y = beta1 * beta3 / beta2
来和下边的 expression(frac(beta[1] * beta[3], beta[2]))
对应,以帮助理解。不过看来我还是没有能解释清楚。