【问题标题】:Circular-linear regression from circular package in R not workingR中循环包的循环线性回归不起作用
【发布时间】:2014-09-03 17:06:40
【问题描述】:

我正在尝试使用 R 中的循环包关联线性和循环变量: http://cran.r-project.org/web/packages/circular/circular.pdf

#Linear variable
x<-c(221, 223, 256, 212, 217, 217, 200)

#Circular variable, compass direction in degrees
y<-c(2, 213, 356, 188, 202, 221, 191)

#Convert y to a circular variable, to specify type 
y<-circular(y, type=c("angles"),units=c("degrees"),
   template=c("geographics"), zero=0, rotation=c("clock"))

#Correlation
lm.circular(y=y, x=x, init=c(7), type="c-l", verbose=TRUE)

运行此程序会产生错误:while (diff > tol) { : 需要 TRUE/FALSE 的缺失值

我不确定这意味着什么。没有缺失值。我想可能是因为我不懂“init”。

这是文档中对函数“init”的描述:“初始值长度等于 x 的列的向量。”我在这里尝试了“1”和“7”,结果相同。文档提到 x 和 y 的适当输入是向量,所以我不确定“列”是什么意思。

或者也许我还缺少其他东西?谢谢!

【问题讨论】:

  • 好吧,一方面,x 在您的情况下是一个向量并且没有列,所以我认为 init 不会起作用 - 将其保留为 NULL 看看会发生什么.顺便说一句,我相信有一个错字(或很多) - 使用 c-l 调用时返回的对象应该属于 lm.circular.cl 类。
  • 我应该提到我也尝试过“init = NULL”并尝试完全删除它,这两者都会产生错误:“lm.circular.cl(...)中的错误:'init ' 没有默认值。"

标签: r


【解决方案1】:

虽然文档很薄弱,但对debug 的一些工作表明vector 输入被转换为单列矩阵,因此您应该为init 输入一个初始值。

但是,我运行了您的数据集(和代码),但算法不同。如果您在线性空间中绘制yx,那么有序对(221,2) 似乎与其余的值完全脱离了床。

【讨论】:

  • “单个初始值”是指“c(1)”吗? “算法发散”是什么意思? 2 与此处作为示例给出的指南针上的其他一些值相距不远(即 356);指南针上的方向是一个循环变量,这就是线性相关不起作用的原因。循环数据是否有一些东西使该算法无法处理异常值(异常值在线性相关中不是问题,它只是一种较弱的关系)。这些数据只是一个例子,我得到的结果与我的实际数据相同,其中包括全方位的方向。
  • Rachel,从你的问题可以看出你是R 的新手。我认为您需要先完成R-intro 和其中一个在线交互式“R 教程”,然后再继续。我还建议,如果您不了解“发散”的含义,那么您就无法理解拟合或回归函数的数学水平。
  • 我的数学知识和 R 经验不谈,你能让这个函数工作吗?怎么样?
【解决方案2】:

您的示例确实适用于 init=0。我同意错误消息不是很丰富。您可能想询问软件包开发人员是否可以对其进行改进。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2021-07-02
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多