2017-02-20 12 views
1

최소 제곱 평균의 동작을 이해하는 데 문제가 있습니다. 아래는 임의의 데이터 세트를 사용하여 내 문제를 설명하는 장난감의 예입니다. 시나리오이있다 :이 1999 년과 2015 년 여기최소 제곱 평균 의미

# Number of observations in data set 
n.obs <- 1000 

# Create dummy data set 
df.tst <- data.frame(density = runif(n.obs, 0, 1), 
       year = as.factor(round(runif(n.obs, 1999, 2015))), 
       season = sample(c("Fall", "Spring"), n.obs, replace= TRUE), 
       station = sample(paste("Stat", 1:10), n.obs, replace= TRUE)) 

사이 어느 가을 또는 봄 메트릭이라고 밀도 샘플링 10 개 방송국이고, I는 의도적 고르지 데이터 세트를 나타 내기 위해 임의로 샘플링을 할당했다. 데이터 세트가 누덕 누덕 기근이기 때문에 최소한의 제곱 평균을 사용하여 샘플링 편차의 영향을 피하면서 한 해와 한 해 동안 밀도를 추정 할 수 있습니다.

# Fit linear model to data 
fitted.model <- lm(density ~ year + season + station, data=df.tst) 

# Calculate least square means 
seasonal.model <- summary(lsmeans(fitted.model, c("year", "season"))) 

비교하려면 결과는 내가 표준 편차에 의해 특정 연도/시즌 뺀 평균 모든 년 (중심 값)과 정규화 된 값입니다 "이상"전화 메트릭을 만들 수 있습니다. 이것은 2005 년 봄이 다른 봄 관측과 얼마나 다른지에 대한 표준화 된 측정 기준을 제공한다는 아이디어입니다. 그럼 ...

# Anomaly for spring 
seasonal.model %>% 
    filter(season == "Spring") %>% 
    mutate(anom = (lsmean - mean(lsmean))/sd(lsmean)) 

어느 쪽이 좋습니까. 내가 이해하지 못하는 것은 왜 내가 매 시즌마다 이것을 할 때, 나는 같은 대답을 얻는다. 예를 들어 ...

# Anomaly for fall 
seasonal.model %>% 
    filter(season == "Fall") %>% 
    mutate(anom = (lsmean - mean(lsmean))/sd(lsmean)) 

이 줄,

year season lsmean   SE df lower.CL upper.CL   anom 
1 1999 Spring 0.5966423 0.05242108 973 0.4937709 0.6995137 1.879970679 
2 2000 Spring 0.4510249 0.03717688 973 0.3780688 0.5239810 -1.617190892 
3 2001 Spring 0.4683691 0.03713725 973 0.3954908 0.5412474 -1.200649943 
4 2002 Spring 0.4451014 0.03730148 973 0.3719008 0.5183020 -1.759450098 
5 2003 Spring 0.5035975 0.03881258 973 0.4274315 0.5797635 -0.354600778 
6 2004 Spring 0.5263538 0.03505567 973 0.4575604 0.5951472 0.191916022 
7 2005 Spring 0.5553849 0.03703036 973 0.4827163 0.6280535 0.889129265 
8 2006 Spring 0.5182714 0.03626301 973 0.4471087 0.5894341 -0.002191364 
9 2007 Spring 0.4765210 0.04097960 973 0.3961024 0.5569395 -1.004874623 
10 2008 Spring 0.5465877 0.04483499 973 0.4586033 0.6345721 0.677854169 
11 2009 Spring 0.4959347 0.03185768 973 0.4334170 0.5584523 -0.538633207 
12 2010 Spring 0.5359122 0.03934735 973 0.4586968 0.6131276 0.421471255 
13 2011 Spring 0.5533493 0.03461044 973 0.4854296 0.6212690 0.840241309 
14 2012 Spring 0.5465454 0.03697864 973 0.4739783 0.6191124 0.676838641 
15 2013 Spring 0.5594985 0.03436268 973 0.4920650 0.6269320 0.987923047 
16 2014 Spring 0.5320895 0.03825361 973 0.4570205 0.6071586 0.329666086 
17 2015 Spring 0.5009818 0.04771979 973 0.4073363 0.5946274 -0.417419568 

year season lsmean   SE df lower.CL upper.CL   anom 
1 1999 Fall 0.5683228 0.05226823 973 0.4657514 0.6708943 1.879970679 
2 2000 Fall 0.4227054 0.03638423 973 0.3513048 0.4941060 -1.617190892 
3 2001 Fall 0.4400496 0.03752816 973 0.3664042 0.5136951 -1.200649943 
4 2002 Fall 0.4167819 0.03741172 973 0.3433649 0.4901989 -1.759450098 
5 2003 Fall 0.4752781 0.04039258 973 0.3960115 0.5545447 -0.354600778 
6 2004 Fall 0.4980343 0.03492573 973 0.4294959 0.5665728 0.191916022 
7 2005 Fall 0.5270654 0.03591814 973 0.4565795 0.5975514 0.889129265 
8 2006 Fall 0.4899519 0.03618696 973 0.4189385 0.5609654 -0.002191364 
9 2007 Fall 0.4482015 0.04026627 973 0.3691828 0.5272202 -1.004874623 
10 2008 Fall 0.5182682 0.04545050 973 0.4290759 0.6074605 0.677854169 
11 2009 Fall 0.4676152 0.064 973 0.4046207 0.5306096 -0.538633207 
12 2010 Fall 0.5075927 0.03880628 973 0.4314391 0.5837464 0.421471255 
13 2011 Fall 0.5250298 0.03440547 973 0.4575123 0.5925473 0.840241309 
14 2012 Fall 0.5182259 0.03755452 973 0.4445287 0.5919231 0.676838641 
15 2013 Fall 0.5311791 0.03463023 973 0.4632205 0.5991376 0.987923047 
16 2014 Fall 0.5037701 0.03826525 973 0.4286782 0.5788620 0.329666086 
17 2015 Fall 0.4726624 0.04793952 973 0.3785856 0.5667391 -0.417419568 

은 내가 뭔가 아주 간단한 오해하고 있지만, 왜 튀어 이상 정확하게 일치 넘어 져야 기대 실제로는 최소 제곱 평균이 실제로 다르더라도 주어진 해 동안. 모든 통찰력은 높이 평가 될 것입니다 ...

편집 : bethanyP에 대한 응답으로. 이것은 다른 실행에서이므로 데이터가 무작위이므로 스미지가 다를 수 있습니다.

Classes ‘summary.ref.grid’ and 'data.frame': 34 obs. of 7 variables: 
$ year : Factor w/ 17 levels "1999","2000",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ season : Factor w/ 2 levels "Fall","Spring": 1 1 1 1 1 1 1 1 1 1 ... 
$ lsmean : num 0.484 0.461 0.441 0.495 0.575 ... 
$ SE  : num 0.046 0.0361 0.0355 0.0408 0.0347 ... 
$ df  : num 973 973 973 973 973 973 973 973 973 973 ... 
$ lower.CL: num 0.394 0.39 0.371 0.415 0.507 ... 
$ upper.CL: num 0.574 0.532 0.511 0.575 0.643 ... 
- attr(*, "estName")= chr "lsmean" 
- attr(*, "clNames")= chr "lower.CL" "upper.CL" 
- attr(*, "pri.vars")= chr "year" "season" 
- attr(*, "mesg")= chr "Results are averaged over the levels of: station" "Confidence level used: 0.95" 
+0

str (seasonal.model)을 실행하고 결과를 여기에 표시 할 수 있습니까? 나는 너와 함께 가야 할 곳으로 갈 수 있다고 생각해. – sconfluentus

+0

@bethanyP 지금 원래 질문에이 정보를 추가했습니다. – Lyngbakr

답변

0

나는 당신이 그것을 문자열을 준 때문에 필터링되지 않을 수 있습니다 생각이 시도하지만, 계절 요인이다 : 그 그렇다면, 이것은 당신이 설정할 수 있습니다 작동합니다

seasonal.model %>% 
    filter(season == as.factor("Spring")) %>% 
    mutate(anom = (lsmean - mean(lsmean))/sd(lsmean)) 

: 를 spring = as.factor("Spring") 다음 spring을 파이프에 공급하십시오.

대신보십시오 : 당신이 첨가제 모델을 장착하기 때문에 seasonal.model %>% group_by(year, season) %>% summarize(anom = (lsmean - mean(lsmean))/sd(lsmean))

+0

답장을 보내 주셔서 감사합니다, bethanyP. 귀하의 코드를 실행할 때 다음과 같은 오류가 발생합니다 : filter_impl (.데이터, 도트) : 요소의 레벨 세트가 다릅니다. seasonal.model %> % 필터 (시즌 == "봄")를 실행하면 올바르게 필터링됩니다 (즉, 봄 값만 제공). – Lyngbakr

+0

그래도 가을이 아직 문자열이기 때문에 ... 그 말이 맞습니다. – sconfluentus

+0

코드의 두 번째 청크가 어떤 이유로 든 NaN을 생성합니다. – Lyngbakr

1

이유는, 당신은 올해의 효과는 각 시즌에서 동일 가정 암시. 다시 말해, 예측 간의 관계는 매 시즌 동일합니다.

최소 제곱 평균은 모델 예측만을 기반으로하므로 모델이 중요합니다! 상호 작용이있는 모델에 적합하면 매 시즌마다 다른 예외가 발생합니다.

+0

@lyngbakr이 답변을 보셨나요? – rvl