【问题标题】:How to turn just one row of a matrix into a vector so I can do a linear regression on it?如何将矩阵的一行转换为向量,以便对其进行线性回归?
【发布时间】:2016-05-14 16:23:36
【问题描述】:

我正在尝试在 R 中做我的第一个项目,但我只是不懂这种语言,所以在这里真的让我很生气。这是我遇到过的最令人沮丧的事情,主要是因为互联网上似乎绝对没有任何地方可以迎合不懂语言的人来教你如何做事。

我正在尝试使用我正在使用的数据作为 RStudio 的内置数据集之一运行线性回归。这是我的代码行:

    lm(Income ~ Illiteracy, data=florida)

但我一直在想这个错误:

model.frame.default 中的错误(公式 = 收入 ~ 文盲,数据 = 佛罗里达,: 'data' 必须是 data.frame,而不是矩阵或数组

(帮我把 state.x77 改名为“florida”的朋友)。

在收到此错误并决定我更愿意在回归中单独处理每个州或至少几个样本州后,我决定将佛罗里达行转化为自己的向量来进行分析在。但是,我不知道该怎么做。我一直在这个网站上看到建议,但他们都在“命名”事物,而且很多命令都有“暗淡”,没有人解释。

请帮助我是一个完全的初学者,我有一本假设你知道 R 的教科书,我找到了另一本“学习 R”的书,不知何故也假设你知道 R

【问题讨论】:

  • str(florida) 给出了什么?
  • 错误提示您需要一个data.frame,所以将florida 强制转换为data.framelm(Income ~ Illiteracy, data=as.data.frame(florida))
  • 首先,您不能对该数据集中的单行执行线性回归。在 state.x77 数据集中,佛罗里达州只是一行,因此您没有自变量。如果您想对所有州的文盲率与收入进行线性回归比较,请尝试:lm(Income ~ Illiteracy, data=as.data.frame(state.x77))
  • 这最终奏效了——我不知道这就是你可以使用“as.data.frame”命令的方式。
  • @Dave2e:这是否意味着我将无法对各个州的数据进行回归?编辑:我现在明白你的意思了

标签: r matrix vector regression


【解决方案1】:

R 有几个用于处理数据集的数据结构。 matrix 就是其中之一 - 它限制您使用单一类型的变量(通常是 numeric),并且必须具有矩形形状。

data.frame 的形状类似于矩阵,但每一列可以是不同的类型(例如 numericcharacterfactor)。这更接近典型数据集,其中混合了连续/数字、有序和分类/名义变量。

您可以通过输入?functionname 来检查函数需要什么样的输入,例如?lm 并检查参数部分:

数据
包含模型中变量的可选数据框、列表或环境(或由 as.data.frame 强制转换为数据框的对象)。如果未在数据中找到,则变量取自环境(公式),通常是调用 lm 的环境。

在尝试回归之前,您可以通过良好的入门课程学习 R 的基本构建块。一个免费选项是DataCamp's Introduction to R,但还有很多其他选项。一旦你了解了 R 的不同变量类型、数据结构和语法,这些错误就很容易纠正了。

在这种情况下,您只需编写 as.data.frame(florida) 以将 matrix 对象“强制”为 data.frame 对象。

【讨论】:

    【解决方案2】:

    如果你想获得每个州的模型,试试这个

    data(state)
    
    state.x77 <- as.data.frame(state.x77)
    state.x77$name <- rownames(state.x77)
    mod_list <- list()
    for (s in unique(rownames(state.x77))) {
        m <- lm(Income ~ Illiteracy, data = subset(state.x77, name == s))
        mod_list <- c(mod_list, list(mod = m))
    }
    names(mod_list) <- unique(rownames(state.x77))
    

    【讨论】:

    • 对不起,这是不正确的。每个州在数据集中都有一行。您正在用独立的 50 个方程和独立的 50 条数据求解 50 个独立的未知数。没有错误项,因此它是代数而不是统计。没有提供关于文盲如何影响收入的见解。
    【解决方案3】:

    对于 Illiterace 到收入的线性回归,您应该这样做:

    lm(Income ~ Illiteracy, data=as.data.frame(state.x77))
    

    因为lm 接受数据帧,而不是矩阵。

    帮助我的朋友将 state.x77 重命名为“florida”

    我不知道他或她为什么要这样做。 state.x77 是 50 个不同状态的 8 个参数的数据。佛罗里达只是其中之一,那他到底为什么要称它为“佛罗里达”呢?假设您有一个包含 200 个不同国家的人口和收入的数据集。你会称它为“印度”,因为印度是数据集中的国家之一吗?

    在收到此错误并决定我更愿意这样做之后 回归中的每个状态分别

    你不能“在回归中单独做一个状态”。并不是说你不能在 R 中做,你根本做不到,因为它在数学上是荒谬的。佛罗里达州(在此矩阵中)人口为 4815 人,文盲率为 1.3。你如何在两个数字之间进行回归?太荒谬了。

    我决定将佛罗里达行转化为自己的向量来进行分析。

    您可以选择佛罗里达行:

    foo <- state.x77["Florida",]
    

    现在foo 是佛罗里达州的 8 个参数的向量,但是你能用它做什么呢?

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多