【问题标题】:How to subset a range of values in lm()如何在 lm() 中对一系列值进行子集化
【发布时间】:2015-10-13 22:15:35
【问题描述】:

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=with(dat[dat$SIZE 0.8 ,], lm(SP.RICH~SIZE)) 但这条线没有向右看。我不确定如何包含 x 轴在对数刻度上的事实,以便我得到一条正确的线。

标签: r subset


【解决方案1】:

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

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

【讨论】:

  • 感谢您的建议。您提供的代码行确实适合我的数据,但不幸的是它不是正确的行。所以你已经解决了我的语法问题,我现在知道如何在模型拟合函数中过滤/子集。现在我只需要弄清楚如何获得正确的线路。您认为问题可能在于我的 x 轴在对数刻度上吗?
【解决方案2】:

但是,如果您想为数据中的每个组运行一个 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参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多