我在Windows 10上使用R 3.3.1(64位).我有一个xy数据集,我适合二阶多项式.我想在y = 4处求解x的最佳拟合多项式,并绘制从y = 4到x轴的下拉线.
这将在数据帧v1中生成数据:
v1 <- structure(list(x = c(-5.2549, -3.4893, -3.5909, -2.5546, -3.7247,
-5.1733, -3.3451, -2.8993, -2.6835, -3.9495, -4.9649, -2.8438,
-4.6926, -3.4768, -3.1221, -4.8175, -4.5641, -3.549, -3.08, -2.4153,
-2.9882, -3.4045, -4.6394, -3.3404, -2.6728, -3.3517, -2.6098,
-3.7733, -4.051, -2.9385, -4.5024, -4.59, -4.5617, -4.0658, -2.4986,
-3.7559, -4.245, -4.8045, -4.6615, -4.0696, -4.6638, -4.6505,
-3.7978, -4.5649, -5.7669, -4.519, -3.8561, -3.779, -3.0549,
-3.1241, -2.1423, -3.2759, -4.224, -4.028, -3.3412, -2.8832,
-3.3866, -0.1852, -3.3763, -4.317, -5.3607, -3.3398, -1.9087,
-4.431, -3.7535, -3.2545, -0.806, -3.1419, …Run Code Online (Sandbox Code Playgroud) 我想找到以下函数的根:
x=0.5
f <- function(y) ((1-pbeta(1-exp(-0.002926543
*( 107.2592+y)^1.082618 *exp(0.04097536*(107.2592+y))),shape1=0.2640229,shape2=0.1595841)) -
(1-pbeta(1-exp(-0.002926543*(x)^1.082618 *exp(0.04097536*(x))),shape1=0.2640229,shape2=0.1595841))^2)
sroot=uniroot(f, lower=0, upper=1000)$root
Run Code Online (Sandbox Code Playgroud)
uniroot错误(f,lower = 0,upper = 1000):端点处的f()值不是符号相反
我该如何解决错误?
我有一个非常简单的问题,但到目前为止找不到简单的解决方案。假设我有一些数据想要拟合并显示其 x 轴值,其中 y 是特定值。在这种情况下,假设当 y=0 时 x 值是多少。模型非常简单 y~x 用于拟合,但我不知道如何从那里估计 x 值。反正,
样本数据
library(ggplot2)
library(scales)
df = data.frame(x= sort(10^runif(8,-6,1),decreasing=TRUE), y = seq(-4,4,length.out = 8))
ggplot(df, aes(x = x, y = y)) +
geom_point() +
#geom_smooth(method = "lm", formula = y ~ x, size = 1,linetype="dashed", col="black",se=FALSE, fullrange = TRUE)+
geom_smooth(se=FALSE)+
labs(title = "Made-up data") +
scale_x_log10(breaks = c(1e-6,1e-4,1e-2,1),
labels = trans_format("log10", math_format(10^.x)),limits = c(1e-6,1))+
geom_hline(yintercept=0,linetype="dashed",colour="red",size=0.6)
Run Code Online (Sandbox Code Playgroud)
我想将 1e-10 输入转换为 10^-10 格式并在绘图上对其进行注释。正如我在情节中指出的那样。
提前致谢!
我需要使用拟合模型预测x新y值的相应值。
通过使用函数y从新x值预测值的通常情况很简单predict,但是我无法弄清楚如何做相反的事情。
对于具有多个x解决方案的情况,我希望获得x值范围内的所有解决方案,即1-10。并且新值y将始终在y用于拟合模型的值的范围内。
参见下面的示例代码,我需要在其中找到新的x值(new_x)。
x = seq(1:10)
y = c(60,30,40,45,35,20,10,15,25,10)
fit = lm(y ~ poly(x, 3, raw=T))
plot(x, y)
lines(sort(x), predict(fit)[order(x)], col='red')
Run Code Online (Sandbox Code Playgroud)
new_y = 30
new_x = predict(fit, data.frame(y=new_y)) #This line does not work as intended.
Run Code Online (Sandbox Code Playgroud)
编辑1:逆拟合
因为我们得到了不同的模型/拟合线,所以拟合逆关系不会得到相同的模型。
rev_fit = lm(x ~ poly(y, 3, raw=T))
plot(x, y)
lines(sort(x), predict(fit)[order(x)], col='red')
lines(predict(rev_fit)[order(y)], sort(y), col='blue', lty=2)
Run Code Online (Sandbox Code Playgroud)