首页 文章

在插入符号中拟合二项式glm

提问于
浏览
1

我有OutcomeA计数表格的投票数据和OutcomeB的计数(只有两个结果) . 我正在使用这里建议的glm二项式模型的公式:r(https://stats.stackexchange.com/questions/89734/glm-for-proportion-data-in-r)中的比例数据的GLM,其中y变量为:

cbind (OutcomeA, OutcomeB)

我想使用插入包,进行一些交叉验证,并且通常处理输出以进行比较,如下所示:Binomial GLM using caret train

我认为我可以使用投票结果A作为'y'变量,总选民投票率(即OutcomeA OutcomeB)作为权重变量?谢谢 .

(编辑)(人造)数据看起来像:

OutcomeA OutcomeB   X1   X2   X3   X4
    1234     2345 0.23 0.34 0.34 0.45
    2345     2312 0.55 0.57 0.58 0.58
    3423     1234 0.45 0.88 0.69 0.12
...

OutcomeA是赞成票数,OutcomeB是反对票数 .

我想通过插入符号使用glm中的二项式族模型将“数量”OutcomeA /(OutcomeA OutcomeB)建模为X1,X2,X3和X4的函数 .

将数据分成训练和测试数据不是这里的问题 .

1 回答

  • 0

    如果您想对A的比率或百分比进行建模,您可以使用线性回归并将百分比作为结果变量(在将其输入方程之前创建百分比) . 你会得到一系列系数,用y截距表示每个X变量对y的影响 .

    目前您的数据不是二项式,需要二元结果,是否,A或B,输赢 . 转换为比率或百分比意味着它不是Poisson要么是简单计数,要么是单数计数 .

    如果您的目标是预测百分比,我会在新列 (A/(A + B) 中创建百分比,并使用新列作为结果,使用传统的线性回归:

    mod<-lm(newPercent~x1+x2+x3+x4, data=df)

    如果您已经(在类或某事物中)学习了如何在此数据集上使用glm with family = "binomial",那么最简单的方法是使用 if 语句来确定获胜者,创建一个新列A类和B类代表谁赢了 . 然后使用glm如下:

    mod <- glm(winner~x1+x2+x3+x4,data=df,family=binomial())

    但是,预测A的投票百分比不是合适的模型,这将是传统的线性模型 .

    如果您想使用第一个链接中的方法,那么您将使用: mod <- glm(cbind(outcomeA, outcomeB)~x1+x2+x3+x4,data=df,family=binomial(logit))

    如果你想使用第二个链接并且正在获得该错误,使用插入符来管理训练和测试集,那么你需要将结果变量转换为TWO LEVEL因子: A or B .

    df$newCategory<-ifelse(outcomeA>outcomeB, A , B) df$newCategory<-as.factor(df$newCategory)

    然后用火车在Caret中使用glm它应该没问题 . 如果你仍然有问题再次发布代码更新,我会尽力帮助

相关问题