今天我们来学一个最近几天热辣出锅的大神Hadley Wickham出品的chatGPT R包,elmer包。elmer 的目标是为最常见的llm提供商提供一个用户友好的包装器。主要设计目标包括支持流媒体以及简化注册和调用 R 函数的过程。我在这几天的把玩中,尝试把它与R自动化脚本配合,发现一些不足,但是未来应该可期,毕竟是第一代版本。
小伙伴们追赶潮流的,可以先用起来,等着后续更新优化。当然,小伙伴们可以基于我的原创思路,再结合自己创新后续SCI写作中可以配合其他R包自动输出到word文档,一定程度可以解放你的生产力。
总体试用下来,有惊喜也有遗憾,总体在自动识别和撰写SCI图表结果方面远远强于现有的R包,但是比官网GPT4o还是有一定差异,不知道是不是model调用的问题,期待后续Hadley Wickham更新。
先来练练手,找点网络常规知识来进行,elmer还是比较容易识别的。
我们来给自动化报告工具上点难度。这次引用A款课程自动化脚本glm模型的tidy_df结果如下。Report包在遇到自编表格,几乎毫无用处,elmer能较准确识别表格,但是我觉得还是不够优秀,而chatGPT4O已经能满足论文需求。
高级表格pk完了,我们再看看高级统计图形。高级图形这块elmer还是存在误区,尽管我尝试了model=4o 和4omini,都无法准确识别高难度的统计图形,而官网GPT4o可以轻松识别。
对于科研工具弄潮儿小伙伴,可以登录官方看介绍,https://elmer.tidyverse.org、 https://github.com/tidyverse/elmer。
安装命令,# install.packages("pak") pak::pak("tidyverse/elmer")。在rstudio设置之前,需要去openAI获取API key码(这步骤很复杂,我已经把流程走了一遍,大家可以参考下面我的攻略有8.8折)。
创建API key完成后,在页面点击设置→计费→添加付款信息→选择个人。CHATGPT采用stripe支付通道,所以是不支持国内银行卡的。这时候需要一张国外信用卡或者国内的虚拟信用卡,国外信用卡门槛太高,以虚拟卡为例。OpenAI 的接口调用需要花费 token 数,你需要先往你的 OpenAI 账号中充值,才可以进行 API 的调用。目前 OpenAI 的 API 调用账号是独立的,比如,你购买了 GPTPlus 的服务,但还是无法调用 API,因为你还需要往 API 调用的账户中充值。我用https://bewildcard.com/i/XJJWJK7M,进行充值,最低5美元。点击确认开卡完成点击卡中心→CVC卡密,我的卡片,里面可以看到卡的付款信息,然后在openai页面上发送问题,让openai完成自动扣费(遇到问题可以用这个客服,真不是广告,我找了半天就这个算便宜还能用)。
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。
Elmer会使用prompt提示词,并保留对话的上下文,因此每个新查询都可以基于先前的查询。
通过调用 live_console(chat),可以在R控制台中与模型实时互动。也可以直接用代码进行聊天。
我之前写过copilot与GPT系列的文章(https://mp.weixin.qq.com/s?__biz=MzAxNTUzNDMyNQ==&mid=2650955881&idx=1&sn=8451f2d5e9f9d99e4c498d8c031af399&chksm=807451f3b703d8e546c286ef41633310c2bfed10cd18a2f8b94b627b304fb7668b852c7e4575#rd),elmer相比chatgpt包、gptstudio包优点在于多平台兼容、API更灵活、可识别本地图表支持多model,对话更加自由。
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,请备注说明:姓名-学校(单位)-专业。