我希望用公式 > 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 计算圆拟合。(我可以手动计算,但在创建我的 Designmatrix 时遇到了麻烦)。
所以这就是我接下来尝试的:
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
问题 1a:如何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 个维基百科链接,用于澄清所用术语的 puprose:(参见下文)
Edit3:问题的一些改写
Edit4:添加了线性回归的工作示例