R:与R中的glm和mle2包不同的结果
因此,我想用GLM找到估计参数,并将其与mle2包进行比较。 这是我的GLM代码R:与R中的glm和mle2包不同的结果,r,glm,estimation,mle,R,Glm,Estimation,Mle,因此,我想用GLM找到估计参数,并将其与mle2包进行比较。 这是我的GLM代码 d <- read.delim("http://dnett.github.io/S510/Disease.txt") d$disease=factor(d$disease) d$ses=factor(d$ses) d$sector=factor(d$sector) str(d) glm2 <- glm(disease~ses+sector, family=binomial(link
d <- read.delim("http://dnett.github.io/S510/Disease.txt")
d$disease=factor(d$disease)
d$ses=factor(d$ses)
d$sector=factor(d$sector)
str(d)
glm2 <- glm(disease~ses+sector, family=binomial(link=logit), data=d)
summary(glm2)
这条线
-sum(joint.pdf, log=TRUE ,na.rm=TRUE)
这是错误的sum
没有特殊的log
参数;您要做的是将值TRUE
(转换为1)添加到pdf中
你想要的是
-sum(log(joint.pdf), na.rm=TRUE)
但由于数字原因,这也不是很好,因为pdf可能会下溢。更好的写作方式是
logpdf <- y*log(p) + (1-y)*log(1-p)
-sum(logpdf, na.rm=TRUE)
logpdf我不确定您对eta
的定义是否正确。我会使用模型矩阵
X <- model.matrix(~ ses + sector, data = d)
nlldbin <- function(A,B,C,D){
eta <- X %*% c(A, B, C, D)
p <- 1/(1+exp(-eta))
logpdf <- y*log(p) + (1-y)*log(1-p)
-sum(logpdf)
}
X但是结果不同,根据GLM进行估计:(截距)-1.52001,ses2-0.08525,ses3 0.16086,sector2 1.28098。而mle2,A-0.9515150,B-0.0259063,C-0.0210864,D-0.0053744。结果是“X%*%C(A,B,C,D):不一致参数中的错误”,你能帮我找出错误吗?@JasmineHelen Strange。X有四列,不是吗?@JasmineHelen也许你忘了将列分解为ses
和sector
。
logpdf <- y*log(p) + (1-y)*log(1-p)
-sum(logpdf, na.rm=TRUE)
X <- model.matrix(~ ses + sector, data = d)
nlldbin <- function(A,B,C,D){
eta <- X %*% c(A, B, C, D)
p <- 1/(1+exp(-eta))
logpdf <- y*log(p) + (1-y)*log(1-p)
-sum(logpdf)
}