从 R 中的伪 F 计算 p 值

Calculating p-value from pseudo-F in R

我正在处理一个非常大的数据集,其中包含 18 个变量的 132,019 个观测值。我使用 clusterSim 包来计算使用 Kohonen SOM 创建的集群的伪 F 统计数据。我正在尝试使用 p 值评估各种簇大小(例如,4、6、9 个簇),但我得到的结果很奇怪,而且我在统计上不够精通知道发生了什么事。

我用下面的代码得到伪F.

library(clusterSim)
psF6 <- index.G1(yelpInfScale, cl = som.6$unit.classif)
psF6
[1] 48783.4

然后我使用以下代码获取 p 值。当我做 lower.tail = T 我得到一个 1 当我做 lower.tail = F 我得到一个 0.

k6 = 6
pf(q = psF6, df1 = k6 - 1, df2 = n - k6, lower.tail = FALSE)
[1] 0

我想我期待的不是一个整数,所以我对如何解释结果感到困惑。无论我评估的集群大小如何,我都会得到完全相同的结果。我在某处读到一些关于在计算中反转 df1df2 的内容,但这看起来很奇怪。此外,我正在使用的参考文本(Larose 的 "Data Mining and Predictive Analytics")使用它来评估 k-means 集群,所以我想知道问题是否出在我使用 Kohonen 集群上。

我会检查你的数据,但不是不可能得到 0 或 1 的 p 值。在你的情况下,假设你的数据是正确的,这表明你的数据严重倾斜并且您创建的集群非常适合。因此,当您执行 lower.tail = FALSE 时,p 值为零表示您的样本以 100% 的准确度分类,并且没有出错的机会。 lower.tail = TRUE 给出 1 表示你们聚类彼此非常接近。换句话说,您的观察结果聚集在一起,彼此远离,在双尾测试中有 0,但聚类的中心点足够接近,在一个尾部测试中给出 p 值为 1。如果我是你,我会尝试 'K-means with splitting' 具有不同距离参数 'w' 的变体,以查看数据如何拟合。如果对于某些 'w' 它适合集群的非常低的 p 值,我认为没有必要像 SOM 这样复杂的模型。