在 R 中将等式写为 glm

Writing an equation as a glm in R

我有一个多变量方程,经过一些分析得出结论。我想在 R 中以 glm 的形式编写这个等式。我这样做是为了可以在这个等式上使用 "predict" 和其他函数。可以吗?

这是我的等式的详细信息

intercept:15.67
variable1 coefficient: -3.2
variable2 Coefficient -0.8

我知道这听起来很简单,但我找不到将方程式转换为 glm 的函数(类似于 "as.glm"!)这可能吗?

谢谢

这里是 class 的 线性 函数的快速破解。我相当确定某处一定存在更好的东西......但无论如何:

linear <- function(betas){
    betas = matrix(betas, ncol=1)
    ret = list(
        pred = function(z){
            (cbind(1,z) %*% betas)[,1]
        }
        )
    class(ret)="linear"
    ret
}

predict.linear <- function(object, newdata, ...){
    object$pred(newdata)
}

那么你可以这样做:

> l1 = linear(c(15,1,2))
> predict(l1,cbind(1:10,12:21))
 [1] 40 43 46 49 52 55 58 61 64 67

这只是:

> 15 + 1*(1:10) + 2*(12:21)
 [1] 40 43 46 49 52 55 58 61 64 67

即截距加解释变量*系数。

请注意,这取决于矩阵中列的顺序,而不是数据框中变量的名称。正如我所说,可能有更好、更有用的实现,所以我不想进一步开发它。有打印方法:

print.linear <- function(x,...){
    cat("Linear interpolator\n")
    cat("Parameters: ",x$betas)
    cat("\n")
    invisible(0)
}

所以它现在说:

> l1
Linear interpolator
Parameters:  15 1 2

打印时。

如果你真的想要 generalised 线性模型,那么你必须在某处指定一个族(泊松,二项式等)和一个 link 函数。

我过去不得不这样做,所以我写了一个辅助函数来创建一个名为 makeglm 的假 glm 对象。实际上,您需要设置一堆东西,以便您可以使用 predict(),包括为列指定 类。该函数本身请求一个 data.frame,它可以从中推断数据类型。这是您将如何使用它的示例。

#sample data
set.seed(15)
dd <- data.frame(
    X1=runif(50),
    X2=factor(sample(letters[1:4], 50, replace=T)),
    X3=rpois(50, 5),
    Outcome = sample(0:1, 50, replace=T)
)

# fit standard model     
mymodel<-glm(Outcome~X1+X2+X3, data=dd, family=binomial)
predict(mymodel, type="response")

#create a "fake" model and still use predict
newmodel <- makeglm(Outcome~X1+X2+X3, family=binomial, data=dd, 
    -.5, X1=1, X2=c(b=1.5, c=1, d=1.5), X3=-.15)
predict(newmodel, newdata=dd, type="response")