1

我正在尝试学习潜在成分分析,同时也在学习 R。我正在使用poLCA 包,并且在访问属性时遇到了一些麻烦。我可以很好地运行示例代码:

ds = read.csv("http://www.math.smith.edu/r/data/help.csv")
ds = within(ds, (cesdcut = ifelse(cesd>20, 1, 0)))

library(poLCA)
res2 = poLCA(cbind(homeless=homeless+1, 
    cesdcut=cesdcut+1, satreat=satreat+1, 
    linkstatus=linkstatus+1) ~ 1, 
    maxiter=50000, nclass=3, 
    nrep=10, data=ds)

但为了使它更有用,我想访问由 poLCA 类创建的对象中的属性,如下所示:

attr(res2, 'Nobs')
attr(res2, 'maxiter')

但它们都显示为“空”。我希望 Nobs 为 453(由函数确定),maxiter 为 50000(由我的输入值决定)。

我确定我只是天真,但我可以使用任何可用的帮助。非常感谢!

4

1 回答 1

3

欢迎来到 R。您已经掌握了正确的模型拟合语法,因为您可以得到模型(不知道潜在成分分析是如何工作的,因此无法说明结果的统计有效性)。但是,您混淆了 R 存储与模型有关的信息的不同方式。

poLCA返回一个类的对象poLCA,即

包含以下元素的列表:

(……)

Nobs完全观察到的病例数(小于或等于 N)。

maxiter估计算法设置为运行的最大迭代次数。

由于它是一个列表,因此您可以使用$运算符从模型对象中提取单个元素:

res2$Nobs      # number of observations
res2$maxiter   # maximum iterations

在某些情况下,可能有提取器函数来获取此信息,而无需进行低级索引。例如,许多模型拟合函数都会有一个fitted方法,它在训练数据上提取拟合值的向量;并类似地residuals拉出残差向量。您应该检查软件包是否提供了此类提取器功能,poLCA并在可能的情况下使用它们;这样,您就不会对将来可能会损坏的模型对象的结构做出假设。

这与获取对象的属性不同,这是您的用途attr。R 中的属性可以称为元数据:它们包含有关对象本身的 R 特定信息,而不是有关与对象相关的任何内容的信息。常见属性的示例包括class(对象的类)、dim(数组或矩阵的维度)、names(向量/列表/数组的各个元素的名称)等。

于 2013-07-19T08:28:55.427 回答