2016-08-08 2 views
2

Основываясь на ответах моего question, я должен получать одинаковые значения перехвата и коэффициент регрессии для менее двух моделей. Но они не то же самое. Что происходит?линейная регрессия r сравнение нескольких наблюдений против одиночного наблюдения

что-то не так с моим кодом? Или неправильный исходный ответ?

#linear regression average qty per price point vs all quantities 

x1=rnorm(30,20,1);y1=rep(3,30) 
x2=rnorm(30,17,1.5);y2=rep(4,30) 
x3=rnorm(30,12,2);y3=rep(4.5,30) 
x4=rnorm(30,6,3);y4=rep(5.5,30) 
x=c(x1,x2,x3,x4) 
y=c(y1,y2,y3,y4) 
plot(y,x) 
cor(y,x) 
fit=lm(x~y) 
attributes(fit) 
summary(fit) 

xdum=c(20,17,12,6) 
ydum=c(3,4,4.5,5.5) 
plot(ydum,xdum) 
cor(ydum,xdum) 
fit1=lm(xdum~ydum) 
attributes(fit1) 
summary(fit1) 


> summary(fit) 

Call: 
lm(formula = x ~ y) 

Residuals: 
    Min  1Q Median  3Q  Max 
-8.3572 -1.6069 -0.1007 2.0222 6.4904 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 40.0952  1.1570 34.65 <2e-16 *** 
y   -6.1932  0.2663 -23.25 <2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 2.63 on 118 degrees of freedom 
Multiple R-squared: 0.8209, Adjusted R-squared: 0.8194 
F-statistic: 540.8 on 1 and 118 DF, p-value: < 2.2e-16 

> summary(fit1) 

Call: 
lm(formula = xdum ~ ydum) 

Residuals: 
     1  2  3  4 
-0.9615 1.8077 -0.3077 -0.5385 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|) 
(Intercept) 38.2692  3.6456 10.497 0.00895 ** 
ydum   -5.7692  0.8391 -6.875 0.02051 * 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 1.513 on 2 degrees of freedom 
Multiple R-squared: 0.9594, Adjusted R-squared: 0.9391 
F-statistic: 47.27 on 1 and 2 DF, p-value: 0.02051 
+1

Вы используете случайную ничью из нормального дистрибутива - 'rnorm' - ваши результаты всегда будут нечеткими по сравнению с отличным заданным значением. Посмотрите на 'mean (x1)' и 'mean (x2)' – thelatemail

ответ

4

Вы не calcuting xdum и ydum в сопоставимых моды, потому что rnorm только приблизительно среднее значение, указанное, особенно, когда вы только дискретизации 30 случаев. Это легко установить:

coef(fit) 
#(Intercept)   y 
# 39.618472 -6.128739 

xdum <- c(mean(x1),mean(x2),mean(x3),mean(x4)) 
ydum <- c(mean(y1),mean(y2),mean(y3),mean(y4)) 
coef(lm(xdum~ydum)) 
#(Intercept)  ydum 
# 39.618472 -6.128739 
+0

Или 'coef (lm (sapply (mget (paste0 (" x ", 1: 4)), среднее значение) ~ sapply (mget (paste0 (" y " , 1: 4)), среднее значение))) ' – akrun

2

В теории они должны быть такими же, если (и только если) среднее бывшей модели равна точке в последней модели.

Это не относится к вашим моделям, поэтому результаты немного отличаются. Например, среднее x1:

x1=rnorm(30,20,1) 
mean(x1) 

20,08353

, где версия точка 20.

Есть подобные маленькие отличия от других ваших rnorm образцов:

> mean(x2) 
[1] 17.0451 
> mean(x3) 
[1] 11.72307 
> mean(x4) 
[1] 5.913274 

Не то чтобы это действительно важно, но только FYI стандартная номенклатура заключается в том, что Y - зависимая переменная, а X - независимая переменная, которую вы отменили. Разумеется, нет никакой разницы, но просто так вы знаете.

Смежные вопросы