【问题标题】:Comparing estimates of Ripley's K function using Matlab and R使用 Matlab 和 R 比较 Ripley 的 K 函数的估计值
【发布时间】:2015-11-08 10:55:37
【问题描述】:

我正在使用下面的 Matlab 代码来估计 Ripley 的 K 函数。

a = 0;
b = 50;
C_x = a + (b-a).*rand(100,1);
C_y = a + (b-a).*rand(100,1);

locs = zeros(length(C_x),2);
locs(:,1) = C_x;
locs(:,2) = C_y;

dist = a:1:b;
K_t = RipleysK(locs, dist, [a, b, a, b]);
plot(dist,K_t);
title('$\hat{K}$ function','Interpreter','latex','FontSize',14);
xlabel('$r$','Interpreter','latex','FontSize',14);
ylabel('$\hat{K}(r)$','Interpreter','latex','FontSize',14);
csvwrite('test.csv',locs);

“RipleysK”函数可以在以下位置找到: http://www.colorado.edu/geography/class_homepages/geog_4023_s07/labs/lab10/RipleysK.m

相比之下,我使用的是以下 R 脚本。

mydata <- read.csv("test.csv",header=F)
mydata
w <- owin(xrange = c(0,50),yrange = c(0,50))
pp <- as.ppp(mydata,w)
K <- Kest(pp,correction = "none")
plot(K)

Matlab 为指定的 r 值(即 dist)估计 K,而 R 脚本没有(估计直到 r = 12.5)。

有人可以评论吗?哪一个是正确的?我们可以在 R 脚本中指定 r 值吗?

谢谢

【问题讨论】:

  • 你读过?Kest吗?
  • @MichaelChirico,是的,浏览了 R 代码。我有一个观察结果,即 Kest 估计 r = n/4 的 K 函数,例如 50/4 = 12.5,这与在 Matlab 代码中所做的相同。他们有类似的估计。现在我只想知道我们是否可以在 R 图中访问 Kest 的 K 值(以类似的方式我们在 Matlab 图中使用数据提示)或者我们不能这样做?

标签: r matlab statistics spatstat stochastic-process


【解决方案1】:

我没有看过matlab代码,但是我很确定spatstat包中的Kest计算正确。从您自己的评论来看,这似乎也没有冲突——它们只是做了两件不同的事情:matlab 代码针对 r 的一个特定值评估 K 函数的估计值,而 Kest 则针对一系列r 值(它还计算不同估计量的集合)。默认情况下,它会计算 513 个 r 值的估计值,查看它们的最简单方法是转换为 data.frame(继续您的代码):

Kdf <- as.data.frame(K)
head(Kdf)

或者,您可以将函数值 (fv) 对象 K 转换为正常的 R 函数,并在 r 的相关值处对其进行评估(这会自动在可用的估计器中选择“最佳”估计器(通常是 Ripley 的等向修正后的估计)):

Kf <- as.function(K)
Kf(12.5)

【讨论】:

  • 感谢您的评论和附加组件。它真的如我所愿。
  • 我很高兴它有帮助。也许您会考虑接受答案,这样它就不会在搜索中显示为未回答?
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2019-07-16
  • 2011-06-16
  • 2022-08-24
  • 1970-01-01
相关资源
最近更新 更多