r - 包含 R 中给定点百分比的椭圆

标签 r ellipse phonetics

我正在绘制 F1/F2 元音图 ( an example is here )。每个元音都有几个点/值,我想在这些点周围画一个椭圆,这样:

  • 椭圆覆盖了至少 80% 的点(即上图中“i”有多个值,但它们包含在椭圆内)。
  • 位于最小/最大值方向。

我可能把事情复杂化了,但三角学和数学对我来说是希腊语。以下是我尝试过的。

椭球体()

Ellipsoidhull() 位于包“cluster”中。如果我将具有 F1 和 F2 的矩阵传递给函数,它似乎计算了椭圆的中心,但方向值很大。例如:

> olm
      ol.f1 ol.f2 # f1/f2 data
 [1,] 501.3 850.5
 [2,] 488.5 906.5
 [3,] 456.3 857.0
 [4,] 505.8 895.3
 [5,] 499.5 898.0
 [6,] 431.8 891.5
 [7,] 416.3 870.5
 [8,] 506.0 887.8
 [9,] 500.3 985.8
[10,] 513.5 955.3
[11,] 531.5 958.0
[12,] 483.0 847.3
[13,] 533.3 982.8
[14,] 480.8 881.8
[15,] 484.3 884.5

如果传递给ellipsoidhull:

> ellipsoidhull(olm)
'ellipsoid' in 2 dimensions:
 center = ( 480.69 904.33 ); squared ave.radius d^2 =  2 
 and shape matrix =
       ol.f1  ol.f2
ol.f1 2115.5 1449.5
ol.f2 1449.5 3558.2
  hence, area  =  14636 

我想弄清楚如何绘制椭圆并不难,但是“形状矩阵”(最大/最小半径值?)太高了。顺便说一句,感谢 Freednode 上的 #R 提供的提示。

来自 EMU-R 的源代码

然后,我研究了 EMU-R 的代码,它是与 EMU 一起使用的 R 包,除其他外,它可以用椭球体绘制 F1/F2。似乎执行此操作的代码是 here 但我不明白椭圆是如何绘制的。

感谢任何帮助。

最佳答案

require(car)
 x=rnorm(100)
 y=1+.3*x+.3*rnorm(100)
 dataEllipse(x,y, levels=0.80)

所以你的数据:

with(olm ,dataEllipse(ol.f1, ol.f2, levels=0.8) )

另一个软件包 mixtools 具有类似的功能,但使用 alpha 级别而不是 1-alpha:

 mu <- with(olm, c(mean(ol.f1), mean(ol.f2)) )
 sigma <- var(olm)  # returns a variance-covariance matrix.
 sigma
#          ol.f1     ol.f2
#ol.f1 1077.2098  865.9306
#ol.f2  865.9306 2090.2021

require(mixtools)
#Loading required package: mixtools
#Loading required package: boot
# And you get a warning that ellipse from car is masked.

ellipse(mu, sigma, alpha=0.2, npoints = 200, newplot = FALSE)

这将用新的估计覆盖早期的图(在本例中稍微窄一些。This is the comparison of the two methods

关于r - 包含 R 中给定点百分比的椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6655268/

相关文章:

r - prcomp 和 ggbiplot : invalid 'rot' value

r - 重复跟随父 ID 直到祖先的 Tidyverse 方法

javascript - p5js for 循环编程 Q : how to make circles bigger and brighter near mouse pointer

search - 搜索用户名的语音算法

r - 网络抓取 : replacing tags manually

r - 为什么我的 ggplot2 条形图不显示大于 0 的 ylim 最小值?

python - 如何测试区域是否重叠 (Python)

java - 为什么 Ellipse2D.Double 不被识别?

java - 印度语言的拼音搜索

c# - 使用 C# 程序从 praat 获取值