我需要对数据进行反正弦变换,但是由于我从未做过此事,因此我不确定所使用的代码是否正确,因此我不知道如何解决错误它们会发生。
我的代码(使用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种方差分析,但需要先转换数据。
答案 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
,因此不取决于输入向量的特定范围。