【问题标题】:Add regression line to logarithmic x scale将回归线添加到对数 x 刻度
【发布时间】:2017-08-02 18:53:04
【问题描述】:

我在非常宽的 x 范围内有一些数据,我正在使用 R 中的对数 x 轴绘制这些数据。当我使用 MS Excel 绘制数据并添加线性趋势线时,结果输出是我希望看到的给定我的数据集和预期结果(下图)。

我想使用 R 来实现这一点。我可以绘制数据并运行回归模型,但 R 似乎不想添加回归线/曲线。

这是我的数据:

data <-
  data.frame(
    x = c(
      6.37E-05,
      0.000584271,
      0.001044085,
      0.00011272,
      3.95E-05,
      6.05E-05,
      0.000277963,
      0.001800305,
      3.70E-05,
      0.002588335,
      0.000710123,
      0.000148309,
      0.001069184,
      0.001877917,
      0.01086776,
      0.043686462,
      0.000276426
    ),
    y = c(
      -0.3375,
      -0.35,
      -0.35,
      -0.35,
      -0.3,
      -0.35,
      -0.3625,
      -0.375,
      -0.3,
      -0.3625,
      -0.3,
      -0.3375,
      -0.29,
      -0.34,
      -0.4,
      -0.48,
      -0.3375
    )
  )

这是迄今为止我一直在尝试的代码。

attach(data)
    plot(data$x,data$y,log="x",xlab="independent variable",
     ylab="dependent variable")
model<-lm(data$y~data$x)
abline(model) # THIS STEP DOESN'T WORK

我有三个查询:

1)。如何在基本 R 中的 y~logx 图上显示回归线?

2)。我该如何重复 1)。使用ggplot?

3)。当回归线/曲线开始“下降”时,我如何找到 (log)x 值?

谢谢。

【问题讨论】:

  • 回复:3)。回归线不断减小,斜率恒定。它绝不会“开始”下跌。

标签: r excel ggplot2 regression logarithm


【解决方案1】:

你能让这个例子重现吗? 我认为这可能会奏效。

dataframe %>%
ggplot(aes(x = log(x), y = y) +
 geom_point() +
 geom_smooth(method = "loess") +
 xlab("independent variable")

这使用 dplyr 和 ggplot2。

【讨论】:

  • 我在尝试此操作时收到一条错误消息。 library(ggplot2) library(dplyr) attach(data) dataframe %&gt;% ggplot(aes(x = log(x), y = y) + geom_point() + geom_smooth(method = "loess") +xlab("independent variable")) eval 中的错误(expr,envir,enclos):找不到对象'dataframe' aes(x = log(x),y​​ = y)+ geom_point()中的错误:二进制运算符的非数字参数
  • 尝试将数据集的名称从“dataframe”更改为“data”以匹配您的数据集名称。
【解决方案2】:
ggplot(data, aes(x, y)) + geom_point() + stat_smooth(method = "lm")

ggplot(data, aes(x, y)) + geom_point() + stat_smooth(method = "lm") +
  coord_trans(x = "log10")

如您所见,回归线没有“开始‘下降’”的点。


更新

如果您在绘图之前对 x 值进行对数转换,您最终会得到如下图:

如果你真正感兴趣的是变化点分析,你可以适应它。

data.fit <- nls(100*y ~ pmin(plat, intx + slx*log(x)), 
                  data = data,
                  start = list(plat = -32, intx = -60, slx = -4), 
                  control = nls.control(warnOnly = T))
summary(data.fit)
coef(data.fit)

【讨论】:

  • 我看到了你的观点:回归线的非曲率,但是当我使用 log(x) 比例绘制数据时,我正在寻找的是“它开始蘸”。有没有办法通过首先使用data$Xlog&lt;-log(data$x)然后将模型拟合到y~Xlog来绘制log x vs y来拟合曲线?
  • 从字面上看,它没有开始下降的地方。它总是以相同的速率向下弯曲,因为线的斜率是恒定的。如果您使用y~Xlog,您将有一条直线,但点分布在第二个图中,我猜这不是您想要的。看看上面的图,你想称之为“开始下降”的点在哪里?
  • 假设我绘制 logX 与 Y(并且假设 logX 是 x,而不是转换轴值)并对其拟合非线性最小二乘或多项式回归模型;曲线会改变斜率;正确的??这些数据来自一个实验,我正在寻找一个 y 开始明显不同的 x 阈值。在上面的第二个 ggplot 中,我猜“倾角”开始于 0.01 x 值左侧的刻度线附近;或附近。我意识到在那个例子中它实际上不是一条“曲线”,因为 x 比例已经过对数转换。
猜你喜欢
  • 2012-01-25
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多