【问题标题】:R - linear model does not match experimental dataR - 线性模型与实验数据不匹配
【发布时间】:2017-05-16 16:35:37
【问题描述】:

我正在尝试对由相同条件(针对多个条件)的重复测量组成的实验数据执行线性回归,以检查实验数据的可靠性。对于每个条件,我在数据框df 中存储了大约 5k-10k 的观察结果:

[1]    cond1 repA    cond1 repB   cond2 repA   cond2 repB ...
[2]    4.158660e+06  4454400.703  ...
[3]    1.458585e+06  4454400.703  ...
[4]    NA            887776.392   ...
...
[5024] 9571785.382   9.679092e+06 ...

我使用以下代码绘制不同条件下的散点图 + lm + R^2 值(存储在rdata):

for (i in seq(1,13,2)){
  vec <- matrix(0, nrow = nrow(df), ncol = 2)
  vec[,1] <- df[,i]
  vec[,2] <- df[,i+1]
  vec <- na.exclude(vec)
  plot(log10(vec[,1]),log10(vec[,2]), xlab = 'rep A', ylab = 'rep B' ,col="#00000033")
  abline(fit<-lm(log10(vec[,2])~log10(vec[,1])), col='red')
  legend("topleft",bty="n",legend=paste("R2 is",rdata[1,((i+1)/2)] <- format(summary(fit)$adj.r.squared,digits=4)))
}

但是,lm 似乎发生了变化,因此不符合我在实验数据中看到的趋势:

它始终在每种情况下发生。我试图通过查找源代码并浏览不同的论坛和帖子(thishere)来找到解释,但没有成功。

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读有关如何提供reproducible example 的信息。这将使其他人更容易帮助您。
  • 另外,您能否详细说明您认为结果错误的原因?唯一的问题是回归线不在右上角的数据上?
  • 您可以将lm 拟合与局部线性回归的拟合(例如loess)进行比较,以更好地了解正在发生的事情;我怀疑较低A 的(局部)线性拟合比较高A 的斜率明显更浅,这解释了不通过右上角的点的整体拟合。

标签: r linear-regression


【解决方案1】:

想简单地评论/问几个问题,但不能。

据我了解,repA 和 repB 的测量均存在误差。因此,您无法使用普通的最小二乘程序拟合您的数据,该程序仅考虑 Y 中的误差(有些人可能认为加权 OLS 可能有效,但我不够熟练,无法讨论这个问题)。您的问题似乎与this one 有关。

您可以使用全最小二乘法:它考虑了 X 和 Y 中的误差。在下面的示例中,我使用“正常”TLS 假设 X 和 Y 中存在相同的误差 (因此error.ratio=1)。如果不是,您可以通过输入error.ratio=var(y1)/var(x1) 指定错误率(至少我认为它是 var(Y)/var(X):检查文档以确保)。

library(mcr)
MCR_reg=mcreg(x1,y1,method.reg="Deming",error.ratio=1,method.ci="analytical")
MCR_intercept=getCoefficients(MCR_reg)[1,1]
MCR_slope=getCoefficients(MCR_reg)[2,1]

# CI for predicted values
x_to_predict=seq(0,35)
predicted_values=MCResultAnalytical.calcResponse(MCR_reg,x_to_predict,alpha=0.05)
CI_low=predicted_values[,4]
CI_up=predicted_values[,5]

请注意,在 Deming/TLS 回归中,您的 x 和 y 误差应该遵循正态分布,如 here 所述。如果不是这样,请进行 Passing-Bablok 回归(R 代码为 here)。

还请注意,R2 不是针对戴明回归或通过 Bablok 回归定义的(请参阅here)。相关系数是一个很好的代理,尽管它不能提供完全相同的信息。由于您正在研究两个因素之间的线性相关性,请参阅 Pearson 的乘积矩相关系数,并使用例如rcorr函数。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
相关资源
最近更新 更多