我有一组点
我想拟合一个省略号 (95% CI),然后计算位于
A[(0,0);(1,0);(0.5,0.5)]
和 B[(0,0);(0,1);(0.5,0.5)]
段内的省略号的面积。我怎样才能实现这个?
可重现的示例
library(dplyr)
# Set seed for reproducibility
set.seed(30)
#Generate points
n_points <- 1000
x <- runif(n=n_points, -1, 1)
y <- runif(n=n_points, -1, 1)
df<-cbind(x,y)%>%as.data.frame
df%>%
mutate(sum=abs(x)+abs(x),
ratio_x=x/abs(y),
ratio_y=y/abs(x))%>%
#Create skewed data
filter(sum<=1,
ratio_x>0,
ratio_y<1)->df
# Visualize
plot(x~y,data=df)
#
# Fit an ellipse
df %>%
select(x,y) %>%
as.matrix -> matDat
#
matCovLS <- cov(matDat)
vecMeans <- colMeans(matDat)
vecMeans <- colMeans(matDat)
### get 95% CI ellipse
d2.95 <- qchisq(0.95, df = 2)
cluster::ellipsoidPoints(matCovLS, d2.95, loc = vecMeans) -> matEllipseHull95
plot(matDat, asp = 1, xlim = c(-1, 1))
lines(matEllipseHull95, col="blue")
你在找吗
library(sf)
elli <- st_cast(
st_multipoint(matEllipseHull95), "POLYGON")
tri <- st_cast(st_multilinestring(
list(matrix(c(0,0,1,0,0,1,0,0) ,,2 , byrow = TRUE))), "POLYGON")
plot(tri)
plot(elli, add = TRUE)
plot(st_intersection(st_union(elli), st_union(tri)), add = TRUE, col = 'red')
这给出了
st_area(st_intersection(st_union(elli), st_union(tri)))
[1] 0.2001515