首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当结果是具有两个以上类别的比例数据时,R中的逻辑回归?

当结果是具有两个以上类别的比例数据时,R中的逻辑回归?
EN

Stack Overflow用户
提问于 2020-03-07 07:48:41
回答 1查看 179关注 0票数 1

假设我有不同班级的人口统计数据,以及班级中黑人、白人等学生的比例。我正在尝试创建回归,以确定班级的特征,这些特征可以预测班级中每个群体的比例。我感觉到多项逻辑回归可能会有一些适应,但我不知道这是如何实现的。

示例数据:

代码语言:javascript
运行
复制
dfexample <- data.frame(
     subject = c('English', 'English', 'Math', 'Science'),
     enrollment = c(100,200,50,70),
     white = c(0.5,0.5,0.6,0.7),
     black = c(0.25,0.20, 0.10, 0.25),
     hispanic = c(0.25, 0.30, 0.30, 0.05),
     classid = c('1a','3f','4d','5a')
)

dfexample
  subject enrollment white black hispanic classid
1 English        100   0.5  0.25     0.25      1a
2 English        200   0.5  0.20     0.30      3f
3    Math         50   0.6  0.10     0.30      4d
4 Science         70   0.7  0.25     0.05      5a

在这个虚拟场景中,我希望创建一个基于科目和班级大小的不同种族/民族学生比例的模型。

我想过使用逻辑回归来预测分数,但这似乎只有在结果是二元的(例如,True或False)时才有效。

如果不能做到这一点,我正在考虑的另一种选择是进行多重逻辑回归(白人与非白人;黑人与非黑人;西班牙裔与非西班牙裔)。然而,这种方法似乎缺乏,这会让我遇到多个测试错误吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-03-07 08:43:15

使用Caret库,您可以轻松地执行此任务。

首先,声明导入并定义数据集。

代码语言:javascript
运行
复制
library(caret)
library(dplyr)

dfexample <- data.frame(
       subject = c('English', 'English', 'Math', 'Science'),
       enrollment = c(100,200,50,70),
       white = c(0.5,0.5,0.6,0.7),
       black = c(0.25,0.20, 0.10, 0.25),
       hispanic = c(0.25, 0.30, 0.30, 0.05),
       classid = c('1a','3f','4d','5a')
   );
# replicating data frame rows to make our example works    
dfexample = dfexample[rep(seq_len(nrow(dfexample)), each = 20), ]

然后,确定训练和测试集:

代码语言:javascript
运行
复制
trainIndex <- createDataPartition(dfexample$classid, p = .6, 
                                  list = FALSE, 
                                  times = 1)
dataTrain <- dfexample[ trainIndex,]
dataTest  <- dfexample[-trainIndex,]

之后,运行您的模型。如果您需要测试其他模型,请查看此link并检查可用的模型方法。然后,更改方法属性,如下面的代码所示。

代码语言:javascript
运行
复制
modelFit <- train(classid ~ subject + enrollment + white + black + hispanic, data = dataTrain, 
                  method = "LogitBoost",  
                  #method = "gbm",  
                  verbose = FALSE
)

print(modelFit)

最后,生成混淆矩阵并分析预测结果:

代码语言:javascript
运行
复制
predictions <- predict(modelFit, newdata = dataTest)

cm = confusionMatrix(predictions, dataTest$classid)

print(cm)

我希望它能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60573037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档