x 和 y 与 p 值的误差线性拟合
linear fit with error on x and y with p-value
我目前正在做一个项目,我想在其中找出两个变量 x 和 y 之间是否存在关系。对于这两个值,我也计算了误差。 df 如下所示。
x y x_error y_error
5 1 0.5 0.2
6 2 0.5 0.15
7 1.75 0.5 0.3
7 0.5 0.5 0.1254
...
如您所见,x 上的错误是恒定的,但 y 上的错误不是。
我研究了在 R 中使用 lm() 函数,但似乎我只能使用权重在 y 轴上设置误差。我对这种统计分析很陌生,到目前为止我所做的研究并不多。我想绘制线性拟合并找到回归斜率统计显着性的 p 值。
有人知道怎么做吗?
最好在 R 中回答,但 python 也可以:)
提前感谢您的任何 answers/help
如评论中所建议(感谢 James),orthogonal distance regression
应该有效。 deming()
package in R takes both x_error
and y_error
(post)。下面是一个示例 code
:
# Import libraries
library(deming)
# Create sample data
x <- rnorm(100, mean=10, sd=.01)
y <- x * rnorm(100, mean=20, sd=.01)
x_error <- x * 0.01
y_error <- y * 0.01
df <- data.frame(x, y, x_error, y_error)
head(df)
# Fit lm()
lm.fit <- lm(y ~ x, data=df)
summary(lm.fit)
# Fit deming()
deming.fit = deming(y ~ x, data=df, xstd=x_error, ystd=y_error)
print(deming.fit)
# Plot fit
plot(df$x, df$y, xlab='x', ylab='y')
abline(lm.fit, col='red', lty=1)
abline(deming.fit, col='blue', lty=2)
legend('topleft',legend= c("lm()", "deming()"), lty=c(1,2), col=c('red','blue'))
我目前正在做一个项目,我想在其中找出两个变量 x 和 y 之间是否存在关系。对于这两个值,我也计算了误差。 df 如下所示。
x y x_error y_error
5 1 0.5 0.2
6 2 0.5 0.15
7 1.75 0.5 0.3
7 0.5 0.5 0.1254
...
如您所见,x 上的错误是恒定的,但 y 上的错误不是。 我研究了在 R 中使用 lm() 函数,但似乎我只能使用权重在 y 轴上设置误差。我对这种统计分析很陌生,到目前为止我所做的研究并不多。我想绘制线性拟合并找到回归斜率统计显着性的 p 值。
有人知道怎么做吗? 最好在 R 中回答,但 python 也可以:)
提前感谢您的任何 answers/help
如评论中所建议(感谢 James),orthogonal distance regression
应该有效。 deming()
package in R takes both x_error
and y_error
(post)。下面是一个示例 code
:
# Import libraries
library(deming)
# Create sample data
x <- rnorm(100, mean=10, sd=.01)
y <- x * rnorm(100, mean=20, sd=.01)
x_error <- x * 0.01
y_error <- y * 0.01
df <- data.frame(x, y, x_error, y_error)
head(df)
# Fit lm()
lm.fit <- lm(y ~ x, data=df)
summary(lm.fit)
# Fit deming()
deming.fit = deming(y ~ x, data=df, xstd=x_error, ystd=y_error)
print(deming.fit)
# Plot fit
plot(df$x, df$y, xlab='x', ylab='y')
abline(lm.fit, col='red', lty=1)
abline(deming.fit, col='blue', lty=2)
legend('topleft',legend= c("lm()", "deming()"), lty=c(1,2), col=c('red','blue'))