我有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的函数。
将数据拆分为培训和测试数据不是问题所在。
答案 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它应该没问题。如果您仍然遇到问题再次发布代码更新,我会尽力帮助