将决策边界拟合到 R 中的逻辑回归模型

2024-03-08

我正在努力使用 ggplot 在 R 中绘制决策边界。

我有两个变量(考试成绩)和一个学生是否被录取的二元分类。数据如下所示:



> head(exam.data)
  Exam1Score Exam2Score Admitted
1   34.62366   78.02469        0
2   30.28671   43.89500        0
3   35.84741   72.90220        0
4   60.18260   86.30855        1
5   79.03274   75.34438        1
6   45.08328   56.31637        0
  

我可以使用 ggplot 绘制数据:

exam.plot <- ggplot(data=exam.data, aes(x=Exam1Score, y=Exam2Score, col = ifelse(Admitted == 1,'dark green','red'), size=0.5))+
  geom_point()+
  labs(x="Exam 1 Scores", y="Exam 2 Scores", title="Exam Scores", colour="Exam Scores")+
  theme_bw()+
  theme(legend.position="none")

然后成功拟合逻辑回归模型:

exam.lm <- glm(data=exam.data, formula=Admitted ~ Exam1Score + Exam2Score, family="binomial") 

因此,在大量搜索网络后,我决定手动拟合决策边界(尽管确实尝试使用 stat_smooth 执行此操作一段时间,但无法使其工作),我尝试了以下操作:

# Fit the decision boundary
plot_x <- c(min(exam.data$Exam1Score)-2, max(exam.data$Exam1Score)+2)
plot_y <- (-1 /coef(exam.lm)[3]) * (coef(exam.lm)[2] * plot_x + coef(exam.lm)[1])
db.data <- data.frame(rbind(plot_x, plot_y))
colnames(db.data) <- c('x','y')

# Add the decision boundary plot
ggplot()+geom_line(data=db.data, aes(x=x, y=y))

它成功地绘制了决策边界,但我无法将其添加到我现有的图中:

> exam.plot+geom_line(data=db.data, aes(x=x, y=y))
Error: Aesthetics must either be length one, or the same length as the dataProblems:x, y

有人可以指出我做错了什么或者我是否真的可以用 +stat_smooth() 做到这一点?

所有代码(ex2.R)和文件都在这里:https://github.com/StuHorsman/rscripts/tree/master/R/Coursera https://github.com/StuHorsman/rscripts/tree/master/R/Coursera

Thanks!

Stuart

更新:我可以通过以下方式实现一些类似的目标:

plot(exam.data$Exam1Score, exam.data$Exam2Score, type="n", xlab="Exam 1 Scores", ylab="Exam 2 Scores")      
points(exam.data$Exam1Score[exam.data$Admitted==1], exam.data$Exam2Score[exam.data$Admitted==1], pch=4, col="green")  
points(exam.data$Exam1Score[exam.data$Admitted==0], exam.data$Exam2Score[exam.data$Admitted==0], pch=4, col="red")        
lines(db.data, col="blue")

问题是在exam.plot你不仅仅使用美学x and y, 但是也col and size(后者不必要)。这些层需要有all中定义的美学集ggplot ()称呼。 (我经常被这个问题困扰)。

Thus:

exam.plot+geom_line(data=db.data, aes(x=x, y=y), col = "black", size = 1)

确实有情节。

不过,我建议改变exam.plot一点并删除不适用于所有图层的所有美学(并将它们放入图层定义中):

exam.plot <- ggplot(data=exam.data, aes(x = Exam1Score, y=Exam2Score))+
  geom_point(aes (col = Admitted), size = 0.5)+
  scale_color_manual (values =  c('red', 'dark green')) + 
  labs(x="Exam 1 Scores", y="Exam 2 Scores", title="Exam Scores", colour="Exam Scores")+
  theme_bw()+
  coord_equal () +  # assuming that the scores have the same scale.
  theme(legend.position="none")

exam.plot + geom_line(data=db.data, aes(x=x, y=y))

其中有示例数据

exam.data <- data.frame (Exam1Score = rnorm (100) + 0:1, 
                         Exam2Score = rnorm (100) + 0:1, 
                         Admitted = factor (rep (0:1, 50)))

yields:
example plot

(使用默认大小绘制,在本例中几乎看不到 0.5)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将决策边界拟合到 R 中的逻辑回归模型 的相关文章

随机推荐

  • 如何更新vcpkg本身?

    我已经安装了 vcpkg 一个 C 包管理器 现在过了一段时间 我想更新一下 我怎样才能做到这一点 我需要卸载并重新安装吗 更新 vcpkg git 克隆的最佳方法是 将所有已安装端口的列表保存在某处 git pull 删除
  • geom_histogram:错误的垃圾箱?

    我正在使用 ggplot 2 1 0 来绘制直方图 并且我对直方图箱有意外的行为 我在这里举了一个左封闭 bin 的示例 即 0 0 1 binwidth 为 0 1 mydf lt data frame myvar c 1 0 5 0 4
  • 有没有更好的方法来打印cout最多N个字符的字符串?

    编辑 我发送的是二进制文件而不是字符串 我的测试是使用 html 页面 所以在这个例子中我只使用一个字符串 但我的问题是关于二进制 向量和使用 ostream 进行调试 我这样做可以消除一些混乱 我有以下代码 cout lt lt stri
  • 以 Django 形式访问 POST 数据

    我一直在使用这个网站 http jacobian org writing dynamic form generation 作为如何在 Django 中制作动态表单的示例 在他看来 他使用 if request method POST for
  • 在unity3D android中本地保存大量数据的最佳方法? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个2D游戏 稍后将用作摊位的广告活动 我需要存储用户信息 姓名 号码 电子邮件和分数 这些
  • java servlet:请求参数包含加号

    请求参数就像decrypt param 5FHjiSJ6NOTmi7 2tnnkQ 在 servlet 中 当我尝试通过以下方式打印参数时String param request getParameter param I get 5FHji
  • javascript 点击事件处理程序在没有点击的情况下触发

    为什么在没有单击指定按钮的情况下会触发此函数 我查看了一些类似的问题 但没有一个涉及此代码结构 可能是我丢失的明显原因 document getElementById main btn addEventListener click hide
  • 如何在 CSS 中设置背景图像不透明度而不使用伪之前/之后和/或定位的 div

    我有一个由 CMS 生成的 div 其中包含一个背景图像 我想更改该背景图像的不透明度 而不影响该 div 子元素的不透明度 https jsfiddle net L5b81yqo https jsfiddle net L5b81yqo H
  • PyCharm 和 VirtualEnvs - 如何删除旧版本

    如何从 PyCharm 中删除遗留项目的所有痕迹 背景 我今天从 PyCharm 社区版升级到 PyCharm 专业版 原因是这样我就可以从事 Django 项目 特别是一个名为 deals 的新兴遗留项目 我删除了旧项目文件夹 然后 我打
  • Ember JS/Handlebars 视图助手

    目前 如果我们将视图定义为 view App myView ember handlebars 会将视图元素包裹在一个 div class ember view 有办法阻止这种情况吗 您可能想将 tagName 设置为 App MyView
  • “无法从安装目录获取安装脚本的一致路径”

    我正在使用 pip 从 git 存储库安装包 pip install e git git github com knipknap SpiffWorkflow git master egg SpiffWorkflow dev 克隆存储库没有问
  • 如何编写一个 C++ 程序来过滤掉非整数?

    像这样的东西 cout lt lt Enter the number of columns cin gt gt input while input int cout lt lt endl lt lt Column size must be
  • 偏移日期时间解析

    需要从格式解析日期时间2016 06 24T13 39 44 687680 第一步使用 尝试用线路解析没有微秒的时间 System out println OffsetDateTime parse 2011 12 03T10 15 30 D
  • 使用 C++ 实现 Android 事件处理程序

    我有一个 Java 布局设计 目前正在通过 JNI 移植到 C 我实际上已经完成了这一点 但我目前对如何设置事件处理程序 例如 setOnClickListener 感到困惑 我已经经历过JNI规范 https docs oracle co
  • 快速解码 JPEG 图像的方法

    我需要解码 解压为位图 非常小的 大约 1200 1200 JPEG 问题是我需要尽快完成 我尝试过 libjpeg 但速度很慢 我也尝试过 BitmapFactory decodeByteArray 它有点快 但仍然不够快 还有什么其他选
  • 在哪里编辑 mysql 全文停用词列表?

    我看到mysql的全文停用词列表是英文的 考虑到 mysql 在全世界范围内使用 这有点奇怪 无论如何 我将 ft min word len 降低到 3 所以我需要将我的语言中的常用单词添加到此列表中 有人可以告诉我在哪里可以找到它吗 Th
  • Rails 3 日期时间比较与 ActiveRecord 查询中的日期

    我试图在模型中搜索等于特定日期的任何日期 同时忽略时间戳 在 Rails 中我可以简单地执行它DateTime to date somedate 但是我认为在 SQL 中制定起来并不那么容易 因为我无法将 to date 方法应用于整个列
  • S3 Lambda 在 10 分钟后触发双重调用

    我们遇到了由 S3 ObjectCreated Events 触发的 Lambda 的双重 Lambda 调用 那些双重调用发生exactly第一次调用后 10 分钟 不是第一次尝试完成后 10 分钟 而是第一次调用发生后 10 分钟 原始
  • 以随机顺序迭代数组[重复]

    这个问题在这里已经有答案了 给定一个序列N元素 比如std vector or T 是否有任何有效的方法可以按随机顺序迭代其元素 仅访问每个元素一次 该解决方案必须避免创建带有打乱索引的附加数组 EDIT 我们还需要能够跟踪原始索引 不是特
  • 将决策边界拟合到 R 中的逻辑回归模型

    我正在努力使用 ggplot 在 R 中绘制决策边界 我有两个变量 考试成绩 和一个学生是否被录取的二元分类 数据如下所示 gt head exam data Exam1Score Exam2Score Admitted 1 34 6236