百分比数据的反正弦变换

时间:2019-05-04 16:20:08

标签: r

我需要对数据进行反正弦变换,但是由于我从未做过此事,因此我不确定所使用的代码是否正确,因此我不知道如何解决错误它们会发生。

(csv) HS.PvsPERC

我的代码(使用csv:HS.PvsPERC):

mydata<-read.csv(file.choose())

attach(mydata)
summary(mydata)
str(mydata)
head(mydata)
dput(mydata)

mydata <-
structure(list(Herd.size = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("Large", "Small"), class = "factor"), 
    Any.pregnant.in.herd. = structure(c(2L, 1L, 2L, 1L, 1L, 1L, 
    2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
    2L, 2L, 2L, 2L, 2L, 1L), .Label = c("no clear evidence", 
    "pregnant"), class = "factor"), percentage.of.heads.up.at.halfway = c(0, 
    100, 80, 25, 57.14, 100, 0, 25, 50, 100, 100, 70, 100, 14.29, 
    26.67, 100, 50, 40, 67.65, 43.59, 5.41, 44.9, 41.5, 69.23, 
    14.29, 7.07, 6.05)), class = "data.frame", row.names = c(NA, 
-27L))

shapiro.test(mydata$percentage.of.heads.up.at.halfway)
length(percentage.of.heads.up.at.halfway)

mydatatrans<-asin(sqrt(mydata$percentage.of.heads.up.at.halfway))

最后一行会产生错误:

  

**警告消息:
  在asin(sqrt(mydata $ percentage.of.heads.up.at.hal.way))中:产生了NaN ****

我不确定如何更改/解释。


我也尝试过(作为其他答案中的建议帮助):

trans.arcsine<-asin(sign(mydata)*sqrt(abs(mydata)))
  

** Math.data.frame(mydata)中的错误:     数据帧中的非数字变量:从属大小,在怀孕中的任何内容。**

(对于任何在“畜群”栏中的孕妇,我都使用过孕妇且没有明确的证据-我应该将其设为1和0或类似的数字吗?)

trans.arcsine<-function(mydata){asin(sign(mydata)*sqrt(abs(mydata)))}
trans.arcsine(Herd.size~Any.pregnant.in.herd.)
  

**符号(mydata)中的错误:数学函数的非数字参数**

我正在尝试将牛群大小和妊娠与抬头的百分比进行比较-这应该是2种方差分析,但需要先转换数据。

2 个答案:

答案 0 :(得分:1)

您的列的范围是0到100,反正弦只能应用于0到1的数字。我假设这些百分比应从0到1的比例除以100,然后取平方根重新缩放的数字。

mydatatrans <- asin(sqrt(mydata$percentage.of.heads.up.at.halfway / 100))

有问题的mydata的结果:

> mydatatrans
 [1] 0.0000000 1.5707963 1.1071487 0.5235988 0.8570431 1.5707963 0.0000000 0.5235988
 [9] 0.7853982 1.5707963 1.5707963 0.9911566 1.5707963 0.3876579 0.5426768 1.5707963
[17] 0.7853982 0.6847192 0.9657860 0.7211213 0.2347441 0.7343093 0.6999833 0.9827854
[25] 0.3876579 0.2691319 0.2485177

编辑:

将数据帧名称从df更改为mydata

答案 1 :(得分:0)

您可以通过定义一个函数来使用户R. Schifini的decodeURI()更通用,然后为您计算反正弦值。

arcsin <- function(x, col = 3){
  scaled <- x[[col]]/diff(range(x[[col]]))
  asin(sqrt(scaled))
}

arcsin(mydata)
arcsin(mydata, 'percentage.of.heads.up.at.halfway')

注意:

  • col = 3是默认的输入列。
  • 如果在参数col中传递列名,则该列名必须是字符串,这意味着它必须像第二个用法示例中一样被引用。
  • 缩放比例使用diff,因此不取决于输入向量的特定范围。