Шляпная матрица бета-регрессии
Я пытаюсь рассчитать бета-регрессию вручную, используя матрицу Шляпы. Я использую идею ответа https://stats.stackexchange.com/questions/8126/how-to-calculate-the-hat-matrix-for- логистической-регрессии-in-r?noredirect=1&lq =1. Но у меня это не работает. Далее я не уверен, правильно это или нет. Пожалуйста, помогите.
Мой код
require(betareg)
df<-data("ReadingSkills")
y<-ReadingSkills$accuracy
n<-length(y)
x1<-rnorm(n,0,1)
x2<-rnorm(n,0,1)
X<-cbind(1,x1, x2)
bfit <- solve(t(X) %*% X + u * diag(3)) %*% t(X) %*% y
bfit1<-betareg(accuracy ~ x1+x2, data = ReadingSkills, link="logit")
bfit
bfit1
v <- 1/(1+exp(-X%*%bfit))
VX <- X*v
H <- VX%*%solve(crossprod(VX,VX),t(VX))
1 ответ
Эта задача лучше всего подходит для перекрестной проверки, поскольку для доказательства требуются математические уравнения. Но мы все равно можем написать код здесь. В любом случае, поскольку вас интересуют коэффициенты, имеет смысл не так просто, как
y<-ReadingSkills$accuracy
set.seed(1)
n<-length(y)
x1<-rnorm(n,0,1)
x2<-rnorm(n,0,1)
X<-cbind(1,x1, x2)
bfit1<-betareg(accuracy ~ x1+x2, data = ReadingSkills, link="logit")
bfit1
Call:
betareg(formula = accuracy ~ x1 + x2, data = ReadingSkills,
link = "logit")
Coefficients (mean model with logit link):
(Intercept) x1 x2
1.30730 0.28936 -0.08727
Phi coefficients (precision model with identity link):
(phi)
3.409
Можем ли мы сделать то же самое напрямую, не завися от
ll <- function(par){
mu <- c(plogis(X %*% head(par, -1)))
phi <- tail(par, 1)
-sum(dbeta(y, mu*phi, (1-mu)*phi, log = TRUE))
}
optim(runif(ncol(X) + 1),ll)
$par
[1] 1.30733153 0.28936064 -0.08723266 3.40954180
$value
[1] -27.84788
$counts
function gradient
169 NA
$convergence
[1] 0
$message
NULL
Вы можете видеть, что результаты