【问题标题】:Transform left skewed data in R在 R 中转换左偏斜数据
【发布时间】:2019-12-10 14:48:39
【问题描述】:

我有一个左倾斜的列,我需要对其进行转换。所以我尝试了这个

library(car)
vect<-c(1516201202, 1526238001, 1512050372, 1362933719, 1516342174, 1526502557 ,1523548827, 1512241202,1526417785, 1517846464)
powerTransform(vect)

向量中的值是 13 位数字 unix 纪元时间戳,像这样我有几千个值,在这里粘贴 10 个,我对整个列执行相同的操作。这给了我一个错误

Error in qr.resid(xqr, w * fam(Y, lambda, j = TRUE, ...)) : NA/NaN/Inf in foreign function call (arg 5)

我期待转换后的列。关于如何在 R 中执行此操作的任何想法?

谢谢 拉杰

【问题讨论】:

  • 请查看您可以和应该做什么以提供minimal reproducible example。简而言之,您需要提供最少且具有代表性的样本数据,以便我们能够在复制和粘贴数据和代码时重现确切的错误。否则,“为什么我得到错误 XYZ”形式的调试问题是一个猜谜游戏。除此之外,我在下面发布了一个基于iris 示例数据集的完整示例。请看一看。
  • @MauritsEvers 我添加了可重现的示例

标签: r statistics transformation skew


【解决方案1】:

通常,car::powerTransform 返回一个 powerTransform 对象(这是一个 list,其中包含估计的 Box-Cox 变换参数)。要获取转换后的值,您需要bcPower,它采用car::powerTransform 输出对象来转换原始数据。

很遗憾您没有提供示例数据,所以这里有一个基于iris 数据集的示例。

library(car)

# Box-Cox transformation of `Sepal.Length`
df <- iris
trans <- powerTransform(df$Sepal.Length)
# Or the same using formula syntax:
# trans <- powerTransform(Sepal.Length ~ 1, data = df)

# Add the transformed `Sepal.Length` data to the original `data.frame`
df <- cbind(
    df,
    Sepal.Length_trans = bcPower(
        with(iris, cbind(Sepal.Length)), coef(trans))[, 1])

# Show a histogram of the Box-Cox-transformed data    
library(ggplot2)
ggplot(df, aes(Sepal.Length_trans)) +
    geom_histogram(aes(Sepal.Length_trans), bins = 30)

【讨论】:

  • 你所做的是正确的,这就是我想要的,但问题是,正如问题中所述,当我使用 UNIX 13 位纪元时间戳作为输入时,我得到了提到的错误。非常感谢您的回复!这是输入数据问题
  • @Raj 您添加的示例数据没有意义。所有条目都是相同的。这里没有 Box-Cox 变换。请提供代表性样本数据!
  • 好的,我修好了。你能看一下吗
  • @Raj 我对你想要做什么感到很困惑。据我了解,vect 是一个时间戳。如果转换时间戳数据以使其“看起来”正常(我会持怀疑态度)是有意义的,那么首先将时间戳转换为相对于参考(时间戳)的持续时间可能更有意义。在当前形式下,您遇到了数字问题(尝试hist(vect))。
  • 我想你发现了我的根本错误。是的,我不应该转换时间戳,除非我将其转换为其他形式。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多