gpt4 book ai didi

r - 在 GLM 准规范中使用变量

转载 作者:行者123 更新时间:2023-12-02 03:42:58 25 4
gpt4 key购买 nike

我正在使用准似然方法( family=quasi(...) )将 GLM 拟合到一些数据。

我想使用一个变量,p在方差规范中,像这样:

family = quasi(link=log, variance=mu^p) 

然而,这不起作用(它不再识别 mu )。

有没有办法让 R 在计算之前只在表达式中插入 p 的值,所以我可以使用 p而不是一个数字?

这是一个不起作用的例子:
set.seed(1)
x <- runif(100)
y <- x^2+2*x+sin(2*pi*x) + rnorm(100)

fitModel <- function(x,y, p) {
model <- glm(y~x, family=quasi(link=log, variance=mu^p))
return(model)
}
fitModel(x,y,2)

谢谢!

最佳答案

family函数进行花哨的解析,这意味着 paste0评论中建议的解决方案如果不跳过相当多的环节就行不通。此外,如果任何 y 值 <= 0,则以下函数将失败,因此我稍微更改了示例(如果您确实有负响应值,则必须考虑对此要做什么... )

set.seed(1)
x <- seq(2,10,length=100)
y <- x^2+2*x+sin(2*pi*x) + rnorm(100,)

我所做的是创建一个 quasi family 对象,然后动态修改其方差函数。
pfamily <- quasi(link="log",variance="mu")
fitModel <- function(x,y, p) {
pfamily[["variance"]] <- function(mu) mu^p
model <- glm(y~x, family=pfamily)
model
}

fitModel(x,y,2)
fitModel(x,y,1)

就其值(value)而言,此变体应该能够处理 p 的任意值。 ,所以例如您可以在方差功率上绘制一条曲线:
dfun <- function(p) {
deviance(fitModel(x,y,p))
}
pvec <- seq(0.1,3,by=0.1)
dvec <- sapply(pvec,dfun)
par(las=1,bty="l")
plot(pvec,dvec,type="b",xlab="variance power",ylab="deviance")

enter image description here

关于r - 在 GLM 准规范中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18956818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com