R 通过迭代重加权最小二乘回归得到Beta的最大似然估计

R 通过迭代重加权最小二乘回归得到Beta的最大似然估计,r,regression,glm,log-likelihood,R,Regression,Glm,Log Likelihood,我有以下数据集: y <- c(5,8,6,2,3,1,2,4,5) x <- c(-1,-1,-1,0,0,0,1,1,1) d1 <- as.data.frame(cbind(y=y,x=x)) 我得到以下输出: Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 1.3948 0.1671 8.345 <2e-16 *** x

我有以下数据集:

y <- c(5,8,6,2,3,1,2,4,5)
x <- c(-1,-1,-1,0,0,0,1,1,1)
d1 <- as.data.frame(cbind(y=y,x=x))
我得到以下输出:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.3948     0.1671   8.345   <2e-16 ***
x            -0.3038     0.2250  -1.350    0.177   

有人知道我在编写自定义函数时哪里出了问题,以及我将如何纠正错误以复制
glm()
函数的输出似乎您的“z”需要在循环中,因为您的“beta”在每次迭代中都会得到更新,因此您的“z”也应该基于这些值进行更新


否则,实现看起来是正确的

这里有一个简单的IRL示例(但使用
lm.wfit
而不是原始的线性代数)
Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.3948     0.1671   8.345   <2e-16 ***
x            -0.3038     0.2250  -1.350    0.177   
X <- cbind(1,x)

#write an interatively reweighted least squares function with log link
glmfunc.log <- function(d,betas,iterations=1)
{
X <- cbind(1,d[,"x"])
z <- as.matrix(betas[1]+betas[2]*d[,"x"]+((d[,"y"]-exp(betas[1]+betas[2]*d[,"x"]))/exp(betas[1]+betas[2]*d[,"x"])))


for(i in 1:iterations) {
W <- diag(exp(betas[1]+betas[2]*d[,"x"]))
betas <- solve(t(X)%*%W%*%X)%*%t(X)%*%W%*%z
}
return(list(betas=betas,Information=t(X)%*%W%*%X))
}

#run the function
model <- glmfunc.log(d=d1,betas=c(1,0),iterations=1000)
#print betas
model$betas
           [,1]
[1,]  1.5042000
[2,] -0.6851218