我不知道如何找到最适合逆方程的方法。我记录了数据,并且y与x的关系应该为y = a / x,而a是我想要的值。
我尝试了lm(),但无法弄清楚它是如何工作的。我也尝试过nls,但也无法弄清楚它是如何工作的。
data <- read.csv("./data.csv")
y <- data[["meanacceleration"]]
x <- data[["massadded"]]
u <- data[["uncertainty"]]
exponential.model <- nls(y ~ a/x, start = (a = 1))
print(cor(y, predict(exponential.model)))
print(summary(exponential.model))
xx <- seq(240,1000, length=1000)
# massadded.exponential2 <- exp(predict(exponential.model, list(x = xx)))
plot(x, y, xlab = "Total mass", ylab="Mean Acceleration",ylim = range(c(y-u,y+u)) , pch=16)
arrows(x, y-u, x, y+u, length=0.1, angle=90, code=3)
lines(xx, predict(exponential.model), lty=2,col="red",lwd=3)
我得到的错误是mget(names(ind),env)中的错误:第一个参数无效
答案 0 :(得分:0)
问题在于lm
函数如何处理1 / x项。为了使lm
识别逆,请在“ 1 / x”上使用asis函数I()
,如下所示:lm(y~I(1/x))
。现在,带有的公式对x取反,然后求出线性回归。
x<-c(266.67, 390.94, 515.26, 639.53, 763.85, 888.16 ,1012.47)
y<-c(0.64693, 0.44720, 0.34464, 0.26055, 0.21952, 0.19185, 0.15060
model <- lm(y~I(1/x))
print(cor(y, predict(model)))
print(summary(model))
xx <- seq(240,1000, length=1000)
prediction<-data.frame(x=xx)
plot(x, y, xlab = "Total mass", ylab="Mean Acceleration" , pch=16)
lines(prediction$x, predict(model, prediction), lty=2,col="red",lwd=3)