【问题标题】:SPSS creating a loop for a multiple regression over several variablesSPSS为多个变量的多元回归创建一个循环
【发布时间】:2014-01-06 10:16:08
【问题描述】:

对于我的硕士论文,我必须使用 SPSS 来分析我的数据。实际上,我认为我不必处理非常困难的统计问题,就我的分析概念而言,这仍然是正确的。但是现在的问题是,为了创建我的因变量,我通常需要使用语法编辑器/编程,而我在这方面根本没有经验。我希望您能在创建语法的过程中帮助我。

我总共有大约 900 家公司进行了 6 年的观察。对于所有这些公司,我需要以下公司特定回归的预测值:

Y= ß1*X1+ß2*X2+ß3*X3 + error

(我知道,ß 不太可能很重要,但这在我的论文中没什么好担心的,不过会在限制中提到)。 到目前为止,我的数据按以下方式排序

COMPANY  YEAR X1 X2 X3

1       2002

2       2002

1       2003

2       2003

但我可以轻松更改顺序,例如在

1

1

2

2 etc.

好吧,假设我已经重新排列了数据:我现在需要的是 SPSS 为每家公司计算特定的 ß 并在一列中返回输出(预测值与这些 ß 乘以每行中的特定 X)。所以我想我需要的是一个循环,对 939 家公司中的每家公司进行 6 行的多元线性回归,对吗?

正如我所说,我完全没有经验,所以每一个提示对我来说都很有价值。

提前谢谢你,

贾尼娜。

【问题讨论】:

    标签: loops linear-regression spss


    【解决方案1】:

    请记住,每家公司只有 6 个观察值和 3 个(或 4 个,如果您还有常数项)系数要估计,系数估计值可能非常不精确。您可能需要考虑是否可以至少部分合并公司。

    【讨论】:

      【解决方案2】:

      您可以使用SPLIT FILE 来估计每个公司的特定回归,示例如下。请注意,可能需要考虑其他面板数据模型,并评估残差中是否存在自相关。 (尽管对于多层次模型的探索性分析,这是 IMO 一种有用的方法。)

      该示例声明了一个新数据集,用于将回归估计传递给(请参阅REGRESSION 上的OUTFILE 子命令)并抑制其他表(900 多个表大部分时间用于呈现输出)。如果您需要其他统计信息,请忽略抑制表格的OMS,或对其进行调整以仅显示您想要的表格。 (您也可以使用OMS 将其他结果通过管道传输到其他数据集。)

      ************************************************************.
      *Making Fake data.
      SET SEED 10.
      INPUT PROGRAM.
      LOOP #Comp = 1 to 1000.
      COMPUTE #R1 = RV.NORMAL(10,2).
      COMPUTE #R2 = RV.NORMAL(-3,1).
      COMPUTE #R3 = RV.NORMAL(0,5).
        LOOP Year = 2003 to 2008.
          COMPUTE Company = #Comp.
          COMPUTE Rand1 = #R1.
          COMPUTE Rand2 = #R2.
          COMPUTE Rand3 = #R3.
          END CASE.
        END LOOP.
      END LOOP.
      END FILE.
      END INPUT PROGRAM.
      DATASET NAME Companies.
      COMPUTE x1 = RV.NORMAL(0,1).
      COMPUTE x2 = RV.NORMAL(0,1).
      COMPUTE x3 = RV.NORMAL(0,1).
      COMPUTE y = Rand1*x1 + Rand2*x2 + Rand3*x3 + RV.NORMAL(0,1).
      FORMATS Company Year (F4.0).
      
      *Now sorting cases by Company and Year, then using SPLIT file to estimate 
      *the regression.
      SORT CASES BY Company Year.
      
      *Declare new set and have OMS suppress the other results.
      DATASET DECLARE CoeffTable.
      OMS 
        /SELECT TABLES
        /IF COMMANDS = 'Regression'
        /DESTINATION VIEWER = NO.
      *Now split file to get the coefficients.
      SPLIT FILE BY Company.
      REGRESSION
        /DEPENDENT y
        /METHOD=ENTER x1 x2 x3
        /SAVE PRED (CompSpePred)
        /OUTFILE = COVB  ('CoeffTable').
      SPLIT FILE OFF.
      OMSEND.
      ************************************************************.
      

      【讨论】:

      • 不过,没有 900 家公司。
      • @rolando2,上面的代码适用于 900 家公司(只需将指定 #Comp 的循环更改为 900+)。旧版本对组的数量有限制(我相信 V15 是 100)。
      • 现在,我想查看 1,000 个模型的系数,不。使用 OMS 将是该任务的更好选择。 (并不是说我会在所有面板回归模型中推荐这种方法——但这种方法对于多层次模型 IMO 的探索性分析很有用。)
      • 实际上我对SPLIT FILE 限制的记忆是不正确的——我只是在V15 上运行了SPLIT FILE,1000 个组没有问题。大多数情况下,这种方法的输出是令人讨厌的部分——需要大量时间和内存来渲染。我更新了示例以显示如何使用REGRESSION 上的OUTFILE 子命令将回归系数传递到新数据集,并使用OMS 抑制其他表。这个包含 1000 家公司的示例在我的机器上大约需要 20 秒。
      猜你喜欢
      • 2011-10-21
      • 2019-11-30
      • 2021-12-02
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多