【问题标题】:R for loop with panel data for z-score calculation用于 z 分数计算的面板数据的 R for 循环
【发布时间】:2017-10-20 04:56:36
【问题描述】:

我目前正致力于在 RStudio 中创建一些函数,其中包含从 2005 年到 2013 年观察到的大约 100,000 个人的数据集。我有一个不平衡的面板,有两个感兴趣的变量——为了简单起见,我们称它们为 x 和 y。

我指定的函数采用以下形式:

z = (mean(x) + mean(y)) / sd(x) 

值得注意的是,它是一种正常的 z 分数度量,通常在模型估计的预处理阶段用作归一化技术。

指定函数的目标是计算数据集中每个个体 i 的 z,同时考虑到不同个体观察到的不同周期 T = 1,2...,t。换句话说,在某些情况下,我有 2008-2013 年的数据,而对于其他情况,我有 2006-2010 年的数据。

目前我已将我的功能指定如下:

z1 <- function(x,y) {
(mean(x) + mean(y))/sd(x)
}

当我执行它时:

z1(x,y) 

我只得到一个数字作为输出,代表观察总数(大约 150,000 行)的计算。我应该如何编辑我的代码以确保我为我的数据集中的每个人获得一个数字?

我假设我必须使用一个 for 循环来迭代并计算当时一个人的 z 分数,但我不确定在编写我的函数时如何指定它。

【问题讨论】:

    标签: r normalization


    【解决方案1】:

    它返回单个值,因为 mean(x)、mean(y) 和 sd(x) 都是数值,您不需要它做任何其他事情。

    以下代码模拟两个(向量)并执行(我认为是)您想要的。如果对您的任务更具描述性,那将有所帮助。

    x <- rbinom(100,3,(2/5))
    y <- rpois(100,2.5)
    
    
    f <- function(mvL,mvR){
        answer = NULL;
        vector <- readline('Which?: ')
        if (vector=='Left'){
             for  (i in 1:length(mvL)){
                 answer[i] = mvL[i] - ((mean(mvL) + mean(mvR)) / sd(mvL));
             }
        }
        else{
          for (i in 1:length(mvR)){
            answer[i] = mvR[i] - ((mean(mvL) + mean(mvR)) / sd(mvL));
          }
        }
        return (answer);
    }
    
    f(x,y)
    

    【讨论】:

    • 非常感谢 Nodel,这是朝着正确方向迈出的一步。我所拥有的是大约 100,000 个人的样本。数据矩阵有大约 150,000 行和 3 列。一列是每个人的标识符,另外两列是变量 x 和 y。我想计算整个样本中每个人的 z 分数。但是,我不确定如何确保该函数计算每个人的均值和标准差,然后再计算该人的 z 分数,然后再转到下一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多