NLS 几乎适合
NLS almost fits
我有点不知所云...我有以下数据:
d <- data.frame(matrix(data = c(1,1.5,6,2,11,2.5,16,3,26,4,46,5,66,6,86,7,126,8,176,9,276,10,426,11,626,12,876,13,1176,14,1551,15,2026,16,2676,17,3451,18,4351,19,5451,20,6801,21,8501,22,10701,23),
byrow = TRUE,
ncol = 2
)
)
names(d) <- c('x','y')
看起来像这样:
plot(x = d$x,
y = d$y,
pch = 19,
col = 'grey50',
bty = 'n'
)
现在我想用公式来描述X和Y之间的关系。所以我尝试了 nls
函数。像这样:
fit <- nls(y ~ a * x ^ b,
start = list(a = 1,
b = 1),
data = d
)
lines(d$x,
predict(fit),
col = 'red',
lty = 2
)
如您所见,这条线几乎适合!这就是我被困的地方。有些东西告诉我,有一个完美的契合。但我不知道从这里去哪里。替代起始值似乎没有任何改变。我得到了使用 lm(log(y) ~ log(x), data = d)
作为起始参数的建议。但是没有爱:
fit <- nls(y ~ a * x ^ b,
start = list(a = exp(0.3120),
b = 0.3883),
data = d
)
lines(d$x,
predict(fit),
col = 'blue',
lty = 2
)
我试过一些其他的公式,但我真的只是在黑暗中拍摄:
nls(y ~ a * x / (b + x), data = d)
nls(y ~ a + ((x * b) / (x + c)), start = c(a = 1, b = 10, c = 1), data = d
那么,对于如何前进有什么建议吗?
我不完全确定,但在我看来你的数据只是有噪音。它让你觉得你可以做得更好,但实际上可能做不到。
使用线性化数据可以更好地可视化此噪音:
# Linearize by eye
new_x = d$x^0.18
# Plot of data linearized
plot(x = new_x,
y = d$y,
pch = 19,
col = 'grey50',
bty = 'n'
)
# Linear regression
lin_reg = lm(d$y ~ new_x)
# Fitted
abline(a=lin_reg$coef[1], b=lin_reg$coef[2])
看到上面和下面的点不同。所以你的第一个公式可能是正确的。
我有点不知所云...我有以下数据:
d <- data.frame(matrix(data = c(1,1.5,6,2,11,2.5,16,3,26,4,46,5,66,6,86,7,126,8,176,9,276,10,426,11,626,12,876,13,1176,14,1551,15,2026,16,2676,17,3451,18,4351,19,5451,20,6801,21,8501,22,10701,23),
byrow = TRUE,
ncol = 2
)
)
names(d) <- c('x','y')
看起来像这样:
plot(x = d$x,
y = d$y,
pch = 19,
col = 'grey50',
bty = 'n'
)
现在我想用公式来描述X和Y之间的关系。所以我尝试了 nls
函数。像这样:
fit <- nls(y ~ a * x ^ b,
start = list(a = 1,
b = 1),
data = d
)
lines(d$x,
predict(fit),
col = 'red',
lty = 2
)
如您所见,这条线几乎适合!这就是我被困的地方。有些东西告诉我,有一个完美的契合。但我不知道从这里去哪里。替代起始值似乎没有任何改变。我得到了使用 lm(log(y) ~ log(x), data = d)
作为起始参数的建议。但是没有爱:
fit <- nls(y ~ a * x ^ b,
start = list(a = exp(0.3120),
b = 0.3883),
data = d
)
lines(d$x,
predict(fit),
col = 'blue',
lty = 2
)
我试过一些其他的公式,但我真的只是在黑暗中拍摄:
nls(y ~ a * x / (b + x), data = d)
nls(y ~ a + ((x * b) / (x + c)), start = c(a = 1, b = 10, c = 1), data = d
那么,对于如何前进有什么建议吗?
我不完全确定,但在我看来你的数据只是有噪音。它让你觉得你可以做得更好,但实际上可能做不到。
使用线性化数据可以更好地可视化此噪音:
# Linearize by eye
new_x = d$x^0.18
# Plot of data linearized
plot(x = new_x,
y = d$y,
pch = 19,
col = 'grey50',
bty = 'n'
)
# Linear regression
lin_reg = lm(d$y ~ new_x)
# Fitted
abline(a=lin_reg$coef[1], b=lin_reg$coef[2])
看到上面和下面的点不同。所以你的第一个公式可能是正确的。