我想用手计算一个空模型,饱和模型和一个泊松回归的建议模型。为此,我设计了一个loglikelihood函数,并使用optim函数对其进行优化。它适用于null和建议的模型。为了计算saturatetd模型的系数,我得到一个错误:“beta%*%t(x)中的错误:不一致的参数”。我知道错误意味着什么(矩阵的尺寸不适合),但我不知道如何解决它,也许你可以帮忙。
data <- as.data.frame(warpbreaks)
# Function for loglikelihood
LogLike <- function(y,x, par) {
beta <- par
# the deterministic part of the model:
lambda <- exp(beta%*%t(x))
# and here comes the negative log-likelihood of the whole dataset, given the
# model:
LL <- -sum(dpois(y, lambda, log = TRUE))
return(LL)
}
formula <- breaks~wool+tension
form <- formula(formula)
# dataFrame
model <- model.frame(formula, data = data)
# Designmatrix for proposed modell
x <- model.matrix(formula,data = data)
# Response Variable
y <- model.response(model)
# modelMatrix for null Modell
x1 <- as.matrix(x[,1])
# Computation Koef nullmodell
par1 <- rep(0,1)
koef <- round(optim(par=par1,fn=LogLike,x=x1,y=y)$par,4)
koef
# Computation koef proposed Modell
par2 <- rep(0,ncol(x))
koef2 <- round(optim(par=par2,fn=LogLike,x=x,y=y)$par,4)
koef2
# Computation koef saturated Modell
par3<- rep(0,length(y))
koef3 <- round(optim(par=par3,fn=LogLike,x=x,y=y)$par,4)
koef3
答案 0 :(得分:0)
饱和模型是具有许多参数作为数据点的模型。你需要构建这样一个x
矩阵,一切都应该有效。到目前为止,x
是54x4矩阵,而它应该是54x54。
---建议(FWIW)
避免将函数的名称用作变量(在您的情况下为beta
和par
)。
希望这会有所帮助。