警方的GLM停止了Gelman / Hill书中的数据

时间:2010-09-07 00:16:08

标签: r statistics

有没有人与纽约警方合作停止在Gelman,Hill book Data Analysis Using Reg中提到的数据。和多/ Hier建模(ARM)。

下的数据

http://www.stat.columbia.edu/~gelman/arm/examples/police/

该文件是frisk_with_noise.dat。我删除了这些数据的描述部分,将past.arrests重命名为arrest,将其保存为frisk.dat。这样称为来自R的glm:

library ("foreign")
frisk <- read.table ("frisk.dat", header=TRUE)
attach (frisk)
glm(formula = stops ~ 1, family=poisson, offset=log(arrests))

glm调用就在ARM书中。在任何情况下,我都会收到错误:

Error: NA/NaN/Inf in foreign function call (arg 4)

有什么想法吗? Gelman在同一个名为police_setup.R的目录下有一段代码,它应该有一些清理代码,但这也不起作用。

3 个答案:

答案 0 :(得分:4)

我没有回过头来看看Gelman在本章中究竟做了什么(我的书副本是存储的......),但这个例子的具体问题是“逮捕”在某些方面是零例如,使用log(arrests)作为偏移会导致问题。 (您不需要库(外部),并且使用glm的数据参数通常比使用attach()更安全/更好。)

X <- read.table("frisk_with_noise.dat",skip=6,header=TRUE)
names(X)[3] <- "arrests"
glm(stops~1,family=poisson,offset=log(arrests),data=X,
    subset=arrests>0)

答案 1 :(得分:2)

以上代码有效,但分析结果与本书不同。根据{{​​3}},由于隐私问题,作者不得不手动更改数据。

答案 2 :(得分:1)

对于盖尔曼的第6章例子,我认为你首先需要聚合犯罪。 frisk_with_noise.dat文件包含900个观察结果,每个种族群一个记录,每个区域每个犯罪(75 * 3 * 4 = 900)。但是第6章中的示例输出显示n = 225(75 * 3)。因此,使用类似的东西扩展Ben的代码可以让您更接近复制输出:

library(arm) # for display() function
X <- read.table("frisk_with_noise.dat",skip=6,header=TRUE)
names(X)[3] <- "arrests"
X <- aggregate(cbind(stops, arrests) ~ precinct + eth, data=X, sum)
fit.1 <- glm(stops~1,family=poisson,offset=log(arrests),data=X,
             subset=arrests>0)
display(fit.1)

但是,当frisk_with_noise.dat文件顶部的注释指出时,噪声已被添加,因此无法准确复制结果。