我为这个基本问题道歉,但无论出于何种原因,我都被卡住了。我希望从y = a * x ^ b得到'a'和'b'的功率曲线的输出值。假设我有这个数据集:
x y log10(x) log10(y)
7 240 0.84509804 2.380211242
45 610 1.653212514 2.785329835
14 340 1.146128036 2.531478917
30 500 1.477121255 2.698970004
24 450 1.380211242 2.653212514
57 690 1.755874856 2.838849091
它在excel中生成此图:
使用excel示例,我如何在r
中获得a = 2.465和b = 0.2401的输出值。
答案 0 :(得分:1)
data
是您的数据集:
y=data[,3]
x= data[,4]
nls(x ~ A * y ^ B)
Nonlinear regression model
model: x ~ A * y^B
data: parent.frame()
A B
2.4635 0.2421
residual sum-of-squares: 0.0008733
Number of iterations to convergence: 5
Achieved convergence tolerance: 6.774e-06
答案 1 :(得分:1)
看看下面的内容(并在下次让您的问题重现。这可能也会帮助您指出确切的问题):
x <- c(7, 45, 14, 30, 24, 57)
y <- c(240, 610, 340, 500, 450, 690)
logx <- log10(x)
logy <- log10(y)
lm.000 <- lm(logy ~ logx)
summary(lm.000)
coef(lm.000)[1]
coef(lm.000)[2]
plot(x, y)
curve(x^coef(lm.000)[2]*10^coef(lm.000)[1], add=TRUE, lwd=2)
答案 2 :(得分:1)
您的数据:
DF <- read.table(text="x y log10(x) log10(y)
7 240 0.84509804 2.380211242
45 610 1.653212514 2.785329835
14 340 1.146128036 2.531478917
30 500 1.477121255 2.698970004
24 450 1.380211242 2.653212514
57 690 1.755874856 2.838849091", header=TRUE)
创建自始模型: (免责声明:功能名称并不反映我的政治态度,只是符合自我启动功能的命名方案。)
SSpower <- selfStart(~ A*x^B,
function(mCall, data, LHS)
{
xy <- sortedXyData(mCall[["x"]], LHS, data)
if(nrow(xy) < 3) {
stop("Too few distinct x values to fit a power function")
}
z <- xy[["y"]]
xy[["logx"]] <- log(xy[["x"]])
xy[["logy"]] <- log(xy[["y"]])
aux <- coef(lm(logy ~ logx, xy))
pars <- c(exp(aux[[1]]), aux[[2]])
setNames(pars,
mCall[c("A", "B")])
}, c("A", "B"))
使用自启动模型进行拟合:
fit <- nls(y ~ SSpower(x, A, B), data=DF)
简介:
plot(y~x, data=DF)
lines(x=1:60, y=predict(fit, newdat=list(x=1:60)))