Как найти наилучшее соответствие обратного уравнения в R - PullRequest
1 голос
/ 18 октября 2019

Я не могу понять, как найти лучшее соответствие для обратного уравнения. Я записал данные, и отношения 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): неверный первый аргумент

1 Ответ

0 голосов
/ 18 октября 2019

Проблема в том, как функция lm обрабатывает 1 / x член. Чтобы lm распознал обратное, используйте функцию asis I() для "1 / x" следующим образом: 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)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...