在R中使用带公式参数的函数时出现问题
我有一个函数在R中实现了一个GLM的Fisher算法,它将公式作为参数。但是,当尝试运行它时,我得到一个错误:在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
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=
参数,以便它知道如何解释公式