8 Intro to Longitudinal: Autism Example
library(tidyverse) # dplyr, tidyr, ggplot, the pipe, ect.
library(furniture) # nice table1() descriptives
library(stargazer) # display nice tables: summary & regression
library(texreg) # Convert Regression Output to LaTeX or HTML Tables
library(psych) # contains some useful functions, like headTail
library(car) # Companion to Applied Regression
library(lme4) # Linear, generalized linear, & nonlinear mixed models
library(HLMdiag) # Diagnostic Tools for for nlme & lmer4
library(sjstats) # ICC calculations
library(sjPlot) # Quick predicitive and diagnostic plots
library(optimx) # Different optimizers to solve mlm's
library(VIM) # Visualization and Imputation of Missing Values
library(effects) # Estimated Marginal Means
library(naniar) # Summaries and Visualisations for Missing Data
8.1 Background
The source: http://www-personal.umich.edu/~kwelch/
This data was collected by researchers at the University of Michigan (Anderson et al. 2007, Anderson et al. (2009)) as part of a prospective longitudinal study of 214 children. The children were divided into three diagnostic groups (bestest2
) when they were 2 years old: Autism (autism
), Pervasive Developmental Disorder (pdd
), and non-spectrum children (none in this sample). The study was designed to collect information on each child at approximately 2, 3, 5, 9, and 13 years of age, although not all children were measured for each age. One of the study objectives was to assess the relative influence of the initial diagnostic category, language proficiency at age 2, and other covariates on the developmental trajectories of the socialization (vsae
) of these children.
Study participants were children who had had consecutive referrals to one of two autism clinics before the age of 3 years. Social development was assessed at each age using the Vineland Adaptive Behavior Interview survey form, a parent-reported measure of socialization. VSAE (Vineland Socialization Age Equivalent), was a combined score that included assessments of interpersonal relationships, play/leisure time activities, and coping skills. Initial language development was assessed using the Sequenced Inventory of Communication Development (SICD) scale; children were placed into one of three groups (sicdegp
) based on their initial SICD scores on the expressive language subscale at age 2.
childid
Child’s identification number for this studysicdegp
Sequenced Inventory of Communication Development group (an assessment of expressive language development) - a factor. Levels arelow
,med
, andhigh
age2
Age (in years) centered around age 2 (age at diagnosis)vsae
Vineland Socialization Age Equivalent, Parent-reported measure of socialization, including measures of:- interpersonal relationships
- play/leisure time activities
- coping skills
gender
Child’s gender - a factor. Levels aremale
andfemale
race
Child’s race - a factor. Levels arewhite
andnonwhite
bestest2
Diagnosis at age 2 - a factor. Levels areautism
andpdd
(pervasive developmental disorder)
data(autism, package = "HLMdiag") # make the dataset 'active' from this package
tibble::glimpse(autism) # first look at the dataset and its varaibles
Observations: 604
Variables: 7
$ childid <int> 1, 1, 1, 1, 1, 10, 10, 10, 10, 100, 100, 100, 100, 10...
$ sicdegp <fct> high, high, high, high, high, low, low, low, low, hig...
$ age2 <dbl> 0, 1, 3, 7, 11, 0, 1, 7, 11, 0, 1, 3, 7, 0, 1, 7, 11,...
$ vsae <int> 6, 7, 18, 25, 27, 9, 11, 18, 39, 15, 24, 37, 135, 8, ...
$ gender <fct> male, male, male, male, male, male, male, male, male,...
$ race <fct> white, white, white, white, white, white, white, whit...
$ bestest2 <fct> pdd, pdd, pdd, pdd, pdd, autism, autism, autism, auti...
8.1.1 Long Format
data_long <- autism %>% # save the dataset as a new name
dplyr::mutate(childid = childid %>% factor) %>% # declare grouping var a factor
dplyr::mutate(age = 2 + age2) %>% # create the original age variable (unequally spaced)
dplyr::mutate(obs = age %>% factor %>% as.numeric) %>% # Observation Number = 1, 2, 3, 4, 5 (equally spaced)
dplyr::select(childid, # choose variables and order to keep
gender, race, bestest2, sicdegp,
obs, age, age2, vsae) %>%
dplyr::arrange(childid, age2) # sort observations
data_long %>%
psych::headTail(top = 11, bottom = 6)
childid gender race bestest2 sicdegp obs age age2 vsae
1 1 male white pdd high 1 2 0 6
2 1 male white pdd high 2 3 1 7
3 1 male white pdd high 3 5 3 18
4 1 male white pdd high 4 9 7 25
5 1 male white pdd high 5 13 11 27
6 2 male white autism low 1 2 0 6
7 2 male white autism low 2 3 1 7
8 2 male white autism low 3 5 3 7
9 2 male white autism low 4 9 7 8
10 2 male white autism low 5 13 11 14
11 3 male nonwhite pdd high 1 2 0 17
... <NA> <NA> <NA> <NA> <NA> ... ... ... ...
599 211 male nonwhite autism high 1 2 0 15
600 212 male white autism med 1 2 0 7
601 212 male white autism med 2 3 1 21
602 212 male white autism med 3 5 3 29
603 212 male white autism med 4 9 7 72
604 212 male white autism med 5 13 11 147
8.1.2 Wide Format
data_wide <- data_long %>% # save the dataset as a new name
dplyr::select(-age, -obs) %>% # delete (by deselecting) this variable
tidyr::spread(key = age2, # name the varaible that specifies how to spread
value = vsae, # name the variable to be spread out
sep = "_") %>% # add to combine the key-variables name before its value
dplyr::arrange(childid) # sort observations
Notice the missing values, displayed as NA
.
data_wide %>%
psych::headTail()
childid gender race bestest2 sicdegp age2_0 age2_1 age2_3 age2_7
1 1 male white pdd high 6 7 18 25
2 2 male white autism low 6 7 7 8
3 3 male nonwhite pdd high 17 18 12 18
4 4 male nonwhite autism high 12 14 38 114
... <NA> <NA> <NA> <NA> <NA> ... ... ... ...
152 209 male white autism med 2 4 <NA> 12
153 210 male white autism low 4 25 <NA> 130
154 211 male nonwhite autism high 15 <NA> <NA> <NA>
155 212 male white autism med 7 21 29 72
age2_11
1 27
2 14
3 24
4 <NA>
... ...
152 32
153 <NA>
154 <NA>
155 147
8.2 Exploratory Data Analysis
8.2.1 Demographic Summary
<IP_ADDRESS> Using the WIDE formatted dataset
Each person’s data is only stored on a single line
# Knit to Website: output = "html"
# Knit to PDF: output = "latex2"
# View on Screen: output = ""text", or "markdown", "html"
data_wide %>%
furniture::table1(bestest2, gender, race, # variables to summarize
splitby = ~ sicdegp, # how split into columns
test = TRUE, # compare the groups
output = "html") # for website
| low | med | high | P-Value | |
|---|---|---|---|---|
| n = 49 | n = 65 | n = 41 | ||
| bestest2 | 0.018 | |||
| autism | 38 (77.6%) | 42 (64.6%) | 20 (48.8%) | |
| pdd | 11 (22.4%) | 23 (35.4%) | 21 (51.2%) | |
| gender | 0.706 | |||
| male | 44 (89.8%) | 55 (84.6%) | 35 (85.4%) | |
| female | 5 (10.2%) | 10 (15.4%) | 6 (14.6%) | |
| race | 0.944 | |||
| white | 31 (63.3%) | 43 (66.2%) | 27 (65.9%) | |
| nonwhite | 18 (36.7%) | 22 (33.8%) | 14 (34.1%) |
<IP_ADDRESS> Using the LONG formatted dataset
Each person’s data is stored on multiple lines, one for each time point. To ensure the summary table is correct, you must choose a single time point per person.
# Knit to Website: output = "html"
# Knit to PDF: output = "latex2"
# View on Screen: output = ""text", or "markdown", "html"
data_long %>%
dplyr::filter(age == 2) %>% # restrict to one-line per person
furniture::table1(bestest2, gender, race, # variables to summarize
splitby = ~ sicdegp, # how split into columns
test = TRUE, # compare the groups
output = "html") # for website
| low | med | high | P-Value | |
|---|---|---|---|---|
| n = 49 | n = 65 | n = 40 | ||
| bestest2 | 0.025 | |||
| autism | 38 (77.6%) | 42 (64.6%) | 20 (50%) | |
| pdd | 11 (22.4%) | 23 (35.4%) | 20 (50%) | |
| gender | 0.714 | |||
| male | 44 (89.8%) | 55 (84.6%) | 35 (87.5%) | |
| female | 5 (10.2%) | 10 (15.4%) | 5 (12.5%) | |
| race | 0.95 | |||
| white | 31 (63.3%) | 43 (66.2%) | 26 (65%) | |
| nonwhite | 18 (36.7%) | 22 (33.8%) | 14 (35%) |
8.2.2 Baseline Summary
<IP_ADDRESS> Using the LONG formatted dataset
Each person’s data is stored on multiple lines, one for each time point. To ensure the summary table is correct, you must choose a single time point per person.
# Knit to Website: output = "html"
# Knit to PDF: output = "latex2"
# View on Screen: output = ""text", or "markdown", "html"
data_long %>%
dplyr::filter(age == 2) %>%
furniture::table1(vsae,
splitby = ~ sicdegp,
test = TRUE,
output = "html")
| low | med | high | P-Value | |
|---|---|---|---|---|
| n = 49 | n = 65 | n = 40 | ||
| vsae | <.001 | |||
| 7.1 (2.7) | 8.7 (3.5) | 12.4 (3.4) |
8.2.3 Missing Data & Attrition
<IP_ADDRESS> VIM
package
Plot the amount of missing vlaues and the amount of each patter of missing values.
data_wide %>%
VIM::aggr(numbers = TRUE, # shows the number to the far right
prop = FALSE) # shows counts instead of proportions
<IP_ADDRESS> naniar
package
data_wide %>%
naniar::vis_miss()
data_wide %>%
naniar::gg_miss_var()
data_wide %>%
naniar::gg_miss_var(show_pct = TRUE, # x-axis is PERCENT, not count
facet = sicdegp) + # create seperate panels
theme_bw() # add ggplot layers as normal
data_wide %>%
naniar::gg_miss_upset()
data_wide %>%
naniar::gg_miss_upset(sets = c("age2_0_NA",
"age2_1_NA",
"age2_3_NA",
"age2_7_NA",
"age2_11_NA"),
keep.order = TRUE)
8.2.4 Means Across Time
<IP_ADDRESS> Using the WIDE formatted dataset
Default = COMPLETE CASES ONLY!!!
Note - the sample size at each time point is the same, but subjects are only included if they have data at every time point
# Knit to Website: output = "html"
# Knit to PDF: output = "latex2"
# View on Screen: output = ""text", or "markdown", "html"
data_wide %>%
furniture::table1(age2_0, age2_1, age2_3, age2_7, age2_11,
splitby = ~ sicdegp,
test = TRUE,
na.rm = TRUE, # default: COMPLETE CASES ONLY!!!!!
output = "html")
| low | med | high | P-Value | |
|---|---|---|---|---|
| n = 10 | n = 17 | n = 14 | ||
| age2_0 | 0.003 | |||
| 6.6 (2.9) | 9.5 (4.1) | 12.5 (4.1) | ||
| age2_1 | <.001 | |||
| 8.0 (2.1) | 14.3 (6.1) | 19.5 (6.1) | ||
| age2_3 | <.001 | |||
| 12.5 (5.5) | 20.2 (8.6) | 33.9 (18.5) | ||
| age2_7 | <.001 | |||
| 12.3 (8.1) | 34.4 (22.5) | 56.9 (23.5) | ||
| age2_11 | 0.009 | |||
| 22.4 (24.4) | 57.8 (50.3) | 80.9 (44.4) |
Specify All data:
note - that the smaple sizes will be different for each time point
# Knit to Website: output = "html"
# Knit to PDF: output = "latex2"
# View on Screen: output = ""text", or "markdown", "html"
data_wide %>%
furniture::table1(age2_0, age2_1, age2_3, age2_7, age2_11,
splitby = ~ sicdegp,
test = TRUE,
na.rm = FALSE, # INCLUDES ALL DATA !!!!
output = "html")
| low | med | high | P-Value | |
|---|---|---|---|---|
| n = 49 | n = 65 | n = 41 | ||
| age2_0 | <.001 | |||
| 7.1 (2.7) | 8.7 (3.5) | 12.4 (3.4) | ||
| age2_1 | <.001 | |||
| 12.0 (6.3) | 13.7 (5.4) | 21.2 (9.4) | ||
| age2_3 | <.001 | |||
| 15.0 (7.9) | 17.7 (8.0) | 33.9 (15.8) | ||
| age2_7 | <.001 | |||
| 25.6 (28.4) | 32.1 (23.4) | 64.1 (34.6) | ||
| age2_11 | <.001 | |||
| 37.1 (35.5) | 56.2 (47.9) | 88.7 (46.3) |
<IP_ADDRESS> Using the LONG formatted dataset
Each person’s data is stored on multiple lines, one for each time point.
FOR ALL DATA!
data_sum_all <- data_long %>%
dplyr::group_by(sicdegp, age2) %>% # specify the groups
dplyr::summarise(vsae_n = n(), # count of valid scores
vsae_mean = mean(vsae), # mean score
vsae_sd = sd(vsae), # standard deviation of scores
vsae_sem = vsae_sd / sqrt(vsae_n)) # stadard error for the mean of scores
data_sum_all
# A tibble: 15 x 6
# Groups: sicdegp [?]
sicdegp age2 vsae_n vsae_mean vsae_sd vsae_sem
<fct> <dbl> <int> <dbl> <dbl> <dbl>
1 low 0 49 7.06 2.73 0.389
2 low 1 46 12.0 6.33 0.934
3 low 3 29 15.0 7.92 1.47
4 low 7 36 25.6 28.4 4.74
5 low 11 28 37.1 35.5 6.72
6 med 0 65 8.74 3.51 0.436
7 med 1 62 13.7 5.42 0.688
8 med 3 36 17.7 8.00 1.33
9 med 7 48 32.1 23.4 3.38
10 med 11 40 56.2 47.9 7.58
11 high 0 40 12.4 3.43 0.542
12 high 1 38 21.2 9.38 1.52
13 high 3 26 33.9 15.8 3.09
14 high 7 35 64.1 34.6 5.85
15 high 11 26 88.7 46.3 9.09
FOR COMPLETE CASES ONLY!!!
data_sum_cc <- data_long %>%
dplyr::group_by(childid) %>% # group-by child
dplyr::mutate(child_vsae_n = n()) %>% # count the number of valid VSAE scores
dplyr::filter(child_vsae_n == 5) %>% # restrict to only thoes children with 5 valid scores
dplyr::group_by(sicdegp, age2) %>% # specify the groups
dplyr::summarise(vsae_n = n(), # count of valid scores
vsae_mean = mean(vsae), # mean score
vsae_sd = sd(vsae), # standard deviation of scores
vsae_sem = vsae_sd / sqrt(vsae_n)) # stadard error for the mean of scores
data_sum_cc
# A tibble: 15 x 6
# Groups: sicdegp [?]
sicdegp age2 vsae_n vsae_mean vsae_sd vsae_sem
<fct> <dbl> <int> <dbl> <dbl> <dbl>
1 low 0 10 6.6 2.88 0.909
2 low 1 10 8 2.11 0.667
3 low 3 10 12.5 5.54 1.75
4 low 7 10 12.3 8.07 2.55
5 low 11 10 22.4 24.4 7.73
6 med 0 17 9.47 4.12 1.00
7 med 1 17 14.3 6.08 1.47
8 med 3 17 20.2 8.57 2.08
9 med 7 17 34.4 22.5 5.47
10 med 11 17 57.8 50.3 12.2
11 high 0 14 12.5 4.09 1.09
12 high 1 14 19.5 6.15 1.64
13 high 3 14 33.9 18.5 4.94
14 high 7 14 56.9 23.5 6.29
15 high 11 14 80.9 44.4 11.9
8.2.5 Person Profile Plots
Use the data in LONG format
<IP_ADDRESS> Unequally Spaced
data_long %>%
dplyr::mutate(sicdegp = fct_recode(sicdegp,
"Low Communication" = "low",
"Medium Communication" = "med",
"High Communication" = "high")) %>%
ggplot(aes(x = age,
y = vsae)) +
geom_point(size = 0.75) +
geom_line(aes(group = childid),
alpha = .5,
size = 1) +
facet_grid(. ~ sicdegp) +
theme_bw() +
scale_x_continuous(breaks = c(2, 3, 5, 9, 13)) +
labs(x = "Age of Child, Years",
y = "Vineland Socialization Age Equivalent",
color = "Sequenced Inventory of Communication Development") +
geom_smooth(aes(color = "Flexible"),
method = "loess",
se = FALSE,) +
geom_smooth(aes(color = "Linear"),
method = "lm",
se = FALSE) +
scale_color_manual(name = "Smoother Type: ",
values = c("Flexible" = "blue",
"Linear" = "red")) +
theme(legend.position = "bottom",
legend.key.width = unit(2, "cm"))
<IP_ADDRESS> Equally Spaced
data_long %>%
dplyr::mutate(sicdegp = fct_recode(sicdegp,
"Low Communication" = "low",
"Medium Communication" = "med",
"High Communication" = "high")) %>%
ggplot(aes(x = obs,
y = vsae)) +
geom_point(size = 0.75) +
geom_line(aes(group = childid),
alpha = .5,
size = 1) +
facet_grid(. ~ sicdegp) +
theme_bw() +
labs(x = "Observation Number",
y = "Vineland Socialization Age Equivalent",
color = "Sequenced Inventory of Communication Development") +
geom_smooth(aes(color = "Flexible"),
method = "loess",
se = FALSE,) +
geom_smooth(aes(color = "Linear"),
method = "lm",
se = FALSE) +
scale_color_manual(name = "Smoother Type: ",
values = c("Flexible" = "blue",
"Linear" = "red")) +
theme(legend.position = "bottom",
legend.key.width = unit(2, "cm"))
8.2.6 Side-by-side Boxplots
data_long %>%
ggplot(aes(x = sicdegp,
y = vsae,
fill = sicdegp)) +
geom_boxplot() +
theme_bw() +
facet_grid(. ~ age,
labeller = "label_both") +
theme(legend.position = "top")
8.2.7 Means Plots
<IP_ADDRESS> Default stat_summary
It is nice that the stat_summary()
layer computes the standard error for the mean for you using the data in LONG format
data_long %>%
ggplot(aes(x = age,
y = vsae,
color = sicdegp)) +
stat_summary() + # default: points at MEAN and extend vertically 1 standard error for the mean
stat_summary(fun.y = "mean", # plot the means
geom = "line") + # ...and connect with lines
theme_bw() +
scale_x_continuous(breaks = c(2, 3, 5, 9, 13)) +
theme(legend.position = c(0, 1),
legend.justification = c(-0.25, 1.25),
legend.background = element_rect(color = "black"))
data_long %>%
ggplot(aes(x = obs,
y = vsae,
color = sicdegp)) +
stat_summary() + # default: points at MEAN and extend vertically 1 standard error for the mean
stat_summary(fun.y = "mean", # plot the means
geom = "line") + # ...and connect with lines
theme_bw() +
theme(legend.position = c(0, 1),
legend.justification = c(-0.25, 1.25),
legend.background = element_rect(color = "black"))
<IP_ADDRESS> Manually Summarized
data_sum_all %>%
dplyr::mutate(age = age2 + 2) %>%
ggplot() +
aes(x = age,
y = vsae_mean,
color = sicdegp) +
geom_errorbar(aes(ymin = vsae_mean - vsae_sem, # mean +/- one SE for the mean
ymax = vsae_mean + vsae_sem),
width = .25) +
geom_point(aes(shape = sicdegp),
size = 3) +
geom_line(aes(group = sicdegp)) +
theme_bw() +
scale_x_continuous(breaks = c(2, 3, 5, 9, 13)) +
labs(x = "Age of Child, Years",
y = "Vineland Socialization Age Equivalent",
color = "Sequenced Inventory of Communication Development:",
shape = "Sequenced Inventory of Communication Development:",
linetype = "Sequenced Inventory of Communication Development:") +
theme(legend.position = "bottom",
legend.key.width = unit(2, "cm"))
8.3 Model 1: Full model with ‘loaded’ mean structure
Take top-down approach: Quadratic regression model, describing vsae
as a function of age2
Each child has a unique parabolic trajectory over time, with coefficients that vary randomly around fixed-effects defining a mean growth curve for each SICD group. Since there is no
age
= 0 in our data, we will use theage2
variables, which isage
-2, so that intercept has meaning (mean at baseline age).
- Fixed-effects
age2
ageI(age2^2)
quadratic age or age-squared, theI()
denotes an internal calculated variablesicdegp
SICD group (reference group = low)- SICD group x age/age-squared interactions
- Random-effects
- intercep
- age and age-squared
8.3.1 Fit the Model
fit_lmer_1_re <- lmer(vsae ~ age2*sicdegp + I(age2^2)*sicdegp +
(1 + age2 + I(age2^2) | childid),
data = data_long,
REML = TRUE)
8.3.2 Table of Prameter Estimates
# Knit to Website: texreg::htmlreg()
# Knit to PDF: texreg::texreg()
# View on Screen: texreg::screenreg()
texreg::htmlreg(list(fit_lmer_1_re),
caption = "MLM: Full Model",
caption.above = TRUE,
single.row = TRUE)
| Model 1 | ||
|---|---|---|
| (Intercept) | 8.40 (0.75)*** | |
| age2 | 2.28 (0.74)** | |
| sicdegpmed | 1.26 (0.99) | |
| sicdegphigh | 5.39 (1.11)*** | |
| I(age2^2) | 0.07 (0.08) | |
| age2:sicdegpmed | 0.43 (0.98) | |
| age2:sicdegphigh | 3.31 (1.08)** | |
| sicdegpmed:I(age2^2) | -0.00 (0.11) | |
| sicdegphigh:I(age2^2) | 0.14 (0.12) | |
| AIC | 4586.50 | |
| BIC | 4656.96 | |
| Log Likelihood | -2277.25 | |
| Num. obs. | 604 | |
| Num. groups: childid | 155 | |
| Var: childid (Intercept) | 1.27 | |
| Var: childid age2 | 14.00 | |
| Var: childid I(age2^2) | 0.16 | |
| Cov: childid (Intercept) age2 | -0.13 | |
| Cov: childid (Intercept) I(age2^2) | 0.41 | |
| Cov: childid age2 I(age2^2) | -0.61 | |
| Var: Residual | 37.20 | |
| p < 0.001, p < 0.01, p < 0.05 |
8.3.3 Plot of the Estimated Marginal Means
Note: the \(x-axis\) is the age2
(age - 2) variable, so it represents time since age 2 (or baseline)
sjPlot::plot_model(fit_lmer_1_re,
type = "pred",
terms = c("age2", "sicdegp"),
title = "Model 1: Loaded Means Structure")
8.4 Model 2A: Drop Random Intercepts
Note: There seems to be relatively little variation in baseline measurements of VSAE across individuals in the same SICD group, so the variation at age 2 can be attributed to random error, rather than between-subject variation.
This indicates we may want to try removing the random intercepts, while retaining the same fixed- and other random-effects.
This new model implies that children have common initial VSAE value at age 2, given their SICD group.
8.4.1 Fit the Model
fit_lmer_2a_re <- lmer(vsae ~ age2*sicdegp + I(age2^2)*sicdegp +
(-1 + age2 + I(age2^2) | childid),
data = data_long,
REML = TRUE)
8.4.2 Assess the Signifcance
anova(fit_lmer_1_re, fit_lmer_2a_re, refit = FALSE)
Data: data_long
Models:
fit_lmer_2a_re: vsae ~ age2 * sicdegp + I(age2^2) * sicdegp + (-1 + age2 + I(age2^2) |
fit_lmer_2a_re: childid)
fit_lmer_1_re: vsae ~ age2 * sicdegp + I(age2^2) * sicdegp + (1 + age2 + I(age2^2) |
fit_lmer_1_re: childid)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
fit_lmer_2a_re 13 4587.0 4644.2 -2280.5 4561.0
fit_lmer_1_re 16 4586.5 4657.0 -2277.2 4554.5 6.4643 3 0.09108
fit_lmer_2a_re
fit_lmer_1_re .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The more complicated model (including random intercepts) does NOT fit better, thus the random intercepts may be removed from the model. Model 2a is bettern than Model 1
8.5 Model 2B: Drop Random Quadratic Slope
We should formally test the necessity of quadratic age random-effect.
Comparison of nested models with REML-based LRT using a 50:50 mixture χ2-distribution with 1 and 2 df Difference of 2 covariance parameters
8.5.1 Fit the Model
fit_lmer_2b_re <- lmer(vsae ~ age2*sicdegp + I(age2^2)*sicdegp +
(-1 + age2 | childid),
REML = TRUE,
data = data_long)
8.5.2 Assess the Signifcance
anova(fit_lmer_2a_re, fit_lmer_2b_re, refit = FALSE)
Data: data_long
Models:
fit_lmer_2b_re: vsae ~ age2 * sicdegp + I(age2^2) * sicdegp + (-1 + age2 | childid)
fit_lmer_2a_re: vsae ~ age2 * sicdegp + I(age2^2) * sicdegp + (-1 + age2 + I(age2^2) |
fit_lmer_2a_re: childid)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
fit_lmer_2b_re 11 4669.3 4717.7 -2323.7 4647.3
fit_lmer_2a_re 13 4587.0 4644.2 -2280.5 4561.0 86.34 2 < 2.2e-16
fit_lmer_2b_re
fit_lmer_2a_re ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The more complicated model (including random intercepts) DOES fit better, thus the random sopes for both the linear AND the quadratic effect of age should be retained in the model. Model 2a is better than model 2b
8.6 Model 3: Drop Quadratic Time Fixed Effect
Fit the previous ‘best’ model via ML, not REML to compare nested model that differe in terms of fixed effects only
8.6.1 Fit the Models
fit_lmer_2a_ml <- lmer(vsae ~ age2*sicdegp + I(age2^2)*sicdegp +
(-1 + age2 + I(age2^2) | childid),
data = data_long,
REML = FALSE)
fit_lmer_3_ml <- lmer(vsae ~ age2*sicdegp +
(-1 + age2 + (age2^2) | childid),
data = data_long,
REML = FALSE)
8.6.2 Assess the Signifcance
anova(fit_lmer_2a_ml, fit_lmer_3_ml)
Data: data_long
Models:
fit_lmer_3_ml: vsae ~ age2 * sicdegp + (-1 + age2 + (age2^2) | childid)
fit_lmer_2a_ml: vsae ~ age2 * sicdegp + I(age2^2) * sicdegp + (-1 + age2 + I(age2^2) |
fit_lmer_2a_ml: childid)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
fit_lmer_3_ml 8 4667.4 4702.6 -2325.7 4651.4
fit_lmer_2a_ml 13 4582.1 4639.3 -2278.0 4556.1 95.355 5 < 2.2e-16
fit_lmer_3_ml
fit_lmer_2a_ml ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The more complicated model (including fixed interaction between quadratic time and SICD group) DOES fit better, thus the higher level interaction should be retained in the model. Model 2a is better than model 3.
8.7 Final Model
8.7.1 Table of Parameter Esitmates
# Knit to Website: texreg::htmlreg()
# Knit to PDF: texreg::texreg()
# View on Screen: texreg::screenreg()
texreg::htmlreg(list(fit_lmer_2a_re),
caption = "MLM: Final Model",
caption.above = TRUE,
single.row = TRUE,
digits = 4)
| Model 1 | ||
|---|---|---|
| (Intercept) | 8.4085 (0.7370)*** | |
| age2 | 2.2694 (0.7399)** | |
| sicdegpmed | 1.2644 (0.9741) | |
| sicdegphigh | 5.3646 (1.0907)*** | |
| I(age2^2) | 0.0721 (0.0790) | |
| age2:sicdegpmed | 0.4289 (0.9808) | |
| age2:sicdegphigh | 3.3259 (1.0760)** | |
| sicdegpmed:I(age2^2) | 0.0007 (0.1038) | |
| sicdegphigh:I(age2^2) | 0.1335 (0.1138) | |
| AIC | 4586.9689 | |
| BIC | 4644.2154 | |
| Log Likelihood | -2280.4845 | |
| Num. obs. | 604 | |
| Num. groups: childid | 155 | |
| Var: childid age2 | 13.9919 | |
| Var: childid I(age2^2) | 0.1338 | |
| Cov: childid age2 I(age2^2) | -0.4436 | |
| Var: Residual | 37.9867 | |
| p < 0.001, p < 0.01, p < 0.05 |
8.7.2 Interpretation of Fixed Effects
<IP_ADDRESS> Reference Group: low
SICD group
\(\gamma_{0}\) = 8.408 is the estimated marginal mean VSAE score for children in the
low
SICD, at 2 years of age\(\gamma_{a}\) = 2.269 and \(\gamma_{a^2}\) = 0.072 are the fixed effects for age and age-squared on VSAE for children in the
low
SICD group (change over time)
Thus the equation for the estimated marginal mean VASE trajectory for the low
SICD group is:
\[ \begin{align*} VASE =& \gamma_{0} + \gamma_{a} (AGE - 2) + \gamma_{a^2} (AGE - 2)^2 \\ =& 8.408 + 2.269 (AGE - 2) + 0.072 (AGE - 2)^2 \\ \end{align*} \]
<IP_ADDRESS> First Comparison Group: medium
SICD group
\(\gamma_{med}\) = 1.264 is the DIFFERENCE in the estimated marginal mean VSAE score for children in the
medium
vs. thelow
SICD, at 2 years of age\(\gamma_{med:\;a}\) = 0.429 and \(\gamma_{med:\;a^2}\) = 0.001 are the DIFFERENCE in the fixed effects for age and age-squared on VSAE for children in the
medium
vs. thelow
SICD group
Thus the equation for the estimated marginal mean VASE trajectory for the medium
SICD group is:
\[ \begin{align*} VASE =& (\gamma_{0} + \gamma_{med}) + (\gamma_{a} + \gamma_{med:\;a}) (AGE - 2) + (\gamma_{a^2} + \gamma_{med:\;a^2})(AGE - 2)^2 \\ =& (8.408 + 1.264) + (2.269 + 0.429) (AGE - 2) + (0.072 + 0.001)(AGE - 2)^2 \\ =& 9.673 + 2.698 (AGE - 2) + 0.073 (AGE - 2)^2 \\ \end{align*} \]
<IP_ADDRESS> Second Comparison Group: high
SICD group
\(\gamma_{hi}\) = 5.365 is the DIFFERENCE in the estimated marginal mean VSAE score for children in the
high
vs. thelow
SICD, at 2 years of age\(\gamma_{hi:\;a}\) = 3.326 and \(\gamma_{hi:\;a^2}\) = 0.133 are the DIFFERENCE in the fixed effects for age and age-squared on VSAE for children in the
high
vs. thelow
SICD group
Thus the equation for the estimated marginal mean VASE trajectory for the high
SICD group is:
\[ \begin{align*} VASE =& (\gamma_{0} + \gamma_{hi}) + (\gamma_{a} + \gamma_{hi:\;a}) (AGE - 2) + (\gamma_{a^2} + \gamma_{hi:\;a^2})(AGE - 2)^2 \\ =& (8.408 + 5.365) + (2.269 + 3.326) (AGE - 2) + (0.072 + 0.133)(AGE - 2)^2 \\ =& 13.773 + 5.595 (AGE - 2) + 0.206 (AGE - 2)^2 \\ \end{align*} \]
8.7.3 Interpretation of Random Effects
lme4::VarCorr(fit_lmer_2a_re)%>%
print(comp = c("Variance", "Std.Dev"),
digits = 3)
Groups Name Variance Std.Dev. Corr
childid age2 13.992 3.741
I(age2^2) 0.134 0.366 -0.32
Residual 37.987 6.163
Here a group of observations = a CHILD
<IP_ADDRESS> Residual Varaince
Within-child-variance
- \(e_{ti}\) the residuals associated with observation at time \(t\) on child \(i\)
\[ \sigma^2 = \sigma^2_e = VAR[e_{ti}] = 37.987 \]
<IP_ADDRESS> 2 Variance Components
Between-children slope variances
Random LINEAR effect of age variance
- \(u_{1i}\) the DIFFERENCE between child \(i\)’s specific linear component for age and the fixed linear component for age, given their SICD group
\[ \tau_{11} = \sigma^2_{u1} = VAR[u_{1i}] = 13.99 \]
Random QUADRATIC effect of age variance
- \(u_{2i}\) the DIFFERENCE between child \(i\)’s specific quadratic component for age and the fixed quadratic component for age, given their SICD group
\[ \tau_{22} = \sigma^2_{u2} = VAR[u_{2i}] = 0.13 \]
<IP_ADDRESS> 1 Covariance (or correlation) Components
Slope-slope covariance
Random LINEAR and Quadratic effect of age covariance:
- correlation = -0.32
\[ \tau_{12} = \sigma^2_{u12} = COV[u_{1i}, u_{2i}] = -0.44 \]
8.7.4 Assumption Checking
The residuals are:
Assumed to be normally, independently, and identically distributed (conditional on other random-effects)
Assumed independent of random-effects
\[ e_{ti} \sim N(0, \sigma^2) \]
sjPlot::plot_model(fit_lmer_2a_re, type = "diag")
[[1]]
[[2]]
[[2]]$childid
[[3]]
[[4]]
8.7.5 Plot of the Estimated Marginal Means
<IP_ADDRESS> Quick and Default
Note: the \(x-axis\) is the age2
(age - 2) variable, so it represents time since age 2 (or baseline)
sjPlot::plot_model(fit_lmer_2a_re,
type = "pred", # estimated marginal means (no random effects)
terms = c("age2", "sicdegp"), # 1st = x-axiz, 2nd = seperate lines
title = "Final Model (2a)") # Optional title
<IP_ADDRESS> More Customized - Color
This version would look better on a poster or in a slide presentation.
effects::Effect(focal.predictors = c("age2","sicdegp"), # variables involved in interactions
mod = fit_lmer_2a_re,
xlevels = list(age2 = seq(from = 0, to = 11, by = .1))) %>% # add more values to smooth out the prediction lines and ribbons
data.frame() %>%
dplyr::mutate(age = age2 + 2) %>% # trandform back to standard years
dplyr::mutate(sicdegp = factor(sicdegp,
levels = c("high", "med", "low"),
labels = c("High", "Medium", "Low"))) %>%
ggplot(aes(x = age,
y = fit,
group = sicdegp)) +
geom_ribbon(aes(ymin = lower, # 95% Confidence Intervals
ymax = upper,
fill = sicdegp),
alpha = .3) +
geom_line(aes(linetype = sicdegp,
color = sicdegp),
size = 1) +
scale_x_continuous(breaks = c(2, 3, 5, 9, 13)) + # mark values that were actually measured
scale_y_continuous(breaks = seq(from = 0, to = 120, by = 20)) +
scale_linetype_manual(values = c("solid", "longdash", "dotted")) +
theme_bw() +
theme(legend.position = c(.2, .8),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2.5, "cm")) +
labs(x = "Age, in years",
y = "Estimated Marginal Mean\nVineland Socialization Age Equivalent",
linetype = "Communication",
fill = "Communication",
color = "Communication")
<IP_ADDRESS> More Customized - Black and White
This version would be better for a publication.
effects::Effect(focal.predictors = c("age2","sicdegp"),
mod = fit_lmer_2a_re,
xlevels = list(age2 = seq(from = 0, to = 11, by = .1))) %>%
data.frame() %>%
dplyr::mutate(age = age2 + 2) %>%
dplyr::mutate(sicdegp = factor(sicdegp,
levels = c("high", "med", "low"),
labels = c("High", "Medium", "Low"))) %>%
ggplot(aes(x = age,
y = fit,
group = sicdegp)) +
geom_ribbon(aes(ymin = lower,
ymax = upper,
fill = sicdegp),
alpha = .4) +
geom_line(aes(linetype = sicdegp),
size = .7) +
scale_x_continuous(breaks = c(2, 3, 5, 9, 13)) +
scale_y_continuous(breaks = seq(from = 0, to = 120, by = 20)) +
scale_linetype_manual(values = c("solid", "longdash", "dotted")) +
scale_fill_manual(values = c("gray10", "gray40", "gray60")) +
theme_bw() +
theme(legend.position = c(.15, .8),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2, "cm")) +
labs(x = "Age, in years",
y = "Estimated Marginal Mean\nVineland Socialization Age Equivalent",
linetype = "Communication",
fill = "Communication")
8.7.6 Blups vs. Fixed Effects
BLUP = Best Linear Unbiased Predictor
A BLUP is the specific prediction for an individual supject, showin by black lines below. This includes the fixed effects as well as the specific random effects for a given individual.
Comparatively, the blue lines below display the predictions for fixed effects only.
data_long %>%
dplyr::mutate(sicdegp = fct_recode(sicdegp,
"Low Communication" = "low",
"Medium Communication" = "med",
"High Communication" = "high")) %>%
dplyr::mutate(pred_fixed = predict(fit_lmer_2a_re, re.form = NA)) %>% # fixed effects only
dplyr::mutate(pred_wrand = predict(fit_lmer_2a_re)) %>% # fixed and random effects together
ggplot(aes(x = age2,
y = vsae)) +
geom_line(aes(y = pred_wrand, # BLUP = fixed and random effects together
group = childid,
color = "BLUP",
size = "BLUP")) +
geom_line(aes(y = pred_fixed, # fixed effects only
group = sicdegp,
color = "Fixed",
size = "Fixed")) +
scale_color_manual(name = "Model: ",
values = c("BLUP" = "black",
"Fixed" = "blue")) +
scale_size_manual(name = "Model: ",
values = c("BLUP" = .5,
"Fixed" = 1.5)) +
facet_grid(. ~ sicdegp) +
theme_bw() +
labs(x = "Age, in years",
y = "Estimated Marginal Mean\nVineland Socialization Age Equivalent") +
theme(legend.position = "bottom",
legend.key.width = unit(1.5, "cm"))
data_long %>%
dplyr::mutate(pred_fixed = predict(fit_lmer_2a_re, re.form = NA)) %>%
dplyr::mutate(pred_wrand = predict(fit_lmer_2a_re)) %>%
dplyr::filter(childid %in% sample(levels(data_long$childid), 25)) %>% # 25 randomly sampled children
ggplot(aes(x = age,
y = vsae)) +
geom_point(aes(color = sicdegp),
size = 3) +
geom_line(aes(y = pred_wrand,
linetype = "BLUP",
size = "BLUP"),
color = "black") +
geom_line(aes(y = pred_fixed,
color = sicdegp,
linetype = "Fixed",
size = "Fixed")) +
scale_linetype_manual(name = "Model: ",
values = c("BLUP" = "longdash",
"Fixed" = "solid")) +
scale_size_manual(name = "Model: ",
values = c("BLUP" = .5,
"Fixed" = 1)) +
facet_wrap(. ~ childid, labeller = "label_both") +
theme_bw() +
theme(legend.position = "bottom",
legend.key.width = unit(1.5, "cm")) +
labs(x = "Age, in years",
y = "Estimated Marginal Mean\nVineland Socialization Age Equivalent",
color = "Communication:")


Telephone:(469)-516-5147
Work<EMAIL_ADDRESS>UTD<EMAIL_ADDRESS>MATLAB, Python, C/C++, Java, C#, MIPS, PL/SQL, HTML, CSS, JavaScript.
Office Tools, AutoCAD, PS, Origin, Oracle DBMS, OpenCV, TensorFlow.
Master of Computer Science
Aug 2019 - Nov 2021
Master of Science in Particle Physics and Nuclear Physics
Sept 2015 - June 2018
Bachelor of Science in Nuclear Physics
Sept 2011 - July 2015
AutoCAD Map Draw Plugin (C#)
Mar 2019 - May 2019
AutoCAD Map Draw Plugin (C#)
Apr 2019 - July 2019
Mind Reader (MIPS)
Sept 2019 - Nov 2019
Task Executor (Java)
Mar 2020 - Mar 2020
Database Design for Food Product (PL/SQL)
Jan 2020 - May 2020
Color Project (Python, OpenCV)
Feb 2020 - Mar 2020
Experiments with CNN in TensorFlow (Python, TensorFLow)
Apr 2020 - Apr 2020
Perspective Projection Project (Python, OpenCV)
Apr 2020 - June 2020


Former WWE Superstar wants Bray Wyatt to credit him for inspiring "The Fiend" character
by Abhilash MendheFormer WWE Superstar Sinn Bodhi recently appeared on Jordan Garber's NOW show, and discussed a string of Pro Wrestling topics. Bodhi, stated that the character of Bray Wyatt's "The Fiend" is influenced by the 'Kizarny' character from his WWE run, and he would like for Wyatt to acknowledge the same.
Sinn Bodhi was signed to a WWE developmental contract back in 2007, and had a brief run in Florida Championship Wrestling. Two years later, he made his SmackDown Live debut by defeating MVP. Soon after, Kizarny was released from WWE. He has been an indie mainstay since his release.
Also read: Update on the sports career of Brock Lesnar's daughter Mya Lynn
Bodhi had some bold words in regards to his 'Kizarny' character, and said that the gimmick influenced several future characters, one of those being Bray Wyatt's "The Fiend". Bodhi added that he would like Bray to reference 'Kizarny' as an inspiration, so that it helps him in the indies.
"I have no problem with circus guys like Bray Wyatt doing anything in this business. I don't have a copyright, it's just that if someone wants to be influenced or borrow something be my guest, but just reference it and put over where you got an idea. I have so many influences on things I do that I don't take anything outright, I just take bits and pieces and morph it into myself. If he was to say Bodhi was where I got a lot of my stuff from, that would help stuff out from me with promoters."
We want to know what you think of the matches that you see on TV! Go to our WWE page here and rate and comment what you thought of them!


1 write to Path
Microsoft.PowerShell.Commands.Utility (1)
commands\utility\MatchString.cs (1)
1618
result.
Path
= filename;
2 references to Path
Microsoft.PowerShell.Commands.Utility (2)
commands\utility\MatchString.cs (2)
132
/// This is a readonly property calculated from the path <see cref="
Path
"/>.
196
return this.
Path
;


--- layout: post status: publish published: true title: Cubs Convention 2015 - Episode 6.54 author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 10809 wordpress_url: http://ivyenvy.com/?p=10809 date: '2015-01-18 22:52:01 +0000' date_gmt: '2015-01-19 04:52:01 +0000' categories: - Podcast tags: - Cubs Convention - Cubs Convention 2015 comments: [] ---
Welcome to the 291st episode of The Ivy Envy Podcast. This episode is unlike any other episode of our podcast in that it was recorded on an Amtrak train.
On this episode, Andy and Corey recap Cubs Convention 2015. From the opening ceremony to the final session, we have you covered.
Sessions described:


Class JS_Widget
- WP_Widget
- codeable_datepicker_widget\app\frontend\JS_Widget
Direct known subclasses
Methods summary
public
|
#
__construct( $id_base, $name, $widget_options = array(), $control_options = array(), $js_ns = '' )
|
public
|
|
public
|
|
public
|
#
form_javascript_init( )
Form javascript initialization code here. "widget" and "widget_id" available. |
public
|
#
form_maybe_call_javascript_init( $callee_this )
Called on 'in_widget_form' action (ie directly after form()) when in traditional widgets interface. Run init directly unless we're newly added. |
public
|
Properties summary
public
string
|
$js_ns
|
#
'js_widget'
|
public
string
|
$js_init_func
|
#
''
|
public
boolean
|
$is_customizer
|
#
false
|


This page is a summary of all of the binaries that are created after 'make; make install' is run in the enzo code bundle. They should be located in the bin/ directory. Links to the various pages of the manual that describe a particular binary are also included.
enzo
This is the main simulation code executable. See this page for more detailed information. In addition to performing the actual simulations, the enzo binary performs projections and various kinds of extractions. Enzo projections are described on here and extractions are described on here. The projection output file is called amr.project and the extraction file is called amr.grid.
When an Enzo simulation is run, at every datastep several files are output. There is an ascii file which has no extension (ie, if your output dumps are named RedshiftOutput then the first parameter file output will be RedshiftOutput0000). This file contains all of the parameters that Enzo needs to be able to restart the simulation, such as cosmology information, redshift, information on box volume, and which physics modules are turned on. Another file, which has the same root and the extension '.hierarchy', contains ascii information on all of the Enzo AMR grids, such as their positions, sizes, number of particles per grid, etc. There are two files with extensions '.boundary' and '.boundary.hdf' which contain information on boundary conditions. And then there will be at least one file with the extension '.gridNNNN', where NNNN is a number between 0 and 9999. For simulations with more than 10,000 files, the numbering will have 5 digits and start from 10000. These files are where all of the simulation data is actually contained.
usage: enzo [options] <param_file> general options: -d display debug information -r restart -x extract -l <level> level of extract -p <dimension> project to plane -m smooth projection -o output as particle data -h help -i information output -s <dim0> [<dim1> [<dim2>]] start index region -e <dim0> [<dim1> [<dim2>]] end index region -b <dim0> [<dim1> [<dim2>]] begin coordinates -f <dim0> [<dim1> [<dim2>]] finish coordinate region performance options: -P mode <modeval> set jbPerf mode -P event <eventname> set jbPerf event -P dir <directory> set jbPerf directory
inits
This is the initial conditions generator. See this page for more detailed information. Initial conditions with a single initial grid or multiple nested grids can be created with this executable. Output file names are user-specified, but in a standard cosmology simulation with a single initial grid there should be a file containing baryon density information, another containing baryon velocity information, and two more files containing particle position and velocity information. Simulations with multiple grids will have a set of these files for each level, appended with numbers to make them unique.
usage: inits [options] param_file options are: -d(ebug) -s(ubgrid) param_file
ring
ring must be run on the simulation particle position and velocity information before a simulation is executed when the parameter ParallelParticleIO is set to 1. Running ring generates files called PPos.nnnn PVel.nnnn where nnnn goes from 0001 to the total number of processors that are used for the simulation. These files contain the particle position and velocity information for particles that belong to each processor individually, and will be read into the code instead of the monolithic particle position and velocity files. Note that if ParallelParticleIO is on and ring is NOT run, the simulation will crash.
usage: ring <particle position file> <particle velocity file>
differ
This piece of code compares two different HDF5 files/datasets (which are supposedly the same) and tells how many values are different, and outputs this to stdout. No files are output.
usage: differ <file 1> <file 2> <dataname 1> <dataname 2>
glue
Glue takes single-grid or fractured unigrid enzo hierarchies (ie, ones that have been created using a simulation with ParallelRootGridIO on) and extracts individual fields into monolithic files, which is useful for user-written data analysis. The files that are output have the same name as the field name.
usage: glue <GridName> <FieldName> <gridsize> <ngrids>
dumpgrids
This executable takes an enzo hierarchy (amr or unigrid) and outputs all non-overlapping cells into a file called DumpGridData.grid in four column format, corresponding to: temperature, density, (junk), grid size, all of which are in code units.
usage: dumpgrids [-d] [-g] [-p] [-s] amr_saved_filename [dump_filename] -d)ebug -g)rid data output -p)article data output -s)tar data output
enzo_anyl
This executable generates sperhically-averaged radial profiles of halos. See this page for more information. enzo_anyl dumps information into files that start with the string 'AnalyzeCluster'. See the previously mentioned page for more details.
usage: enzo_anyl amr_file anyl_parameter_file
enzostats
This code generates some globally averaged information about a given simulation. No files are output, only information to stdout.
enzostats [-b #] [-f #] [-d] amr_file -b)egin region -f)inish region -d)ebug
findinit
This binary finds the extent of the initial positions of all particles in a given halo. It is used for generating multi-grid initial conditions, and more information about it can be found here. No files are input, only text to stdout.
usage: findinit amr_final_output amr_initial_output cluster_file or: findinit amr_output cluster_file (cluster_file format: x y z r in box units)
findpeaks
One of the two methods for finding density peaks (ie, halos) in an Enzo simulation. More information can be found here. The output is an ascii file with a user-specified filename (cluster_file) where there are halo positions sorted by peak density.
usage: findpeaks [options] amr_file cluster_file options: -n # (number of peaks) -m # (minimum density) -s # (min peak separation, comoving Mpc) -b (use baryon density in peak seach, default) -d (use dark matter density in peak seach) -p (use potential in peak search) -x (use bolometric x-ray in peak seach)
enzohop
The second (and generally favored) method used for finding density peaks in an Enzo simulation. More information can be found here. A file called HopAnalysis.out is output which contains halo position and mass information.
enzohop [-b #] [-f #] [-t #] [-g] [-d] amr_file -b)egin region -f)inish region -t)hreshold for hop (default 160) -g)as particles also used (normally just dm) -d)ebug


Here are some unbearably exciting stories by Frank Key:
Gigantic Bolivian Architectural Diagrams
Some Ponds, A Hotel, The Hollyhocks
Sidney The Bat Is Awarded The Order Of Lenin (a Stalinist children's story)
Not a story as such, just a very long sentence from The Crunlop Experiment. I think it works on its own terms, even out of context.
For details of more Frank Key stories, visit Zoilus Press
Wend your weary way back to Hooting Yard Home Page


Intel Pentium IV 2GHz processor or better
1GB memory (RAM), or 2GB memory (RAM) for best performance
10 GB disk space/storage
First, download Linux Deepin ISO image
To install Linux Deepin using a blank DVD, follow these instructions
To install Linux Deepin using a USB stick, follow these instructions


Issue Formation and Structure
Reason for Structure
Metrics
Pipeline and Flow
Possible Definitions
Epic
Feature
Story
Estimations and Velocity
Myths Around Velocity
Subtasks
Standard Tasks
Dynamic Tasks
## Installation Pre-requisites: 1. NodeJS 2. Watchman
npm install -g react-native-cli


"""This is invoked in a subprocess to call the build backend hooks. It expects: - Command line args: hook_name, control_dir - Environment variables: PEP517_BUILD_BACKEND=entry.point:spec PEP517_BACKEND_PATH=paths (separated with os.pathsep) - control_dir/input.json: - {"kwargs": {...}} Results: - control_dir/output.json - {"return_val": ...} """ from glob import glob from importlib import import_module import os import os.path from os.path import join as pjoin import re import shutil import sys import traceback # This is run as a script, not a module, so it can't do a relative import import compat class BackendUnavailable(Exception): """Raised if we cannot import the backend""" def __init__(self, traceback): self.traceback = traceback class BackendInvalid(Exception): """Raised if the backend is invalid""" def __init__(self, message): self.message = message class HookMissing(Exception): """Raised if a hook is missing and we are not executing the fallback""" def contained_in(filename, directory): """Test if a file is located within the given directory.""" filename = os.path.normcase(os.path.abspath(filename)) directory = os.path.normcase(os.path.abspath(directory)) return os.path.commonprefix([filename, directory]) == directory def _build_backend(): """Find and load the build backend""" # Add in-tree backend directories to the front of sys.path. backend_path = os.environ.get('PEP517_BACKEND_PATH') if backend_path: extra_pathitems = backend_path.split(os.pathsep) sys.path[:0] = extra_pathitems ep = os.environ['PEP517_BUILD_BACKEND'] mod_path, _, obj_path = ep.partition(':') try: obj = import_module(mod_path) except ImportError: raise BackendUnavailable(traceback.format_exc()) if backend_path: if not any( contained_in(obj.__file__, path) for path in extra_pathitems ): raise BackendInvalid("Backend was not loaded from backend-path") if obj_path: for path_part in obj_path.split('.'): obj = getattr(obj, path_part) return obj def get_requires_for_build_wheel(config_settings): """Invoke the optional get_requires_for_build_wheel hook Returns [] if the hook is not defined. """ backend = _build_backend() try: hook = backend.get_requires_for_build_wheel except AttributeError: return [] else: return hook(config_settings) def prepare_metadata_for_build_wheel( metadata_directory, config_settings, _allow_fallback): """Invoke optional prepare_metadata_for_build_wheel Implements a fallback by building a wheel if the hook isn't defined, unless _allow_fallback is False in which case HookMissing is raised. """ backend = _build_backend() try: hook = backend.prepare_metadata_for_build_wheel except AttributeError: if not _allow_fallback: raise HookMissing() return _get_wheel_metadata_from_wheel(backend, metadata_directory, config_settings) else: return hook(metadata_directory, config_settings) WHEEL_BUILT_MARKER = 'PEP517_ALREADY_BUILT_WHEEL' def _dist_info_files(whl_zip): """Identify the .dist-info folder inside a wheel ZipFile.""" res = [] for path in whl_zip.namelist(): m = re.match(r'[^/\\]+-[^/\\]+\.dist-info/', path) if m: res.append(path) if res: return res raise Exception("No .dist-info folder found in wheel") def _get_wheel_metadata_from_wheel( backend, metadata_directory, config_settings): """Build a wheel and extract the metadata from it. Fallback for when the build backend does not define the 'get_wheel_metadata' hook. """ from zipfile import ZipFile whl_basename = backend.build_wheel(metadata_directory, config_settings) with open(os.path.join(metadata_directory, WHEEL_BUILT_MARKER), 'wb'): pass # Touch marker file whl_file = os.path.join(metadata_directory, whl_basename) with ZipFile(whl_file) as zipf: dist_info = _dist_info_files(zipf) zipf.extractall(path=metadata_directory, members=dist_info) return dist_info[0].split('/')[0] def _find_already_built_wheel(metadata_directory): """Check for a wheel already built during the get_wheel_metadata hook. """ if not metadata_directory: return None metadata_parent = os.path.dirname(metadata_directory) if not os.path.isfile(pjoin(metadata_parent, WHEEL_BUILT_MARKER)): return None whl_files = glob(os.path.join(metadata_parent, '*.whl')) if not whl_files: print('Found wheel built marker, but no .whl files') return None if len(whl_files) > 1: print('Found multiple .whl files; unspecified behaviour. ' 'Will call build_wheel.') return None # Exactly one .whl file return whl_files[0] def build_wheel(wheel_directory, config_settings, metadata_directory=None): """Invoke the mandatory build_wheel hook. If a wheel was already built in the prepare_metadata_for_build_wheel fallback, this will copy it rather than rebuilding the wheel. """ prebuilt_whl = _find_already_built_wheel(metadata_directory) if prebuilt_whl: shutil.copy2(prebuilt_whl, wheel_directory) return os.path.basename(prebuilt_whl) return _build_backend().build_wheel(wheel_directory, config_settings, metadata_directory) def get_requires_for_build_sdist(config_settings): """Invoke the optional get_requires_for_build_wheel hook Returns [] if the hook is not defined. """ backend = _build_backend() try: hook = backend.get_requires_for_build_sdist except AttributeError: return [] else: return hook(config_settings) class _DummyException(Exception): """Nothing should ever raise this exception""" class GotUnsupportedOperation(Exception): """For internal use when backend raises UnsupportedOperation""" def __init__(self, traceback): self.traceback = traceback def build_sdist(sdist_directory, config_settings): """Invoke the mandatory build_sdist hook.""" backend = _build_backend() try: return backend.build_sdist(sdist_directory, config_settings) except getattr(backend, 'UnsupportedOperation', _DummyException): raise GotUnsupportedOperation(traceback.format_exc()) HOOK_NAMES = { 'get_requires_for_build_wheel', 'prepare_metadata_for_build_wheel', 'build_wheel', 'get_requires_for_build_sdist', 'build_sdist', } def main(): if len(sys.argv) < 3: sys.exit("Needs args: hook_name, control_dir") hook_name = sys.argv[1] control_dir = sys.argv[2] if hook_name not in HOOK_NAMES: sys.exit("Unknown hook: %s" % hook_name) hook = globals()[hook_name] hook_input = compat.read_json(pjoin(control_dir, 'input.json')) json_out = {'unsupported': False, 'return_val': None} try: json_out['return_val'] = hook(**hook_input['kwargs']) except BackendUnavailable as e: json_out['no_backend'] = True json_out['traceback'] = e.traceback except BackendInvalid as e: json_out['backend_invalid'] = True json_out['backend_error'] = e.message except GotUnsupportedOperation as e: json_out['unsupported'] = True json_out['traceback'] = e.traceback except HookMissing: json_out['hook_missing'] = True compat.write_json(json_out, pjoin(control_dir, 'output.json'), indent=2) if __name__ == '__main__': main()


---
layout: post
title: Make sure that he had plenty of opportunities to disobey you.
date: '2009-07-28T11:46:00.001-05:00'
author: Jabell
tags:
- Teaching
- Quotes
- Literature
modified_time: '2009-07-28T11:50:37.268-05:00'
blogger_id: tag:blogger.com,1999:blog-19739956.post-2540451788831286894
blogger_orig_url: http://theabellsix.blogspot.com/2009/07/make-sure-that-he-had-plenty-of.html
---
There is a good deal to be said for excluding literature from school curricula altogether. I am not sure that the best way to make a boy love the English poets might not be to forbid him to read them and then make sure that he had plenty of opportunities to disobey you.
—C. S. Lewis, "The Parthenon and the Optative," On Stories and Other Essays on Literature, p. 111.


--- layout: post title: 'Vulnerability found in some J2ME implementations (more here)' date: 2004-10-25 00:00:00 category: links ---


{% extends '_layouts/layout_index.html' %} {% block page_title %}Index : {{serviceName}}{% endblock %} {% block pageTitle %}Prototypes{% endblock %} {% block pageIntro %}
This is the design work for the nhs.uk's Connecting to a GP digital service.
These are not live services.
{% endblock%} {% block leftContent %}Book a GP Appointment Online 'start' screen
Draws on explorations from:
Still to do


Kindhearted GrabFood delivery rider helps senior citizen cross the road and walk to her block
- Advertisement -
A young GrabFood delivery rider who helped a senior citizen cross the road and walk over to her block has won praise online. The incident took place outside Toa Payoh polyclinic today (20 Nov), according to an eyewitness.

When Ms Lee approached the pair and offered to help the elderly lady so that the young man could continue with his delivery, the young man politely declined and continued taking the senior citizen to her block. Ms Lee recalled:
“Walked out of the polyclinic and saw this sweet young man helping the grandma to cross the road and then to her block. Offered to take over so that he can continue with the delivery, he said it’s ok. ❤”
- Advertisement -
- Advertisement -


Better Promises ✨
I love promises. It isn't a secret and I've said it many, many times. They come in all asynchronous shapes and colors. But I think they could be better, so let's see some places where they fall short:
Parallel resolution
To run several promises at once you'll use Promise.all()
quite too often:
// Load several websites at once
const webs = await Promise.all(urls.map(url => got(url)));
// Load several files at once with `mz/fs`
const files = await Promise.all(files.map(file => readFile(file, 'utf-8')));
If we have an array of promises we should be able to just wait at the whole thing instead of having to wrap it once more. This syntax would be much better, wouldn't it?
// Does NOT work :(
const webs = await urls.map(url => got(url));
const files = await files.map(file => readFile(file, 'utf-8'));
Chaining operations
The next issue is when you want to perform any operation on the promise value. You have to await for the whole thing to finish with .then()
to perform the next operation:
// Get each line from a remote URL
const lines = await fetch(...).then(res => res.text()).then(res => res.split('\n'));
What if we could call the method straight out of the Promise? The promise would know it has to wait until it's finished and then execute the method itself:
// Does NOT work :(
const lines = await fetch(...).text().split('\n');
Combination
When we combine those two, we get to ridiculous extremes. For a set of operations:
// Perform two async operations on a list of items
let value = await Promise.all(data.map(op1));
value = value.filter(op2);
value = await Promise.all(value.map(op3));
It would be better if let the promise chain figure out those and worked as expected:
// Does NOT work
const value = await data.map(op1).filter(op2).map(op3);
Magic Promises
Well now you can with a bit of magic()
! I just wrote the library magic-promises
to allow this:
npm install magic-promises
const value = await magic(data).map(op1).filter(op2).map(op3);
It extends the promise definition so you can use them transparently. But it also adds the perfect syntax sugar for whenever it matters:
// With a bit of `magic()`
const newMap = await magic(arr1).map(op1);
const newLines = await magic(fetch(...)).text().split('\n');
// Traditional style
const oldMap = await Promise.all(arr1.map(op1));
const oldLines = await fetch(...).then(res => res.text()).then(txt => txt.split('\n'));
It will effectively build the internal queue of methods and arguments, and resolve them as each of the steps get resolved. Then you can treat Promises even more transparently.
File System
A perfect example of magic promises being useful is the filesystem, so I also published fs-array
:
npm install fs-array
const { read, walk } = require('fs-array');
// Read all of the readme anywhere inside the current directory or children
const files = await walk('demo')
.filter(name => /\/readme\.md$/.test(name))
.map(read);
// IF fs-array did not use magic-promises internally:
const all = await walk('demo');
const readmes = all.filter(name => /\/readme\.md$/.test(name));
const files = Promise.all(readmes.map(read));
Wrap up
My initial experience by creating and using magic-promises
has been great. There is still some things to do, like .filter()
accepting promises that resolve to booleans, but that's for the next chapter.


http://action.vday.org/site/R?i=9OapGhaBk-gUuSliuI91zQ
http://action.vday.org/site/R?i=opooZF995PgcqZui2T_muw
http://action.vday.org/site/R?i=mg9smj8scu9p59g0fEjThA
http://action.vday.org/site/R?i=e-jWtUEigCI3Cj1vYHa2iQ
http://action.vday.org/site/R?i=pxrvFCWGL4gqfhf1RA9FSQ
http://action.vday.org/site/R?i=m_xArBEvIk4_U883XNEhcQ
GLOBAL ACTIVISTS DEMAND THE RELEASE OF OUR SISTERS IN CHINA
One Billion Rising activists around the world continue to demand the
release of our activist feminist sisters from China Li Tingting,
Zheng Churan, Wei Tingting, Wang Man and Wu Rongrung who were
arrested for their work to create awareness and education on violence
against women and girls issues.
This is an update from an activist sister on the ground:
“The women are still in criminal detention. In China the maximum
duration is thirty days. During this period, police and people from
the security department will fetch the detainees for interrogation at
intervals, and question them about some specific activities they have
planned and organized before. This is for collective evidence, for a
formal arrest and prosecution. According to the lawyers, the detention
itself is not within due process of the law. The cause for detaining
them is "creating disturbances”, but they (we) had not
even implemented their (our) action plans before the detention. And
all the similar activities we had done before did not break any single
article of Chinese law. All the five girls are full time grassroots
NGO staff. One of the organisations they work for is the main target
of this crackdown and whose office was broken into and searched, and
where all their archives were carried off on March 25th, which again
happened at midnight.
The girls are basically well personally but we haven’t had any
more information about Zheng Churan for two weeks now because her
lawyer suddenly left China for another case. The new lawyer is coming
to take his place. Policemen have continued to disturb the volunteers
nationwide who participated in the former activities and are forcing
then to give evidence (evidence for no crime). Some important
activists working in sister organizations are now going into exile and
are leaving China. They are not afraid of being arrested but they
don’t want to give “evidence” to help police frame
the five women. But all the support internationally does help.“
One Billion Rising activists from all over the world continue to
condemn the detaining of our five young activist feminist sisters from
China, who now face prosecution no later than April 8th under illegal
and inhumane procedures, and are demanding their immediate release.
We call on China to uphold the outcomes of the Beijing Declaration and
Platform of Action, which was created in China at the historic
international conference in 1995. As hosts of the conference, they,
beyond all doubt and measure, are ethically mandated to deliver on the
promises and commitment to advance women’s rights- including
women’s political and human rights, and the basic liberties of
self, social and political expressions. They are ethically bound to
adhere to the agreements made at the summit twenty years ago. It is
such an expression of hypocrisy to purport to advocate for
women’s rights when they have exerted repressive, inhumane and
illegal measures towards Li Tingting, Zheng Churan, Wei Tingting, Wang
Man and Wu Rongrung.
We demand their immediate and unconditional release!
We demand that the Chinese government stop the brutal political
repression of their women’s human rights defenders!
We call on everyone to make their voices heard for justice for these
women, and protest outside the Chinese embassies around the world
before, leading up to and on April 8th the day they are likely to be
prosecuted. We ask activists and all members of civil society to
demand their release, to keep up the pressure, and to highlight in
their local and national media the real situation and expose the
Chinese government for being repressive, brutal and hypocritical, and
who do not respect human rights and national agreements that bind them
to the world as a global nation.
We stand in solidarity alongside our sisters in China. We RISE against
the political repression they are experiencing and the violation of
their human rights. As a global community, we RISE for Justice for
them and we collectively show our indignation at the suppression and
curtailment of the rights of women human rights defenders who have
committed their lives to ending all forms of violence against women
and girls. They are the future of China. We must keep RISING to ensure
their futures are not taken away from them.
In Solidarity,
Tanya Anastasiadis (United Kingdom/Canada)
Abha Bhaiya (India)
Rada Boric (Croatia)
Marsha Pamela Calderon (Guatemala)
Anne Christine d'Adesky (Haiti)
Eve Ensler (United States)
Lynne Franks (United Kingdom)
Khushi Kabir (Bangladesh)
Dianne Madray (Guyana)
Marya Meyer (United States)
Andres Naime (Mexico)
Mily Trevino Saucedo (United States)
Aimee Sissoho (The Gambia)
Susan Celia Swan (United States)
Isatou Touray (The Gambia)
Monique Wilson (The Philippines)
SUPPORT by signing the petition
http://action.vday.org/site/R?i=GJcj-Leoubf6EY_6LpHzMA
FOLLOW their Facebook page
http://action.vday.org/site/R?i=dNpZ7M7OeAfsuce2Kx6ICw
READ the following article
http://action.vday.org/site/R?i=18Shcg4oBsd2KP-73GkxBQ
http://action.vday.org/site/R?i=1iOrm6LlK7NsrGL0grU0_Q
http://action.vday.org/site/R?i=nTdf26i40B34sFPldKo7yg
http://action.vday.org/site/R?i=G5uAFIjyO3MCRKiVz9_OMQ
http://action.vday.org/site/R?i=sHB4kaaVkylcFzpoNAfA2w
http://action.vday.org/site/R?i=LEZcAlFR-t3bpg0qKdjUiw
http://action.vday.org/site/R?i=TY4VavM5ZspNy9lHcGD8bQ
http://action.vday.org/site/R?i=ivzBWBOwmqd1K2_Axy6U4A
http://action.vday.org/site/R?i=JmaPMsWM2qvewgcMfX-_xw
unsubscribe
http://action.vday.org/site/CO?i=KldcNWO48wp8xkejoK4purUktUarYnYn&cid=1062
Powered By Blackbaud


Checked in at Game Over Videogames
Checked in at Game Over Videogames
Checked in at Barnes & Noble
Checked in at Chili’s Grill & Bar
Test again with orientation fix.
Test with fix.
Test icon.
Test again.
Test upload.
Another test.
Test.
More basketball on TV today
More basketball on TV today
Picking up smoothies from JuiceLand
Picking up smoothies from JuiceLand
Unfinished backyard basketball
Burrito and JuiceLand outside
Burrito and JuiceLand outside
Unfinished backyard basketball
Somewhere over California
Somewhere over California


|
|
| Museum Status |
| |
{
if($c{museum_login}->get_child_count('museum')<=0)
{
$OUT.=<<"+++";
|
this account has no museums as of yet... |
+++
}
else
{
foreach my $museum (@{$c{museum_login}->ensure_child_array('museum')})
{
my $museum_title = $museum->get_name_city_title;
$OUT.=<<"+++";
|
|
| $museum_title |
+++
if($museum->is_new)
{
$OUT.=<<"+++";
|
the museum has been created but not yet confirmed... |
+++
}
else
{
$OUT.=<<"+++";
|
the museum has been created and confirmed... |
+++
}
}
}
}
|
| | |
|
|
|


Augur Development Guide: Making Contributions¶
Getting Started¶
See our Contributing to Augur guide for specifics on how we review pull requests. tl;dr: Fork our repo. Make a change. Use the mailing list for CHAOSS, Submit a pull request.
Building Changes¶
After making your changes, run
make build
to update the docs and frontend before adding them to your staging area.
Augur Development Overview¶
Augur’s Design Value System¶
Augur’s architecture is designed with an eye toward fulfilling its primary missions of rapid open source software metric prototyping and using data visualization to facilitate discussions among folks who manage open source communities.
**Core aims: ** 1. Rapid metrics prototyping 2. Using data visualization to support discussion
Our visualization design follows two principles: 1. Allow comparisons across projects 2. Where logical, show trends over time on a metric
Project comparison helps people understand what a metric tells them. If I show you total commits in a month or a year, what does that tell you about the health of an open source project? If you are able to compare a project you are managing with a project or two in the same space that you are familiar with, is that helpful? In most cases the answers are yes. We aim to produce not only metrics, but enough information for consumers of Augur to construct meaning. Which then helps the CHAOSS community build better, more useful metrics.
Time is, in effect, a project focused type of comparison. If you can see the changes in different metrics on your project over time, its easier to maintain awareness of how metrics compare with results.
Augur’s Architecture¶
In our aspiration to implement our value system for metrics in software, we seperate concerns pragmatically. Any metrics dashboard system has to do 4 things: 1) Ingest data, 2) store data, 3) reshape data for analysis and 4) present data. Of course, these “dashboard requirements” can be interpreted and circumvented. For example, if robust API’s are available, like the GitHub Version 4 API, persistence can be considered optional.
Right now, Augur satisfies the enumerated dashboard system requirements in concrete ways we describe in the following four sections.
Augur Data Ingestion¶
We use the GHTorrent database, or its MSR14 little brother to help you get up and running quickly. You may find this dataset insufficient for a particular metric you want to build. API’s available from a number of places can be accessed from Augur.
Inside your Augur system root directory there is another directory named Augur. This is where the Python files that you can modify live. Each one of these files should correspond to a different data source.
- downloads.py : gathers download statistics for github repositories. Currently configured for npm and ruby gems download data.
- ghtorrent.py : reads the ghtorrent database you installed. There
are two functions at the top of this file that allow you to do counts
on the GHTorrent Schema tables quickly using Python.
- def __single_table_count_by_date(self, table, repo_col=’project_id’, user_col=’author_id’, group_by=”week”): Generates query string to count occurances of rows per date for a given table.
- def __sub_table_count_by_date(self, parent_table, sub_table, parent_id, sub_id, project_id): Generates query string to count occurances of rows per date for a given query sub-table. A query sub-table is a table that describes in more detail a specfic asset of another query table-for example, the table “pull_request_comments” is a sub table of “pull_request”, where the query is pull requests.
- ghtorrentplus.py : Accesses the aggregate tables Augur creates for GHTorrent.
- githubapi.py : Pulls data from the GitHub API
- librariesio.py : Pulls data from the libraries.io API (Package manager download data)
- localcsv.py : Pulls data from a .csv file you persist.
- publicwww.py : Pulls download data from the https://publicwww.com website.
If you want to ingest substantial amounts of new data, you may want to contribute to the Augur-OSSifragae project, which focuses on systematic, structured ingestion of open source respository data from heterogeneous sources. (Note: an Ossifragae is a bearded vulture that is one of a handful of birds said to yield valid signs for ancient Roman Augurs (visionaries) to follow. We think the existance of “OSS” at the beginning of the birds name is a sign. We took it.)
Augur Data Storage¶
The database system that you built with GHTorrent or MSR14 is our principle data storage environment right now. We have added a few small details to the GHTorrent database in a seperate schema called GHTorrent_Plus. This schema is built on deployment, and supports aggregations of the GHTorrent Schema information so that metrics can be generated more quickly in a few cases.
Augur Data Reshaping for Analysis¶
Now that you understand the basic structure of Augur, our Back End Development Guide will be the place to start for reshaping data and building out analysis endpoints. The end result of new back end code is a REST API Endpoint.
Augur Data Presentation¶
Once you have a REST API Endpoint, you can stop and say, “I have built an endpoint. Here is my pull request”. OR, you can build front end visualizations for those endpoints, following our Front End Development Guide.¶
Important notes about contributing metrics¶
Before we start, there are a few things we would like to go over. Please take the time to read this section carefully; not only will it will make your life much easier, but also the lives of all the other conributors!
When contributing a new metric, please reference this list in order to make sure you are putting the metric in the correct spot in the code. With the amount of metrics we have already implemented and the ones we plan to implement, it is imperative that you stick to this order, as this helps contributors both new and old maintain clarity and order when working with metrics.
Some of the metrics we develop are defined more formally by metrics committees and working groups; some are not. Should you choose to work on implementing any of these metrics that are formally defined, they should be placed under their respective category.
If you are adding a new metric that does not fall under one of these
categories, it should be placed in the Experimental group in the correct
sub-category. If you would like to add a new Experimental sub-category,
please open a pull request with your proposed addition. In addition,
please update the file mentioned above to include your new metric: it
can be found at augur/docs/scratchpad/master-metrics-order.md
.
This order is followed across the project. Data source files, test
files, server.py
, AugurAPI.js
, frontend cards, and other places
that metrics appear in should adhere to this order for maximum
uniformity (In AugurAPI.js
, Git metrics have their own section).
Files where metrics appear should include a header for every group, even if there are no relevant metrics in that group. The exception to the rule are the frontend tab cards; these are already grouped.


| < Day Day Up > |
Chapter 30. An Introduction to DB2 UtilitiesIN THIS CHAPTER DB2 utility programs are divided into four broad categories:
Each of these categories is defined in Part VI, "DB2 Performance Utilities and Commands." A complete description of every utility that makes up each category is also provided. Sample JCL listings are provided for each utility. The job names, data set names, space allocations, and volumes used in the JCL are only examples. The database and tablespace names are from the DB2 sample tables used throughout this book. These names should be changed to reflect the needs of your application. The online utilities are referred to as online because they execute under the control of DB2. They are run using the DSNUTILB program, which is supplied with DB2. DSNUTILB uses the Call Attach Facility (CAF) to run as an independent batch program. Online utilities operate using control card input. DSNUTILB reads the control card input and then executes the proper utility based on the input. The first word in the control card is the name of the utility to be processed, followed by the other parameters required for the utility. |
| < Day Day Up > |


Class: Aws::MarketplaceMetering::Types::UsageRecordResult
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-marketplacemetering/lib/aws-sdk-marketplacemetering/types.rb |
Overview
A UsageRecordResult
indicates the status of a given UsageRecord
processed by BatchMeterUsage
.
Constant Summary
Instance Attribute Summary
-
#metering_record_id ⇒ String
rw
The
MeteringRecordId
is a unique identifier for this metering event. -
#status ⇒ String
rw
The
UsageRecordResult
Status
indicates the status of an individualUsageRecord
processed byBatchMeterUsage
. -
#usage_record ⇒ Types::UsageRecord
rw
The
UsageRecord
that was part of theBatchMeterUsage
request.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Structure#to_h. |
Instance Attribute Details
#metering_record_id ⇒ String
(rw)
The MeteringRecordId
is a unique identifier for this metering
event.
# File 'gems/aws-sdk-marketplacemetering/lib/aws-sdk-marketplacemetering/types.rb', line 591
class UsageRecordResult < Struct.new( :usage_record, :metering_record_id, :status) SENSITIVE = [] include Aws::Structure end
#status ⇒ String
(rw)
The UsageRecordResult
Status
indicates the status of an
individual UsageRecord
processed by BatchMeterUsage
.
Success- The
UsageRecord
was accepted and honored byBatchMeterUsage
.CustomerNotSubscribed- The
CustomerIdentifier
specified is not able to use your product. TheUsageRecord
was not honored. There are three causes for this result:- The customer identifier is invalid.
- The customer identifier provided in the metering record does not
have an active agreement or subscription with this product.
Future
UsageRecords
for this customer will fail until the customer subscribes to your product. - The customer's AWS account was suspended.
DuplicateRecord- Indicates that the
UsageRecord
was invalid and not honored. A previously meteredUsageRecord
had the same customer, dimension, and time, but a different quantity.
# File 'gems/aws-sdk-marketplacemetering/lib/aws-sdk-marketplacemetering/types.rb', line 591
class UsageRecordResult < Struct.new( :usage_record, :metering_record_id, :status) SENSITIVE = [] include Aws::Structure end
#usage_record ⇒ Types::UsageRecord (rw)
The UsageRecord
that was part of the BatchMeterUsage
request.
# File 'gems/aws-sdk-marketplacemetering/lib/aws-sdk-marketplacemetering/types.rb', line 591
class UsageRecordResult < Struct.new( :usage_record, :metering_record_id, :status) SENSITIVE = [] include Aws::Structure end


{% extends "global/Page.html" %} {% load staticfiles otree %} {% block title %} Expectations {% endblock %} {% block content %}
Before we move on to the last question we are curious to know your expectations: Do you expect both teams to have same chances of getting one of the easier questions or do you expect one team to have a higher chance of getting one of the easier questions?
Please use to following scale from 0 to 100 to indicate if you think the odds are in favour of Team A (0), the odds are the same for both Teams, or the odds are in favour of Team B (100).
0 = 'the odds are heavily in favour of Team A' (Team A will get an easier question than Team B).
50 = 'the odds are about the same for both teams'
100 = 'the odds are heavily in favour of Team B' (Team B will get an easier question than Team A).


Your manager begins his questioning.
You try to tell him about the blue-eyed man,
about the stares and the hands
that cut you like shards of glass.
Boys will be boys... just leave home earlier.
And maybe not wear that tight a shirt...
You know this routine all too well.
You need some chai.
Continue


By clicking on "Register" an a verification code will be sent to your mobile number. On next page, please enter the verification code to complete the registration.


--- layout: post title: ! '*Closed* MissEnchanted''s 1st International Giveaway :)' tags: - Giveaway status: publish type: post published: true meta: _edit_last: '2' wp_plus_one_redirect: '' _graphene_slider_img: global _graphene_slider_imgurl: '' _graphene_show_addthis: global _graphene_post_date_display: global al2fb_facebook_image_id: '2481' _aioseop_keywords: MissEnchanted's 1st International Giveaway _aioseop_title: MissEnchanted's 1st International Giveaway al2fb_facebook_link_id: '218440691518395_348966851799111' al2fb_facebook_link_time: '2012-01-19T19:34:35+00:00' al2fb_facebook_link_picture: meta=http://missenchanted.com/wp-content/uploads/2012/01/IMG_2847-150x100.jpg wp_plus_one_disabled: '1' _yoast_wpseo_linkdex: '0' _thumbnail_id: '2477' _yoast_wpseo_focuskw: '' _yoast_wpseo_title: '' _yoast_wpseo_metadesc: '' _yoast_wpseo_metakeywords: '' _yoast_wpseo_meta-robots-noindex: '0' _yoast_wpseo_meta-robots-nofollow: '0' _yoast_wpseo_meta-robots-adv: none _yoast_wpseo_sitemap-include: ! '-' _yoast_wpseo_sitemap-prio: ! '-' _yoast_wpseo_canonical: '' _yoast_wpseo_redirect: '' ---
[important]Giveaway Closed[/important]
I have been enjoying the amazing company of you all amazing gals for the last 8 months. Thank you all for such lovely comments and support. As a small gesture to say thanks for having faith in me, I am introducing my second giveaway. Unlike the earlier bitter experience which was a sponsored giveaway, this time I have selected and bought every item myself for this giveaway. This is gonna be my first international giveaway yaaay!!!
This giveaway is open internationally,All these are fresh pieces, not even swatched once.Enjoy the pics...
[caption id="attachment_2481" align="aligncenter" width="900"] VoV purchased from FnU[/caption] [caption id="attachment_2477" align="aligncenter" width="800"] Professional Eyeshadow Palette[/caption] [caption id="attachment_2484" align="aligncenter" width="800"] Peach Glamshine Gloss & Icy Peach Glamshine Gloss[/caption] [caption id="attachment_2479" align="aligncenter" width="800"] Ruby Glamshine Eyeliner Liquid & Blue Glamshine Eyeliner Liquid[/caption] [caption id="attachment_2480" align="aligncenter" width="400"] 8/Sky Blue Nail Polish[/caption]


These will be provided later.
| Version | Release date | Download link |
|---|---|---|
| 1.0 beta | 27.1.2018 | https://github.com/InverseLight/ValoMC/archive/v1.0b.zip |
After download, please follow the installation instructions to get started.
ValoMC has been tested on the following platforms
| Operating system | MATLAB version | Compiler version |
|---|---|---|
| Windows 10 | 2017a | Visual Studio 2017 |
| Windows 10 | 2016a | TDM-GCC 5.1.0 |
| Ubuntu 16.04 | 2016a | GCC 4.9 |


Today we'll go over brightness, contrast, hue shifting, converting between the RGB and HSV color spaces and LUT color grading.
If you are looking for an example project to follow along with this tutorial then feel free to use the GM Shaders Base project and have a look at the code. You can also make some changes and play around a bit!
Brightness and contrast are two basic properties of an image. Brightness refers to the overall "lightness" of an image. Contrast refers to the difference in brightness between the brightest and darkest elements.
The main code to adjust brightness and contrast is fairly basic:
color.rgb = mix(vec3(0.5), color.rgb + u_brightness - 1.0, u_contrast);
gl_FragColor = v_color * color;
The color with the brightness value added to all the components is mixed with a grayscale value using the contrast which is finally multiplied by the vertex color. (Notice that the vec3(0.5)
means a color of 50% gray, in GameMaker this corresponds to the built-in c_gray
color constant.)u_brightness
. As a result passing a value of 1 for brightness will give no change.
Food For Thought (1) If you leave the contrast unchanged (u_contrast
is set to 1), which is the highest value for brightness that still makes a visual difference? Why is that?
HSV, which stands for hue, saturation and value, gives a different way to represent colors.
The hue of a color refers to the way that we perceive colors as humans. You can see that in the order of the colors, they (almost) correspond to a rainbow: red, orange, yellow, green, blue, indigo, violet. (Notice how red, green and blue are still in that order (R, G, B))
Almost, since the difference between reality and the representation as hue is that hue wraps around. While a rainbow's colors stop at violet, hue is constructed such that it goes back to red; both a hue of 0 and a hue of 1 correspond to pure red.
Saturation and value are the two other components of a color represented as HSV. Saturation is the amount of the color and value is the brightness of the color.
The relationship between RGB and HSV may not seem intuitive at first but there is an interesting way to visualize it!
Imagine 3D space for a moment and think of the x, y and z axis. Instead of x, y and z you might as well use R, G and B as the labels for the axes and call it the RGB color space!
In that coordinate system you can display every color that is a combination of some value for R, G and B.
All those points together form a cube, going from (0, 0, 0) to (1, 1, 1): the RGB cube!
Starting at red and rotating clockwise you once again see the colors red, orange, yellow, green, blue, indigo, violet.
It can be shown that the hue of any color is equal to the maximum minus the minimum of the RGB channels. This is why the function sorts the RGB channels first.
The final code to convert from RGB to HSV is written quite compactly and looks like this:
vec3 hsv(vec3 c)
{
//Near-zero epsilon (to avoid division by 0.0)
#define E 1e-7
//Channel shift vector
const vec4 S = vec4(0, -1, 2, -3) / 3.0;
//Sort green-blue channels (highest to lowest)
vec4 P = (c.b<c.g) ? vec4(c.gb, S.rg) : vec4(c.bg, S.wz);
//Sort red-green-blue channels (highest to lowest)
vec4 Q = (P.r<c.r) ? vec4(c.r, P.gbr) : vec4(P.rga, c.r);
//Find the difference between the highest and lowest RGB for saturation
float D = Q.x - min(Q.w, Q.y);
//Put it all together
return vec3(abs(Q.z + (Q.w - Q.y) / (6.0*D+E)), D / (Q.x+E), Q.x);
}
The code to convert from HSV to RGB is more straightforward. The RGB hue is calculated and then this value is mixed with white to apply the saturation. Finally that result is multiplied by the value.
vec3 rgb(float h, float s, float v)
{
//Compute RGB hue
vec3 RGB = clamp(abs(mod(h*6.0+vec3(0,4,2), 6.0)-3.0)-1.0, 0.0, 1.0);
//Multiply by value and mix for saturation
return v * mix(vec3(1), RGB, s);
}
Another way to change the hue and saturation is by converting a color represented as RGB to YIQ and then applying a transform on that vector in YIQ space.
The Y component contains the black and white information, or the luma, and I and Q contain the color information, or the chrominance.
An interesting thing about the phase and amplitude of the chrominance contained in the I and Q components is that they correspond approximately to the hue and saturation of a color. So rotating the vector that represents the color in YIQ space corresponds to a hue shift, scaling it corresponds to a change in saturation.
//Compute YIQ colour
vec3 YIQ = col * RGBtoYIQ;
//Rotate I and Q chrominance values and scale for saturation
YIQ.yz *= mat2(cos(ang), -sin(ang), sin(ang), cos(ang)) * sat;
//Convert back to RGB colour space
return YIQ * YIQtoRGB;
LUT stands for LookUp Table. Lookup tables are used to do color grading, which is a way to adjust the colors of an image as a post-processing effect.
The general idea behind a lookup table is that you use a value as an index into a table of values and then return the value that corresponds to that index. Suppose you'd want to code this in GML, then it would look something like this:
/// A lookup using structs - this one "rotates" the primary colors (R>G>B>R>G>B>...)
colors = {c_red: c_green, c_green: c_blue, c_blue: c_red}; // The lookup "table"
color = c_red;
new_color = colors[$color];
// new_color now holds the value of c_green
The LUT shader is an application of this general idea, though it is a bit more complex than the usual array lookup. Let's have a closer look at what happens behind the scenes to retrieve the corresponding color for a given input color!
This function does the actual lookup. It takes in an index and optionally an offset to be added to the index. This index is quite a special one: it is a three-dimensional index, with R, G and B making up a dimension each.
The index is a vec3
where each of the components ranges between 0
and COLOR_NUM-1.0
.
What the index really represents is a combination of three integer values but you store them as floats the entire time and use the built-in functions floor, clamp, ... to get the integer representations using the float
datatype.
Since the index is three-dimensional and the texture image only two-dimensional there needs to be a way to go from three dimensions to two.
To get an understanding of how that is done, let's first look at the identity LUT image. This is the LUT image that doesn't change any color. Every color is mapped to exactly the same color.
Here the number of colors per channel (COLOR_NUM
) is 64. That means that there are a total of 64 x 64 x 64 = 262144 possible ways of combining the red, green and blue component. That also happens to be the same number as the result of 512 x 512, the image's dimensions. That makes sense: for every possible combination of R, G and B you need exactly one to replace it with.
So this lookup table can store no less than 262144 colors!
If you look at the image you'll notice that it consists of squares (or cells) of 64 x 64 pixels (COLOR_NUM * COLOR_NUM
). In each of those, both the red and green component are 0 in the top-left corner and increase to 1: the red one increases from left to right and the green one from top to bottom.
The blue component however cannot fit into this 2D representation so it needs to be represented in a different way. That is achieved by having a 64 x 64 cell for every possible value of blue, also 64 (COLOR_NUM
) values. The 64 cells are layed out in an 8 x 8 grid (vec2 CELL_NUM
).
The blue component of all pixels in the top-left 64 x 64 cell is 0. If you move to the cell to its right, the blue component increases. At the end of the row you jump to the next row, which also increases the blue component.
So the blue index increases from left to right, then from top to bottom.
All this indexing is written very compactly in the function lookup
:
//Rounds the color to the nearest index and clamps it to the correct range
vec3 index = clamp(ind - off, 0.0, COLOR_NUM-1.0);
//Converts the 3D index value to 2D LUT coordinates
vec2 coord = (index.rg / COLOR_NUM + mod(floor(index.b / vec2(1, CELL_NUM.x)), CELL_NUM)) / CELL_NUM;
//Reads the color from the the LUT
return texture2D(u_LUT, coord).rgb;
Food For Thought (2) Where are black and white located on this LUT image? Why is that?
The lookup_interpolated
function looks up neighboring pixels on the LUT texture and interpolates between them.
If you look at the color variable names you might notice that the naming follows a clear pattern: every variable name starts with "col" and then 3 digits for each of the RGB offsets. This is simply for finding the lower and upper bounds of each LUT cell for interpolation.
Finally the LUT boundary colors are interpolated using mix. Notice that, thanks to the naming convention of the variables, it is very clear what belongs together and which channel changes: all mix
calls that use the red component as the factor see the red offset change, i.e. from col0XX
to col1XX
. The same is true for the green component (from colX0X
to colX1X
) and for the blue component (from colXX0
to colXX1
).
In the fragment shader's main
function the pixel color is mixed with the result of lookup_interpolated
and then the vertex color is factored in.
And that is how the LUT shader maps colors to different ones!
Let's put all of that in practice!
Here is a modified LUT with a green tint:
And here's how it looks in our little office scene:
Firstly, they are pretty easy to find online (try Google!). This 8x8 format is fairly standard, but you can also find some in a 32x1 is also a common format. With a small adjustment to your macros, you can use those as well.
You can also use just about any image editing application such as Photoshop or GIMP. Start with a reference image and make adjustments to it until you're happy with the result, then apply those same changes to the default ("identity") LUT then that new LUT will apply those changes!
If you're feeling really adventurous you can start with the default LUT image in GM's Sprite Editor, copy it as a new sub-image and start changing pixels directly! This can be used as a palette swap shader or for any other color adjustments you can think of!
Congratulations! We went over a lot today!
You learned about brightness and contrast adjustments, about the HSV color space and the conversion between RGB and HSV and about adjusting hue and saturation by applying a transform in YIQ space.
Finally you learned about the inner workings of the LUT shader and learned how to find or generate these LUT images yourself.
Hopefully this tutorial has given you the knowledge and insights to start doing more advanced manipulations of colors using GameMaker shaders!
color
has components that range from 0 to 1, since its value is assigned from texture2D
.
If you keep that in mind, the highest value for brightness that makes a difference is 2. In that case, the second parameter to mix
will be color.rgb + 1.0
. 1 is the maximum value for a component so no matter the value of R, G or B, the pixel will be fully white anyway. There is no whiter than white.
Note though that the alpha component may be less than 1. In that case you'll see a color that is not white because the fragment color is alpha blended with a non-white destination color.
The pixel in the top-left is fully black. The pixel in the bottom-right is fully white. You can easily verify this yourself by opening the LUT sprite in the Sprite Editor and using the color picker to verify the RGB values.


The repeatability benchmark reimplements the protocol introduced by Mikolajczyk et al. [1]. It defines two feature extractor tests. The first test measures the feature extractor repeatability. The repeatability measures to what extent do detected regions overlap exactly the same scene region by comparing detected features in two images of the same scene. It is based only on the feature geometry.
The second test computes the matching score that includes also the local features descriptors. The second test helps to asses detected regions distinctiveness in planar scenes.
In this tutorial, it is shown how to perform both tests together with visualisation of the computed scores.
The source code of this tutorial is available in
repeatabilityDemo.m
function, this text shows only selected
parts of the code.
VLBenchmarks contains a few built-in image feature extractors such as
VLFeat SIFT, VLFeat MSER, VLFeat Covdet and a random features generator. Each
feature extractor is represented by a MATLAB object which unifies the feature
detection. All these feature extractors are implemented in a Matlab package
localFeatures
. For example, an instance of a class of VLFeat SIFT
feature extractor can be obtained by:
The feature extractor object manages the values of feature extractor parameters. Default values are set in the constructor of the object however any parameter can be changed. For example we can create VLF-SIFT feature extractor with different peak threshold parameter.
Let's generate a test image.
To extract features from an image, each feature extractor implements
method frames = detObj.extractFeatures(imgPath)
.
The detected features can be visualises with their regions
using vl_plotframe
function.
The feature extractors cache the detected features in a cache, thus when
you run extractFeatures(ellBlobsPath)
again, features are loaded
from the cache. You can disable caching by calling feature extractor method
obj.disableCaching()
.
The feature extractor repeatability is calculated for two sets of feature frames FRAMESA and FRAMESB detected in a reference image IMAGEA and a second image IMAGEB. The two images are assumed to be related by a known homography H, mapping pixels in the domain of IMAGEA to pixels in the domain of IMAGEB. The test assumes static camera, no parallax, or moving camera looking at a flat scene.
A perfect co-variant feature extractor would detect the same features in both images regardless of a change in viewpoint (for the features that are visible in both cases). A good feature extractor will also be robust to noise and other distortion. The repeatability is the percentage of detected features that survive a viewpoint change or some other transformation or disturbance in going from IMAGEA to IMAGEB and is calculated only based on the frames overlap. For detail about this test see [1].
For measuring feature extractors repeatability there is a class
benchmarks.RepeatabilityBenchmarks()
. To measure the
repeatability as it is defined in [1] the
benchmark object needs the following
configuration:
To test a feature extractor, benchmark object has a method
testFeatureExtractor(featExtractor, tf, imageAPath,imageBPath)
.
The remaining parameters can be obtained from the VGG Affine dataset class
which contains sets of six images with known homographies. Let's take the
graffiti scene:
Now we define set of feature extractors which we want to test.
And finally loop over the feature extractors and selected images.
This loop can be easily executed in parallel using parfor
.
Computed results are usually plotted in a graph showing together repeatability
and number of correspondences.
It is useful to see the feature frames correspondences. Let's see what correspondences have been found between the features detected by VLF-SIFT feature extractor in the first and the third image. We can get the cropped and reprojected features and the correspondences itself by:
The repeatability results are also cached, thus the data are loaded from cache and nothing is recalculated for successive calls. To visualise the correspondences call:
The computation of the matching score differs from the repeatability score. The one-to-one correspondences are not only based on the feature frames geometry (overlaps) but also the distance in the descriptor space. Therefore the feature extractor must be able to extract feature descriptors. This is not the case of MSER feature extractor, so it has to be coupled with a feature extractor which supports descriptor calculation. Unfortunately none of the built-in descriptors is affine invariant so only similarity invariant SIFTs is used.
The matching benchmark object can be constructed.
The rest is the same as for repeatability.
As for repeatability we can also show the matched frames itself.


About Us
When you work with us, you are part of a team of committed colaborates.All aspects of our software development process are intergrated, intaractive
and agile.
our approach unifies design, development and product management to create exceptional products.
We start each project by understanding your business goals, the user's needs and the product requirements.
then we help translate them into effective and elagant solutions.
Services
Before we sign a contract or write a line of code our team will spend the necessary time needed to understand your product vision
The outcome of this scoping session ia proposal or high-level statement of work.
based on your requirements, we can provide acomplete offering or just the pieces you need
What We Do
Design
Development
Product Management
PORTFOLIO
BLACK STUDIO
ONTARIO SECURITY
PYRAMIDS
JIM CARRY
HAVE A
GOOD DAY
CALCULATOR
BURNED
BAILEY
WONGER


Provides an interface with the Google Search Console, formally called Google Webmaster Tools.
| Version: | 0.3.0 |
| Depends: | R (≥ 3.2.0) |
| Imports: | googleAuthR (≥ 0.6.2), stringr (≥ 1.0.0) |
| Suggests: | shiny (≥ 0.12.1), knitr, rmarkdown, testthat |
| Published: | 2018-01-03 |
| Author: | Mark Edmondson [aut, cre], Jennifer Bryan [ctb], Parzakonis Manos [ctb] |
| Maintainer: | Mark Edmondson <r at sunholo.com> |
| BugReports: | https://github.com/MarkEdmondson1234/searchConsoleR/issues |
| License: | MIT + file LICENSE |
| URL: | http://code.markedmondson.me/searchConsoleR/ |
| NeedsCompilation: | no |
| Materials: | README |
| In views: | WebTechnologies |
| CRAN checks: | searchConsoleR results |
| Reference manual: | searchConsoleR.pdf |
| Vignettes: |
searchConsoleR demo |
| Package source: | searchConsoleR_0.3.0.tar.gz |
| Windows binaries: | r-devel: searchConsoleR_0.3.0.zip, r-release: searchConsoleR_0.3.0.zip, r-oldrel: searchConsoleR_0.3.0.zip |
| OS X binaries: | r-release: searchConsoleR_0.3.0.tgz, r-oldrel: searchConsoleR_0.3.0.tgz |
| Old sources: | searchConsoleR archive |
Please use the canonical form https://CRAN.R-project.org/package=searchConsoleR to link to this page.


Terms And Condations
Disclaimer
This site has been prepared solely for information purpose, and is not for an offer to buy or sell or a solicitation or an offer to buy or sell any security or instrument or to participate any particular trade strategy. the information presented in this site is general information purpose only. allthough any attempt has been made to assure accuracy. we assume no responsibility for error or omission. Examples are provided for illustrative purpose only and should not been construed as instrument advise or strategy. the information presented herein has not been desianed to meet the riaorous standerds set.