如何在 lm() 中对一系列值进行子集化

How to subset a range of values in lm()

lm() 的帮助文件没有涉及子集参数的语法。我不确定如何让它找到最适合我的一部分数据集的线。这个问题很相似,但我无法使用它解决我的特定问题。 How does the subset argument work in the lm() function?

这是我的代码:

    with(dat[dat$SIZE <7 & dat$SIZE > 0.8 ,], plot(SP.RICH~SIZE, log="x",
      xlim=c(1,9), ylim=c(60,180), ylab="plant species richness", 
      xlab="log area (ha)", type="n"))
   with(dat[dat$SIZE <7 & dat$SIZE > 0.8 ,], points(SP.RICH~SIZE, pch=20, cex=1))
   fit=lm(SP.RICH~SIZE, subset=c(1:7))

我想确保仅针对我在 plot() 和 points() 命令中上述子集的值绘制回归线。

lm() 和其他模型拟合函数中的子集参数将数据帧的长度作为其参数,在数据帧的环境中进行评估。所以,如果我理解正确的话,我会使用以下内容:

fit <- lm(SP.RICH~SIZE, data=dat, subset=(SIZE>0.8 & SIZE<7))

但是,如果您想 运行 为数据中的每个组分配一个 lm,则上述解决方案无济于事 - 假设您有不同的国家/地区作为一列,并且您想了解丰富度与丰富度之间的关系每个国家/地区的大小。

为此,我建议遵循 R http://astrostatistics.psu.edu/su07/R/html/base/html/by.html:

中的函数帮助
require(stats)
attach(warpbreaks)
by(warpbreaks[, 1:2], tension, summary)
by(warpbreaks[, 1], list(wool = wool, tension = tension), summary)
by(warpbreaks, tension, function(x) lm(breaks ~ wool, data = x))

## now suppose we want to extract the coefficients by group
tmp <- by(warpbreaks, tension, function(x) lm(breaks ~ wool, data = x))
sapply(tmp, coef)

您可以从列表 tmp 中提取您喜欢的任何 lm 参数。