Я хочу вычислить интервал предсказания радиуса из круга, подходящего по формуле > r² = (xh)²+(yk)². r- радиус окружности, x, y, гауссовы координаты, h, k, отмечают центр подогнанной окружности.
# data
x <- c(1,2.2,1,2.5,1.5,0.5,1.7)
y <- c(1,1,3,2.5,4,1.7,0.8)
# using nls.lm from minpack.lm (minimising the sum of squared residuals)
library(minpack.lm)
residFun <- function(par,x,y) {
res <- sqrt((x-par$h)^2+(y-par$k)^2)-par$r
return(res)
}
parStart <- list("h" = 1.5, "k" = 2.5, "r" = 1.7)
out <- nls.lm(par = parStart, x = x, y = y, lower =NULL, upper = NULL, residFun)
Проблема в том, что predict()
не работает с nls.lm, поэтому я пытаюсь вычислить окружность, используя nlsLM. (Я мог бы вычислить это вручную, но у меня возникли проблемы с созданием моей матрицы дизайна).`
Итак, вот что я попробовал дальше:
dat = list("x" = x,"y" = y)
out1 <- nlsLM(y ~ sqrt(-(x-h)^2+r^2)+k, start = parStart )
что приводит к:
Error in stats:::nlsModel(formula, mf, start, wts) :
singular gradient matrix at initial parameter estimates
Вопрос 1а: Как nlsLM()
работает с окружностью? (преимущество в том, что доступен общий predict()
. Вопрос 1b: Как мне получить интервал прогнозирования для моего круга?
ПРИМЕР из линейной регрессии (это то, что я хочу для круговой регрессии)
attach(faithful)
eruption.lm = lm(eruptions ~ waiting)
newdata = data.frame(waiting=seq(45,90, length = 272))
# confidence interval
conf <- predict(eruption.lm, newdata, interval="confidence")
# prediction interval
pred <- predict(eruption.lm, newdata, interval="predict")
# plot of the data [1], the regression line [1], confidence interval [2], and prediction interval [3]
plot(eruptions ~ waiting)
lines(conf[,1] ~ newdata$waiting, col = "black") # [1]
lines(conf[,2] ~ newdata$waiting, col = "red") # [2]
lines(conf[,3] ~ newdata$waiting, col = "red") # [2]
lines(pred[,2] ~ newdata$waiting, col = "blue") # [3]
lines(pred[,3] ~ newdata$waiting, col = "blue") # [3]
С уважением
Сводка правок:
Edit1: изменена формула в nlsLM, но результаты параметров (h,k,r) теперь различаются в out и out1...
Edit2: добавлено 2 ссылки на Википедию для уточнения используемой терминологии: (см. ниже)
Edit3: Некоторая перефразировка вопроса (ов)
Edit4: добавлен рабочий пример для линейной регрессии.