imd 统计教程 · 统计软件与R工具链
← 教程首页 返回本模块

新鲜出炉!elmer包用chatGPT等自动化撰写论文图表结果

聂志强实战医学统计2024-11-19 00:00:00广东


今天我们来学一个最近几天热辣出锅的大神Hadley Wickham出品的chatGPT R包,elmer包。elmer 的目标是为最常见的llm提供商提供一个用户友好的包装器。主要设计目标包括支持流媒体以及简化注册和调用 R 函数的过程。我在这几天的把玩中,尝试把它与R自动化脚本配合,发现一些不足,但是未来应该可期,毕竟是第一代版本。

小伙伴们追赶潮流的,可以先用起来,等着后续更新优化。当然,小伙伴们可以基于我的原创思路,再结合自己创新后续SCI写作中可以配合其他R包自动输出到word文档,一定程度可以解放你的生产力。

一、elmer的用途

总体试用下来,有惊喜也有遗憾,总体在自动识别和撰写SCI图表结果方面远远强于现有的R包,但是比官网GPT4o还是有一定差异,不知道是不是model调用的问题,期待后续Hadley Wickham更新。

1.1 常规图表识别

先来练练手,找点网络常规知识来进行,elmer还是比较容易识别的。


1.2 完败report包

我们来给自动化报告工具上点难度。这次引用A款课程自动化脚本glm模型的tidy_df结果如下。Report包在遇到自编表格,几乎毫无用处,elmer能较准确识别表格,但是我觉得还是不够优秀,而chatGPT4O已经能满足论文需求。

1.3 高级图形解读

高级表格pk完了,我们再看看高级统计图形。高级图形这块elmer还是存在误区,尽管我尝试了model=4o 和4omini,都无法准确识别高难度的统计图形,而官网GPT4o可以轻松识别。

二、安装激活API

对于科研工具弄潮儿小伙伴,可以登录官方看介绍,https://elmer.tidyverse.org、 https://github.com/tidyverse/elmer。

2.1 安装命令

安装命令,# install.packages("pak") pak::pak("tidyverse/elmer")。在rstudio设置之前,需要去openAI获取API key码(这步骤很复杂,我已经把流程走了一遍,大家可以参考下面我的攻略有8.8折)。

2.2 充值API

创建API key完成后,在页面点击设置→计费→添加付款信息→选择个人。CHATGPT采用stripe支付通道,所以是不支持国内银行卡的。这时候需要一张国外信用卡或者国内的虚拟信用卡,国外信用卡门槛太高,以虚拟卡为例。OpenAI 的接口调用需要花费 token 数,你需要先往你的 OpenAI 账号中充值,才可以进行 API 的调用。目前 OpenAI 的 API 调用账号是独立的,比如,你购买了 GPTPlus 的服务,但还是无法调用 API,因为你还需要往 API 调用的账户中充值。我用https://bewildcard.com/i/XJJWJK7M,进行充值,最低5美元。点击确认开卡完成点击卡中心→CVC卡密,我的卡片,里面可以看到卡的付款信息,然后在openai页面上发送问题,让openai完成自动扣费(遇到问题可以用这个客服,真不是广告,我找了半天就这个算便宜还能用)。

三、使用elmer

3.1 elmer函数

Elmer支持众多AI平台。需要在~/.Renviron中设置适当的环境变量,打开该文件的一种简单方法是调用usethis::edit_r_environ():对于chat_claude() ,使用https://console.anthropic.com/account/keys中的密钥设置ANTHROPIC_API_KEY 。对于chat_gemini() ,使用https://aistudio.google.com/app/apikey中的密钥设置GOOGLE_API_KEY 。对于chat_openai()使用https://platform.openai.com/account/api-keys中的密钥设置OPENAI_API_KEY。

3.2 创建聊天对象chat

Elmer会使用prompt提示词,并保留对话的上下文,因此每个新查询都可以基于先前的查询。

3.3 交互聊天

通过调用 live_console(chat),可以在R控制台中与模型实时互动。也可以直接用代码进行聊天。

3.4 相比其他GPT包

我之前写过copilot与GPT系列的文章(https://mp.weixin.qq.com/s?__biz=MzAxNTUzNDMyNQ==&mid=2650955881&idx=1&sn=8451f2d5e9f9d99e4c498d8c031af399&chksm=807451f3b703d8e546c286ef41633310c2bfed10cd18a2f8b94b627b304fb7668b852c7e4575#rd),elmer相比chatgpt包、gptstudio包优点在于多平台兼容、API更灵活、可识别本地图表支持多model,对话更加自由

四、R代码


rm(list=ls())#clear Global Environment
setwd('D:/聂个人文件/A款2024课件/14.cox分析')
#---本代码为实战医学统计A款课程,请勿商业传播,违者追溯获利至高20倍
#仿照SAS案例经典cox
pacman::p_load(dplyr,Hmisc)
data <- spss.get("经典cox案例1.sav")
glimpse(data)
str(data)

#-----?? 1 前提ph假设→ km曲线 
pacman::p_load(survival,survminer,Hmisc)
##---- 1.1 lls 肉眼看a b  
# 拟合Kaplan-Meier模型,按组分层;不能有covs!!
km_fit <- survfit(Surv(time, status==1) ~ a , data = data)
# 使用ggsurvplot绘制LLS图
# 绘制LL-Survival图并保存为PNG 
llsplot <- survminer::ggsurvplot(
  km_fit,  data = data, fun = function(x) log(-log(x)),
  #错误!km_fit, data = data, fun = "cloglog",
  # 使用cloglog函数绘制LLS图function(x) log(-log(x));
  #默认选项 event  cumhaz pct
  xlab = " Survival Time ",   ylab = "log(-log(Survival))",
  ggtheme = theme_minimal()
)
ggsave(
  filename = "llsplot.png",
  plot = llsplot$plot,  # 仅保存 ggplot 对象部分
  width = 8,           # 单位为英寸
  height = 6,
  dpi = 300            # 高分辨率
)



## install.packages("pak")
##pak::pak("tidyverse/elmer")

##usethis::edit_r_environ()

#---1. R代码聊天----
library(elmer)
chat <- chat_openai(
  api_key = "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",
  model = "gpt-4o-mini",
  #gpt-4o-mini
  system_prompt = "You are a friendly but terse assistant.",
  echo = TRUE
)
#1 以交互方式还是以编程方式
chat
#---1.1 交互聊天----
live_console(chat)

#---1.2 在线图片解析 ----
chat$chat("emlmer包是什么?")
chat$chat(content_image_url("https://www.r-project.org/Rlogo.png"), 
          "解释这个logo?")
#----1.3 本地文件解析----
chat$chat(
  "What do you see in these images?",
  ##content_image_url("https://www.r-project.org/Rlogo.png"),
  content_image_file(system.file("httr2.png", package = "elmer"))
)

#Unsupported image file extension: pdf. 不支持PDF!!
chat$chat(content_image_file("D:/A款2024课件/14.cox分析/km_plot2.pdf"), 
          "请从医学论文SCI角度针对图片应用统计学撰写result结果")

#content_image_file 函数接受本地图像文件的路径,并将其编码为 base64 字符串以发送到 API!
chat$chat"请从医学论文SCI角度针对图片应用统计学知识撰写result结果,并用中文描述",
           content_image_file("D:/聂个人文件/副业项目/广州智荟数据有限公司/A款2024课件/14.cox分析/llsplot.png"))
##live_console(chat)

#尝试4o
chat <- chat_openai(
  api_key = "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",
  model = "gpt-4o",
  #gpt-4o-mini
  system_prompt = "You are a friendly but terse assistant.",
  echo = TRUE
)
chat$chat"请从医学论文SCI角度针对图片应用统计学知识撰写result结果,并用中文描述",
           content_image_file("D:/聂个人文件/副业项目/广州智荟数据有限公司/A款2024课件/14.cox分析/llsplot.png"))
 

#---1.4 本地表格解析 ----
logistic_multi <- glm(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x9, family = binomial, data = rt )
# ---- report自动汇报summary 
library(report)
report(logistic_multi)
report(tidy_df)

 
chat$chat("请从医学论文SCI角度针对下列全部结果进行result统计分析详细撰写
                    Variable    Crude OR (95% CI) Crude P Value    Adjusted OR (95% CI) P (Wald's Test) P (LR Test)
1       x1: ref.=1                                                                                  0.624
2                2   3.33 (0.34,32.96)          0.303      1.26 (0.05,29.64)            0.884            
3                3   8.57 (0.83,89.04)          0.072      3.34 (0.13,89.28)            0.472            
4                4    15 (0.66,339.55)          0.089     5.26 (0.13,220.23)            0.383            
5       x2: 2 vs 1      4.09 (1.29,13)          0.017       1.42 (0.2,10.11)            0.728       0.729
6       x3: 2 vs 1     3.4 (1.11,10.4)          0.032      2.22 (0.22,22.36)            0.497       0.494
7       x4: 2 vs 1    4.26 (1.02,17.8)          0.047      5.77 (0.38,87.04)            0.205       0.179
8       x5: 2 vs 1      5 (1.52,16.46)          0.008      4.37 (0.44,43.77)             0.21       0.194
9       x6: 2 vs 1 16.87 (1.97,144.32)           0.01     15.15 (0.98,235.4)            0.052       0.024
10      x7: ref.=1                                                                                  0.944
11               2   4.12 (1.05,16.26)          0.043 0.9994 (0.1056,9.4609)                1            
12               3    4.58 (0.77,27.3)          0.094      1.71 (0.07,42.16)            0.741            
13 x9 (cont. var.)    1.05 (1.02,1.09)          0.005          1.07 (1,1.15)            0.035        0.01
          "
)
 



本公众号建立了学术交流群6(群6),仅供SCI学术交流,人数有限需要实名制。入群请加笔者微信 popnie请备注说明:姓名-学校(单位)-专业