Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用带公式参数的函数时出现问题_R - Fatal编程技术网

在R中使用带公式参数的函数时出现问题

在R中使用带公式参数的函数时出现问题,r,R,我有一个函数在R中实现了一个GLM的Fisher算法,它将公式作为参数。但是,当尝试运行它时,我得到一个错误:model.frame.default中的错误(formula=formula,drop.unused.levels=TRUE):变量“t”的类型无效(closure) 我试着用几种方法调用它(例如使用as.formula(y~t),但似乎没有任何效果 myglm <- function(formula,data,start = 0) { X = model.matrix(fo

我有一个函数在R中实现了一个GLM的Fisher算法,它将公式作为参数。但是,当尝试运行它时,我得到一个错误:
model.frame.default中的错误(formula=formula,drop.unused.levels=TRUE):变量“t”的类型无效(closure)

我试着用几种方法调用它(例如使用
as.formula(y~t)
,但似乎没有任何效果

myglm <-  function(formula,data,start = 0) {

X = model.matrix(formula,data) #It appears that the issue comes from this line
Y = data[,1]
n = dim(X)[1]
p <- dim(X)[2]
beta_0 = rep(1,p)
M = t(X)%*%X
beta = rep(0,p)#Least Squares Estimate
epsilon = 0.01

#Run Fisher Iterations       
while (norm(beta-beta_0,type = "2")/norm(beta_0, type = "2") > epsilon) {
  
  beta_0 = beta
  eta = X %*% beta
  lambda = exp(eta)
  F =  t(X) %*% diag(as.vector(lambda)) %*% X #Fisher information matrix
  s = t(X) %*% (Y - exp(eta)) #Score function
  beta = beta + solve(F) %*% s
  
  
}


vcov = solve(F)
coef = matrix(c(0,0,0,0),nrow = 2, ncol = 2)
coef[,1] = beta
coef[,2] = t(sqrt(diag(vcov)))

colnames(coef) = c("Coefficients","Standard error")
rownames(coef) = c("beta1", "beta2")
#Calculate Deviance
mod_sat = glm(formula, family = poisson(link = "log"))
log_likelihood = Y %*% eta - exp(eta)
deviance = 2*(LogLik(mod_sat) - log_likelihood)


return(list(coef,deviance,vcov))
  
  
}


f = formula(y ~ t)
load(url("https://www.math.ntnu.no/emner/TMA4315/2020h/hoge-veluwe.Rdata")) #This is stored as "data"
myglm(f, data)


myglm您的问题在这一行:

mod_sat = glm(formula, family = poisson(link = "log"))
您需要为
glm()
指定一个
data=
参数,以便它知道如何解释公式