資料集 (x.test, y.test) 是指數擬合。我正在嘗試擬合自定義非線性函式,并附上代碼。常規點繪制得很好,但我無法使擬合線起作用。有什么建議?
x.test <- runif(50,2,8)
y.test <- 0.5^(x.test)
df <- data.frame(x.test, y.test)
library(ggpmisc)
my.formula <- y ~ lambda/ (1 aii*x)
ggplot(data = df, aes(x=x.test,y=y.test))
geom_point(shape=21, fill="white", color="red", size=3)
stat_smooth(method="nls",formula = y.test ~ lambda/ (1 aii*x.test), method.args=list(start=c(lambda=1000,aii=-816.39)),se=F,color="red")
geom_smooth(method="lm", formula = my.formula , col = "red") stat_poly_eq(formula = my.formula, aes(label = stringr::str_wrap(paste(..eq.label.., ..rr.label.., sep = "~~~"))), parse = TRUE, size = 2.5, col = "red") stat_function(fun=function (x.test){
y.test ~ lambda/ (1 aii*x.test)}, color = "blue")

uj5u.com熱心網友回復:
一些東西:
- 無論資料集中的名稱是什么,您都需要使用
y和x作為formula引數中的變數名稱geom_smooth - 你需要更好的起始值(見下文)
- 您可以使用 GLM 技巧來擬合此模型;并不總是有效(可能在數值上不穩定),但它不需要起始值并且比
nls() - 我不認為
lm()并且stat_poly_eq()將使用非線性公式按預期作業(或者可能根本不會)......
模擬資料
(與您的代碼相同,但使用set.seed()- 在這里可能不重要,但很好的做法)
set.seed(101)
x.test <- runif(50,2,8)
y.test <- 0.5^(x.test)
df <- data.frame(x.test, y.test)
嘗試 nls 適合您的起始值
它通常是通過安裝任何平滑而言是一個好主意來解決外的ggplot2,所以你必須減少層次挖掘通過對發現的問題:
nls(y.test ~ lambda/(1 aii*x.test),
start = list(lambda=1000,aii=-816.39),
data = df)
nls(y.test ~ lambda/(1 aii * x.test), start = list(lambda = 1000, : 奇異梯度)中的錯誤
好的,還是不行。讓我們使用glm()以獲得更好的起始值:我們使用反向鏈接GLM:
1/y = b0 b1*x
y = 1/(b0 b1*x)
= (1/b0)/(1 (b1/b0)*x)
所以:
g1 <- glm(y.test ~ x.test, family = gaussian(link = "inverse"))
s0 <- with(as.list(coef(g1)), list(lambda = 1/`(Intercept)`, aii = x.test/`(Intercept)`))
這給出了 lambda = -0.09,aii = -0.638(通過更多的作業,我們可能還可以通過查看曲線的起點和比例來弄清楚如何觀察這些)。
ggplot(data = df, aes(x=x.test,y=y.test))
geom_point(shape=21, fill="white", color="red", size=3)
stat_smooth(method="nls",
formula = y ~ lambda/ (1 aii*x),
method.args=list(start=s0),
se=FALSE,color="red")
stat_smooth(method = "glm",
formula = y ~ x,
method.args = list(gaussian(link = "inverse")),
color = "blue", linetype = 2)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403324.html
標籤:
上一篇:在標記中斷時設定ylim
下一篇:使用ggplot2繪制散點圖
