我有数据必须适合线性模型。我也有与每个 x 和 y 值相关的错误。
基本上我想做这样的事情(所有向量的长度相同):
lm(y_data +- y_errors ~ x_data +- x_errors)
但显然这行不通。
看来 Origin 可以做到(http://www.originlab.com/doc/Origin-Help/LinearFit-XErr-Dialog)。
我如何告诉 R 使用 x 和 y 误差来创建线性模型,就像 Origin 一样?
我有数据必须适合线性模型。我也有与每个 x 和 y 值相关的错误。
基本上我想做这样的事情(所有向量的长度相同):
lm(y_data +- y_errors ~ x_data +- x_errors)
但显然这行不通。
看来 Origin 可以做到(http://www.originlab.com/doc/Origin-Help/LinearFit-XErr-Dialog)。
我如何告诉 R 使用 x 和 y 误差来创建线性模型,就像 Origin 一样?
考虑到 x 和 y 可以分别有 xe 和 ye 的误差。对于每个 (x,y) 组合,如果添加和分析以下组合,它们可能会得到你想要的。尝试与 originlab 结果进行比较。
x,y
x-xe, y-ye
x+xe, y+ye
x-xe, y+ye
x+xe, y-y2
要获得这些组合,请尝试以下代码(将 x、y、xe 和 ye 替换为您的数据)
x = c(1,2,3,4)
xe = 0.1
y = c(12, 24, 28, 46)
ye = 1.3
ddf = data.frame(xx=as.numeric(), yy=as.numeric())
i=1
counter=1
while(i<(length(x)+1)){
ddf[counter,]=c(x[i],y[i])
ddf[counter+1,]=c(x[i]-xe,y[i]-ye)
ddf[counter+2,]=c(x[i]+xe,y[i]+ye)
ddf[counter+3,]=c(x[i]-xe,y[i]+ye)
ddf[counter+4,]=c(x[i]+xe,y[i]-ye)
counter = counter+5
i = i+1
}
ddf
xx yy
1 1.0 12.0
2 0.9 10.7
3 1.1 13.3
4 0.9 13.3
5 1.1 10.7
6 2.0 24.0
7 1.9 22.7
8 2.1 25.3
9 1.9 25.3
10 2.1 22.7
11 3.0 28.0
12 2.9 26.7
13 3.1 29.3
14 2.9 29.3
15 3.1 26.7
16 4.0 46.0
17 3.9 44.7
18 4.1 47.3
19 3.9 47.3
20 4.1 44.7
然后运行测试:
with(ddf, lm(yy~xx))
Call:
lm(formula = yy ~ xx)
Coefficients:
(Intercept) xx
1.169 10.533