我是R的初学者,正在尝试求解方程组,但是当我运行时,R出现错误

时间:2018-06-22 16:27:35

标签: r statistics rstudio

# my error : Error in F[1] <- n/(X[0]) - sum(log(1 + Y^exp(X[1] + X[2] * x))) : replacement has length zero

set.seed(16)

#Inverse Transformation on CDF

n=100

SimRRR.f <- function(100, lambda=1,tau)) {
  x= rnorm(100,0,1)
  tau= exp(-1-x)
  u=runif(100)
  y= (1/(u^(1/lambda)-1))^(1/tau)
  y
}
Y<-((1/u)-1)^exp(-1-x)

# MLE for Simple Linear Regresion

# System of equations

library(rootSolve)
library(nleqslv)

model <- function(X){
  F <- numeric(length(X)) 
  F[1] <- n/(X[0])-sum(log(1+Y^exp(X[1]+X[2]*x)))
  F[2] <- 2*n -(X[0]+1)*sum(exp(X[1]+X[2]*x))*Y^( exp(X[1]+X[2]*x))*log(Y)/(1+ Y^( exp(X[1]+X[2]*x)))

  F[3] <- sum(x) + sum(x*log(Y))*exp(X[1]+X[2]*x) -(X[0]+1)*X[1]*sum(exp(X[1]+X[2]*x)*Y^(exp(X[1]+X[2]*x)*log(Y)))/(1+ Y^( exp(X[1]+X[2]*x)))

# Solution

  F

}

startx <- c(0.5,3,1) # start the answer search here
answers<-as.data.frame(nleqslv(startx,model))

1 个答案:

答案 0 :(得分:1)

问题是您在x函数中定义了utauySimRRR,但是试图定义{{1} },它们位于功能之外。

使用一个函数,将其输入,然后返回输出。在函数执行过程中定义的所有其他变量最后都消失了。就目前情况而言,Y应该是一系列的NA(除非您在使用函数时在全局环境中定义了以上变量...)

尝试以下功能,看看它们是否起作用:

Y

您的第二个功能有更多问题。即,它依赖于# I usually put all my library calls together at the beginning of the script. library(rootSolve) library(nleqslv) x = rnorm(n,0,1) # see below for why this is pulled out. SimRRR.f <- function(x, lambda=1,tau)) { # 100 can't be by itself in the function call. everything in there needs to be attached to a variable. n <- length(x) tau= exp(-1-x) u=runif(n) y= (1/(u^(1/lambda)-1))^(1/tau) y } Y_sim = SimRRR.f(n = 100, lambda = 1, tau = 1) # pick the right tau, it's never defined here. ,在任何可以找到的地方都没有定义。您是上一个函数中的需要 x,还是您的意思是x。我假设您确实需要X的值,因为x的长度仅为3。这就是为什么我将其从上一个函数调用中拉出来的原因-我们现在需要它。

[更新]

在注释中还指出这里的索引是错误的。我以前没听过(并且X元素定义正确)。我认为我现在也解决了索引编制问题:

F

我对model <- function(X, Y, x){ # If you use x and Y in the function, define them here. n <- length(x) F <- numeric(length(X)) F[1] <- n/(X[1])-sum(log(1+Y^exp(X[2]+X[3]*x))) F[2] <- 2*n -(X[1]+1)*sum(exp(X[2]+X[3]*x))*Y^( exp(X[2]+X[3]*x))*log(Y)/(1+ Y^( exp(X[2]+X[3]*x))) F[3] <- sum(x) + sum(x*log(Y))*exp(X[2]+X[3]*x) -(X[1]+1)*X[2]*sum(exp(X[2]+X[3]*x)*Y^(exp(X[2]+X[3]*x)*log(Y)))/(1+ Y^( exp(X[2]+X[3]*x))) # Solution F } 包不熟悉,但是除非定义了将其转换为数据帧的方法,否则可能会做得不好。在转换之前,我将确保所有其他功能均正常运行。

nleqslv