loops - 我想对 1000 个数据集使用 glm 函数
问题描述
我正在尝试创建 1000 个数据集,每个数据集有 4 个变量,X1 是正常的(0,1),X2 是正常的(0,1),X3 是 expit(0.5X1 + 0.8X2),A 是伯努利(X3)。所有变量都有 2500 个观测值。
我想将 1000 个数据集中的每一个都拟合到 glm 模型中,但无济于事。
这就是我所做的
sim_list = replicate(n =3,
expr = {data.frame(X1 = X1 <- rnorm(2500, mean = 0, sd = 1), X2 = X2 <- rnorm(2500, mean = 0, sd = 1), X3 = X3 <- rnorm(2500, mean = 0, sd = 1), X4 = X4 <- expit(0.5*X1 + 0.8*X3), A = A <- rbern(2500, X4)},
simplify = F)
for (i in 1:3){
glm1[i] <- glm(A~X1, family = binomial, data = sim_list[[i]])
score[i] <- glm1[i]$fitted.values
}
我真的很感激这方面的一些帮助
解决方案
正如@Michael 指出的那样,您不能进行双重分配,使用其中一个<-
或=
,而不是两者。在复制内部,您尝试创建一个数据框列,X4 = expit(0.5*X1 + 0.8*X3)
该列以不存在(尚)的列为条件。所以这行不通。我们首先使函数工作:
library(simcausal)
library(locfit)
func = function(){
X1 = rnorm(2500, mean = 0, sd = 1)
X2 = rnorm(2500, mean = 0, sd = 1)
X3 = rnorm(2500, mean = 0, sd = 1)
X4 = expit(0.5*X1 + 0.8*X3)
A = rbern(2500, X4)
data.frame(X1,X2,X3,X4,A)
}
该功能func()
现在有效:
head(func())
X1 X2 X3 X4 A
1 -0.316250388 1.7826809 -0.57710388 0.3498251 1
2 -0.140362056 -0.1895857 0.66395833 0.6132480 1
3 -0.008822927 -0.8104381 -0.57667306 0.3856227 0
4 1.053421856 1.5677077 -1.92307184 0.2666382 1
5 -0.142992075 0.3378479 1.13319243 0.6974233 1
6 -1.502032980 -0.3575286 -0.02838796 0.3156735 0
我们创建 sim_list:
sim_list <- replicate(n =3,func(),simplify = F)
现在是另一个重要部分,您需要创建一个列表来存储您的结果,并使用双方括号分配它们[[
:
glm1 <- vector("list",3)
score <- vector("list",3)
for (i in 1:3){
glm1[[i]] <- glm(A~X1, family = binomial, data = sim_list[[i]])
score[[i]] <- glm1[[i]]$fitted.values
}
推荐阅读
- selenium-webdriver - 使用 Cucumber 和 Java 设置 Selenium Grid Hub 和节点
- ruby-on-rails - Rails 使用同一命名空间中的模型作为 belongs_to 引用,如何从外部引用模型
- javascript - 按钮在边缘未正确显示
- validation - 使用 DAO 的 JSF 验证不起作用
- sql - MS Access - 特定时间范围内的重复呼叫量
- networking - 如何处理 ansible ios_config 模块中的预期提示
- sql-server - 这是最快的日期比较方式
- python - 是否可以编写一个 BigQuery 来检索 PyPI 下载的分箱计数?
- python - Python - 多处理,给每个处理器一个来自文本文件的电子邮件
- javascript - 如何使用替换垂直缩略图的文本创建猫头鹰轮播?