0

R 新手,我有两个数据集——它们具有相同的 x 轴值,但 y 轴不同。

我试图找出两者之间的相关性。当我使用 Rabline通过散点图绘制 s 时,它给了我两条最佳拟合线,这似乎使一个数据集高于另一个数据集——但我真的很想知道这些之间的 p 值两个数据集就知道效果了。

查找后,似乎我应该使用t.test- 但我不确定如何让它们相互对抗。

例如,如果我运行:

t.test(t1$xaxis,t1$yaxis1)
t.test(t2$xaxis,t2$yaxis2)

它为我提供了 x 和 y 的正确方法(t1:16.84、88.58 和 t2:14.79、86.14)——但对于其余部分,我不确定:

t1:t = -43.8061,df = 105.994,p 值 < 2.2e-16

t2:t = -60.1593,df = 232.742,p 值 < 2.2e-16

显然,给出的 p 值是 (a) 微观的,并且 (b) 我不知道如何让它告诉我数据集之间的关系——而不是单独的。

非常感谢任何帮助 - 谢谢!

4

4 回答 4

2

既然你要求它,这就是我理解你的问题的方式。

您有两组对应于相同 x 值的 y 值。这里我假设 y 和 x 之间的关系是线性的。如果不是,您可以转换变量,使用非线性模型,加法模型,...

首先让我们模拟一些数据,因为您没有提供任何数据:

set.seed(42)
x <- 1:20
y1 <- 2.5 + 3 * x +rnorm(20)
y2 <- 4 + 2.5 * x +rnorm(20)

plot(y1~x, col="blue", ylab="y")
points(y2~x, col="red")
legend("topleft", legend=c("y1", "y2"), col=c("blue", "red"), pch=1)

在此处输入图像描述

现在,我们想知道这两个样本是否不同。我们可以通过拟合模型来发现:

DF <- cbind(stack(cbind.data.frame(y1, y2)), x)
names(DF) <- c("y", "group", "x")

fit <- lm(y~x*group, data=DF)
summary(fit)

Call:
lm(formula = y ~ x * group, data = DF)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.2585 -0.4603 -0.1899  0.9008  2.2127 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.51769    0.55148   6.379 2.17e-07 ***
x            2.92136    0.04604  63.457  < 2e-16 ***
groupy2      0.67218    0.77991   0.862    0.394    
x:groupy2   -0.46525    0.06511  -7.146 2.11e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.187 on 36 degrees of freedom
Multiple R-squared:  0.9949,    Adjusted R-squared:  0.9945 
F-statistic:  2333 on 3 and 36 DF,  p-value: < 2.2e-16

截距没有显着差异,但斜率有显着差异。如果group效果显着,我们可以通过与不考虑的模型进行比较来进行最佳测试group

fit0 <- lm(y~x, data=DF)
anova(fit0, fit)

Analysis of Variance Table

Model 1: y ~ x
Model 2: y ~ x * group
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
1     38 300.196                                  
2     36  50.738  2    249.46 88.498 1.267e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如您所见,样本是不同的。

于 2014-03-27T08:04:50.293 回答
1

您是否考虑过基于 x 轴合并数据集,以便您的数据结构如下:

X Y1 Y2

然后你可以找到你想要的任何列之间的相关性。

于 2014-03-26T02:57:47.107 回答
1

从您上面的评论来看,您似乎是在对均值进行 2 个样本测试之后。这就是你所追求的吗?如果是这样的话,

set.seed(1)
y1 = rnorm(100)
y2 = rnorm(120, mean=0.1)

results = t.test(y1,y2)
results$p.value
于 2014-03-26T03:14:04.767 回答
1

您可以使用该函数轻松找到变量之间的相关性cor。在这种情况下,我先使用数据框,然后使用矩阵。我们可以很容易地看到变量之间关系的强度。

> d <- data.frame(y1 = runif(10), y2 = rnorm(10), y3 = rexp(10))
> cor(d)
##            y1         y2         y3
## y1  1.0000000 -0.3319495 -0.4013154
## y2 -0.3319495  1.0000000  0.1370312
## y3 -0.4013154  0.1370312  1.0000000

使用矩阵,

> m <- matrix(c(runif(10), rnorm(10), rexp(10)), 10, 3)
> cor(m)
##            [,1]       [,2]      [,3]
## [1,]  1.0000000 -0.1971826 0.3622307
## [2,] -0.1971826  1.0000000 0.4973368
## [3,]  0.3622307  0.4973368 1.0000000

请查看example(cor)更多。

于 2014-03-26T03:17:36.497 回答