【问题标题】:multivariate logistic regression in RR中的多元逻辑回归
【发布时间】:2017-07-30 18:21:26
【问题描述】:

我想运行一个简单的多元逻辑回归。我在下面用二进制数据做了一个例子来讨论一个例子。

多元回归 = 尝试预测 2+ 个结果变量

> y = matrix(c(0,0,0,1,1,1,1,1,1,0,0,0), nrow=6,ncol=2)

> x = matrix(c(1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1), nrow=6,ncol=6)
> x
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1    1    1    1
[2,]    0    1    1    1    1    1
[3,]    0    0    1    1    1    1
[4,]    0    0    0    1    1    1
[5,]    0    0    0    0    1    1
[6,]    0    0    0    0    0    1
> y
     [,1] [,2]
[1,]    0    1
[2,]    0    1
[3,]    0    1
[4,]    1    0
[5,]    1    0
[6,]    1    0

因此,变量“x”有 6 个样本,每个样本有 6 个属性。变量“y”对 6 个样本中的每一个都有 2 个预测。我特别想处理二进制数据。

> fit = glm(y~x-1, family = binomial(logit))

我做“-1”来消除截距系数。其他一切都是多变量情况下的标准逻辑回归。

> fit

Call:  glm(formula = y ~ x - 1, family = binomial(logit))

Coefficients:
 data1   data2   data3   data4   data5   data6  
  0.00    0.00  -49.13    0.00    0.00   24.57  

Degrees of Freedom: 6 Total (i.e. Null);  0 Residual
Null Deviance:      8.318 
Residual Deviance: 2.572e-10    AIC: 12

此时情况开始有所好转。我不确定为什么数据 3 和 6 的互联网是这样的。

val <- predict(fit,data.frame(c(1,1,1,1,1,1)), type = "response")

> val
       1            2            3            4            5            6 
2.143345e-11 2.143345e-11 2.143345e-11 1.000000e+00 1.000000e+00 1.000000e+00 

逻辑上我做错了什么。我期待一个 1x2 矩阵,而不是 1x6。我想要一个矩阵,它告诉我数据帧向量在 y1 和 y2 中为“1”(真)的概率。

任何帮助将不胜感激。

注意:我根据马里奥的回复更新了问题的结尾。

【问题讨论】:

    标签: r regression logistic-regression multivariate-testing


    【解决方案1】:

    参数 newdata 需要是一个 data.frame。你可以这样做:

    aux <- data.frame(c(1,1,1,1,1,1))
    val <- predict(fit, aux, type = "response")
    

    【讨论】:

    • 首先,你说得对,我需要在“预测”函数中输入一个数据框类型的对象。其次,“val”的输出值是一个1x6的矩阵。我试图得到一个 1x2 矩阵,它告诉我向量 [1,1,1,1,1,1] 在 y1 和 y2 中为“1”(真)的概率。
    • 是否可以创建一个模型,目标是 y1,其他目标是 y2 并连接输出?
    • 我明白你在说什么。我认为多元逻辑回归会发现因变量之间存在某种相关因素,如果您有 50-100 个因变量,则连接输出的运行时间会更长。
    【解决方案2】:

    lmglm不适用于多变量响应变量。作为解决方法,您可以适合多个GLM:

    fit1 <- glm(y[,1] ~ x-1, family=binomial(logit))
    fit2 <- glm(y[,2] ~ x-1, family=binomial(logit))
    

    或者您可以使用glmer lme4 em>包,这意味着模拟混合模型,但您可以简单地省略“随机效果”。 AFAIK,glmer支持多变量响应。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2018-01-26
      • 2013-12-20
      • 2018-02-12
      • 2014-06-20
      相关资源
      最近更新 更多