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

时间:2017-05-17 14:37:20

标签: r glm r-caret

我有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 :(得分:0)

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

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

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

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

如果您已经(在课堂或某事物上)学习使用glm with family =&#34; binomial&#34;在这个数据集上,最简单的方法是使用if语句来确定获胜者,创建一个包含A类和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)

然后在火车上使用毛发中的glm它应该没问题。如果您仍然遇到问题再次发布代码更新,我会尽力帮助