在 R 中,从两组点中找到非线性线,然后找到这些点的交点

杰里米·洛萨克

使用 R,我想使用来自两个向量的点来估计两条曲线,然后找到这些估计曲线相交的 x 和 y 坐标。

在玩家“t”和“p”的战略环境中,我模拟了两个玩家的最佳反应,以响应对方在战略环境中的选择(博弈论)。问题是我没有函数或线,我有两组源自模拟的点,一组点对应于玩家对另一个玩家给定动作的最佳反应。实际数学对我(或 matlab)来说太难解决了,这就是我使用这种模拟视觉方法的原因。我想使用这些点估计最佳响应函数(即创建非线性曲线),然后取两条估计曲线并找到它们相交的位置,以识别纳什均衡(最佳响应曲线相交的位置)。

例如,这是我正在使用的两个这样的向量:

t=c(10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.1,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0)

p=c(12.3,12.3,12.3,12.3,12.3,12.3,12.4,12.4,12.4,12.5,12.5,12.5,12.6,12.6,12.7,12.7,12.8,12.8,12.9,12.9,13.0,13.1,13.1,13.2,13.3,13.4,13.5,13.4,13.5,13.6,13.6,13.7,13.8,13.8,13.9,13.9,13.9,14.0,14.0,14.0,14.0)

对于第一行,样本由 (t,a) 组成,对于第二行,样本由 (a,p) 组成,其中 a 是由下式给出的第三个向量

a = seq(10, 14, by = 0.1)

例如,对应于第一个向量的样本的第一个点是 (10.0,10.0),第二个点是 (10.0,10.1)。对应于第二个向量的样本的第一个点是 (10.0,12.3),第二个点是 (10.1,12.3)。

我最初尝试做的是使用 lm 模型生成的多项式估计线,但这些似乎并不总是有效:

plot(a,t, xlim=c(10,14), ylim=c(10,14), col="purple")
points(p,a, col="red")

fit4p <- lm(a~poly(p,3,raw=TRUE))
fit4t <- lm(t~poly(a,3,raw=TRUE))
lines(a, predict(fit4t, data.frame(x=a)), col="purple", xlim=c(10,14), ylim=c(10,14),type="l",xlab="p",ylab="t")
lines(p, predict(fit4p, data.frame(x=a)), col="green")

fit4pCurve <- function(x) coef(fit4p)[1] +x*coef(fit4p)[2]+x^2*coef(fit4p)[3]+x^3*coef(fit4p)[4] 
fit4tCurve <- function(x) coef(fit4t)[1] +x*coef(fit4t)[2]+x^2*coef(fit4t)[3]+x^3*coef(fit4t)[4]

a_opt1 = optimise(f=function(x) abs(fit4pCurve(x)-fit4tCurve(x)), c(10,14))$minimum
b_opt1 = as.numeric(fit4pCurve(a_opt1))

编辑:修复类型后,我得到了正确的答案,但如果样本不干净地返回,它并不总是有效。

所以我的问题可以分解为几种方式。首先,有没有更好的方法来完成我想要做的事情。我知道我在做什么并不完全准确,但对于我的目的来说,这似乎是一个不错的近似值。其次,如果没有更好的方法,我是否可以改进上面列出的方法。

里奇·保罗

重新启动 R 会话,确保清除所有变量并复制/粘贴此代码。我在引用的变量中发现了一些错误。另请注意,R区分大小写。我怀疑您一直在覆盖变量。

plot(a,t, xlim=c(10,14), ylim=c(10,14), col="purple")
points(p,a, col="red")

fit4p <- lm(a~poly(p,3,raw=TRUE))
fit4t <- lm(t~poly(a,3,raw=TRUE))
lines(a, predict(fit4t, data.frame(x=a)), col="purple", xlim=c(T,P), ylim=c(10,14),type="l",xlab="p",ylab="t")
lines(p, predict(fit4p, data.frame(x=a)), col="green")

fit4pCurve <- function(x) coef(fit4p)[1] +x*coef(fit4p)[2]+x^2*coef(fit4p)[3]+x^3*coef(fit4p)[4] 
fit4tCurve <- function(x) coef(fit4t)[1] +x*coef(fit4t)[2]+x^2*coef(fit4t)[3]+x^3*coef(fit4t)[4]

a_opt = optimise(f=function(x) abs(fit4pCurve(x)-fit4tCurve(x)), c(T,P))$minimum
b_opt = as.numeric(fit4pCurve(a_opt))

正如您将看到的:

> a_opt
[1] 12.24213
> b_opt
[1] 10.03581

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中找到交点

来自分类Dev

在R中找到交点

来自分类Dev

如何找到R中两组数据的p值?

来自分类Dev

在R中找到非线性相关性

来自分类Dev

在R中找到两个密度的交点

来自分类Dev

为R中的非线性回归找到合适的公式

来自分类常见问题

R:找到连续变量的分界点以将观测值分配给两组

来自分类Dev

R:找到连续变量的分界点以将观测值分配给两组

来自分类Dev

在R中找到两条线的相交

来自分类Dev

在R中找到“完整”组

来自分类Dev

R:找到两个向量的交点

来自分类Dev

如何在Pytorch中找到两组2D张量的交点(2D平面上的点)

来自分类Dev

如何在R中找到两个密度与ggplot2的交点

来自分类Dev

我可以使用哪个R函数找到两条线的交点?

来自分类Dev

在R中拟合非线性Langmuir等温线

来自分类Dev

用 R 中的线绘制非线性数据点

来自分类Dev

如何在 R 中拟合非线性线?

来自分类Dev

R:从点云中找到形状

来自分类Dev

R中3D空间中两组点之间的匹配

来自分类Dev

R中的非线性优化

来自分类Dev

两组高维点:在另一组中找到最近的邻居

来自分类Dev

在R中找到阈值

来自分类Dev

如何在R中找到这些范围的重叠值?

来自分类Dev

在R中找到序列中的重复字符

来自分类Dev

从python中的非线性方程组中找到复杂的根

来自分类Dev

R如何使用plotrix包分别为两y轴图中的两组点添加回归线

来自分类Dev

R中两组观测值的小计总和

来自分类Dev

使用R中的两组节点构建图

来自分类Dev

如何在R中绘制两组的密度图