【发布时间】:2010-11-29 20:40:56
【问题描述】:
我想创建一个散点图并为数据集的子集绘制回归线。为了给出一个可重现的例子,我将使用 CO2 数据集。
我试过了,但由于某种原因没有出现回归线
with(subset(CO2,Type=="Quebec"),plot(conc,uptake),abline(lm(uptake~conc)))
发出这样的命令的正确方法是什么?我可以用单线做吗?
【问题讨论】:
我想创建一个散点图并为数据集的子集绘制回归线。为了给出一个可重现的例子,我将使用 CO2 数据集。
我试过了,但由于某种原因没有出现回归线
with(subset(CO2,Type=="Quebec"),plot(conc,uptake),abline(lm(uptake~conc)))
发出这样的命令的正确方法是什么?我可以用单线做吗?
【问题讨论】:
您需要将两行代码作为单个 R 表达式提供。 abline() 被作为with() 的后续参数,这是... 参数。这被记录为一种将参数传递给未来方法的方法,但最终结果是它实际上是这部分代码的黑洞。
两个选项,i) 保留一行,但将表达式包装在 { 和 } 中,并用 ; 分隔两个表达式:
with(subset(CO2,Type=="Quebec"), {plot(conc,uptake); abline(lm(uptake~conc))})
或者将表达式分成两行,仍然包裹在{和}中:
with(subset(CO2,Type=="Quebec"),
{plot(conc,uptake)
abline(lm(uptake~conc))})
编辑:老实说,如果你正在做这样的事情,你就会错过通过 R 的模型公式进行子集化的优势。我会这样做:
plot(uptake ~ conc, data = CO2, subset = Type == "Quebec")
abline(lm(uptake ~ conc, data = CO2, subset = Type == "Quebec"), col = "red")
with() 只是让你用大括号和; 混淆你的代码。
【讨论】:
来自?with:with ... 在使用data 创建的本地环境中评估expr。您通过... 传递abline()。你需要做这样的事情:
with(subset(CO2,Type=="Quebec"),{plot(conc,uptake);abline(lm(uptake~conc))})
【讨论】:
Gavin 和 Joshua 为您眼前的问题提供了很好的解决方案;这是使用 ggplot 的等效图:
library(ggplot2)
qplot(conc, uptake, data = CO2[CO2$Type == "Quebec" , ]) + stat_smooth(method = "lm", se = FALSE)
【讨论】: