Chapter 3 Analysis of Variance and Analysis of Covariance
3.1 The bonding
data: A Designed Dental Experiment
The bonding
data describe a designed experiment into the properties of four different resin types (resin
= A, B, C, D) and two different curing light sources (light
= Halogen, LED) as they relate to the resulting bonding strength (measured in MPa5) on the surface of teeth. The source is Kim (2014).
The experiment involved making measurements of bonding strength under a total of 80 experimental setups, or runs, with 10 runs completed at each of the eight combinations of a light source and a resin type. The data are gathered in the bonding.csv
file.
bonding
# A tibble: 80 x 4
run_ID light resin strength
<fct> <fct> <fct> <dbl>
1 R101 LED B 12.8
2 R102 Halogen B 22.2
3 R103 Halogen B 24.6
4 R104 LED A 17.0
5 R105 LED C 32.2
6 R106 Halogen B 27.1
7 R107 LED A 23.4
8 R108 Halogen A 23.5
9 R109 Halogen D 37.3
10 R110 Halogen A 19.7
# ... with 70 more rows
3.2 A One-Factor Analysis of Variance
Suppose we are interested in the distribution of the strength
values for the four different types of resin
.
bonding %>% group_by(resin) %>% summarize(n = n(), mean(strength), median(strength))
# A tibble: 4 x 4
resin n `mean(strength)` `median(strength)`
<fct> <int> <dbl> <dbl>
1 A 20 18.4 18.0
2 B 20 22.2 22.7
3 C 20 25.2 25.7
4 D 20 32.1 35.3
I’d begin serious work with a plot.
3.2.1 Look at the Data!
ggplot(bonding, aes(x = resin, y = strength)) +
geom_boxplot()
Another good plot for this purpose is a ridgeline plot.
ggplot(bonding, aes(x = strength, y = resin, fill = resin)) +
geom_density_ridges2() +
guides(fill = FALSE)
Picking joint bandwidth of 3.09
3.2.2 Table of Summary Statistics
With the small size of this experiment (n = 20 for each resin
type), graphical summaries may not perform as well as they often do. We’ll also produce a quick table of summary statistics for strength
within each resin
type, with the skim()
function.
bonding %>% group_by(resin) %>% skim(strength)
Skim summary statistics
n obs: 80
n variables: 4
group variables: resin
Variable type: numeric
resin variable missing complete n mean sd p0 p25 median p75
A strength 0 20 20 18.41 4.81 9.3 15.73 17.95 20.4
B strength 0 20 20 22.23 6.75 11.8 18.45 22.7 25.75
C strength 0 20 20 25.16 6.33 14.5 20.65 25.7 30.7
D strength 0 20 20 32.08 9.74 17.3 21.82 35.3 40.15
p100
28
35.2
34.5
47.2
Since the means and medians are fairly close, and the distributions (with the possible exception of resin
D) are reasonably well approximated by the Normal, I’ll fit an ANOVA model.
anova(lm(strength ~ resin, data = bonding))
Analysis of Variance Table
Response: strength
Df Sum Sq Mean Sq F value Pr(>F)
resin 3 1999.7 666.57 13.107 5.52e-07 ***
Residuals 76 3865.2 50.86
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
It appears that the resin
types have a significant association with mean strength
of the bonds. Can we identify which resin
types have generally higher or lower strength
?
TukeyHSD(aov(lm(strength ~ resin, data = bonding)))
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = lm(strength ~ resin, data = bonding))
$resin
diff lwr upr p adj
B-A 3.815 -2.1088676 9.738868 0.3351635
C-A 6.740 0.8161324 12.663868 0.0193344
D-A 13.660 7.7361324 19.583868 0.0000003
C-B 2.925 -2.9988676 8.848868 0.5676635
D-B 9.845 3.9211324 15.768868 0.0002276
D-C 6.920 0.9961324 12.843868 0.0154615
Based on these confidence intervals (which have a family-wise 95% confidence level), we see that D is associated with significantly larger mean strength
than A or B or C, and that C is also associated with significantly larger mean strength
than A. This may be easier to see in a plot of these confidence intervals.
plot(TukeyHSD(aov(lm(strength ~ resin, data = bonding))))
3.3 A Two-Way ANOVA: Looking at Two Factors
Now, we’ll now add consideration of the light
source into our study. We can look at the distribution of the strength
values at the combinations of both light
and resin
, with a plot like this one…
ggplot(bonding, aes(x = resin, y = strength, color = light)) +
geom_point(size = 2, alpha = 0.5) +
facet_wrap(~ light) +
guides(color = FALSE) +
scale_color_manual(values = c("purple", "darkorange")) +
theme_bw()
3.4 A Means Plot (with standard deviations) to check for interaction
Sometimes, we’ll instead look at a plot simply of the means (and, often, the standard deviations) of strength
at each combination of light
and resin
. We’ll start by building up a data set with the summaries we want to plot.
bond.sum <- bonding %>%
group_by(resin, light) %>%
summarize(mean.str = mean(strength), sd.str = sd(strength))
bond.sum
# A tibble: 8 x 4
# Groups: resin [?]
resin light mean.str sd.str
<fct> <fct> <dbl> <dbl>
1 A Halogen 17.8 4.02
2 A LED 19.1 5.63
3 B Halogen 19.9 5.62
4 B LED 24.6 7.25
5 C Halogen 22.5 6.19
6 C LED 27.8 5.56
7 D Halogen 40.3 4.15
8 D LED 23.8 5.70
Now, we’ll use this new data set to plot the means and standard deviations of strength
at each combination of resin
and light
.
## The error bars will overlap unless we adjust the position.
pd <- position_dodge(0.2) # move them .1 to the left and right
ggplot(bond.sum, aes(x = resin, y = mean.str, col = light)) +
geom_errorbar(aes(ymin = mean.str - sd.str,
ymax = mean.str + sd.str),
width = 0.2, position = pd) +
geom_point(size = 2, position = pd) +
geom_line(aes(group = light), position = pd) +
scale_color_manual(values = c("purple", "darkorange")) +
theme_bw() +
labs(y = "Bonding Strength (MPa)", x = "Resin Type",
title = "Observed Means (+/- SD) of Bonding Strength")
Is there evidence of a meaningful interaction between the resin type and the light
source on the bonding strength in this plot?
- Sure. A meaningful interaction just means that the strength associated with different
resin
types depends on thelight
source.- With LED
light
, it appears thatresin
C leads to the strongest bonding strength. - With Halogen
light
, though, it seems thatresin
D is substantially stronger.
- With LED
- Note that the lines we see here connecting the
light
sources aren’t in parallel (as they would be if we had zero interaction betweenresin
andlight
), but rather, they cross.
3.4.1 Skimming the data after grouping by resin
and light
We might want to look at a numerical summary of the strengths
within these groups, too.
bonding %>%
group_by(resin, light) %>%
skim(strength)
Skim summary statistics
n obs: 80
n variables: 4
group variables: resin, light
Variable type: numeric
resin light variable missing complete n mean sd p0 p25 median
A Halogen strength 0 10 10 17.77 4.02 9.3 15.75 18.35
A LED strength 0 10 10 19.06 5.63 11.6 16.18 17.8
B Halogen strength 0 10 10 19.9 5.62 11.8 14.78 21.75
B LED strength 0 10 10 24.56 7.25 12.8 20.45 24.45
C Halogen strength 0 10 10 22.54 6.19 14.5 18.85 21.3
C LED strength 0 10 10 27.77 5.56 16.5 24.7 28.45
D Halogen strength 0 10 10 40.3 4.15 35.5 36.55 40.4
D LED strength 0 10 10 23.85 5.7 17.3 19.75 21.45
p75 p100
20 23.5
22.5 28
24.12 27.1
27.87 35.2
25.8 33
31.83 34.5
43.62 47.2
28.2 35.1
3.5 Fitting the Two-Way ANOVA model with Interaction
c3_m1 <- lm(strength ~ resin * light, data = bonding)
summary(c3_m1)
Call:
lm(formula = strength ~ resin * light, data = bonding)
Residuals:
Min 1Q Median 3Q Max
-11.760 -3.663 -0.320 3.697 11.250
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 17.770 1.771 10.033 2.57e-15 ***
resinB 2.130 2.505 0.850 0.3979
resinC 4.770 2.505 1.904 0.0609 .
resinD 22.530 2.505 8.995 2.13e-13 ***
lightLED 1.290 2.505 0.515 0.6081
resinB:lightLED 3.370 3.542 0.951 0.3446
resinC:lightLED 3.940 3.542 1.112 0.2697
resinD:lightLED -17.740 3.542 -5.008 3.78e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 5.601 on 72 degrees of freedom
Multiple R-squared: 0.6149, Adjusted R-squared: 0.5775
F-statistic: 16.42 on 7 and 72 DF, p-value: 9.801e-13
3.5.1 The ANOVA table for our model
In a two-way ANOVA model, we begin by assessing the interaction term. If it’s important, then our best model is the model including the interaction. If it’s not important, we will often move on to consider a new model, fit without an interaction.
The ANOVA table is especially helpful in this case, because it lets us look specifically at the interaction effect.
anova(c3_m1)
Analysis of Variance Table
Response: strength
Df Sum Sq Mean Sq F value Pr(>F)
resin 3 1999.72 666.57 21.2499 5.792e-10 ***
light 1 34.72 34.72 1.1067 0.2963
resin:light 3 1571.96 523.99 16.7043 2.457e-08 ***
Residuals 72 2258.52 31.37
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
3.5.2 Is the interaction important?
In this case, the interaction:
- is evident in the means plot, and
- is highly statistically significant, and
- accounts for a sizeable fraction (27%) of the overall variation
\[ \eta^2_{interaction} = \frac{\mbox{SS(resin:light)}}{SS(Total)} = \frac{1571.96}{1999.72 + 34.72 + 1571.96 + 2258.52} = 0.268 \]
If the interaction were either large or significant we would be inclined to keep it in the model. In this case, it’s both, so there’s no real reason to remove it.
3.5.3 Interpreting the Interaction
Recall the model equation, which is:
c3_m1
Call:
lm(formula = strength ~ resin * light, data = bonding)
Coefficients:
(Intercept) resinB resinC resinD
17.77 2.13 4.77 22.53
lightLED resinB:lightLED resinC:lightLED resinD:lightLED
1.29 3.37 3.94 -17.74
so we have:
\[ strength = 17.77 + 2.13 resinB + 4.77 resinC + 22.53 resinD \\ + 1.29 lightLED + 3.37 resinB*lightLED \\ + 3.94 resinC*lightLED - 17.74 resinD*lightLED \]
So, if light
= Halogen, our equation is:
\[ strength = 17.77 + 2.13 resinB + 4.77 resinC + 22.53 resinD \]
And if light
= LED, our equation is:
\[ strength = 19.06 + 5.50 resinB + 8.71 resinC + 4.79 resinD \]
Note that both the intercept and the slopes change as a result of the interaction. The model yields a different prediction for every possible combination of a resin
type and a light
source.
3.6 Comparing Individual Combinations of resin
and light
To make comparisons between individual combinations of a resin
type and a light
source, using something like Tukey’s HSD approach for multiple comparisons, we first refit the model using the aov
structure, rather than lm
.
c3m1_aov <- aov(strength ~ resin * light, data = bonding)
summary(c3m1_aov)
Df Sum Sq Mean Sq F value Pr(>F)
resin 3 1999.7 666.6 21.250 5.79e-10 ***
light 1 34.7 34.7 1.107 0.296
resin:light 3 1572.0 524.0 16.704 2.46e-08 ***
Residuals 72 2258.5 31.4
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
And now, we can obtain Tukey HSD comparisons (which will maintain an overall 95% family-wise confidence level) across the resin
types, the light
sources, and the combinations, with the TukeyHSD command. This approach is only completely appropriate if these comparisons are pre-planned, and if the design is balanced (as this is, with the same sample size for each combination of a light
source and resin
type.)
TukeyHSD(c3m1_aov)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = strength ~ resin * light, data = bonding)
$resin
diff lwr upr p adj
B-A 3.815 -0.843129 8.473129 0.1461960
C-A 6.740 2.081871 11.398129 0.0016436
D-A 13.660 9.001871 18.318129 0.0000000
C-B 2.925 -1.733129 7.583129 0.3568373
D-B 9.845 5.186871 14.503129 0.0000026
D-C 6.920 2.261871 11.578129 0.0011731
$light
diff lwr upr p adj
LED-Halogen -1.3175 -3.814042 1.179042 0.2963128
$`resin:light`
diff lwr upr p adj
B:Halogen-A:Halogen 2.13 -5.68928258 9.949283 0.9893515
C:Halogen-A:Halogen 4.77 -3.04928258 12.589283 0.5525230
D:Halogen-A:Halogen 22.53 14.71071742 30.349283 0.0000000
A:LED-A:Halogen 1.29 -6.52928258 9.109283 0.9995485
B:LED-A:Halogen 6.79 -1.02928258 14.609283 0.1361092
C:LED-A:Halogen 10.00 2.18071742 17.819283 0.0037074
D:LED-A:Halogen 6.08 -1.73928258 13.899283 0.2443200
C:Halogen-B:Halogen 2.64 -5.17928258 10.459283 0.9640100
D:Halogen-B:Halogen 20.40 12.58071742 28.219283 0.0000000
A:LED-B:Halogen -0.84 -8.65928258 6.979283 0.9999747
B:LED-B:Halogen 4.66 -3.15928258 12.479283 0.5818695
C:LED-B:Halogen 7.87 0.05071742 15.689283 0.0473914
D:LED-B:Halogen 3.95 -3.86928258 11.769283 0.7621860
D:Halogen-C:Halogen 17.76 9.94071742 25.579283 0.0000000
A:LED-C:Halogen -3.48 -11.29928258 4.339283 0.8591455
B:LED-C:Halogen 2.02 -5.79928258 9.839283 0.9922412
C:LED-C:Halogen 5.23 -2.58928258 13.049283 0.4323859
D:LED-C:Halogen 1.31 -6.50928258 9.129283 0.9995004
A:LED-D:Halogen -21.24 -29.05928258 -13.420717 0.0000000
B:LED-D:Halogen -15.74 -23.55928258 -7.920717 0.0000006
C:LED-D:Halogen -12.53 -20.34928258 -4.710717 0.0001014
D:LED-D:Halogen -16.45 -24.26928258 -8.630717 0.0000002
B:LED-A:LED 5.50 -2.31928258 13.319283 0.3665620
C:LED-A:LED 8.71 0.89071742 16.529283 0.0185285
D:LED-A:LED 4.79 -3.02928258 12.609283 0.5471915
C:LED-B:LED 3.21 -4.60928258 11.029283 0.9027236
D:LED-B:LED -0.71 -8.52928258 7.109283 0.9999920
D:LED-C:LED -3.92 -11.73928258 3.899283 0.7690762
One conclusion from this is that the combination of D and Halogen is significantly stronger than each of the other seven combinations.
3.7 The bonding
model without Interaction
It seems incorrect in this situation to fit a model without the interaction term, but we’ll do so just so you can see what’s involved.
c3_m2 <- lm(strength ~ resin + light, data = bonding)
summary(c3_m2)
Call:
lm(formula = strength ~ resin + light, data = bonding)
Residuals:
Min 1Q Median 3Q Max
-14.1163 -4.9531 0.1187 4.4613 14.4663
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 19.074 1.787 10.676 < 2e-16 ***
resinB 3.815 2.260 1.688 0.09555 .
resinC 6.740 2.260 2.982 0.00386 **
resinD 13.660 2.260 6.044 5.39e-08 ***
lightLED -1.317 1.598 -0.824 0.41229
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 7.147 on 75 degrees of freedom
Multiple R-squared: 0.3469, Adjusted R-squared: 0.312
F-statistic: 9.958 on 4 and 75 DF, p-value: 1.616e-06
In the no-interaction model, if light
= Halogen, our equation is:
\[ strength = 19.07 + 3.82 resinB + 6.74 resinC + 13.66 resinD \]
And if light
= LED, our equation is:
\[ strength = 17.75 + 3.82 resinB + 6.74 resinC + 13.66 resinD \]
So, in the no-interaction model, only the intercept changes.
anova(c3_m2)
Analysis of Variance Table
Response: strength
Df Sum Sq Mean Sq F value Pr(>F)
resin 3 1999.7 666.57 13.0514 6.036e-07 ***
light 1 34.7 34.72 0.6797 0.4123
Residuals 75 3830.5 51.07
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
And, it appears, if we ignore the interaction, then resin
type has a significant impact on strength
but light
source doesn’t. This is a bit clearer, when we look at boxplots of the separated light
and resin
groups.
p1 <- ggplot(bonding, aes(x = light, y = strength)) +
geom_boxplot()
p2 <- ggplot(bonding, aes(x = resin, y = strength)) +
geom_boxplot()
gridExtra::grid.arrange(p1, p2, nrow = 1)
3.8 cortisol
: A Hypothetical Clinical Trial
156 adults who complained of problems with a high-stress lifestyle were enrolled in a hypothetical clinical trial of the effectiveness of a behavioral intervention designed to help reduce stress levels, as measured by salivary cortisol.
The subjects were randomly assigned to one of three intervention groups (usual care, low dose, and high dose.) The “low dose” subjects received a one-week intervention with a follow-up at week 5. The “high dose” subjects received a more intensive three-week intervention, with follow up at week 5.
Since cortisol levels rise and fall with circadian rhythms, the cortisol measurements were taken just after rising for all subjects. These measurements were taken at baseline, and again at five weeks. The difference (baseline - week 5) in cortisol level (in micrograms / l) serves as the primary outcome.
3.8.1 Codebook and Raw Data for cortisol
The data are gathered in the cortisol
data set. Included are:
| Variable | Description |
|---|---|
subject |
subject identification code |
interv |
intervention group (UC = usual care, Low, High) |
waist |
waist circumference at baseline (in inches) |
sex |
male or female |
cort.1 |
salivary cortisol level (microg/l) week 1 |
cort.5 |
salivary cortisol level (microg/l) week 5 |
cortisol
# A tibble: 156 x 6
subject interv waist sex cort.1 cort.5
<int> <fct> <dbl> <fct> <dbl> <dbl>
1 1001 UC 48.3 M 13.4 13.3
2 1002 Low 58.3 M 17.8 16.6
3 1003 High 43.0 M 14.4 12.7
4 1004 Low 44.9 M 9.00 9.80
5 1005 High 46.1 M 14.2 14.2
6 1006 UC 41.3 M 14.8 15.1
7 1007 Low 51.0 F 13.7 16.0
8 1008 UC 42.0 F 17.3 18.7
9 1009 Low 24.7 F 15.3 15.8
10 1010 Low 59.4 M 12.4 11.7
# ... with 146 more rows
3.9 Creating a factor combining sex and waist
Next, we’ll put the waist
and sex
data in the cortisol
example together. We want to build a second categorical variable (called fat_est
) combining this information, to indicate “healthy” vs. “unhealthy” levels of fat around the waist.
- Male subjects whose waist circumference is 40 inches or more, and
- Female subjects whose waist circumference is 35 inches or more, will fall in the “unhealthy” group.
cortisol <- cortisol %>%
mutate(
fat_est = factor(case_when(
sex == "M" & waist >= 40 ~ "unhealthy",
sex == "F" & waist >= 35 ~ "unhealthy",
TRUE ~ "healthy")),
cort_diff = cort.1 - cort.5)
summary(cortisol)
subject interv waist sex cort.1
Min. :1001 High:53 Min. :20.80 F:83 Min. : 6.000
1st Qu.:1040 Low :52 1st Qu.:33.27 M:73 1st Qu.: 9.675
Median :1078 UC :51 Median :40.35 Median :12.400
Mean :1078 Mean :40.42 Mean :12.686
3rd Qu.:1117 3rd Qu.:47.77 3rd Qu.:16.025
Max. :1156 Max. :59.90 Max. :19.000
cort.5 fat_est cort_diff
Min. : 4.2 healthy : 56 Min. :-2.3000
1st Qu.: 9.6 unhealthy:100 1st Qu.:-0.5000
Median :12.6 Median : 0.2000
Mean :12.4 Mean : 0.2821
3rd Qu.:15.7 3rd Qu.: 1.2000
Max. :19.7 Max. : 2.0000
3.10 A Means Plot for the cortisol
trial (with standard errors)
Again, we’ll start by building up a data set with the summaries we want to plot.
cort.sum <- cortisol %>%
group_by(interv, fat_est) %>%
summarize(mean.cort = mean(cort_diff),
se.cort = sd(cort_diff)/sqrt(n()))
cort.sum
# A tibble: 6 x 4
# Groups: interv [?]
interv fat_est mean.cort se.cort
<fct> <fct> <dbl> <dbl>
1 High healthy 0.695 0.217
2 High unhealthy 0.352 0.150
3 Low healthy 0.500 0.182
4 Low unhealthy 0.327 0.190
5 UC healthy 0.347 0.225
6 UC unhealthy -0.226 0.155
Now, we’ll use this new data set to plot the means and standard errors.
## The error bars will overlap unless we adjust the position.
pd <- position_dodge(0.2) # move them .1 to the left and right
ggplot(cort.sum, aes(x = interv, y = mean.cort, col = fat_est)) +
geom_errorbar(aes(ymin = mean.cort - se.cort,
ymax = mean.cort + se.cort),
width = 0.2, position = pd) +
geom_point(size = 2, position = pd) +
geom_line(aes(group = fat_est), position = pd) +
scale_color_manual(values = c("royalblue", "darkred")) +
theme_bw() +
labs(y = "Salivary Cortisol Level", x = "Intervention Group",
title = "Observed Means (+/- SE) of Salivary Cortisol")
3.11 A Two-Way ANOVA model for cortisol
with Interaction
c3_m3 <- lm(cort_diff ~ interv * fat_est, data = cortisol)
anova(c3_m3)
Analysis of Variance Table
Response: cort_diff
Df Sum Sq Mean Sq F value Pr(>F)
interv 2 7.847 3.9235 4.4698 0.01301 *
fat_est 1 4.614 4.6139 5.2564 0.02326 *
interv:fat_est 2 0.943 0.4715 0.5371 0.58554
Residuals 150 131.666 0.8778
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Does it seem like we need the interaction term in this case?
summary(c3_m3)
Call:
lm(formula = cort_diff ~ interv * fat_est, data = cortisol)
Residuals:
Min 1Q Median 3Q Max
-2.62727 -0.75702 0.08636 0.84848 2.12647
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.6950 0.2095 3.317 0.00114 **
intervLow -0.1950 0.3001 -0.650 0.51689
intervUC -0.3479 0.3091 -1.126 0.26206
fat_estunhealthy -0.3435 0.2655 -1.294 0.19774
intervLow:fat_estunhealthy 0.1708 0.3785 0.451 0.65256
intervUC:fat_estunhealthy -0.2300 0.3846 -0.598 0.55068
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.9369 on 150 degrees of freedom
Multiple R-squared: 0.0924, Adjusted R-squared: 0.06214
F-statistic: 3.054 on 5 and 150 DF, p-value: 0.01179
How do you reconcile the apparent difference in significance levels between this regression summary and the ANOVA table above?
3.12 A Two-Way ANOVA model for cortisol
without Interaction
3.12.1 The Graph
p1 <- ggplot(cortisol, aes(x = interv, y = cort_diff)) +
geom_boxplot()
p2 <- ggplot(cortisol, aes(x = fat_est, y = cort_diff)) +
geom_boxplot()
gridExtra::grid.arrange(p1, p2, nrow = 1)
3.12.2 The ANOVA Model
c3_m4 <- lm(cort_diff ~ interv + fat_est, data = cortisol)
anova(c3_m4)
Analysis of Variance Table
Response: cort_diff
Df Sum Sq Mean Sq F value Pr(>F)
interv 2 7.847 3.9235 4.4972 0.01266 *
fat_est 1 4.614 4.6139 5.2886 0.02283 *
Residuals 152 132.609 0.8724
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
How do these results compare to those we saw in the model with interaction?
3.12.3 The Regression Summary
summary(c3_m4)
Call:
lm(formula = cort_diff ~ interv + fat_est, data = cortisol)
Residuals:
Min 1Q Median 3Q Max
-2.55929 -0.74527 0.05457 0.86456 2.05489
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.70452 0.16093 4.378 2.22e-05 ***
intervLow -0.08645 0.18232 -0.474 0.63606
intervUC -0.50063 0.18334 -2.731 0.00707 **
fat_estunhealthy -0.35878 0.15601 -2.300 0.02283 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.934 on 152 degrees of freedom
Multiple R-squared: 0.0859, Adjusted R-squared: 0.06785
F-statistic: 4.761 on 3 and 152 DF, p-value: 0.00335
3.12.4 Tukey HSD Comparisons
Without the interaction term, we can make direct comparisons between levels of the intervention, and between levels of the fat_est
variable. This is probably best done here in a Tukey HSD comparison.
TukeyHSD(aov(cort_diff ~ interv + fat_est, data = cortisol))
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = cort_diff ~ interv + fat_est, data = cortisol)
$interv
diff lwr upr p adj
Low-High -0.09074746 -0.5222655 0.34077063 0.8724916
UC-High -0.51642619 -0.9500745 -0.08277793 0.0150150
UC-Low -0.42567873 -0.8613670 0.01000948 0.0570728
$fat_est
diff lwr upr p adj
unhealthy-healthy -0.3582443 -0.6662455 -0.05024305 0.0229266
What conclusions can we draw, at a 5% significance level?
3.13 An Emphysema Study: Analysis of Covariance
My source for this example is Riffenburgh (2006), section 18.4. Serum theophylline levels (in mg/dl) were measured in 16 patients with emphysema at baseline, then 5 days later (at the end of a course of antibiotics) and then at 10 days after baseline. Clinicians anticipate that the antibiotic will increase the theophylline level. The data are stored in the emphysema.csv
data file, and note that the age for patient 5 is not available.
3.13.1 Codebook
| Variable | Description |
|---|---|
patient |
ID code |
age |
patient’s age in years |
sex |
patient’s sex (F or M) |
st_base |
patient’s serum theophylline at baseline (mg/dl) |
st_day5 |
patient’s serum theophylline at day 5 (mg/dl) |
st_day10 |
patient’s serum theophylline at day 10 (mg/dl) |
We’re going to look at the change from baseline to day 5 as our outcome of interest, since the clinical expectation is that the antibiotic (azithromycin) will increase theophylline levels.
emphysema <- emphysema %>%
mutate(st_delta = st_day5 - st_base)
emphysema
# A tibble: 16 x 7
patient age sex st_base st_day5 st_day10 st_delta
<int> <int> <fct> <dbl> <dbl> <dbl> <dbl>
1 1 61 F 14.1 2.30 10.3 -11.8
2 2 70 F 7.20 5.40 7.30 - 1.80
3 3 65 M 14.2 11.9 11.3 - 2.30
4 4 65 M 10.3 10.7 13.8 0.400
5 5 NA M 9.90 10.7 11.7 0.800
6 6 76 M 5.20 6.80 4.20 1.60
7 7 72 M 10.4 14.6 14.1 4.20
8 8 69 F 10.5 7.20 5.40 - 3.30
9 9 66 M 5.00 5.00 5.10 0
10 10 62 M 8.60 8.10 7.40 - 0.500
11 11 65 F 16.6 14.9 13.0 - 1.70
12 12 71 M 16.4 18.6 17.1 2.20
13 13 51 F 12.2 11.0 12.3 - 1.20
14 14 71 M 6.60 3.70 4.50 - 2.90
15 15 64 F 15.4 15.2 13.6 - 0.200
16 16 50 M 10.2 10.8 11.2 0.600
3.13.2 Does sex
affect the mean change in theophylline?
emphysema %>% skim(st_delta)
Skim summary statistics
n obs: 16
n variables: 7
Variable type: numeric
variable missing complete n mean sd p0 p25 median p75 p100
st_delta 0 16 16 -0.99 3.48 -11.8 -1.92 -0.35 0.65 4.2
emphysema %>% group_by(sex) %>% skim(st_delta)
Skim summary statistics
n obs: 16
n variables: 7
group variables: sex
Variable type: numeric
sex variable missing complete n mean sd p0 p25 median p75 p100
F st_delta 0 6 6 -3.33 4.27 -11.8 -2.92 -1.75 -1.32 -0.2
M st_delta 0 10 10 0.41 2.07 -2.9 -0.38 0.5 1.4 4.2
Overall, the mean change in theophylline during the course of the antibiotic is -0.99, but this is -3.33 for female patients and 0.41 for male patients.
A one-way ANOVA model looks like this:
anova(lm(st_delta ~ sex, data = emphysema))
Analysis of Variance Table
Response: st_delta
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 52.547 52.547 5.6789 0.03189 *
Residuals 14 129.542 9.253
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The ANOVA F test finds a statistically significant difference between the mean st_delta
among males and the mean st_delta
among females. But is there more to the story?
3.13.3 Is there an association between age
and sex
in this study?
emphysema %>% group_by(sex) %>% skim(age)
Skim summary statistics
n obs: 16
n variables: 7
group variables: sex
Variable type: integer
sex variable missing complete n mean sd p0 p25 median p75 p100
F age 0 6 6 63.33 6.89 51 61.75 64.5 68 70
M age 1 9 10 66.44 7.57 50 65 66 71 76
But we note that the male patients are also older than the female patients, on average (mean age for males is 66.4, for females 63.3)
- Does the fact that male patients are older affect change in theophylline level?
- And how should we deal with the one missing
age
value (in a male patient)?
3.13.4 Adding a quantitative covariate, age
, to the model
We could fit an ANOVA model to predict st_delta
using sex
and age
directly, but only if we categorized age
into two or more groups. Because age
is not categorical, we cannot include it in an ANOVA. But if age is an influence, and we don’t adjust for it, it may well bias the outcome of our initial ANOVA. With a quantitative variable like age
, we will need a method called ANCOVA, for analysis of covariance.
<IP_ADDRESS> The ANCOVA model
ANCOVA in this case is just an ANOVA model with our outcome (st_delta
) adjusted for a continuous covariate, called age
. For the moment, we’ll ignore the one subject with missing age
and simply fit the regression model with sex
and age
.
summary(lm(st_delta ~ sex + age, data = emphysema))
Call:
lm(formula = st_delta ~ sex + age, data = emphysema)
Residuals:
Min 1Q Median 3Q Max
-8.3352 -0.4789 0.6948 1.5580 3.5202
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -6.90266 7.92948 -0.871 0.4011
sexM 3.52466 1.75815 2.005 0.0681 .
age 0.05636 0.12343 0.457 0.6561
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.255 on 12 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.2882, Adjusted R-squared: 0.1696
F-statistic: 2.43 on 2 and 12 DF, p-value: 0.13
This model assumes that the slope of the regression line between st_delta
and age
is the same for both sexes.
Note that the model yields st_delta
= -6.9 + 3.52 (sex
= male) + 0.056 age
, or
st_delta
= -3.38 + 0.056age
for female patients, andst_delta
= -6.9 + 0.056age
for male patients.
Note that we can test this assumption of equal slopes by fitting an alternative model (with a product term between sex
and age
) that doesn’t require the assumption, and we’ll do that later.
<IP_ADDRESS> The ANCOVA Table
First, though, we’ll look at the ANCOVA table.
anova(lm(st_delta ~ sex + age, data = emphysema))
Analysis of Variance Table
Response: st_delta
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 49.284 49.284 4.6507 0.05203 .
age 1 2.209 2.209 0.2085 0.65612
Residuals 12 127.164 10.597
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
When we tested sex
without accounting for age
, we found a p value of 0.032, which is less than our usual cutpoint of 0.05. But when we adjusted for age
, we find that sex
loses significance, even though age
is not a significant influence on st_delta
by itself, according to the ANCOVA table.
3.13.5 Rerunning the ANCOVA model after simple imputation
We could have imputed the missing age
value for patient 5, rather than just deleting that patient. Suppose we do the simplest potentially reasonable thing to do: insert the mean age
in where the NA value currently exists.
emph_imp <- replace_na(emphysema, list(age = mean(emphysema$age, na.rm = TRUE)))
emph_imp
# A tibble: 16 x 7
patient age sex st_base st_day5 st_day10 st_delta
<int> <dbl> <fct> <dbl> <dbl> <dbl> <dbl>
1 1 61.0 F 14.1 2.30 10.3 -11.8
2 2 70.0 F 7.20 5.40 7.30 - 1.80
3 3 65.0 M 14.2 11.9 11.3 - 2.30
4 4 65.0 M 10.3 10.7 13.8 0.400
5 5 65.2 M 9.90 10.7 11.7 0.800
6 6 76.0 M 5.20 6.80 4.20 1.60
7 7 72.0 M 10.4 14.6 14.1 4.20
8 8 69.0 F 10.5 7.20 5.40 - 3.30
9 9 66.0 M 5.00 5.00 5.10 0
10 10 62.0 M 8.60 8.10 7.40 - 0.500
11 11 65.0 F 16.6 14.9 13.0 - 1.70
12 12 71.0 M 16.4 18.6 17.1 2.20
13 13 51.0 F 12.2 11.0 12.3 - 1.20
14 14 71.0 M 6.60 3.70 4.50 - 2.90
15 15 64.0 F 15.4 15.2 13.6 - 0.200
16 16 50.0 M 10.2 10.8 11.2 0.600
More on simple imputation and missing data is coming soon.
For now, we can rerun the ANCOVA model on this new data set, after imputation…
anova(lm(st_delta ~ sex + age, data = emph_imp))
Analysis of Variance Table
Response: st_delta
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 52.547 52.547 5.3623 0.03755 *
age 1 2.151 2.151 0.2195 0.64721
Residuals 13 127.392 9.799
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
When we do this, we see that now the sex
variable returns to a p value below 0.05. Our complete case analysis (which omitted patient 5) gives us a different result than the ANCOVA based on the data after mean imputation.
3.13.6 Looking at a factor-covariate interaction
Let’s run a model including the interaction (product) term between age
and sex
, which implies that the slope of age
on our outcome (st_delta
) depends on the patient’s sex. We’ll use the imputed data again. Here is the new ANCOVA table, which suggests that the interaction of age
and sex
is small (because it accounts for only a small amount of the total Sum of Squares) and not significant (p = 0.91).
anova(lm(st_delta ~ sex * age, data = emph_imp))
Analysis of Variance Table
Response: st_delta
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 52.547 52.547 4.9549 0.04594 *
age 1 2.151 2.151 0.2028 0.66051
sex:age 1 0.130 0.130 0.0123 0.91355
Residuals 12 127.261 10.605
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Since the interaction term is neither substantial nor significant, we probably don’t need it here. But let’s look at its interpretation anyway, just to fix ideas. To do that, we’ll need the coefficients from the underlying regression model.
tidy(lm(st_delta ~ sex * age, data = emph_imp))
term estimate std.error statistic p.value
1 (Intercept) -5.64606742 13.4536974 -0.4196666 0.6821446
2 sexM 1.72031026 16.8389209 0.1021627 0.9203148
3 age 0.03651685 0.2113871 0.1727488 0.8657284
4 sexM:age 0.02885946 0.2603044 0.1108681 0.9135536
Our ANCOVA model for st_delta
incorporating the age
x sex
product term is -5.65 + 1.72 (sex = M) + 0.037 age + 0.029 (sex = M)(age). So that means:
- our model for females is
st_delta
= -5.65 + 0.037age
- our model for males is
st_delta
= (-5.65 + 1.72) + (0.037 + 0.029)age
, or -3.93 + 0.066age
but, again, our conclusion from the ANCOVA table is that this increase in complexity (letting both the slope and intercept vary by sex
) doesn’t add much in the way of predictive value for our st_delta
outcome.
3.13.7 Centering the Covariate to Facilitate ANOVA Interpretation
When developing an ANCOVA model, we will often center or even center and rescale the covariate to facilitate interpretation of the product term. In this case, let’s center age
and rescale it by dividing by two standard deviations.
emph_imp %>% skim(age)
Skim summary statistics
n obs: 16
n variables: 7
Variable type: numeric
variable missing complete n mean sd p0 p25 median p75 p100
age 0 16 16 65.2 6.98 50 63.5 65.1 70.25 76
Note that in our imputed data, the mean age
is 65.2 and the standard deviation of age
is 7 years.
So we build the rescaled age
variable that I’ll call age_z
, and then use it to refit our model.
emph_imp <- emph_imp %>%
mutate(age_z = (age - mean(age))/ (2 * sd(age)))
anova(lm(st_delta ~ sex * age_z, data = emph_imp))
Analysis of Variance Table
Response: st_delta
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 52.547 52.547 4.9549 0.04594 *
age_z 1 2.151 2.151 0.2028 0.66051
sex:age_z 1 0.130 0.130 0.0123 0.91355
Residuals 12 127.261 10.605
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
tidy(lm(st_delta ~ sex * age_z, data = emph_imp))
term estimate std.error statistic p.value
1 (Intercept) -3.2651685 1.386802 -2.3544587 0.03641637
2 sexM 3.6019471 1.735706 2.0752055 0.06013138
3 age_z 0.5096337 2.950144 0.1727488 0.86572835
4 sexM:age_z 0.4027661 3.632839 0.1108681 0.91355364
Comparing the two models, we have:
- (unscaled):
st_delta
= -5.65 + 1.72 (sex
= M) + 0.037age
+ 0.029 (sex
= M) x (age
) - (rescaled):
st_delta
= -3.27 + 3.60 (sex
= M) + 0.510 rescaledage_z
+ 0.402 (sex
= M) x (rescaledage_z
)
In essence, the rescaled model on age_z
is:
st_delta
= -3.27 + 0.510age_z
for female subjects, andst_delta
= (-3.27 + 3.60) + (0.510 + 0.402)age_z
= 0.33 + 0.912age_z
for male subjects
Interpreting the centered, rescaled model, we have:
- no change in the ANOVA results or R-squared or residual standard deviation compared to the uncentered, unscaled model, but
- the intercept (-3.27) now represents the
st_delta
for a female of average age, - the
sex
slope (3.60) represents the (male - female) difference in predictedst_delta
for a person of average age, - the
age_z
slope (0.510) represents the difference in predictedst_delta
for a female one standard deviation older than the mean age as compared to a female one standard deviation younger than the mean age, and - the product term’s slope (0.402) represents the male - female difference in the slope of
age_z
, so that if you add theage_z
slope (0.510) and the interaction slope (0.402) you see the difference in predictedst_delta
for a male one standard deviation older than the mean age as compared to a male one standard deviation younger than the mean age.
References
Kim, Hae-Young. 2014. “Statistical Notes for Clinical Researchers: Two-Way Analysis of Variance (Anova) - Exploring Possible Interaction Between Factors.” Restorative Dentistry & Endodontics 39(2): 143–47. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3978106/.
Riffenburgh, Robert H. 2006. Statistics in Medicine. Second. Burlington, MA: Elsevier Academic Press.
The MPa is defined as the failure load (in Newtons) divided by the entire bonded area, in mm2.↩


An Indian passport is a passport issued by order of the President of India to Indian citizens for the purpose of international travel. It enables the bearer to travel internationally and serves as proof of Indian citizenship as per the Passports Act (1967). The Consular Passport & Visa (CPV) Division of the Ministry of External Affairs, functions as the central passport organisation, and is responsible for issuing Indian passports on demand to all eligible Indian citizens. Indian passports are issued at 93 passport offices located across India and at 162 Indian diplomatic missions abroad.
If you're a new user
Existing User
Contact Us | Terms of Use | Trademarks
| Privacy Statement
Copyright © 2017 ---. All Rights Reserved.
Designed using HTML and CSS | Made by Vikram.


--- layout: page title: About header-img: "img/about-bg.png" ---
Highly ambitious self-paced full-stack web development student with a background in e-commerce sales, marketing, advertising, and video production.


django-textvariation v0.1 documentation
At the top of the page, you need to call a template tag to get the proper variation fit for the object
{% get_text_variations object %}
Default usage: get the best variation fit for the requested variation:
{{ object.headline_variation }}
Testing the requested variation/dimension
{% if text_variations.requested.language.code == 'es' %}
Displaying information about the requested variation

You are viewing the
{{ text_variations.requested.audience.name }}
version of the site in
{{ text_variation.requested.language.name }}.

testing each field
{% if text_variations.headline.language.code == 'es' %}
Testing if a field is not the requested variation
{% if text_variations.headline == text_variations.requested %}
Does a specific variation exist for a field?
{% if object.text_variations.headline.en.ad %}
get specific variation of a field
{% get_variation object headline language=es %}
text_variations = {
'requested': {'dim1': {'code': 'c2', 'name': 'Code2'},},
'field1': {'dim1': {'code': 'co', 'name': 'Code1'},},
'field2': {'dim1': {'code': 'c2', 'name': 'Code2'},}
}
When the returned variation does not match the requested variation
If there are multiple fields on a model with variations, each could have different set defined variations, you will have to pick one field to define the canonical variation, such as blog entry content.


Website Purpose.
Whether it's a portfolio, ecommerce shop, social network, or web application, the intention of the site will frame its context.
Functionality.
Functionality of the website must come through as interface elements, so functionality will determine the required parameters of the interface.
Presentation.
The style of presentation of interface elements helps frame the context of the site by changing the users perception of how they should be experiencing the content.


WITNESS LIST Licensing & Administrative Procedures Committee April 2, 2001-2:00P HB 402 On: Munoz, Manuel (Texas Comptroller's Office) HB 1077 Against: Benfer, J.D. (Texas Burglar and Fire Alarm Association) Registering, but not testifying: For: Clark, W. Mike (Locksmiths Association of Texas) Hetchler, Jim (Self and Texas Locksmith Association) Lipscomb, C.D. (Self and Greater Dallas Locksmiths Association and Metroplex Locksmith Association) Lowell, David M. (Associated Locksmiths of America) Stites, Eddie L. (Self) Against: Byrd, Roger W. (Texas Burlar and Fire Alarm Association) Fechner, Ruben (Texas Burglar and Fire Alarm Association) On: Kuntz, Jr., William H. (Texas Department of Licensing and Regulation) HB 1712 On: Alvarado, Tony (State Bar of Texas) HB 1923 For: Appleton, Dave (Self) Hart, Tom (City of Grand Prairie) Hooper, David E. (Texas Thoroughbred Association and Texas Racing Agrindustry Council) Johnsen, Corey S. (Lone Star Park at Grand Prairie) Against: Ware, Weston (Baptist Christian Life Commission) Registering, but not testifying: For: Suhm, Vic (North Texas Commission) HB 2479 For: Bresnen, Steve (Amusement Group) Fenoglio, Stephen (Amusement and Music Operations of Texas) Head, Jim (Self) Hicks, Lisa (Self) Lambert, Donald E. (Self) Meredith, Ramsey (Amusement and Music Operations of Texas) Against: Barker, Sherrilynn (VVS Machine Leasing) Bugay, David K. (Self) Gaines, Sharon (Self) Hester, Donald E. (Self) Kasten, Jackie (Self) Kasten, Kirby (Self) Lozano, Benito Gaitan (Self) McDonald, C.W. (Self) Montena, Violet (Self) Phillips, Jerry L. (Self) Sheffield, Venita (Triple Diamond) Spinks, Sally (Self) Trundle, Doug (Self) Ware, Weston W. (Texas Baptist Christian Life Commission) Young, Julie J. (Triple Diamond) On: Ancira, Jesse (Texas Comptroller's Office) Reck, Mike (Texas Comptroller's Office) Registering, but not testifying: For: Gardner, Jr., Glen (Texas VFW) Miccio, Fred (Self) Woodford, Suzy (Common Cause Texas) Against: Allen, Gene (Self) Allrod, Jr., Floyd (Self) Askew, Melvin C. (Self and T.A.A.) Baker, Barbara (Self) Baker, Glenn (Self) Banks, Michael (Self) Batchelor, Nancy (Self) Batchelor, Sharon (Self) Baxter, Charles A. (Self) Belcher, Catherine (Self) Berry, Brandy (Self) Brinkoeter, Stanley (Self) Brown, Michael (Self) Brown, Terry (Self) Calderon, Shannon Marie (Self) Clark, Mark (Self and T.A.A.) Clark, Philip (Self) Curtiss, Jeff (Self) Daniells, Linda (Self) Darthard, Trevor (Self) DeShazo, David C. (Self) DeShazo, Linda (Self) Faulkner, Forrest (Self) Garcia, Cindy (Self) Hassill, Jackie (Self) Hernandez, Angela (Self and Leonel G. Lozano) Hester, Patricia (Self) Holder, JoAnn (Triple Diamond Games) Hunsucker, Randy (Self) Hurley, Phillip (Self) Johnson, Billy (Self) Johnson, JoAnn (Self) King, Peggy (Self) Lawley, Linda (Triple Diamond Games) Lira, Laurencio (Self) Lopez, Faith Y. (Self) Lopez, Pete (Self) Lu, Jim C. (Self) Murray, A. J. (Self) Poirier, Renald (Self) Rack, Judy (Self) Rigano, Hayward (Signal Peak Enterprises) Rodriquez, Kristie J. (Self) Rozenzvig, Billy Y. (Self) Sheets, Elmor Mason (Self) Shields, Gary (Self) Skidmore, Barbara (Self) Skinner, Sharon K. (Self) Smith, R.J. (Self) Sparks, Rosa E. (Self) Sparks, Sr., Harold (Self) Stewart, Tjark Tracy (Self) Strzelecki, Michael (Self) Taylor, Mary (Self) Truan, Jr., Carlos A. (Corpus Christi Day Cruises Limited) Truax, Merri (Self) HB 2755 For: Bolt, Leroy (Self) Costello, David A. (National Association of State Boards of Accountancy and Texas Society of CPA's) Garza, Ygnacio (Self and Long Chilton LLP) Owen, Robert R. (Texas Society of Certified Public Accountants) Rudd, Ronnie (Accountants Coalition) Against: Bowles, Carl (Self) Clanton, Don (Self) Cox, Bill (Self and Texas Certified Public Accountants for the Public Interest) Furge, John (Self) Glaw, W. Carl (Self) Lairson, Earl C. (Null-Lairson and National Conference of Certified Public Accountant Practitioners) Lott, Marjorie G. (Self) Purnell, Robert (Self) Sherfy, Joe (Self) Registering, but not testifying: For: Anderson, Robert F. (Texas Society of Certified Public Accountants) Atkinson, Billy M. (Self) Bales, Bryce (Self) Bosse, Portia (Texas Association of Financial and Tax Specialists) Craig, J. Donald (Self) Craig, Linda Ketter (Self) Dear, Penny (Self) Edgerton, Larry (Self) Galloway, Bruce (Self) Gnest, J. Iko (Self) Kelly, Kathy R. (Self) McIntosh, Gary (Self and Texas Society of Certified Public Accountants) Sharbaugh, John M. (Texas Society of Certified Public Accountants) Smith, Joyce (Self) Stinson, Christi H. (Self) Stinson, David S. (Self) Summers, Edward L. (Self) Sump, Johnathan Dale (Self) Sweeten, Ronce (Self) Whatley, Mark P. (Self) Winters, Stanley E. (Self) Against: Braunstein, Stephen R. (Self) On: Mason, Jimmie L. (Texas State Board of Public Accountancy) Treacy, William (Texas State Board of Public Accountancy) HB 3400 For: Engelbock, Marshall (City of Trophy Club) Hawk, Curtis (Self and City of Frisco) Registering, but not testifying: For: Igo, Shanna (Texas Municipal League)


[gecode-users] path constraint with a single node
Kish Shen
kisshen at cisco.com
Tue Sep 27 18:30:19 CEST 2011
Hi,
I am doing some tests with the new constraints I have just added to the
ECLiPSe gecode interface, and the path constraint fails when there is
only one node -- should this succeed, with the start and end nodes both
set to 0, and the successor node for node 0 (the only node) set to 1?
(with the circuit constraint with 1 node, the constrain succeeds with
the successor of node 0 set to 0)
Cheers,
Kish
--
This e-mail may contain confidential and privileged material for the
sole use of the intended recipient. Any review, use, distribution or
disclosure by others is strictly prohibited. If you are not the intended
recipient (or authorized to receive for the recipient), please contact
the sender by reply e-mail and delete all copies of this message.
Cisco Systems Limited (Company Number: 02558939), is registered in
England and Wales with its registered office at 1 Callaghan Square,
Cardiff, South Glamorgan CF10 5BT.
More information about the users
mailing list


ZCENTZ helps you to harness the power of scents, both professionally and personally. Our range of industrial and personal aroma diffusers powered by world-class aromas will enhance your customer as well as personal experience.
Meet ZCENTZWhat comes to your mind when referred to coffee, rose or jasmine? Are you not feeling the smell? Chances are very high that you remember persons based on the scent they use.
The delicious scent of baked bread or the aroma that emanates from the backstreet café makes you buy those, even if you intend not to, right? That’s the power of scents!
Research shows that the sense of smell is closely associated with memory, probably more so than any of our other senses.  You may not want to stay long when the ambient smell is not welcoming.
Get Started!Creating a scent for your brand is the most subtle and clever way of marketing. No matter what industry you are in or type of business you do, when you have a customer you want to be so unique in what you do to succeed.
Zcentz sources its scents from the world’s best. Our scent experts make meticulous selection and each scent undergo stringent quality tests. Our scents are natural-based, hypoallergenic and provided with safety sheets (MSDS) and are produced to meet IFRA standards.
The choice of scents is primarily based on the type of business you are in. You wouldn’t want to smell a baker, when you are into automobile. Our experienced team will suggest the perfect ambient aroma if you are spoilt for a choice.
While humans can perceive 1 Trillion scents, we will be no short of fresh ideas for scents. Zcentz collection comprises all genres of scents, floral, woody, citrusy, earthy, fruity etc. Zcentz have 100s of scents in its regular collection. And as time goes, new fragrances are added to our collection
Ready to start your next project with us? Give us a call or send us an email and we will get back to you as soon as possible!
4th floor, No.22, Salapuria Towers-1, Hosur road, Kormangala, Bangalore


[1]
Price, 16ms,size,colors; None yet then I can think of....
[2]
20inch, great responce time, price; wish the USB ports were placed somewhere better


Home
Results
Submit Park
Login / Register
Search
Paw Go
Find Dog Parks Near You
Rating
1
2
3
4
5
Find Me
Search


Exam Watcher
Last update:
Question Funnel
Grades by Question
Question 1
Question 2
Question 3
Question 4
Question 5
Question
Grades
Submissions
Question 1
Question 2
Question 3
Question 4
Question 5


libs:
The DOM allows us to do anything with elements and their contents, but first we need to reach the corresponding DOM object.
All operations on the DOM start with the document
object. That’s the main “entry point” to DOM. From it we can access any node.
Here’s a picture of links that allow for travel between DOM nodes:
Let’s discuss them in more detail.
The topmost tree nodes are available directly as document
properties:

= document.documentElement
document.documentElement
. That’s the DOM node of the
tag.

= document.body

element – document.body
.

= document.head

tag is available as document.head
.
```warn header="There's a catch:
document.bodycan be
null`" A script cannot access an element that doesn’t exist at the moment of running.
In particular, if a script is inside <head>
, then document.body
is unavailable, because the browser did not read it yet.
So, in the example below the first alert
shows null
:
smart header="In the DOM world `null` means \"doesn't exist\"" In the DOM, the `null` value means "doesn't exist" or "no such node".
There are two terms that we’ll use from now on:
<head>
and <body>
are children of <html>
element.For instance, here <body>
has children <div>
and <ul>
(and few blank text nodes):
```
…And descendants of
are not only direct children

,

but also more deeply nested elements, such as

(a child of

) and
(a child of

) – the entire subtree.
The childNodes
collection lists all child nodes, including text nodes.
The example below shows children of document.body
:
```
Please note an interesting detail here. If we run the example above, the last element shown is <script>
. In fact, the document has more stuff below, but at the moment of the script execution the browser did not read it yet, so the script doesn’t see it.
Properties firstChild
and lastChild
give fast access to the first and last children.
They are just shorthands. If there exist child nodes, then the following is always true:
elem.childNodes[0] === elem.firstChild
elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
There’s also a special function elem.hasChildNodes()
to check whether there are any child nodes.
As we can see, childNodes
looks like an array. But actually it’s not an array, but rather a collection – a special array-like iterable object.
There are two important consequences:
for..of
to iterate over it:That’s because it’s iterable (provides the Symbol.iterator
property, as required).
js run alert(document.body.childNodes.filter); // undefined (there's no filter method!)
The first thing is nice. The second is tolerable, because we can use Array.from
to create a “real” array from the collection, if we want array methods:
js run alert( Array.from(document.body.childNodes).filter ); // function
```warn header=“DOM collections are read-only” DOM collections, and even more – all navigation properties listed in this chapter are read-only.
We can’t replace a child by something else by assigning childNodes[i] = ...
.
Changing DOM needs other methods. We will see them in the next chapter. ```
```warn header=“DOM collections are live” Almost all DOM collections with minor exceptions are live. In other words, they reflect the current state of DOM.
If we keep a reference to elem.childNodes
, and add/remove nodes into DOM, then they appear in the collection automatically. ```
```warn header="Don't use
for..into loop over collections" Collections are iterable using
for..of. Sometimes people try to use
for..in` for that.
Please, don’t. The for..in
loop iterates over all enumerable properties. And collections have some “extra” rarely used properties that we usually do not want to get:
`````
Siblings are nodes that are children of the same parent.
For instance, here <head>
and <body>
are siblings:
<body>
is said to be the “next” or “right” sibling of <head>
,<head>
is said to be the “previous” or “left” sibling of <body>
.The next sibling is in nextSibling
property, and the previous one - in previousSibling
.
The parent is available as parentNode
.
For example:
```js run // parent of isalert(document.body.parentNode === document.documentElement); // true
// after goesalert(document.head.nextSibling); // HTMLBodyElement
// before goesalert(document.body.previousSibling); // HTMLHeadElement ```
Navigation properties listed above refer to all nodes. For instance, in childNodes
we can see both text nodes, element nodes, and even comment nodes if they exist.
But for many tasks we don’t want text or comment nodes. We want to manipulate element nodes that represent tags and form the structure of the page.
So let’s see more navigation links that only take element nodes into account:
The links are similar to those given above, just with Element
word inside:
children
– only those children that are element nodes.firstElementChild
, lastElementChild
– first and last element children.previousElementSibling
, nextElementSibling
– neighbor elements.parentElement
– parent element.```smart header="Why
parentElement? Can the parent be *not* an element?" The
parentElementproperty returns the "element" parent, while
parentNode` returns “any node” parent. These properties are usually the same: they both get the parent.
With the one exception of document.documentElement
:
js run alert(document.documentElement.parentNode); // document alert(document.documentElement.parentElement); // null
The reason is that the root node document.documentElement
(
) has document
as its parent. But document
is not an element node, so parentNode
returns it and parentElement
does not.
This detail may be useful when we want to travel up from an arbitrary element elem
to
, but not to the document
:
Let's modify one of the examples above: replace `childNodes` with `children`. Now it shows only elements:
```html run
<html>
<body>
<div>Begin</div>
<ul>
<li>Information</li>
</ul>
<div>End</div>
<script>
*!*
for (let elem of document.body.children) {
alert(elem); // DIV, UL, DIV, SCRIPT
}
*/!*
</script>
...
</body>
</html>
```
## More links: tables [#dom-navigation-tables]
Till now we described the basic navigation properties.
Certain types of DOM elements may provide additional properties, specific to their type, for convenience.
Tables are a great example of that, and represent a particularly important case:
**The `<table>`** element supports (in addition to the given above) these properties:
- `table.rows` -- the collection of `<tr>` elements of the table.
- `table.caption/tHead/tFoot` -- references to elements `<caption>`, `<thead>`, `<tfoot>`.
- `table.tBodies` -- the collection of `<tbody>` elements (can be many according to the standard, but there will always be at least one -- even if it is not in the source HTML, the browser will put it in the DOM).
**`<thead>`, `<tfoot>`, `<tbody>`** elements provide the `rows` property:
- `tbody.rows` -- the collection of `<tr>` inside.
**`<tr>`:**
- `tr.cells` -- the collection of `<td>` and `<th>` cells inside the given `<tr>`.
- `tr.sectionRowIndex` -- the position (index) of the given `<tr>` inside the enclosing `<thead>/<tbody>/<tfoot>`.
- `tr.rowIndex` -- the number of the `<tr>` in the table as a whole (including all table rows).
**`<td>` and `<th>`:**
- `td.cellIndex` -- the number of the cell inside the enclosing `<tr>`.
An example of usage:
```html run height=100
<table id="table">
<tr>
<td>one</td><td>two</td>
</tr>
<tr>
<td>three</td><td>four</td>
</tr>
</table>
<script>
// get td with "two" (first row, second column)
let td = table.*!*rows[0].cells[1]*/!*;
td.style.backgroundColor = "red"; // highlight it
</script>
```
The specification: [tabular data](https://html.spec.whatwg.org/multipage/tables.html).
There are also additional navigation properties for HTML forms. We'll look at them later when we start working with forms.
## Summary
Given a DOM node, we can go to its immediate neighbors using navigation properties.
There are two main sets of them:
- For all nodes: `parentNode`, `childNodes`, `firstChild`, `lastChild`, `previousSibling`, `nextSibling`.
- For element nodes only: `parentElement`, `children`, `firstElementChild`, `lastElementChild`, `previousElementSibling`, `nextElementSibling`.
Some types of DOM elements, e.g. tables, provide additional properties and collections to access their content.


You should never provide bank or financial information, or make any form of payment, when applying for a job.
Thanks
By submitting you agree to the terms & conditions of


Hi, I'm Shubham Singh, Based on my experiences, I would love to be matched with projects that are involved either in machine learning or system design field. I’m interested in the implementation of AI in Google products, for example, Google translate must have used various AI technologies to make the sequence-to-sequence translation possible. Although I’m pretty new to this field, I am fascinated by how distribted systems work together to solve real-world problems and would love to learn more and contribute to teams that work on interdisciplinary problems. I’m always open to new challenges because I believe that to grow, I have to take and learn new things and therefore I’m open to various kind of projects. Hope that I can be a member of your team. thank you!.
NLP | ML/DL/AI | System Design | Statistics | PreProcessing | SQL
Python | JS | TypeScript |Data Structure | Algorithms
Tensorflow | PyTorch | Keras | Numpy | Panda | spaCy | NLTK | openCV
Linux- Ubuntu | Kali, Windows
Vim | AWS | Jupyter Notebook | Git | PyCharm | Atom
Problem Solving | Communication | Collaboration | Team work |Leadership | Time Management
The Big Oxmox advised her not to do so, because there were thousands of bad Commas, wild Question Marks and devious Semikoli, but the Little Blind Text didn’t listen. She packed her seven versalia, put her initial into the belt and made herself on the way.
Bachelors of Technology, Electronics & Communications Engineering National Institute of Technology Nagaland
Programming is lots of fun and extraordinarily useful. It allows you to be creative and also opens up a wide range of new careers for you. If you want to learn how to program, read the tutorial below for an explanation of where to go and what to study.
1- Choose a programming language. Computer programming is done as essentially a set of written instructions that the computer follows (also known as binary coding). These instructions can be written in several different "languages", or which are simply different ways of organizing the instructions and text. Different languages tend to be used to create different types of programs, however, so choose a language that you feel is relevant to what you want to do.[1] If you decide that a language does not suit your needs, you can always move on to a new language
Python - Python is a very versatile language used widely across several platforms.[4] Despite being extremely powerful, it is an easy language for a beginner to pick up, so give it a try!
Have you wondered what it takes to get started with machine learning? In this article, I will walk through steps for getting started with machine learning using Python. Python is a popular open source programming language and it is one of the most-used languages in artificial intelligence and other related scientific fields. Machine learning (ML), on the other hand, is the field of artificial intelligence that uses algorithms to learn from data and make predictions. Machine learning helps predict the world around us.
From self-driving cars to stock market predictions to online learning, machine learning is used in almost every field that utilizes prediction as a way to improve itself. Due to its practical usage, it is one of the most in-demand skills right now in the job market. Also, getting started with Python and machine learning is easy as there are plenty of online resources and lots of Python machine learning libraries available.
Sustaining motivation can be tough under the best of circumstances. So how can you stay motivated when your to-do list runs to four pages, you just got another rejection letter, your adult child announced his plans to move back home, the car and washing machine went on the fritz at the same time and you can't find time in the day to work on your own personal projects?
Five Steps to Staying Motivated
1. Set a goal and visualize it down to the most minute detail.
2. Make a list of the reasons you want to accomplish the goal.
3. Break the goal down into smaller pieces and set intermediary targets — and rewards.
4. Have a strategy, but be prepared to change course.
5. Get the help you need! Pre-determine how you will deal with flagging motivation. "NAIL IT"


Pluto Bees
Hello all.
Welcome, to Pluto Bees. Now before I begin I want to give you updates with how things are going.  I'm going to see how long I can hold out until they find me, theres a secret tunnel passage at the end of the
bunker I found, so if I get caught, I have an escape route. My girlfriend left me, I am almost running out of emergency funds. Everything is going so-so. I can only
hide from Obama, NASA, and the blacks for so long before they can track my every move, which I am still scared about. I had no idea that is was going to get worse when
I first put out my first article, Moon Spiders, back 3 months ago. From that point I've been running ever since. But because of my limited time I'm going to get to the
point. And I'm sorry if these articles seems short, I am running for my life. Thank god we are almost at the end, and my message has been put out of the world.
  Pluto specifically casted into the list of our Solar System, and can be found on pretty much any map of the solar system because Pluto is in the realm of
our second asteroid belt.
People who idiotically rant their head saying that pluto isn't a planet honestly scare me. You think Eris can sustain life? You think Sedna can sustain life? You think
Orcus can sustain life? You think Kopff can sustain life? You think Makemake can sustain life? You think Haumea can sustain life? You think Quaoar can sustain life?
You think 2007 OR10 can sustain life? You think 2002 AW197 can sustain life? YOu think 2013 FY27 can sustain life? You think 1995 SN55 can sustain life? You think
Chrion could sustain life? Well you are inherently wrong because they don't. Yes, I would consider our moon a planet and our sun. Anything that can sustain life is a
planet.
Allow me to tell you first about my rational fear of bees.  It was a time ago, the bros and I, all you know,
outside, gaming. Playing a game of Cobs and Roppers. Me, child, was running around the front yard of my friends house, chasing a robber. When I was clearly unaware as
a child, a stepped in a hole.  No, it was a fair size hole, about
an inch in diameter. Now I didn't not fell this hole, and kept running, and the entire hive of absolute rampant bees stung my entire body, really. The entire hive came
up and complete stung me from head to toe.  Somebody noticed me and tried to open the front
door to let me in, as I kept frantically shouting "OPEN THE DOOR" as loud as I could, but he was clueless to what was happening. Several kids actually went into the cars on the street and hid in there, pussies.  All of the parents ran towards me and punched all of the bees to death and I was in
shock for 30 minutes, and had 30 bee stings all over my body, including one right under my eye. So that was a good day, and that family never hosted a party since,
good on them. Now, everytime I hear any buzzing sound I get tensed up and I freak out, that gave me PTSD.
 Bee's on pluto are still black and yellow and do have
wings, and can actually pollinate using Pluto dust. Because Pluto dust and pollen actually have the same chemical makeup believe it or not, the both have the same
ammount of carbon in them which make it easy for the bee to use and actually that is why Pluto is so small. The bees havea a complex labyrinth of tunnels that run
through the planet's core, pluto is almost of the verge of collapse and can possibly cave in at any moment, though I think it is partly to do with their Nazi regime,
once that is over I think that the planet may actually become stable, but bee's are the most unpredictable creatures.
Ok, so between the days of when I first put out my Moon Spiders article, to today when writing this. I have noticed that there are more bees than before.  ADD MORE BEES! They literally have no natural predator except for literally going outside of their
atmosphere so they can grow exponentially with a higher rate of growth. If the bees so wanted to, they could all get on one side of Pluto and push the planet into
Neptune and cause a chain reaction that will mean the end of this solar system. Luckily for us superior humans we would already be inhabintants of Mars so it doesn't
matter.
Thank you for reading. Sun Ducks up right now.


Mega multiplayer festival gamer
|
# of games in database: 842,056
Years covered: 1475 to 2017 (543 years)
White wins 317,158 games (37.66%)
Black wins 235,098 games (27.92%)
289,787 games are drawn (34.41%)
Average # of moves per game: 40.64
Average Elo rating of rated players: 2192
# of games with annotation: 2,266 (0.27%)
# of games with kibitzing: 135,239 (16.06%)
# of kibitzes in total: 3,994,666
# of registered users: 237,356
# of users registered in last 30 days: 3,629 (1.53%)
# of registered users seen in last 90 days: 9,694 (4.08%)
|
Mandolfo vs Kolisch, 1859 0-1
Shumov vs Kolisch, 1862 0-1
Kolisch vs Anderssen, 1861 1-0
Duke Karl / Count Casabianca vs Kolisch, 1859 0-1
Kolisch vs Loyd, 1867 1-0
Kolisch vs Anderssen, 1861 1-0
Kolisch vs Geake, 1860 1-0
F Deacon vs Kolisch, 1860 0-1
Kolisch vs R Steel, 1861 1-0
Kolisch vs Gastein, 1859 1-0
|
|
|


Blue Bike Web Design is based out of Metro Detroit, seeking to provide high-quality website design to local businesses and individuals. We pride ourselves on using only the most cutting edge technology, while also working with the client side-by-side to provide a stress-free experience!
We work with you to determine the best way to build your web presence. Depending on the size of your project, we can design any style of website to fit your needs. Contact us today and we can discover the best way to build the site of your dreams!
We think that the small things make a big difference. It is 2017 and more and more users access the web using mobile devices. Your site should look beautiful on any device, whether that device be a widescreen monitor, tablet or an iPhone. Where everyone else cuts corners, we pay attention to the details.


Standard
The standard feed input component displays an empty text field with an inactive submit button. The button would be
active when textarea has a value and calls (onSubmit)
event when button was pressed
Placeholder
If avatarSrc
property not set the user thumb displays with generic image
No avatar
Set [avatarShow]="false"
if you don't need use user image
Disabled
Set [disabled]="true"
to disable text field with submit button.
Max Height
The max height sets row count in maxHeight
property. Feed input displays a text field with the maximum
amount of text lines it can contain. Once the text field has reached the maximum height, a scrollbar appears to
access the overflowing text.


Bases: object
Connection object.
Cancel a consumer thread
Close/release this connection
Consume from all queues/consumers
Consumer from all queues/consumers in a greenthread
Create a consumer that calls a method in a proxy object
Create a worker that calls a method in a proxy object
Create a Consumer using the class that was passed in and add it to our list of consumers
Create a ‘direct’ queue. In nova’s use, this is generally a msg_id queue used for responses for call/multicall
Create a ‘fanout’ consumer
Create a ‘topic’ consumer.
Send a ‘direct’ message
Send a ‘fanout’ message
Convenience call for bin/clear_rabbit_queues
Return an iterator that will consume from all queues/consumers
Send a notify message on a topic
Send to a publisher based on the publisher class
Handles reconnecting and re-establishing queues. Will retry up to self.max_retries number of times. self.max_retries = 0 means to retry forever. Sleep between tries, starting at self.interval_start seconds, backing off self.interval_stepping number of seconds each attempt.
Reset a connection so it can be used again
Send a ‘topic’ message
Bases: object
Consumer base class.
Cancel the consuming from the queue, if it has started
Actually declare the consumer on the amqp channel. This will start the flow of messages from the queue. Using the Connection.iterconsume() iterator will process the messages, calling the appropriate callback.
If a callback is specified in kwargs, use that. Otherwise, use the callback passed during __init__()
If kwargs[‘nowait’] is True, then this call will block until a message is read.
Messages will automatically be acked if the callback doesn’t raise an exception
Re-declare the queue after a rabbit reconnect
Bases: nova.openstack.common.rpc.impl_kombu.ConsumerBase
Queue/consumer class for ‘direct’
Bases: nova.openstack.common.rpc.impl_kombu.Publisher
Publisher class for ‘direct’
Bases: nova.openstack.common.rpc.impl_kombu.ConsumerBase
Consumer class for ‘fanout’
Bases: nova.openstack.common.rpc.impl_kombu.Publisher
Publisher class for ‘fanout’
Bases: nova.openstack.common.rpc.impl_kombu.TopicPublisher
Publisher class for ‘notify’
Bases: object
Base Publisher class
Re-establish the Producer after a rabbit reconnection
Send a message
Bases: nova.openstack.common.rpc.impl_kombu.ConsumerBase
Consumer class for ‘topic’
Bases: nova.openstack.common.rpc.impl_kombu.Publisher
Publisher class for ‘topic’
Sends a message on a topic and wait for a response.
Sends a message on a topic without waiting for a response.
Sends a message on a topic to a specific server.
Create a connection
Sends a message on a fanout exchange without waiting for a response.
Sends a message on a fanout exchange to a specific server.
Make a call that returns multiple times.
Sends a notification event on a topic.


* Find the original paper here [1].
* Find the code here.
Earlier this month, a paper was published in eLife detailing the deep sequencing of several tuberculosis patients from an outbreak within a Canadian Inuit community. By performing heirarchal clustering of the SNP data, the authors were able to determine the presence of a "super-spreader" during the outbreak. Reading the paper, I became interested in trying to create an interactive visualization of the data that accounted for sequence similarity of the tuberculosis strains isolated from the patients, as well as time derived from the month and year of diagnosis.
In order to map spread, I took the CI 95% SNP data and created a square-form similarity matrix by using a Hamming distance calculation [2]. I then generated a two-dimensional network, where nodes are connected by time and SNP similarity. To attempt to model the spread of the disease, I traversed time and found each patients most similar SNP neighbors, assuming that each patient was infected when diagnosed, and that SNP variation indicates progression of the disease. Progression using this paradigm seemed to be most stable when for each iteration, I found the 3 minimum distance scores and linked any patient with those distance values compared to the current patient of interest. Once a patient had been connected, they were removed from further analysis. Again, this probably over-simplifies the problem, but an interesting approach nonetheless (hopefully).
Disclaimer: It is interesting that while super-spreaders are identified, they are different than those identified in the original study. However, this was mostly a learning exercise for visualization of temporal data. As compelling as this view of the data might be, it is preliminary and probably riddled with errors. Take this with a grain of salt...
In order to interact with the graph, you can click a patient circle and drag to reposition the graph. To pan, click and drag the background. To zoom in and out, use the scroll wheel. To move through time, drag the ball on the timeline below the graph, or press play or pause. Red coloring of the patient circle indicates time of diagnosis. As you can see, there is a trend/correlation with SNP similarity and time of diagnosis. Also, the reference genome was excluded from the graph. Note: The two outlier strains, as identified in the original study, usually appear by themselves on the lower right corner of the graph, so you may need to pan over to view those samples.
Time at Diagnosis (in months)
References
1. Lee SL, et. al. Previously undetected super-spreading of Mycobacterium tuberculosis revealed by deep sequencing. (2020) Elife.Publication
2. Hu H, et. al. Evaluating information content of SNPs for sample-tagging in re-sequencing projects. (2015) Scientific Reports.
Publication


POST to /baskets to create a basket.


{% extends "layout.html" %} {% block title %} Play cards! {% endblock %} {% block main %}
You're logged in with player ID {{session["user_id"]}}.


wildscribe:generate-site
Full name:
org.jboss.wildscribe:wildscribe-maven-plugin:2.0.0.Final:generate-site
Description:
A simple plugin used to generate a Wildscribe site.
Attributes:
- Requires a Maven project to be executed.
Required Parameters
| Name | Type | Since | Description |
|---|---|---|---|
| jbossHome | String | - | The application server's home directory. This is a required
parameter and must point to a valid server directory. The server
must include the module JAR's in order to get the log messages for
the generated site. User property is: wildscribe.jboss.home. Alias is: jboss-home. |
Optional Parameters
| Name | Type | Since | Description |
|---|---|---|---|
| displayName | String | - | This is only used for a single version and will be used for the
displayed name. If left null the name will be resolved
from the running server. User property is: wildscribe.display.name. Alias is: display-name. |
| displayVersion | String | - | This is only used for a single version and will be used for the
displayed version. If left null the version will be
resolved from the running server. User property is: wildscribe.display.version. Alias is: display-version. |
| hostname | String | - | Specifies the host name for the management client. Default value is: localhost. User property is: wildscribe.management.hostname. |
| javaOpts | String[] | - | The JVM options used for starting the server. User property is: wildscribe.java.opts. Alias is: java-opts. |
| modelDir | String | - | The target directory the model and message files will be written
to. Default value is: ${project.build.directory}/wildscribe. User property is: wildscribe.model.dir. Alias is: model-dir. |
| port | int | - | Specifies the port number for the management client. Default value is: 9990. User property is: wildscribe.management.port. |
| protocol | String | - | The protocol used to connect the management client. User property is: wildscribe.management.protocol. |
| requiredExtensions | List | - | The extensions that are required to be installed before the model
is dumped. If any of these extensions do not already exist on the
server then they will be added. User property is: wildscribte.required.extensions. Alias is: required-extensions. |
| serverConfig | String | - | The path to the server configuration to use. Default value is: standalone-full-ha.xml. User property is: wildscribe.server.config. Alias is: server-config. |
| siteDir | String | - | The target directory the site to be generated in. Default value is: ${project.build.directory}/wildscribe. User property is: wildscribe.site.dir. Alias is: site-dir. |
| skip | boolean | - | Set to true if you want this goal to be skipped,
otherwise false. Default value is: false. User property is: wildscribe.skip. |
| timeout | int | - | The timeout, in seconds, to wait for a management connection. Default value is: 60. User property is: wildscribe.timeout. |
Parameter Details
This is only used for a single version and will be used for the
displayed name. If left null the name will be resolved
from the running server.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.display.name
- Alias: display-name
This is only used for a single version and will be used for the
displayed version. If left null the version will be
resolved from the running server.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.display.version
- Alias: display-version
Specifies the host name for the management client.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.management.hostname
- Default: localhost
The JVM options used for starting the server.
- Type: java.lang.String[]
- Required: No
- User Property: wildscribe.java.opts
- Alias: java-opts
The application server's home directory. This is a required
parameter and must point to a valid server directory. The server
must include the module JAR's in order to get the log messages for
the generated site.
- Type: java.lang.String
- Required: Yes
- User Property: wildscribe.jboss.home
- Alias: jboss-home
The target directory the model and message files will be written
to.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.model.dir
- Default: ${project.build.directory}/wildscribe
- Alias: model-dir
port:
Specifies the port number for the management client.
- Type: int
- Required: No
- User Property: wildscribe.management.port
- Default: 9990
The protocol used to connect the management client.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.management.protocol
The extensions that are required to be installed before the model
is dumped. If any of these extensions do not already exist on the
server then they will be added.
- Type: java.util.List
- Required: No
- User Property: wildscribte.required.extensions
- Alias: required-extensions
The path to the server configuration to use.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.server.config
- Default: standalone-full-ha.xml
- Alias: server-config
The target directory the site to be generated in.
- Type: java.lang.String
- Required: No
- User Property: wildscribe.site.dir
- Default: ${project.build.directory}/wildscribe
- Alias: site-dir
skip:
Set to true if you want this goal to be skipped,
otherwise false.
- Type: boolean
- Required: No
- User Property: wildscribe.skip
- Default: false
The timeout, in seconds, to wait for a management connection.
- Type: int
- Required: No
- User Property: wildscribe.timeout
- Default: 60


203. Hyperhuffman
time limit per test: 2 sec.
memory limit per test: 65536
KB
input: standard
output: standard
You might have heard about Huffman encoding — that is the coding
system that minimizes the expected length of the text if the codes for
characters are required to consist of an integral number of bits.
Let us
recall codes assignment process in Huffman encoding. First the Huffman
tree is constructed. Let the alphabet consist of N characters, i-th of
which occurs Pi times in the input text. Initially all characters are
considered to be active nodes of the future tree, i-th being marked with
Pi. On each step take two active nodes with smallest marks, create
the new node, mark it with the sum of the considered nodes and make them the
children of the new node. Then remove the two nodes that now have parent from
the set of active nodes and make the new node active. This process is repeated
until only one active node exists, it is made the root of the tree.
Note
that the characters of the alphabet are represented by the leaves of the tree.
For each leaf node the length of its code in the Huffman encoding is the length
of the path from the root to the node. The code itself can be constrcuted the
following way: for each internal node consider two edges from it to its
children. Assign 0 to one of them and 1 to another. The code of the character is
then the sequence of 0s and 1s passed on the way from the root to the leaf node
representing this character.
In this problem you are asked to detect the
length of the text after it being encoded with Huffman method. Since the length
of the code for the character depends only on the number of occurences of this
character, the text itself is not given — only the number of occurences of each
character. Characters are given from most rare to most frequent.
Note
that the alphabet used for the text is quite huge — it may contain up to 500 000
characters.
Input
The first line of the input file contains N — the number of
different characters used in the text (2 ≤ N ≤ 500,000). The second line
contains N integer numbers Pi — the number of occurences of each
character (1 ≤ Pi ≤ 109, Pi ≤ Pi + 1
for all valid i).
Output
Output the length of the text after encoding it using Huffman
method, in bits.
Sample test(s)
Input
3
1 1 4
Output
8
| Author: |
Andrew Stankevich |
| Resource: |
Petrozavodsk Summer Trainings 2003 |
| Date: |
2003-08-23
|
| Server time: 2004-01-14 13:30:00 |
Online Contester Team © 2002 - 2003. All
rights
reserved. | | |


This is an open source map warping / geo rectifying service, written in Ruby and Rails. Use this service to upload, rectify and share your scanned maps.
It's MIT licenced, so you can play with it if you want too!.
Free to use but don't abuse.
Originally written by Tim Waters (blog: http://thinkwhere.wordpress.com).
We had a some hacking session during the State of The Map 2011 conference to create this site for you.
Maning Sambale
<EMAIL_ADDRESS>blog: http://epsg4253.wordpress.com
This is currently running on an Amazon EC2 instance if you are interested to support the maintenance of the service, contact Maning.


evertec
Businessmodel of Evertec
Customer Segments
Evertec’s payment processing solutions are utilised by a range of business customers across multiple sectors. The Company, however, primarily serves six industries:
- Financial services, where it provides banking payment solutions, card issuing and acquiring services and document processing services;
- Retail, where it provides electronic payment services, electronic cash register capabilities and infrastructure solutions;
- Wholesale and distribution, where it provides IT management and cloud solutions;
- Healthcare, where it provides document processing and IT professional services;
- Insurance, where it provides electronic payment services and point of sale terminal devices; and
- Government, electronic benefit transfer solutions and infrastructure services. Geographically, Evertec’s customers are based principally in Latin America and the Caribbean, including Costa Rica, México, Guatemala, Panamá, Puerto Rico, the Dominican Republic and the Virgin Islands.
Evertec has a particularly significant relationship with Popular Inc, which operates Banco Popular. In 2015, products and services billed through Popular Inc accounted for around 45% of the Company’s total revenue.
Value Propositions
Evertec provides value to its customers in three principal ways: the quality and reliability of its products, the affordability of its services, and its commitment to developing up-to-date technology. The Company is one of the most established names within the payment solutions field in Latin America and has partnerships with other high-profile companies and institutions in the region, notably Popular Inc.
Channels
Evertec’s products and services are available to browse on its website at www.evertecinc.com/ The Company, however, sells and distributes its products services primarily through a proprietary direct sales force that has established ties with the Company’s major customers.
According to its 2015 annual report, Evertec is also in the process of building a range of indirect sales channels that allow the Company to leverage the distribution capabilities of partners across several markets. The Company’s indirect sales channels will be operated by value-added resellers and distributors, as well as by joint venture partners and merchant acquiring alliance partners.
Customer Relationships
Evertec’s products and services are not available on a self-service basis. Purchases are made via direct contact with the Company’s sales team, which provides solutions tailored to the individual needs of its clients. The embedded nature of Evertec’s solutions, and the high costs associated with switching service providers, mean that the Company typically enjoys longstanding relationships with recurring customers. For example, customers representing approximately 97% of Evertec’s 2014 revenue continued to be customers in 2015. In most cases Evertec provides services under one to five year contracts
Evertec provides ongoing personal care to its customers through its support staff, who can be contacted by email, over the phone or via an online contact form. The Company also operates Twitter, Facebook, LinkedIn and YouTube accounts, through which it keeps its customers updated with company developments and can directly respond to customer feedback.
Key Activities
Evertec is a full-service transaction processing company. It provides a range of merchant acquiring, payment processing and business process management solutions to customers across multiple business sectors.
These solutions include, services to merchants that allow them to accept electronic methods of payment, such as debit, credit, prepaid and electronic benefit transfer cards; payment processing products and services for blue chip regional and global corporate customers, government agencies and financial institutions; and a full suite of business process management solutions, which include core bank processing, network hosting and management, information technology consulting services, business process outsourcing, item and cash processing, and fulfillment.
Key Partners
Evertec collaborates with a variety of companies to provide secure and reliable solutions and to identify potential customers. The Company’s partners principally comprise:
- Merchant referral partners, comprising financial institutions, trade associations, buying groups, and franchises that endorse Evertec’s services and refer their own customers to Evertec; and
- Alliance partners, comprising high-profile companies across the technology, financial services and payment solutions sectors that assist Evertec in developing effective payment solutions. Among Evertec’s merchant referral partners is Popular Inc, Evertec’s largest customer. The Company has alliance partnerships with CardinalCommerce, which has integrated its own payment services into Evertec’s solutions; Tyco Integrated Security, with which it collaborated to create a security solution model to help financial institutions prevent, respond and recover a range of security incidents; and Cisco, to which it assists in providing cloud services. Evertec was named Cisco’s Cloud Partner of the Year for Central America, North of South America and the Caribbean in 2013.
Key Resources
Evertec’s key resources are its technology and intellectual property, its personnel – notably its sales and support staff, and its partnerships.
According to its 2015 annual report, the Company owns numerous registrations for trademarks in jurisdictions across the world and owns or has licenses to use software and technology that is critical to the Company’s operational success. Searches of records held by the US Patent and Trademark Office, however, identified no patent applications filed in Evertec’s name.
Cost Structure
Evertec incurs costs in relation to the development of its technology and solutions, the management of its partnerships, the operation of its sales and marketing channels and the retention of its personnel. Evertec owns one property in Costa Rica, and leases office space in nine other locations across Latin America and the Caribbean.
Revenue Streams
Evertec principally generates revenue through its Merchant Acquiring and Payment Processing segments with the collection of transaction and discount fees paid by its merchant and financial customers.
Transaction-based fees are dependent on factors such as number of accounts or transactions processed, typically consisting of a fee per transaction or item processed, a percentage of dollar volume processed, or a fee per account on file.
Evertec also provides services, such as consulting, that generate a fixed fee on a monthly basis or fees based on time and expenses incurred. These services are provided primarily by the Company’s Business Solutions segment. Additionally, Evertec generates a small proportion of its revenue from service contracts.
In 2015 Evertec generated $374 million in revenue, an increase of 3% on the previous year. The Company’s Business Solutions segment accounted for $179.8 million, or 48.1%, of total revenues; the Merchant Acquiring business generated $85.4 million, or 22.9%, of total revenues; and the Payment Processing business accounted for $108.3 million, or 29.0%, of total revenues.