【问题标题】:I want to use glm function for 1000 datasets我想对 1000 个数据集使用 glm 函数
【发布时间】:2019-11-21 13:10:11
【问题描述】:

我正在尝试创建 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
} 

我真的很感激这方面的帮助

【问题讨论】:

  • 您的 for 循环看起来不错,但您的 sim_list 却不行。一个问题是双重分配(我认为您同时拥有=&lt;-,但每个变量只能使用一个)。

标签: loops replication simulation boot glm


【解决方案1】:

正如@Michael 指出的那样,您不能进行双重分配,请使用 &lt;-= ,不能同时使用。在复制内部,您尝试在不存在的列上创建一个以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
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多